[glibmm] gmmproc: _CLASS_GOBJECT: reverted removal of __REAL_* arguments.



commit 46a6c16c5eeda14aadafa2f843c261e92de39790
Author: Murray Cumming <murrayc murrayc com>
Date:   Fri Jan 14 12:50:55 2011 +0100

    gmmproc: _CLASS_GOBJECT: reverted removal of __REAL_* arguments.
    
      This is still needed for the gtkmm-2-24 branch.

 ChangeLog                 |    7 +++++++
 tools/m4/class_gobject.m4 |   12 +++++++++---
 tools/m4/class_shared.m4  |    6 +++---
 3 files changed, 19 insertions(+), 6 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 16c333d..d5c09fd 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2010-12-22 Murray Cumming <murrayc murrayc com>
+
+  gmmproc: _CLASS_GOBJECT: reverted removal of __REAL_* arguments.
+
+  This is still needed for the gtkmm-2-24 branch.
+  
 2011-01-16  José Alburquerque  <jaalburqu svn gnome org>
 
 	DBus: Add initial implementation of a bus server/client example.
@@ -8602,3 +8608,4 @@ API should also be applied to the glibmm-2-6 branch.
 	instead of 2.0 in their name.
 
 glibmm was previously part of gtkmm2.
+
diff --git a/tools/m4/class_gobject.m4 b/tools/m4/class_gobject.m4
index 6aed5d6..12cbec6 100644
--- a/tools/m4/class_gobject.m4
+++ b/tools/m4/class_gobject.m4
@@ -13,6 +13,12 @@ define(`__CPPPARENT__',`$4')
 define(`__CPARENT__',`$5')
 define(`__PCAST__',`($5*)')
 
+dnl Some C types, e.g. GdkWindow or GdkPixmap, are a typedef to their base type,
+dnl rather than the real instance type.  That is really ugly, yes.  We get around
+dnl the problem by supporting optional __REAL_* arguments to this macro.
+define(`__REAL_CNAME__',ifelse(`$6',,__CNAME__,`$6'))
+define(`__REAL_CPARENT__',ifelse(`$7',,__CPARENT__,`$7'))
+
 
 _POP()
 _SECTION(SECTION_CLASS2)
@@ -113,7 +119,7 @@ namespace Glib
    *
    * @relates __NAMESPACE__::__CPPNAME__
    */
-  Glib::RefPtr<__NAMESPACE__::__CPPNAME__> wrap(__CNAME__`'* object, bool take_copy = false);
+  Glib::RefPtr<__NAMESPACE__::__CPPNAME__> wrap(__REAL_CNAME__`'* object, bool take_copy = false);
 }
 ')dnl
 
@@ -137,7 +143,7 @@ ifdef(`__BOOL_NO_WRAP_FUNCTION__',`dnl
 namespace Glib
 {
 
-Glib::RefPtr<__NAMESPACE__::__CPPNAME__> wrap(__CNAME__`'* object, bool take_copy)
+Glib::RefPtr<__NAMESPACE__::__CPPNAME__> wrap(__REAL_CNAME__`'* object, bool take_copy)
 {
   return Glib::RefPtr<__NAMESPACE__::__CPPNAME__>( dynamic_cast<__NAMESPACE__::__CPPNAME__*> (Glib::wrap_auto ((GObject*)(object), take_copy)) );
   //We use dynamic_cast<> in case of multiple inheritance.
@@ -217,7 +223,7 @@ public:
   typedef __CPPNAME__ CppObjectType;
   typedef __CPPNAME__`'_Class CppClassType;
   typedef __CNAME__ BaseObjectType;
-  typedef __CNAME__`'Class BaseClassType;
+  typedef __REAL_CNAME__`'Class BaseClassType;
 
 m4_ifdef(`__BOOL_PROTECTED_GCLASS__',
 `protected:',`dnl else
diff --git a/tools/m4/class_shared.m4 b/tools/m4/class_shared.m4
index 2ccc041..c9286da 100644
--- a/tools/m4/class_shared.m4
+++ b/tools/m4/class_shared.m4
@@ -64,13 +64,13 @@ class __CPPNAME__`'_Class : public Glib::Class
 public:
 #ifndef DOXYGEN_SHOULD_SKIP_THIS
   typedef __CPPNAME__ CppObjectType;
-  typedef __CNAME__ BaseObjectType;
+  typedef __REAL_CNAME__ BaseObjectType;
 ifdef(`__BOOL_DO_NOT_DERIVE_GTYPE__',`dnl
   typedef __CPPPARENT__`'_Class CppClassParent;
 ',`dnl
-  typedef __CNAME__`'Class BaseClassType;
+  typedef __REAL_CNAME__`'Class BaseClassType;
   typedef __CPPPARENT__`'_Class CppClassParent;
-  typedef __CPARENT__`'Class BaseClassParent;
+  typedef __REAL_CPARENT__`'Class BaseClassParent;
 ')dnl
 
   friend class __CPPNAME__;



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]