summaryrefslogtreecommitdiff
path: root/tools/m4
diff options
context:
space:
mode:
Diffstat (limited to 'tools/m4')
-rw-r--r--tools/m4/class_interface.m47
-rw-r--r--tools/m4/class_shared.m412
-rw-r--r--tools/m4/convert_base.m44
-rw-r--r--tools/m4/gerror.m415
-rw-r--r--tools/m4/method.m448
-rw-r--r--tools/m4/property.m44
-rw-r--r--tools/m4/signal.m412
-rw-r--r--tools/m4/vfunc.m433
8 files changed, 110 insertions, 25 deletions
diff --git a/tools/m4/class_interface.m4 b/tools/m4/class_interface.m4
index d63fd40d..0e93bd98 100644
--- a/tools/m4/class_interface.m4
+++ b/tools/m4/class_interface.m4
@@ -58,7 +58,9 @@ protected:
_IMPORT(SECTION_PH_DEFAULT_SIGNAL_HANDLERS)
//Callbacks (virtual functions):
+#ifdef GLIBMM_VFUNCS_ENABLED
_IMPORT(SECTION_PH_VFUNCS)
+#endif //GLIBMM_VFUNCS_ENABLED
};
')
@@ -90,11 +92,16 @@ void __CPPNAME__`'_Class::iface_init_function(void* g_iface, void*)
//This is a temporary fix until I find out why I can not seem to derive a GtkFileChooser interface. murrayc
g_assert(klass != 0);
+#ifdef GLIBMM_VFUNCS_ENABLED
_IMPORT(SECTION_PCC_CLASS_INIT_VFUNCS)
+#endif //GLIBMM_VFUNCS_ENABLED
+
_IMPORT(SECTION_PCC_CLASS_INIT_DEFAULT_SIGNAL_HANDLERS)
}
+#ifdef GLIBMM_VFUNCS_ENABLED
_IMPORT(SECTION_PCC_VFUNCS)
+#endif //GLIBMM_VFUNCS_ENABLED
_IMPORT(SECTION_PCC_DEFAULT_SIGNAL_HANDLERS)
')
diff --git a/tools/m4/class_shared.m4 b/tools/m4/class_shared.m4
index 1cb066a3..ad74ade4 100644
--- a/tools/m4/class_shared.m4
+++ b/tools/m4/class_shared.m4
@@ -11,11 +11,15 @@ define(`_H_VFUNCS_AND_SIGNALS',`dnl
public:
//C++ methods used to invoke GTK+ virtual functions:
+#ifdef GLIBMM_VFUNCS_ENABLED
_IMPORT(SECTION_H_VFUNCS_CPPWRAPPER)
+#endif //GLIBMM_VFUNCS_ENABLED
protected:
//GTK+ Virtual Functions (override these to change behaviour):
+#ifdef GLIBMM_VFUNCS_ENABLED
_IMPORT(SECTION_H_VFUNCS)
+#endif //GLIBMM_VFUNCS_ENABLED
//Default Signal Handlers::
_IMPORT(SECTION_H_DEFAULT_SIGNAL_HANDLERS)
@@ -70,7 +74,9 @@ protected:
_IMPORT(SECTION_PH_DEFAULT_SIGNAL_HANDLERS)
//Callbacks (virtual functions):
+#ifdef GLIBMM_VFUNCS_ENABLED
_IMPORT(SECTION_PH_VFUNCS)
+#endif //GLIBMM_VFUNCS_ENABLED
};
')
@@ -107,12 +113,16 @@ void __CPPNAME__`'_Class::class_init_function(void* g_class, void* class_data)
BaseClassType *const klass = static_cast<BaseClassType*>(g_class);
CppClassParent::class_init_function(klass, class_data);
+#ifdef GLIBMM_VFUNCS_ENABLED
_IMPORT(SECTION_PCC_CLASS_INIT_VFUNCS)
+#endif //GLIBMM_VFUNCS_ENABLED
_IMPORT(SECTION_PCC_CLASS_INIT_DEFAULT_SIGNAL_HANDLERS)
}
')dnl
+#ifdef GLIBMM_VFUNCS_ENABLED
_IMPORT(SECTION_PCC_VFUNCS)
+#endif //GLIBMM_VFUNCS_ENABLED
_IMPORT(SECTION_PCC_DEFAULT_SIGNAL_HANDLERS)
')
@@ -145,8 +155,10 @@ _IMPORT(SECTION_CC_PROPERTYPROXIES)
_IMPORT(SECTION_CC_DEFAULT_SIGNAL_HANDLERS)
+#ifdef GLIBMM_VFUNCS_ENABLED
_IMPORT(SECTION_CC_VFUNCS)
_IMPORT(SECTION_CC_VFUNCS_CPPWRAPPER)
+#endif //GLIBMM_VFUNCS_ENABLED
')
dnl _PARENT_GCLASS_FROM_OBJECT(object_instance_name)
diff --git a/tools/m4/convert_base.m4 b/tools/m4/convert_base.m4
index 29fbb26e..51d1f41b 100644
--- a/tools/m4/convert_base.m4
+++ b/tools/m4/convert_base.m4
@@ -14,15 +14,17 @@ popdef(`__E1')popdef(`__E2')`'')
define(`CF__EQ',`$3')
#
-# _CONVERT(ctype, cpptype, name, wrap_line)
+# _CONVERT(fromtype, totype, name, wrap_line)
# Print the conversion from ctype to cpptype
define(`_CONVERT',`dnl
+m4_ifelse(`$2',void,,`dnl
pushdef(`__COV',`CF`'__HASH2(`$1',`$2')')dnl
m4_ifdef(__COV,`m4_indir(__COV,`$1',`$2',`$3')',`
m4_errprint(`No conversion from $1 to $2 defined (line: $4, parameter name: $3)
')
m4_m4exit(1)
')`'dnl
+')`'dnl
')
diff --git a/tools/m4/gerror.m4 b/tools/m4/gerror.m4
index bb3eb7d4..9bc27249 100644
--- a/tools/m4/gerror.m4
+++ b/tools/m4/gerror.m4
@@ -27,7 +27,14 @@ $4
#ifndef DOXYGEN_SHOULD_SKIP_THIS
private:
+
+#ifdef GLIBMM_EXCEPTIONS_ENABLED
static void throw_func(GError* gobject);
+#else
+ //When not using exceptions, we just pass the Exception object around without throwing it:
+ static std::auto_ptr<Glib::Error> throw_func(GError* gobject);
+#endif //GLIBMM_EXCEPTIONS_ENABLED
+
friend void wrap_init(); // uses throw_func()
#endif
};
@@ -69,10 +76,18 @@ __NAMESPACE__::__CPPNAME__::Code __NAMESPACE__::__CPPNAME__::code() const
return static_cast<Code>(Glib::Error::code());
}
+#ifdef GLIBMM_EXCEPTIONS_ENABLED
void __NAMESPACE__::__CPPNAME__::throw_func(GError* gobject)
{
throw __NAMESPACE__::__CPPNAME__`'(gobject);
}
+#else
+//When not using exceptions, we just pass the Exception object around without throwing it:
+std::auto_ptr<Glib::Error> __NAMESPACE__::__CPPNAME__::throw_func(GError* gobject)
+{
+ return std::auto_ptr<Glib::Error>(new __NAMESPACE__::__CPPNAME__`'(gobject));
+}
+#endif //GLIBMM_EXCEPTIONS_ENABLED
m4_ifelse($5,`NO_GTYPE',,`dnl else
// static
diff --git a/tools/m4/method.m4 b/tools/m4/method.m4
index f4bee93e..4193e04b 100644
--- a/tools/m4/method.m4
+++ b/tools/m4/method.m4
@@ -9,26 +9,41 @@ dnl
dnl
dnl method
-dnl $1 $2 $3 $4 $5 $6 $7 $8 $9 $10 $11 $12
+dnl $1 $2 $3 $4 $5 $6 $7 $8 $9 $10 $11 $12
dnl _METHOD(cppname,cname,cpprettype,crettype,arglist,cargs,const,refreturn,errthrow,deprecated,constversion,arglist_without_types)
define(`_METHOD',`dnl
_PUSH(SECTION_CC)
ifelse(`$10',,,`_DEPRECATE_IFDEF_START')
+ifelse(`$9',,,`#ifdef GLIBMM_EXCEPTIONS_ENABLED')
$3 __CPPNAME__::$1`'($5)ifelse(`$7',1,` const')
+ifelse(`$9',,,`#else
+$3 __CPPNAME__::$1`'(`'$5`'ifelse(($5),(),`',`, ')std::auto_ptr<Glib::Error>& error)ifelse(`$7',1,` const')
+#endif //GLIBMM_EXCEPTIONS_ENABLED
+')
{
ifelse(`$11',,dnl
-` ifelse(`$8'`$9',,dnl
-` ifelse(`$3',void,,`return ')_CONVERT($4,$3,`$2`'(ifelse(`$7',1,const_cast<__CNAME__*>(gobj()),gobj())`'ifelse(`$6',,,`, ')$6)');
-', dnl
-`ifelse(`$9',,,` GError *error = 0;')
- ifelse(`$3',void,,``$3' retvalue = ')_CONVERT($4,$3,`$2`'(ifelse(`$7',1,const_cast<__CNAME__*>(gobj()),gobj())`'ifelse(`$6',,,`, ')$6)');
-ifelse(`$9',,,` if(error) ::Glib::Error::throw_exception(error);')
+` ifelse(`$8'`$9',,dnl If it is not errthrow or refreturn
+`ifelse(`$3',void,dnl If it returns voids:
+`$2(ifelse(`$7',1,const_cast<__CNAME__*>(gobj()),gobj())`'ifelse(`$6',,,`, ')$6);' dnl It it returns non-void:
+,`return _CONVERT($4,$3,`$2`'(ifelse(`$7',1,const_cast<__CNAME__*>(gobj()),gobj())`'ifelse(`$6',,,`, ')$6)');')' dnl End if it returns voids.
+,dnl If is errthrow or refreturn
+`ifelse(`$9',,,` GError* gerror = 0;')
+ ifelse(`$3',void,,``$3' retvalue = _CONVERT($4,$3,`$2`'(ifelse(`$7',1,const_cast<__CNAME__*>(gobj()),gobj())`'ifelse(`$6',,,`, ')$6)');')dnl
+ifelse(`$9',,,`
+#ifdef GLIBMM_EXCEPTIONS_ENABLED
+ if(gerror)
+ ::Glib::Error::throw_exception(gerror);
+#else
+ if(gerror)
+ error = ::Glib::Error::throw_exception(gerror);
+#endif //GLIBMM_EXCEPTIONS_ENABLED
+')
ifelse(`$8',,,`dnl
if(retvalue)
retvalue->reference(); //The function does not do a ref for us.
')dnl
ifelse(`$3',void,,` return retvalue;')
-')dnl
+')dnl End errthrow/refreturn
',` return const_cast<__CPPNAME__*>(this)->$1($12);')
}
ifelse(`$10',,,`_DEPRECATE_IFDEF_END
@@ -42,14 +57,27 @@ dnl _STATIC_METHOD(cppname,cname,cpprettype,crettype,arglist,cargs,refreturn,er
define(`_STATIC_METHOD',`dnl
_PUSH(SECTION_CC)
ifelse(`$9',,,`_DEPRECATE_IFDEF_START') dnl
+ifelse(`$8',,,`#ifdef GLIBMM_EXCEPTIONS_ENABLED')
$3 __CPPNAME__::$1($5)
+ifelse(`$8',,,`#else
+$3 __CPPNAME__::$1(`'$5`'ifelse(($5),(),`',`, ')std::auto_ptr<Glib::Error>& error)
+#endif //GLIBMM_EXCEPTIONS_ENABLED
+')
{
ifelse(`$7'`$8',,dnl
` ifelse(`$3',void,,`return ')_CONVERT($4,$3,`$2`'($6)');
', dnl
-`ifelse(`$8',,,` GError *error = 0;')
+`ifelse(`$8',,,` GError* gerror = 0;')
ifelse(`$3',void,,``$3' retvalue = ')_CONVERT($4,$3,`$2`'($6)');
-ifelse(`$8',,,` if(error) ::Glib::Error::throw_exception(error);')
+ifelse(`$8',,,`
+#ifdef GLIBMM_EXCEPTIONS_ENABLED
+ if(gerror)
+ ::Glib::Error::throw_exception(gerror);
+#else
+ if(gerror)
+ error = ::Glib::Error::throw_exception(gerror);
+#endif //GLIBMM_EXCEPTIONS_ENABLED
+')
ifelse(`$7',,,`dnl
if(retvalue)
retvalue->reference(); //The function does not do a ref for us.
diff --git a/tools/m4/property.m4 b/tools/m4/property.m4
index 28c4c1e7..4a9877bd 100644
--- a/tools/m4/property.m4
+++ b/tools/m4/property.m4
@@ -17,6 +17,7 @@ dnl Put spaces around the template parameter if necessary.
pushdef(`__PROXY_TYPE__',`dnl
Glib::PropertyProxy$4<'ifelse(regexp(_QUOTE($3),`>$'),`-1',_QUOTE($3),` '_QUOTE($3)` ')`>'dnl
)dnl
+#ifdef GLIBMM_PROPERTIES_ENABLED
/** $5
*
* You rarely need to use properties because there are get_ and set_ methods for almost all of them.
@@ -24,11 +25,14 @@ Glib::PropertyProxy$4<'ifelse(regexp(_QUOTE($3),`>$'),`-1',_QUOTE($3),` '_QUOTE(
* the value of the property changes.
*/
__PROXY_TYPE__ property_$2`'() ifelse($4,_ReadOnly, const,);
+#endif //#GLIBMM_PROPERTIES_ENABLED
_PUSH(SECTION_CC_PROPERTYPROXIES)
+#ifdef GLIBMM_PROPERTIES_ENABLED
__PROXY_TYPE__ __CPPNAME__::property_$2`'() ifelse($4,_ReadOnly, const,)
{
return __PROXY_TYPE__`'(this, "$1");
}
+#endif //GLIBMM_PROPERTIES_ENABLED
_POP()
popdef(`__PROXY_TYPE__')dnl
diff --git a/tools/m4/signal.m4 b/tools/m4/signal.m4
index 4e55e168..989e898e 100644
--- a/tools/m4/signal.m4
+++ b/tools/m4/signal.m4
@@ -40,19 +40,23 @@ static $2 __CPPNAME__`'_signal_$4_callback`'(__CNAME__`'* self, _COMMA_SUFFIX($3
// Do not try to call a signal on a disassociated wrapper.
if(Glib::ObjectBase::_get_current_wrapper((GObject*) self))
{
+ #ifdef GLIBMM_EXCEPTIONS_ENABLED
try
{
+ #endif //GLIBMM_EXCEPTIONS_ENABLED
if(sigc::slot_base *const slot = Glib::SignalProxyNormal::data_to_slot`'(data))
ifelse(`$2',void,`dnl
(*static_cast<SlotType*>(slot))($7);
',`dnl else
return _CONVERT($5,$2,`(*static_cast<SlotType*>(slot))($7)');
')dnl endif
+ #ifdef GLIBMM_EXCEPTIONS_ENABLED
}
catch(...)
{
Glib::exception_handlers_invoke();
}
+ #endif //GLIBMM_EXCEPTIONS_ENABLED
}
ifelse($2,void,,`dnl else
@@ -70,15 +74,19 @@ static $2 __CPPNAME__`'_signal_$4_notify_callback`'(__CNAME__`'* self, _COMMA_SU
// Do not try to call a signal on a disassociated wrapper.
if(Glib::ObjectBase::_get_current_wrapper((GObject*) self))
{
+ #ifdef GLIBMM_EXCEPTIONS_ENABLED
try
{
+ #endif //GLIBMM_EXCEPTIONS_ENABLED
if(sigc::slot_base *const slot = Glib::SignalProxyNormal::data_to_slot`'(data))
(*static_cast<SlotType*>(slot))($7);
+ #ifdef GLIBMM_EXCEPTIONS_ENABLED
}
catch(...)
{
Glib::exception_handlers_invoke();
}
+ #endif //GLIBMM_EXCEPTIONS_ENABLED
}
typedef $2 RType;
@@ -140,19 +148,23 @@ _IMPORT(SECTION_CHECK)
// being overridden:
if(obj && obj->is_derived_())
{
+ #ifdef GLIBMM_EXCEPTIONS_ENABLED
try // Trap C++ exceptions which would normally be lost because this is a C callback.
{
+ #endif //GLIBMM_EXCEPTIONS_ENABLED
// Call the virtual member method, which derived classes might override.
ifelse($4,void,`dnl
obj->on_$1`'($7);
',`dnl
return _CONVERT($3,$4,`obj->on_$1`'($7)');
')dnl
+ #ifdef GLIBMM_EXCEPTIONS_ENABLED
}
catch(...)
{
Glib::exception_handlers_invoke`'();
}
+ #endif //GLIBMM_EXCEPTIONS_ENABLED
}
else
{
diff --git a/tools/m4/vfunc.m4 b/tools/m4/vfunc.m4
index 5b26b7d9..a6dad27f 100644
--- a/tools/m4/vfunc.m4
+++ b/tools/m4/vfunc.m4
@@ -33,8 +33,10 @@ _IMPORT(SECTION_CHECK)
// being overridden:
if(obj && obj->is_derived_())
{
+ #ifdef GLIBMM_EXCEPTIONS_ENABLED
try // Trap C++ exceptions which would normally be lost because this is a C callback.
{
+ #endif //GLIBMM_EXCEPTIONS_ENABLED
// Call the virtual member method, which derived classes might override.
ifelse($4,void,`dnl
obj->$1`'($7);
@@ -45,11 +47,13 @@ ifelse($9,refreturn_ctype,`dnl Assume Glib::unwrap_copy() is correct if refretur
return _CONVERT($3,$4,`obj->$1`'($7)');
')dnl
')dnl
+ #ifdef GLIBMM_EXCEPTIONS_ENABLED
}
catch(...)
{
Glib::exception_handlers_invoke`'();
}
+ #endif //GLIBMM_EXCEPTIONS_ENABLED
}
else
{
@@ -74,20 +78,6 @@ ifelse($4,void,,`dnl
_POP()')
-
-# $1 $2 $3 $4
-# _VFUNC_H(vfunc_name, rettype, `<cppargs>', is_const)
-#
-define(`_VFUNC_H',`dnl
-_PUSH(SECTION_H_VFUNCS)
-ifelse($4,`1',`dnl
-virtual $2 $1`'($3) const;
-',`dnl
-virtual $2 $1`'($3);
-')
-
-_POP()')
-
# $1 $2 $3 $4 $5 $6 $7 $8
# _VFUNC_CC(vfunc_name, gtkname, cpp_rettype, c_rettype, `<cppargs>', `<carg_names>', is_const, refreturn)
#
@@ -121,3 +111,18 @@ ifelse($8,refreturn,`dnl Assume Glib::wrap() is correct if refreturn is requeste
_POP()')
+# $1 $2 $3 $4
+# _VFUNC_H(vfunc_name, rettype, `<cppargs>', is_const)
+# Only used for custom vfuncs.
+#
+define(`_VFUNC_H',`dnl
+_PUSH(SECTION_H_VFUNCS)
+ifelse($4,`1',`dnl
+virtual $2 $1`'($3) const;
+',`dnl
+virtual $2 $1`'($3);
+')
+
+_POP()')
+
+