Summary:
This replaces ToolAction by a near-drop-in replacement named ToggleActionMenu. The new annotation toolbar already uses this (D15580).
Unlike ToolAction, ToggleActionMenu inherits from KActionMenu to be more flexible.
* Menu can be set from outside, not hard coded.
* Default action for toolbar button is controllable from outside. (Theoretically, the button could trigger //anything// now.)
* KActionMenu instead of KSelectAction:
- Pluggable in other menus, thus called “Menu”.
- Doesn’t make the actions exclusive, so //any// actions can be added to the menu.
* ImplicitDefaultAction mode can choose the default action of the toolbar buttons automatically, by looking for the first checked action in the menu.
Toolbar buttons use the default action //of// this menu, not this menu itself as action.
Because the default action is configurable now, D21622 and D21635 (where we tried to fine-tune ToolAction) become obsolete.
Screenshot:
Everything like before, here with mouse_selecttool added to Tools menu to show submenu capability.
{F6884228}
Test Plan:
ToolAction replacement and ImplicitDefaultAction mode:
* Open Okular and look at toolbar button -> has correct tool selected.
* Open a document.
* Look at toolbar button menu -> Correct menu entries (like before, with ToolAction).
* Select some selection tools through shortcuts and toolbar button -> behaves correctly.
Usage as submenu:
* Add ToggleActionMenu ("mouse_selecttool") to menubar (..../kxmlgui5/okular/part.rc) -> Submenu looks correctly, has no checkbox attached and so on...
Toolbar buttons:
* Add diverse other actions to the menu -> still works as before.
* Add actions when toolbar buttons are already created -> actions are added to existing buttons.
* setDefaultAction() to some completely unrelated action. -> ToggleActionMenu does not get confused.
Reviewers: simgunz
Reviewed By: simgunz
Subscribers: aacid, ngraham, simgunz, okular-devel
Tags: #okular
Differential Revision: https://phabricator.kde.org/D21971
The check whether to allocate a new QMutex was unprotected.
Two threads may check and allocate concurrently, but only one pointer gets
remembered, the other one will leak. In worst case the returned
mutex is different for two threads, so that two threads try to
synchronize by using two different mutexes.
Text generation is connected to pixmap generation thread started signal.
However the signal may have been emitted faster than the connect could took place,
and because started is fired only once, the connected lambda never got executed.
generatePixmap tried to sync up with that never happening text generation anyway
by means of scheduling itself. This lead to a infinite loop via a no more sleeping QEventLoop.
Fixed by moving the connect in front of starting the thread.
BUG: 396137
BUG: 396087
CCBUG: 403643
The info message bubble that shows up in the okular window in testeRectSelectionStartingOnLinks()
interfereswith the mosue selection making the test fail on HiDPI monitors
with resolution 3840x2160; hiding the info message lets the unit test pass.
It's a lot nicer than manually painting a KPixmapSequence and supports high dpi out of the box.
The new code requires Frameworks >= 5.61, it is therefore only enabled
if at least that Frameworks version is available.
By waiting for the delayResizeEventTimer to trigger before starting the
test.
The test "randomly" failed before, which shows there's an actual bug in
the code, but the actual bug is "if you are moving the mouse over a
field that has a on focus action and at that very same time the
delayResizeEventTimer triggers, the action won't be executed".
That's almost impossible to reproduce in real life so i'm going to
pretend the bug is not there for all purposes
Some discussions at https://phabricator.kde.org/D25484.
This MR adds:
* mouse middle button event handler for closing a tab
* an `undo close tab` action
Test plan:
1. Compile and install.
2. Enable `Open new files in tabs`.
3. Open two documents. They should be opened in two tabs in the same window.
4. Middle click one of the tabs. It should be closed.
5. Choose `File`-`Undo close tab`. The closed tab should be reopened.
6. Middle click one of the tabs. It should be closed.
7. Press <kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>T</kbd>. The closed tab should be reopened.
Remove indentation that breaks formatting when compiling with namespaced stylesheets.
BUG: 415468
Differential Revision: https://phabricator.kde.org/D26190
(cherry picked from commit 9ac31982c5)