summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Iofel <iofelben@gmail.com>2015-11-03 21:33:28 -0500
committerBen Iofel <iofelben@gmail.com>2015-12-10 19:33:54 -0500
commit3c2b2ea3946d3797fa4de5527ab2230da9144b98 (patch)
tree4a4a6b81ac2ce38f9e401075eb547e1ebc048733
parented15bde7cd00c5a799ae6230b48448b3533493bd (diff)
downloadglade-wip/beniofel/popover.tar.gz
Popover: stop emission of some signalswip/beniofel/popover
-rw-r--r--plugins/gtk+/glade-gtk-popover.c42
-rw-r--r--plugins/gtk+/gtk+.xml.in1
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"/>