[glade/wip/beniofel/popover: 45/45] Popover: stop emission of some signals



commit 3c2b2ea3946d3797fa4de5527ab2230da9144b98
Author: Ben Iofel <iofelben gmail com>
Date:   Tue Nov 3 21:33:28 2015 -0500

    Popover: stop emission of some signals

 plugins/gtk+/glade-gtk-popover.c |   42 ++++++++++++++++++++++++++++++++++++++
 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 b60e6ff..e9c20ea 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 3da6821..a0aaa81 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"/>


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]