static void pp_layout_nup_pageview_class_init (pp_Layout_NUp_PageViewClass *cl) { GtkObjectClass *object_class; GtkWidgetClass *widget_class; object_class = (GtkObjectClass*) cl; widget_class = (GtkWidgetClass*) cl; parent_class = GTK_WIDGET_CLASS(gtk_type_class (gtk_widget_get_type ())); widget_class->realize = pp_layout_nup_pageview_realize; widget_class->expose_event = pp_layout_nup_pageview_expose; widget_class->size_request = pp_layout_nup_pageview_size_request; widget_class->size_allocate = pp_layout_nup_pageview_size_allocate; widget_class->button_press_event = pp_layout_nup_pageview_button_press; widget_class->button_release_event = pp_layout_nup_pageview_button_release; widget_class->motion_notify_event = pp_layout_nup_pageview_motion_notify; pp_layout_nup_pageview_signals[CHANGED_SIGNAL] = g_signal_new ("changed", G_TYPE_FROM_CLASS (cl), GSignalFlags(G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION), G_STRUCT_OFFSET (pp_Layout_NUp_PageViewClass, changed), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); pp_layout_nup_pageview_signals[REFLOW_SIGNAL] = g_signal_new ("reflow", G_TYPE_FROM_CLASS (cl), GSignalFlags(G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION), G_STRUCT_OFFSET (pp_Layout_NUp_PageViewClass, reflow), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); pp_layout_nup_pageview_signals[SELECTIONCHANGED_SIGNAL] = g_signal_new ("selection_changed", G_TYPE_FROM_CLASS (cl), GSignalFlags(G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION), G_STRUCT_OFFSET (pp_Layout_NUp_PageViewClass, selectionchanged), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); pp_layout_nup_pageview_signals[POPUPMENU_SIGNAL] = g_signal_new ("popupmenu", G_TYPE_FROM_CLASS (cl), GSignalFlags(G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION), G_STRUCT_OFFSET (pp_Layout_NUp_PageViewClass, popupmenu), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); }
static void pp_imagecontrol_class_init (pp_ImageControlClass *klass) { pp_imagecontrol_signals[CHANGED_SIGNAL] = g_signal_new ("changed", G_TYPE_FROM_CLASS (klass), GSignalFlags(G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION), G_STRUCT_OFFSET (pp_ImageControlClass, changed), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); }
std::string get_signals(GType gtype, GTypeIsAPointerFunc is_a_pointer_func) { std::string strResult; std::string strObjectName = g_type_name(gtype); gpointer gclass_ref = nullptr; gpointer ginterface_ref = nullptr; if (G_TYPE_IS_OBJECT(gtype)) gclass_ref = g_type_class_ref(gtype); // Ensures that class_init() is called. else if (G_TYPE_IS_INTERFACE(gtype)) ginterface_ref = g_type_default_interface_ref(gtype); // install signals. // Get the list of signals: guint iCount = 0; guint* pIDs = g_signal_list_ids(gtype, &iCount); // Loop through the list of signals: if (pIDs) { for (guint i = 0; i < iCount; i++) { guint signal_id = pIDs[i]; // Name: std::string strName = g_signal_name(signal_id); strResult += "(define-signal " + strName + "\n"; strResult += " (of-object \"" + strObjectName + "\")\n"; // Other information about the signal: GSignalQuery signalQuery = { 0, nullptr, 0, GSignalFlags(0), 0, 0, nullptr, }; g_signal_query(signal_id, &signalQuery); // Return type: std::string strReturnTypeName = get_type_name_signal(signalQuery.return_type & ~G_SIGNAL_TYPE_STATIC_SCOPE, is_a_pointer_func); // The type is mangled with a flag. Hacky. // bool bReturnTypeHasStaticScope = (signalQuery.return_type & G_SIGNAL_TYPE_STATIC_SCOPE) == // G_SIGNAL_TYPE_STATIC_SCOPE; strResult += " (return-type \"" + strReturnTypeName + "\")\n"; // Flags: std::string strFlags; add_signal_flag_if(strFlags, "Run First", signalQuery, G_SIGNAL_RUN_FIRST); add_signal_flag_if(strFlags, "Run Last", signalQuery, G_SIGNAL_RUN_LAST); add_signal_flag_if(strFlags, "Run Cleanup", signalQuery, G_SIGNAL_RUN_CLEANUP); add_signal_flag_if(strFlags, "No Recurse", signalQuery, G_SIGNAL_NO_RECURSE); add_signal_flag_if(strFlags, "Action", signalQuery, G_SIGNAL_ACTION); add_signal_flag_if(strFlags, "No Hooks", signalQuery, G_SIGNAL_NO_HOOKS); add_signal_flag_if(strFlags, "Must Collect", signalQuery, G_SIGNAL_MUST_COLLECT); strResult += " (flags \"" + strFlags + "\")\n"; if (signalQuery.signal_flags & G_SIGNAL_DETAILED) strResult += " (detailed #t)\n"; // Default: not detailed if (signalQuery.signal_flags & G_SIGNAL_DEPRECATED) strResult += " (deprecated #t)\n"; // Default: not deprecated // Loop through the list of parameters: const GType* pParameters = signalQuery.param_types; if (pParameters) { strResult += " (parameters\n"; for (unsigned j = 0; j < signalQuery.n_params; j++) { GType typeParamMangled = pParameters[j]; // Parameter name: // We can't get the real parameter name from the GObject system. It's not registered with // g_signal_new(). gchar* pchNum = g_strdup_printf("%d", j); std::string strParamName = "p" + std::string(pchNum); g_free(pchNum); pchNum = nullptr; // Just like above, for the return type: std::string strTypeName = get_type_name_signal(typeParamMangled & ~G_SIGNAL_TYPE_STATIC_SCOPE, is_a_pointer_func); // The type is mangled with a flag. Hacky. // bool bTypeHasStaticScope = (typeParamMangled & G_SIGNAL_TYPE_STATIC_SCOPE) == // G_SIGNAL_TYPE_STATIC_SCOPE; strResult += " '(\"" + strTypeName + "\" \"" + strParamName + "\")\n"; } strResult += " )\n"; // close (parameters } strResult += ")\n\n"; // close (define-signal } } g_free(pIDs); if (gclass_ref) g_type_class_unref(gclass_ref); // to match the g_type_class_ref() above. else if (ginterface_ref) g_type_default_interface_unref(ginterface_ref); // for interface ref above. return strResult; }
static void mpris_player_class_init(MprisPlayerClass* pInstance) { trackChangedSignal = g_signal_new("track_change", G_OBJECT_CLASS_TYPE(pInstance), GSignalFlags(G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED), 0, NULL, NULL, g_cclosure_marshal_VOID__BOXED, G_TYPE_NONE, 1, DBUS_TYPE_G_STRING_VALUE_HASHTABLE); statusChangedSignal = g_signal_new("status_change", G_OBJECT_CLASS_TYPE(pInstance), GSignalFlags(G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED), 0, NULL, NULL, g_cclosure_marshal_VOID__INT, G_TYPE_NONE, 1, DBUS_STRUCT_INT_INT_INT_INT); capabilitiesChangedSignal = g_signal_new("caps_change", G_OBJECT_CLASS_TYPE(pInstance), GSignalFlags(G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED), 0, NULL, NULL, g_cclosure_marshal_VOID__INT, G_TYPE_NONE, 1, G_TYPE_INT); }
static void mpris_tracklist_class_init(MprisTrackListClass* pInstance) { tracklistChangedSignal = g_signal_new("track_list_change", G_OBJECT_CLASS_TYPE(pInstance), GSignalFlags(G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED), 0, nullptr, nullptr, g_cclosure_marshal_VOID__BOXED, G_TYPE_NONE, 1, G_TYPE_INT); }