diff options
author | Ben Iofel <iofelben@gmail.com> | 2015-11-03 21:33:28 -0500 |
---|---|---|
committer | Ben Iofel <iofelben@gmail.com> | 2015-12-10 19:33:54 -0500 |
commit | 3c2b2ea3946d3797fa4de5527ab2230da9144b98 (patch) | |
tree | 4a4a6b81ac2ce38f9e401075eb547e1ebc048733 | |
parent | ed15bde7cd00c5a799ae6230b48448b3533493bd (diff) | |
download | glade-wip/beniofel/popover.tar.gz |
Popover: stop emission of some signalswip/beniofel/popover
-rw-r--r-- | plugins/gtk+/glade-gtk-popover.c | 42 | ||||
-rw-r--r-- | plugins/gtk+/gtk+.xml.in | 1 |
2 files changed, 43 insertions, 0 deletions
diff --git a/plugins/gtk+/glade-gtk-popover.c b/plugins/gtk+/glade-gtk-popover.c index b60e6ff0..e9c20eaf 100644 --- a/plugins/gtk+/glade-gtk-popover.c +++ b/plugins/gtk+/glade-gtk-popover.c @@ -46,6 +46,48 @@ glade_gtk_popover_constructor (GType type, return ret_obj; } +static void +glade_gtk_stop_emission_POINTER (gpointer instance, gpointer dummy, + gpointer data) +{ + g_signal_stop_emission (instance, GPOINTER_TO_UINT (data), 0); +} + +static void +glade_gtk_popover_stop_offending_signals (GtkWidget * widget) +{ + static gpointer button_press = NULL, + button_release, + key_press; + + if (button_press == NULL) + { + button_press = GUINT_TO_POINTER (g_signal_lookup ("button-press-event", GTK_TYPE_WIDGET)); + button_release = GUINT_TO_POINTER (g_signal_lookup ("button-release-event", GTK_TYPE_WIDGET)); + key_press = GUINT_TO_POINTER (g_signal_lookup ("key-press-event", GTK_TYPE_WIDGET)); + } + + g_signal_connect (widget, "button-press-event", + G_CALLBACK (glade_gtk_stop_emission_POINTER), button_press); + g_signal_connect (widget, "button-release-event", + G_CALLBACK (glade_gtk_stop_emission_POINTER), button_release); + g_signal_connect (widget, "key-press-event", + G_CALLBACK (glade_gtk_stop_emission_POINTER), key_press); +} + +void +glade_gtk_popover_post_create (GladeWidgetAdaptor *adaptor, + GObject *object, + GladeCreateReason reason) +{ + if (reason == GLADE_CREATE_USER) + { + gtk_container_add (GTK_CONTAINER (object), glade_placeholder_new ()); + } + + glade_gtk_popover_stop_offending_signals (GTK_WIDGET (object)); +} + GladeEditable * glade_gtk_popover_create_editable (GladeWidgetAdaptor * adaptor, GladeEditorPageType type) diff --git a/plugins/gtk+/gtk+.xml.in b/plugins/gtk+/gtk+.xml.in index 3da6821e..a0aaa815 100644 --- a/plugins/gtk+/gtk+.xml.in +++ b/plugins/gtk+/gtk+.xml.in @@ -3376,6 +3376,7 @@ <glade-widget-class name="GtkPopover" generic-name="popover" _title="Popover" toplevel="True" since="3.12"> <constructor-function>glade_gtk_popover_constructor</constructor-function> + <post-create-function>glade_gtk_popover_post_create</post-create-function> <create-editable-function>glade_gtk_popover_create_editable</create-editable-function> <properties> <property id="visible" default="False"/> |