vcl/unx/gtk3/gtkframe.cxx |   22 +++++++++++++++++-----
 1 file changed, 17 insertions(+), 5 deletions(-)

New commits:
commit 508a755a465c322af3c08f871299ce57193ca523
Author:     Caolán McNamara <caolan.mcnam...@collabora.com>
AuthorDate: Sun Mar 31 18:11:42 2024 +0100
Commit:     Adolfo Jayme Barrientos <fit...@ubuntu.com>
CommitDate: Wed Apr 10 08:06:40 2024 +0200

    Resolves: tdf#154072 no effect when clicking some dropdown buttons
    
    when toolbar overflows.
    
    A problem since:
    
    commit b534ee2e972711af2dbaadf2190813054adda902
    Date:   Tue Nov 22 11:33:23 2022 +0000
    
        Resolves: tdf#152155 use gtk's knowledge of relative widget positions
    
        rather than effectively emulate it poorly
    
    Change-Id: I18c08e43e9c0b642f2a30b5114d6f0a53f18a331
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/165610
    Tested-by: Jenkins
    Reviewed-by: Adolfo Jayme Barrientos <fit...@ubuntu.com>
    Signed-off-by: Xisco Fauli <xiscofa...@libreoffice.org>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/165634

diff --git a/vcl/unx/gtk3/gtkframe.cxx b/vcl/unx/gtk3/gtkframe.cxx
index 6152d64bd86e..7c9290cfed68 100644
--- a/vcl/unx/gtk3/gtkframe.cxx
+++ b/vcl/unx/gtk3/gtkframe.cxx
@@ -3926,12 +3926,24 @@ void GtkSalFrame::signalRealize(GtkWidget*, gpointer 
frame)
     }
 
     tools::Rectangle aFloatRect = 
FloatingWindow::ImplConvertToAbsPos(pVclParent, pThis->m_aFloatRect);
-    if 
(gdk_window_get_window_type(widget_get_surface(pThis->m_pParent->m_pWindow)) != 
GDK_WINDOW_TOPLEVEL)
+    switch 
(gdk_window_get_window_type(widget_get_surface(pThis->m_pParent->m_pWindow)))
     {
-        // See tdf#152155 for an example
-        gtk_coord nX(0), nY(0.0);
-        gtk_widget_translate_coordinates(pThis->m_pParent->m_pWindow, 
widget_get_toplevel(pThis->m_pParent->m_pWindow), 0, 0, &nX, &nY);
-        aFloatRect.Move(nX, nY);
+        case GDK_WINDOW_TOPLEVEL:
+            break;
+        case GDK_WINDOW_CHILD:
+        {
+            // See tdf#152155 for an example
+            gtk_coord nX(0), nY(0.0);
+            gtk_widget_translate_coordinates(pThis->m_pParent->m_pWindow, 
widget_get_toplevel(pThis->m_pParent->m_pWindow), 0, 0, &nX, &nY);
+            aFloatRect.Move(nX, nY);
+            break;
+        }
+        default:
+        {
+            // See tdf#154072 for an example
+            aFloatRect.Move(-pThis->m_pParent->maGeometry.x(), 
-pThis->m_pParent->maGeometry.y());
+            break;
+        }
     }
 
     GdkRectangle rect {static_cast<int>(aFloatRect.Left()), 
static_cast<int>(aFloatRect.Top()),

Reply via email to