vcl/unx/gtk3/gtkinst.cxx |    5 +++++
 1 file changed, 5 insertions(+)

New commits:
commit a1a0991282b4a4449dd200412ad5b49684a3363d
Author:     Michael Weghorn <m.wegh...@posteo.de>
AuthorDate: Mon Jun 2 15:22:44 2025 +0200
Commit:     Michael Weghorn <m.wegh...@posteo.de>
CommitDate: Tue Jun 3 11:35:37 2025 +0200

    gtk3: Don't signal submenu activation
    
    Ignore the GtkMenuItem::activate [1] signal for menu items
    that have a submenu.
    
    The corresponding MenuHelper::signal_item_activate overrides
    that would be called would otherwise handle that activation
    as if a (leaf) menu item was activated by the user to trigger an
    action, while the signal already gets triggered simply
    when a menu item that has a submenu becomes selected/active
    and its submenu is shown.
    
    This addresses/prevents the
    
        
warn:basctl.basicide:1948815:1948815:basctl/source/basicide/macrodlg.cxx:806: 
Unknown context menu action: ___object_1___
    
    warning seen when doing this in Writer:
    
    * "Macros" -> "Organize Macros" -> "Basic"
    * right-click on entry in the "Existing Macros In: <module>" treeview
    * hover over the "Sorting" menu entry
    * click somewhere outside the menu area to close/cancel/dismiss the menu
    
    This was previously triggered because
    GtkInstanceMenu::signal_item_activate called from
    MenuHelper::signalActivate would set GtkInstanceMenu::m_sActivated
    to the (auto-generated because not explicitly set) ID of the
    corresponding menu entry and the call to Menu::popup_at_rect in
    MacroChooser::ContextMenuHdl would then return that ID instead
    of an empty string (which would indicate that the user did
    not activate a menu item).
    
    Ignoring the signal aligns this with the behavior of the VCL
    implementation.
    
    Originally discussed in [2] where the same issue can be seen
    in a newly introduced use of the same menu elsewhere.
    
    [1] https://docs.gtk.org/gtk3/signal.MenuItem.activate.html
    [2] 
https://gerrit.libreoffice.org/c/core/+/179627/comment/c3ff25b7_9e668e51/
    
    Change-Id: Ieee476606410875d033d877e22e5c9606ff9a848
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/186134
    Reviewed-by: Caolán McNamara <caolan.mcnam...@collabora.com>
    Tested-by: Jenkins

diff --git a/vcl/unx/gtk3/gtkinst.cxx b/vcl/unx/gtk3/gtkinst.cxx
index e88b41f16341..df4594db17ff 100644
--- a/vcl/unx/gtk3/gtkinst.cxx
+++ b/vcl/unx/gtk3/gtkinst.cxx
@@ -5231,6 +5231,11 @@ private:
 
     static void signalActivate(GtkMenuItem* pItem, gpointer widget)
     {
+        // ignore "activate" signal for non-leaf items resulting in the 
submenu to be
+        // shown, contrary to a "normal" menu item getting activated to 
trigger its action
+        if (gtk_menu_item_get_submenu(pItem))
+            return;
+
         MenuHelper* pThis = static_cast<MenuHelper*>(widget);
         SolarMutexGuard aGuard;
         pThis->signal_item_activate(::get_buildable_id(GTK_BUILDABLE(pItem)));

Reply via email to