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

New commits:
commit bee080ab7ca21d05de0519361a19724ef609a86b
Author:     Caolán McNamara <caolan.mcnam...@collabora.com>
AuthorDate: Sun Mar 31 18:11:42 2024 +0100
Commit:     Caolán McNamara <caolan.mcnam...@collabora.com>
CommitDate: Sun Mar 31 20:31:29 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/+/165595
    Tested-by: Jenkins
    Reviewed-by: Caolán McNamara <caolan.mcnam...@collabora.com>

diff --git a/vcl/unx/gtk3/gtkframe.cxx b/vcl/unx/gtk3/gtkframe.cxx
index f44abeeeb78b..a1b7f619983d 100644
--- a/vcl/unx/gtk3/gtkframe.cxx
+++ b/vcl/unx/gtk3/gtkframe.cxx
@@ -3958,12 +3958,24 @@ void GtkSalFrame::signalRealize(GtkWidget*, gpointer 
frame)
     }
 
     AbsoluteScreenPixelRectangle 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