task-vuplus-enigma2
[vuplus_openvuplus_3.0] / meta-openvuplus / recipes-enigma2 / libsigc++-1.2 / libsigc++-1.2-1.2.5 / to_1.2.7.patch
diff --git a/meta-openvuplus/recipes-enigma2/libsigc++-1.2/libsigc++-1.2-1.2.5/to_1.2.7.patch b/meta-openvuplus/recipes-enigma2/libsigc++-1.2/libsigc++-1.2-1.2.5/to_1.2.7.patch
new file mode 100644 (file)
index 0000000..21fa729
--- /dev/null
@@ -0,0 +1,159 @@
+diff -Naur libsigc++-1.2.5/sigc++/macros/signal.h.m4 libsigc++-1.2.7/sigc++/macros/signal.h.m4
+--- libsigc++-1.2.5/sigc++/macros/signal.h.m4  2003-03-06 09:06:12.000000000 +0100
++++ libsigc++-1.2.7/sigc++/macros/signal.h.m4  2005-01-29 00:10:34.000000000 +0100
+@@ -82,6 +82,8 @@
+       bool empty();
+       void clear();
+       void cleanup(); // nothrow
++   private:
++      void _remove(SignalConnectionNode* c);
+   };
+ class LIBSIGC_API SignalBase\r
+diff -Naur libsigc++-1.2.5/sigc++/object.h libsigc++-1.2.7/sigc++/object.h
+--- libsigc++-1.2.5/sigc++/object.h    2003-05-08 21:35:11.000000000 +0200
++++ libsigc++-1.2.7/sigc++/object.h    2012-02-14 13:08:00.193044640 +0100
+@@ -69,7 +69,7 @@
+       virtual void unreference() const;\r
+       virtual void set_manage();\r
\r
+-      ObjectBase& operator=(const ObjectBase& /* o */)\r
++      ObjectBase& operator=(const ObjectBase& o)\r
+         { return *this; }\r
\r
+       ObjectBase()\r
+@@ -79,7 +79,11 @@
+         : control_(0) {}\r
\r
+       virtual ~ObjectBase()=0;\r
+-      \r
++\r
++      Control_* control() const \r
++        { \r
++          return const_cast<ObjectBase *>(this)->control(); \r
++        }\r
+       Control_* control() \r
+         { \r
+           if (!control_) \r
+@@ -129,7 +133,6 @@
+       template <class T2>\r
+       Ptr(const Ptr<T2>& p2) \r
+         {\r
+-          T* test_assignment_ = (T2*)0;\r
+           assign( p2.get() );\r
+         }\r
\r
+@@ -144,7 +147,7 @@
\r
+       template <class T2>\r
+       Ptr& operator=(const Ptr<T2>& p2)\r
+-        { T *test_assignment_=(T2*)0; reset(p2.get()); return *this; }\r
++        { reset(p2.get()); return *this; }\r
+     \r
+       Ptr& operator=(const Ptr& p)\r
+         { reset(p.get()); return *this; }\r
+@@ -175,7 +178,7 @@
+           if (control_)\r
+             control_->ref();\r
+         }\r
+-\r
++      \r
+       void reset(T* t = 0)\r
+         {\r
+           if (object_ == t)\r
+@@ -197,4 +200,3 @@
\r
\r
+ #endif // SIGC_OBJECT\r
+-\r
+diff -Naur libsigc++-1.2.5/sigc++/signal.cc libsigc++-1.2.7/sigc++/signal.cc
+--- libsigc++-1.2.5/sigc++/signal.cc   2002-12-12 20:18:24.000000000 +0100
++++ libsigc++-1.2.7/sigc++/signal.cc   2005-01-29 00:10:34.000000000 +0100
+@@ -93,33 +93,11 @@
+     defered_ = false;
+     SignalConnectionNode* i = begin_;
+-
+-    while(begin_ && begin_->defered_)
+-      begin_ = begin_->next_;
+-
+-    while(end_ && end_->defered_)
+-      end_ = end_->prev_;
+-
+-    // Hmm, this looks a bit tricky to me.  The code above removes all
+-    // elements from the front and the back that have defered_ = true set.
+-    // But the following loop unreferences *all* defered elements, including
+-    // those that are still in the list.
+-    //
+-    // I don't know whether this is a bug -- it's possible that defered nodes
+-    // are always at the front or back.  If not, a node could be unreferenced
+-    // twice which is bad.
+-    //
+-    // --Daniel
+-
+     while(i)
+     {
+       SignalConnectionNode* next = i->next_;
+-
+       if(i->defered_)
+-      {
+-        i->parent_ = 0;
+-        i->unreference();
+-      }
++      _remove(i);
+       i = next;
+     }
+@@ -141,7 +119,7 @@
+       begin_->prev_=c;
+     else
+       end_=c;
+-    end_=c;
++    begin_=c;
+     return c;
+   }
+@@ -161,21 +139,8 @@
+ void SignalNode::remove(SignalConnectionNode* c)
+   {
+-    if (!exec_count_)
+-      {
+-        if (c->prev_)
+-          c->prev_->next_=c->next_;
+-        else
+-          begin_=c->next_;
+-       
+-        if (c->next_)
+-          c->next_->prev_=c->prev_;
+-        else
+-          end_=c->prev_;
+-
+-        c->parent_ = 0;
+-        c->unreference();
+-      }
++    if(!exec_count_)
++      _remove(c);
+     else
+       {
+         c->defered_=true;
+@@ -184,6 +149,19 @@
+       }
+   }
++void SignalNode::_remove(SignalConnectionNode* c)
++  {
++    if (c->prev_)
++      c->prev_->next_=c->next_;
++    else
++      begin_=c->next_;
++    if (c->next_)
++      c->next_->prev_=c->prev_;
++    else
++      end_=c->prev_;
++    c->parent_ = 0;
++    c->unreference();
++  }
+ /**********************************************************/