vcl/unx/gtk3/gtk3gtkinst.cxx |  108 ++++++++++++++++++++++---------------------
 1 file changed, 57 insertions(+), 51 deletions(-)

New commits:
commit c47d0f66806dfbc431d34dba785acf2d9f3037cf
Author:     Caolán McNamara <caol...@redhat.com>
AuthorDate: Tue Nov 12 10:05:15 2019 +0000
Commit:     Caolán McNamara <caol...@redhat.com>
CommitDate: Tue Nov 12 15:03:15 2019 +0100

    factor out inserting an intermediate GtkEventBox
    
    Change-Id: I52b8e09deb474f665ad32baebf5648a7c54c6040
    Reviewed-on: https://gerrit.libreoffice.org/82502
    Tested-by: Jenkins
    Reviewed-by: Caolán McNamara <caol...@redhat.com>
    Tested-by: Caolán McNamara <caol...@redhat.com>

diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx
index 2b903bf49cbd..d9217d412e5e 100644
--- a/vcl/unx/gtk3/gtk3gtkinst.cxx
+++ b/vcl/unx/gtk3/gtk3gtkinst.cxx
@@ -1691,6 +1691,62 @@ namespace
         return AllSettings::GetLayoutRTL();
     }
 #endif
+
+    GtkWidget* ensureEventWidget(GtkWidget* pWidget)
+    {
+        GtkWidget* pMouseEventBox;
+        // not every widget has a GdkWindow and can get any event, so if we
+        // want an event it doesn't have, insert a GtkEventBox so we can get
+        // those
+        if (gtk_widget_get_has_window(pWidget))
+            pMouseEventBox = pWidget;
+        else
+        {
+            // remove the widget and replace it with an eventbox and put the 
old
+            // widget into it
+            GtkWidget* pParent = gtk_widget_get_parent(pWidget);
+
+            g_object_ref(pWidget);
+
+            gint nTopAttach(0), nLeftAttach(0), nHeight(1), nWidth(1);
+            if (GTK_IS_GRID(pParent))
+            {
+                gtk_container_child_get(GTK_CONTAINER(pParent), pWidget,
+                        "left-attach", &nTopAttach,
+                        "top-attach", &nLeftAttach,
+                        "width", &nWidth,
+                        "height", &nHeight,
+                        nullptr);
+            }
+
+            gtk_container_remove(GTK_CONTAINER(pParent), pWidget);
+
+            pMouseEventBox = gtk_event_box_new();
+            gtk_event_box_set_above_child(GTK_EVENT_BOX(pMouseEventBox), 
false);
+            gtk_event_box_set_visible_window(GTK_EVENT_BOX(pMouseEventBox), 
false);
+            gtk_widget_set_visible(pMouseEventBox, 
gtk_widget_get_visible(pWidget));
+
+            gtk_container_add(GTK_CONTAINER(pParent), pMouseEventBox);
+
+            if (GTK_IS_GRID(pParent))
+            {
+                gtk_container_child_set(GTK_CONTAINER(pParent), pMouseEventBox,
+                        "left-attach", nTopAttach,
+                        "top-attach", nLeftAttach,
+                        "width", nWidth,
+                        "height", nHeight,
+                        nullptr);
+            }
+
+            gtk_container_add(GTK_CONTAINER(pMouseEventBox), pWidget);
+            g_object_unref(pWidget);
+
+            gtk_widget_set_hexpand(pMouseEventBox, 
gtk_widget_get_hexpand(pWidget));
+            gtk_widget_set_vexpand(pMouseEventBox, 
gtk_widget_get_vexpand(pWidget));
+        }
+
+        return pMouseEventBox;
+    }
 }
 
 class GtkInstanceWidget : public virtual weld::Widget
@@ -1761,58 +1817,8 @@ protected:
 
     void ensureEventWidget()
     {
-        // not every widget has a GdkWindow and can get any event, so if we
-        // want an event it doesn't have, insert a GtkEventBox so we can get
-        // those
         if (!m_pMouseEventBox)
-        {
-            if (gtk_widget_get_has_window(m_pWidget))
-                m_pMouseEventBox = m_pWidget;
-            else
-            {
-                // remove the widget and replace it with an eventbox and put 
the old
-                // widget into it
-                GtkWidget* pParent = gtk_widget_get_parent(m_pWidget);
-
-                g_object_ref(m_pWidget);
-
-                gint nTopAttach(0), nLeftAttach(0), nHeight(1), nWidth(1);
-                if (GTK_IS_GRID(pParent))
-                {
-                    gtk_container_child_get(GTK_CONTAINER(pParent), m_pWidget,
-                            "left-attach", &nTopAttach,
-                            "top-attach", &nLeftAttach,
-                            "width", &nWidth,
-                            "height", &nHeight,
-                            nullptr);
-                }
-
-                gtk_container_remove(GTK_CONTAINER(pParent), m_pWidget);
-
-                m_pMouseEventBox = gtk_event_box_new();
-                gtk_event_box_set_above_child(GTK_EVENT_BOX(m_pMouseEventBox), 
false);
-                
gtk_event_box_set_visible_window(GTK_EVENT_BOX(m_pMouseEventBox), false);
-                gtk_widget_show(m_pMouseEventBox);
-
-                gtk_container_add(GTK_CONTAINER(pParent), m_pMouseEventBox);
-
-                if (GTK_IS_GRID(pParent))
-                {
-                    gtk_container_child_set(GTK_CONTAINER(pParent), 
m_pMouseEventBox,
-                            "left-attach", nTopAttach,
-                            "top-attach", nLeftAttach,
-                            "width", nWidth,
-                            "height", nHeight,
-                            nullptr);
-                }
-
-                gtk_container_add(GTK_CONTAINER(m_pMouseEventBox), m_pWidget);
-                g_object_unref(m_pWidget);
-
-                gtk_widget_set_hexpand(m_pMouseEventBox, 
gtk_widget_get_hexpand(m_pWidget));
-                gtk_widget_set_vexpand(m_pMouseEventBox, 
gtk_widget_get_vexpand(m_pWidget));
-            }
-        }
+            m_pMouseEventBox = ::ensureEventWidget(m_pWidget);
     }
 
     void ensureButtonPressSignal()
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to