svx/source/tbxctrls/tbcontrl.cxx |    1 +
 vcl/unx/gtk3/gtk3gtkinst.cxx     |   30 ++++++++++++++++--------------
 2 files changed, 17 insertions(+), 14 deletions(-)

New commits:
commit 3177bcaa10cf2c61427f03f05f1c442bcf744ecb
Author:     Caolán McNamara <caol...@redhat.com>
AuthorDate: Wed Oct 10 16:16:17 2018 +0100
Commit:     Caolán McNamara <caol...@redhat.com>
CommitDate: Wed Oct 10 18:32:53 2018 +0200

    Resolves: tdf#120407 support popover getting replaced
    
    Change-Id: I56f51a5effccd8854361790c68fa11a2cc067aa9
    Reviewed-on: https://gerrit.libreoffice.org/61623
    Reviewed-by: Caolán McNamara <caol...@redhat.com>
    Tested-by: Caolán McNamara <caol...@redhat.com>

diff --git a/svx/source/tbxctrls/tbcontrl.cxx b/svx/source/tbxctrls/tbcontrl.cxx
index 98f491711a95..8eeda9aa556e 100644
--- a/svx/source/tbxctrls/tbcontrl.cxx
+++ b/svx/source/tbxctrls/tbcontrl.cxx
@@ -3613,6 +3613,7 @@ void ColorListBox::SetSlotId(sal_uInt16 nSlotId, bool 
bShowNoneButton)
 {
     m_nSlotId = nSlotId;
     m_bShowNoneButton = bShowNoneButton;
+    m_xButton->set_popover(nullptr);
     m_xColorWindow.reset();
     m_aSelectedColor = bShowNoneButton ? GetNoneColor() : 
GetAutoColor(m_nSlotId);
     ShowPreview(m_aSelectedColor);
diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx
index 5930e6a42441..e480fdccbf8d 100644
--- a/vcl/unx/gtk3/gtk3gtkinst.cxx
+++ b/vcl/unx/gtk3/gtk3gtkinst.cxx
@@ -3353,23 +3353,25 @@ public:
     virtual void set_popover(weld::Widget* pPopover) override
     {
         GtkInstanceWidget* pPopoverWidget = 
dynamic_cast<GtkInstanceWidget*>(pPopover);
-        assert(pPopoverWidget);
-        m_pPopover = pPopoverWidget->getWidget();
+        m_pPopover = pPopoverWidget ? pPopoverWidget->getWidget() : nullptr;
 
 #if defined(GDK_WINDOWING_X11)
-        //under wayland a Popover will work to "escape" the parent dialog, not
-        //so under X, so come up with this hack to use a raw GtkWindow
-        GdkDisplay *pDisplay = gtk_widget_get_display(m_pWidget);
-        if (GDK_IS_X11_DISPLAY(pDisplay))
+        if (!m_pMenuHack)
         {
-            m_pMenuHack = GTK_WINDOW(gtk_window_new(GTK_WINDOW_POPUP));
-            gtk_window_set_type_hint(m_pMenuHack, GDK_WINDOW_TYPE_HINT_COMBO);
-            gtk_window_set_modal(m_pMenuHack, true);
-            gtk_window_set_resizable(m_pMenuHack, false);
-            m_nSignalId = g_signal_connect(GTK_TOGGLE_BUTTON(m_pMenuButton), 
"toggled", G_CALLBACK(signalToggled), this);
-            g_signal_connect(m_pMenuHack, "grab-broken-event", 
G_CALLBACK(signalGrabBroken), this);
-            g_signal_connect(m_pMenuHack, "button-release-event", 
G_CALLBACK(signalButtonRelease), this);
-            g_signal_connect(m_pMenuHack, "key-press-event", 
G_CALLBACK(keyPress), this);
+            //under wayland a Popover will work to "escape" the parent dialog, 
not
+            //so under X, so come up with this hack to use a raw GtkWindow
+            GdkDisplay *pDisplay = gtk_widget_get_display(m_pWidget);
+            if (GDK_IS_X11_DISPLAY(pDisplay))
+            {
+                m_pMenuHack = GTK_WINDOW(gtk_window_new(GTK_WINDOW_POPUP));
+                gtk_window_set_type_hint(m_pMenuHack, 
GDK_WINDOW_TYPE_HINT_COMBO);
+                gtk_window_set_modal(m_pMenuHack, true);
+                gtk_window_set_resizable(m_pMenuHack, false);
+                m_nSignalId = 
g_signal_connect(GTK_TOGGLE_BUTTON(m_pMenuButton), "toggled", 
G_CALLBACK(signalToggled), this);
+                g_signal_connect(m_pMenuHack, "grab-broken-event", 
G_CALLBACK(signalGrabBroken), this);
+                g_signal_connect(m_pMenuHack, "button-release-event", 
G_CALLBACK(signalButtonRelease), this);
+                g_signal_connect(m_pMenuHack, "key-press-event", 
G_CALLBACK(keyPress), this);
+            }
         }
 #endif
 
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to