summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJuan Pablo Ugarte <juanpablougarte@gmail.com>2018-08-30 20:35:59 -0300
committerJuan Pablo Ugarte <juanpablougarte@gmail.com>2018-08-30 20:35:59 -0300
commite542d07e629da5f362a1145da94d44e31f924f8d (patch)
tree3d3aa2d677a0fd7ebabaae35c09bd49e3609f107
parent3e8819b1b31d42398111bdedf059f3b1cea88996 (diff)
downloadglade-e542d07e629da5f362a1145da94d44e31f924f8d.tar.gz
GladeProject: add handler signals
Add add, remove, change and activate handler signals. These signals can be used to easily track signal changes in a project instead of connecting callbacks to every widget.
-rw-r--r--gladeui/glade-marshallers.list1
-rw-r--r--gladeui/glade-private.h15
-rw-r--r--gladeui/glade-project.c128
-rw-r--r--gladeui/glade-widget.c9
4 files changed, 150 insertions, 3 deletions
diff --git a/gladeui/glade-marshallers.list b/gladeui/glade-marshallers.list
index 2891325f..1aaa3d2e 100644
--- a/gladeui/glade-marshallers.list
+++ b/gladeui/glade-marshallers.list
@@ -5,6 +5,7 @@ VOID:OBJECT
VOID:STRING
VOID:INT,INT
VOID:OBJECT,OBJECT
+VOID:OBJECT,OBJECT,OBJECT
VOID:OBJECT,BOOLEAN
VOID:STRING,STRING,STRING
OBJECT:POINTER
diff --git a/gladeui/glade-private.h b/gladeui/glade-private.h
index 35a57562..876dc160 100644
--- a/gladeui/glade-private.h
+++ b/gladeui/glade-private.h
@@ -44,6 +44,21 @@ GList *_glade_widget_peek_prop_refs (GladeWidget *widget);
GladeCatalog *_glade_catalog_get_catalog (const gchar *name);
GList *_glade_catalog_tsort (GList *catalogs);
+/* glade-project.c */
+
+void
+_glade_project_emit_add_signal_handler (GladeWidget *widget,
+ const GladeSignal *signal);
+void
+_glade_project_emit_remove_signal_handler (GladeWidget *widget,
+ const GladeSignal *signal);
+void
+_glade_project_emit_change_signal_handler (GladeWidget *widget,
+ const GladeSignal *old_signal,
+ const GladeSignal *new_signal);
+void
+_glade_project_emit_activate_signal_handler (GladeWidget *widget,
+ const GladeSignal *signal);
/* glade-project-properties.c */
void
diff --git a/gladeui/glade-project.c b/gladeui/glade-project.c
index 1c40c865..670084e8 100644
--- a/gladeui/glade-project.c
+++ b/gladeui/glade-project.c
@@ -180,6 +180,10 @@ enum
TARGETS_CHANGED,
LOAD_PROGRESS,
WIDGET_VISIBILITY_CHANGED,
+ ADD_SIGNAL_HANDLER,
+ REMOVE_SIGNAL_HANDLER,
+ CHANGE_SIGNAL_HANDLER,
+ ACTIVATE_SIGNAL_HANDLER,
LAST_SIGNAL
};
@@ -952,6 +956,80 @@ glade_project_class_init (GladeProjectClass *klass)
_glade_marshal_VOID__OBJECT_BOOLEAN,
G_TYPE_NONE, 2, GLADE_TYPE_WIDGET, G_TYPE_BOOLEAN);
+ /**
+ * GladeProject::add-signal-handler:
+ * @gladeproject: the #GladeProject which received the signal.
+ * @gladewidget: the #GladeWidget
+ * @signal: the #GladeSignal that was added to @gladewidget.
+ */
+ glade_project_signals[ADD_SIGNAL_HANDLER] =
+ g_signal_new ("add-signal-handler",
+ G_TYPE_FROM_CLASS (object_class),
+ G_SIGNAL_RUN_LAST,
+ 0,
+ NULL, NULL,
+ _glade_marshal_VOID__OBJECT_OBJECT,
+ G_TYPE_NONE,
+ 2,
+ GLADE_TYPE_WIDGET,
+ GLADE_TYPE_SIGNAL);
+
+ /**
+ * GladeProject::remove-signal-handler:
+ * @gladeproject: the #GladeProject which received the signal.
+ * @gladewidget: the #GladeWidget
+ * @signal: the #GladeSignal that was removed from @gladewidget.
+ */
+ glade_project_signals[REMOVE_SIGNAL_HANDLER] =
+ g_signal_new ("remove-signal-handler",
+ G_TYPE_FROM_CLASS (object_class),
+ G_SIGNAL_RUN_LAST,
+ 0,
+ NULL, NULL,
+ _glade_marshal_VOID__OBJECT_OBJECT,
+ G_TYPE_NONE,
+ 2,
+ GLADE_TYPE_WIDGET,
+ GLADE_TYPE_SIGNAL);
+
+ /**
+ * GladeProject::change-signal-handler:
+ * @gladeproject: the #GladeProject which received the signal.
+ * @gladewidget: the #GladeWidget
+ * @old_signal: the old #GladeSignal that changed
+ * @new_signal: the new #GladeSignal
+ */
+ glade_project_signals[CHANGE_SIGNAL_HANDLER] =
+ g_signal_new ("change-signal-handler",
+ G_TYPE_FROM_CLASS (object_class),
+ G_SIGNAL_RUN_LAST,
+ 0,
+ NULL, NULL,
+ _glade_marshal_VOID__OBJECT_OBJECT_OBJECT,
+ G_TYPE_NONE,
+ 3,
+ GLADE_TYPE_WIDGET,
+ GLADE_TYPE_SIGNAL,
+ GLADE_TYPE_SIGNAL);
+
+ /**
+ * GladeProject::activate-signal-handler:
+ * @gladeproject: the #GladeProject which received the signal.
+ * @gladewidget: the #GladeWidget
+ * @signal: the #GladeSignal that was activated
+ */
+ glade_project_signals[ACTIVATE_SIGNAL_HANDLER] =
+ g_signal_new ("activate-signal-handler",
+ G_TYPE_FROM_CLASS (object_class),
+ G_SIGNAL_RUN_LAST,
+ 0,
+ NULL, NULL,
+ _glade_marshal_VOID__OBJECT_OBJECT,
+ G_TYPE_NONE,
+ 2,
+ GLADE_TYPE_WIDGET,
+ GLADE_TYPE_SIGNAL);
+
glade_project_props[PROP_MODIFIED] =
g_param_spec_boolean ("modified",
"Modified",
@@ -5383,3 +5461,53 @@ glade_project_command_delete (GladeProject *project)
if (widgets)
g_list_free (widgets);
}
+
+/* Private */
+
+void
+_glade_project_emit_add_signal_handler (GladeWidget *widget,
+ const GladeSignal *signal)
+{
+ GladeProject *project = glade_widget_get_project (widget);
+
+ if (project)
+ g_signal_emit (project, glade_project_signals[ADD_SIGNAL_HANDLER], 0,
+ widget, signal);
+}
+
+void
+_glade_project_emit_remove_signal_handler (GladeWidget *widget,
+ const GladeSignal *signal)
+{
+ GladeProject *project = glade_widget_get_project (widget);
+
+ if (project)
+ g_signal_emit (project, glade_project_signals[REMOVE_SIGNAL_HANDLER], 0,
+ widget, signal);
+
+}
+
+void
+_glade_project_emit_change_signal_handler (GladeWidget *widget,
+ const GladeSignal *old_signal,
+ const GladeSignal *new_signal)
+{
+ GladeProject *project = glade_widget_get_project (widget);
+
+ if (project)
+ g_signal_emit (project, glade_project_signals[CHANGE_SIGNAL_HANDLER], 0,
+ widget, old_signal, new_signal);
+}
+
+void
+_glade_project_emit_activate_signal_handler (GladeWidget *widget,
+ const GladeSignal *signal)
+{
+ GladeProject *project = glade_widget_get_project (widget);
+
+ if (project)
+ g_signal_emit (project, glade_project_signals[ACTIVATE_SIGNAL_HANDLER], 0,
+ widget, signal);
+
+}
+
diff --git a/gladeui/glade-widget.c b/gladeui/glade-widget.c
index ccfaa500..e3914614 100644
--- a/gladeui/glade-widget.c
+++ b/gladeui/glade-widget.c
@@ -342,6 +342,7 @@ glade_widget_add_signal_handler (GladeWidget *widget,
new_signal_handler = glade_signal_clone (signal_handler);
g_ptr_array_add (signals, new_signal_handler);
g_signal_emit (widget, glade_widget_signals[ADD_SIGNAL_HANDLER], 0, new_signal_handler);
+ _glade_project_emit_add_signal_handler (widget, new_signal_handler);
glade_project_verify_signal (widget, new_signal_handler);
@@ -388,6 +389,7 @@ glade_widget_remove_signal_handler (GladeWidget *widget,
break;
}
}
+ _glade_project_emit_remove_signal_handler (widget, signal_handler);
}
/**
@@ -444,10 +446,12 @@ glade_widget_change_signal_handler (GladeWidget *widget,
g_signal_emit (widget, glade_widget_signals[CHANGE_SIGNAL_HANDLER], 0,
signal_handler_iter);
-
break;
}
}
+ _glade_project_emit_change_signal_handler (widget,
+ old_signal_handler,
+ new_signal_handler);
}
static gboolean
@@ -1474,8 +1478,7 @@ glade_widget_class_init (GladeWidgetClass *klass)
/**
* GladeWidget::change-signal-handler:
* @gladewidget: the #GladeWidget which received the signal.
- * @arg1: the old #GladeSignal
- * @arg2: the new #GladeSignal
+ * @arg1: the #GladeSignal that changed
*/
glade_widget_signals[CHANGE_SIGNAL_HANDLER] =
g_signal_new ("change-signal-handler",