summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan-Marek Glogowski <glogow@fbihome.de>2019-06-23 00:10:25 +0200
committerJan-Marek Glogowski <glogow@fbihome.de>2019-06-25 17:27:20 +0200
commit44250864a8252d29c87801a4530e3fe3efd01ba7 (patch)
treeafd02316f52355e08fe7b9fdf182a7287a9a3a84
parent4d23907d5850d96e4c81ffa5332e7fb4cf4cccca (diff)
tdf#120873 Qt5 invert checked state on trigger
SalMenu's event handling is not really compatible with QAction. LO expects to get something like an activate event, which happens without any menu state update. The item handler will then update the item state, as expected by LO. I'm not sure how this could be implemented in a good way in Qt, so this patch is just a hack. If the item is checkable, we invert its state before handling it. This just works correctly for single items, not radio groups, but it does the trick for this bug. And since setChecked() just emits toggled(), triggered() won't run twice. Maybe someone can come up with a better way using event filters, if ever needed. Change-Id: Ic32d07525ce8f394b83d04f53689d1669ddc9d83 Reviewed-on: https://gerrit.libreoffice.org/74590 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de> Reviewed-by: Jan-Marek Glogowski <glogow@fbihome.de>
-rw-r--r--vcl/qt5/Qt5Menu.cxx5
1 files changed, 5 insertions, 0 deletions
diff --git a/vcl/qt5/Qt5Menu.cxx b/vcl/qt5/Qt5Menu.cxx
index 9ca4d54d45a3..418bda56281f 100644
--- a/vcl/qt5/Qt5Menu.cxx
+++ b/vcl/qt5/Qt5Menu.cxx
@@ -568,6 +568,11 @@ void Qt5Menu::slotMenuTriggered(Qt5MenuItem* pQItem)
Menu* pMenu = pSalMenu->GetMenu();
auto mnId = pQItem->mnId;
+ // HACK to allow HandleMenuCommandEvent to "not-set" the checked button
+ // LO expects a signal before an item state change, so reset the check item
+ if (pQItem->mpAction->isCheckable()
+ && (!pQItem->mpActionGroup || pQItem->mpActionGroup->actions().size() <= 1))
+ pQItem->mpAction->setChecked(!pQItem->mpAction->isChecked());
pTopLevel->GetMenu()->HandleMenuCommandEvent(pMenu, mnId);
}
}