[Libreoffice-commits] core.git: vcl/inc vcl/unx

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Wed Oct 24 20:08:35 UTC 2018


 vcl/inc/unx/gtk/gtkframe.hxx  |    1 +
 vcl/unx/gtk3/gtk3gtkframe.cxx |   15 +++++++++++++++
 2 files changed, 16 insertions(+)

New commits:
commit b8bf751f9f5e2cb718175c0f2c4b2be762dcf614
Author:     Maxim Monastirsky <momonasmon at gmail.com>
AuthorDate: Tue Oct 23 01:37:25 2018 +0300
Commit:     Maxim Monastirsky <momonasmon at gmail.com>
CommitDate: Wed Oct 24 22:08:10 2018 +0200

    tdf#120764 Toolbar popups sometimes not showing under Wayland
    
    This happens with gtk 3.24 if the toolbar button is
    clicked when the tooltip of that button is visible.
    The warning gtk emits is "Tried to map a popup with a
    non-top most parent".
    
    The solution is to hide the tooltip early on mouse
    button press event processing. (gtk does hiding too,
    but in a way which isn't useful here - see the code
    comment. We also have similar code for the non-native
    case in ImplHandleMouseEvent of winproc.cxx.)
    
    Note that it's likely a gtk bug, as this new tooltip
    behavior breaks some native cases too, e.g. combo boxes
    with tooltips. But we can't leave our toolbars broken
    until this is fixed upstream.
    
    Change-Id: I1ce8bffcd78a3bcbbfe2ffdd1bd006ae5dc79618
    Reviewed-on: https://gerrit.libreoffice.org/62207
    Tested-by: Jenkins
    Reviewed-by: Maxim Monastirsky <momonasmon at gmail.com>

diff --git a/vcl/inc/unx/gtk/gtkframe.hxx b/vcl/inc/unx/gtk/gtkframe.hxx
index 04ec68a7854e..94547848659e 100644
--- a/vcl/inc/unx/gtk/gtkframe.hxx
+++ b/vcl/inc/unx/gtk/gtkframe.hxx
@@ -537,6 +537,7 @@ public:
 #if GTK_CHECK_VERSION(3,0,0)
     virtual void                PositionByToolkit(const tools::Rectangle& rRect, FloatWinPopupFlags nFlags) override;
     virtual void                SetModal(bool bModal) override;
+    void                        HideTooltip();
     virtual bool                ShowTooltip(const OUString& rHelpText, const tools::Rectangle& rHelpArea) override;
     virtual void*               ShowPopover(const OUString& rHelpText, vcl::Window* pParent, const tools::Rectangle& rHelpArea, QuickHelpFlags nFlags) override;
     virtual bool                UpdatePopover(void* nId, const OUString& rHelpText, vcl::Window* pParent, const tools::Rectangle& rHelpArea) override;
diff --git a/vcl/unx/gtk3/gtk3gtkframe.cxx b/vcl/unx/gtk3/gtk3gtkframe.cxx
index acdb3f9e0d9a..37c01fa11a3d 100644
--- a/vcl/unx/gtk3/gtk3gtkframe.cxx
+++ b/vcl/unx/gtk3/gtk3gtkframe.cxx
@@ -2495,6 +2495,12 @@ bool GtkSalFrame::ShowTooltip(const OUString& rHelpText, const tools::Rectangle&
     return true;
 }
 
+void GtkSalFrame::HideTooltip()
+{
+    m_aTooltip.clear();
+    gtk_widget_trigger_tooltip_query(getMouseEventWidget());
+}
+
 namespace
 {
     void set_pointing_to(GtkPopover *pPopOver, vcl::Window* pParent, const tools::Rectangle& rHelpArea, const SalFrameGeometry& rGeometry)
@@ -2619,6 +2625,15 @@ gboolean GtkSalFrame::signalButton( GtkWidget*, GdkEventButton* pEvent, gpointer
     GtkWidget* pEventWidget = pThis->getMouseEventWidget();
     bool bDifferentEventWindow = pEvent->window != widget_get_window(pEventWidget);
 
+    // tdf#120764 It isn't allowed under wayland to have two visible popups that share
+    // the same top level parent. The problem is that since gtk 3.24 tooltips are also
+    // implemented as popups, which means that we cannot show any popup if there is a
+    // visible tooltip. In fact, gtk will hide the tooltip by itself after this handler,
+    // in case of a button press event. But if we intend to show a popup on button press
+    // it will be too late, so just do it here:
+    if (pEvent->type == GDK_BUTTON_PRESS)
+        pThis->HideTooltip();
+
     SalMouseEvent aEvent;
     SalEvent nEventType = SalEvent::NONE;
     switch( pEvent->type )


More information about the Libreoffice-commits mailing list