vcl/unx/gtk3/gtk3gtksalmenu.cxx |   24 +++++++++++++-----------
 1 file changed, 13 insertions(+), 11 deletions(-)

New commits:
commit 951d9fe0b5470085ae817c3af04014e6dd95b498
Author:     Caolán McNamara <caol...@redhat.com>
AuthorDate: Wed Feb 10 12:53:52 2021 +0000
Commit:     Caolán McNamara <caol...@redhat.com>
CommitDate: Wed Feb 10 17:42:17 2021 +0100

    Resolves: tdf#140225 remove action when item is removed from GtkSalMenu
    
    and we have previously ensured that all items are removed by
    Menu::dispose before GtkSalMenu dtor is called
    
    Change-Id: Id91cfb96a16dfa7c55bb8bc6676cb7921ec8dd37
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/110704
    Tested-by: Jenkins
    Reviewed-by: Caolán McNamara <caol...@redhat.com>

diff --git a/vcl/unx/gtk3/gtk3gtksalmenu.cxx b/vcl/unx/gtk3/gtk3gtksalmenu.cxx
index e81222b69482..3ed2487ff4f3 100644
--- a/vcl/unx/gtk3/gtk3gtksalmenu.cxx
+++ b/vcl/unx/gtk3/gtk3gtksalmenu.cxx
@@ -596,23 +596,15 @@ GtkSalMenu::~GtkSalMenu()
 {
     SolarMutexGuard aGuard;
 
-    if (mpActionGroup)
-    {
-        // tdf#140225 if any menu is deleted clear the action-group shared
-        // by the hierarchy
-        GLOActionGroup* pActionGroup = G_LO_ACTION_GROUP(mpActionGroup);
-        g_lo_action_group_clear(pActionGroup);
-        // and flag the hierarchy as needing an update
-        SetNeedsUpdate();
-    }
+    // tdf#140225 we expect all items to be removed by Menu::dispose
+    // before this dtor is called
+    assert(maItems.empty());
 
     DestroyMenuBarWidget();
 
     if (mpMenuModel)
         g_object_unref(mpMenuModel);
 
-    maItems.clear();
-
     if (mpFrame)
         mpFrame->SetMenu(nullptr);
 }
@@ -640,6 +632,16 @@ void GtkSalMenu::InsertItem( SalMenuItem* pSalMenuItem, 
unsigned nPos )
 void GtkSalMenu::RemoveItem( unsigned nPos )
 {
     SolarMutexGuard aGuard;
+
+    // tdf#140225 clear associated action when the item is removed
+    if (mpActionGroup)
+    {
+        GLOActionGroup* pActionGroup = G_LO_ACTION_GROUP(mpActionGroup);
+        gchar* pCommand = GetCommandForItem(maItems[nPos]);
+        g_lo_action_group_remove(pActionGroup, pCommand);
+        g_free(pCommand);
+    }
+
     maItems.erase( maItems.begin() + nPos );
     SetNeedsUpdate();
 }
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to