This fixes scrolling with the scrollbar,
so it is not reset when scrolling on the viewport afterwards.
PageView’s QSroller was not correctly updated by update_scroller,
because it was connected to QAbstractSlider::sliderMoved and sliderReleased,
which are only emitted while the “slider is down”,
i. e. not when the user scrolls the scrollbar other than dragging the slider.
Now update_scroller is connected to actionTriggered(),
which is emitted for all user interactions.
Note that scrolling using the scrollbar calls QAbstractScrollArea::scrollContentsBy(),
and so bypasses smooth scrolling of the QScroller. This could be considered a feature,
otherwise it is more a bug in Qt than in Okular, because we can not ignore scrollContentsBy().
Steps to reproduce:
1. Open a long document
2. Click on the vertical scrollbar below the slider
3. Okular scrolls one page down
4. Scroll in the viewport
5. Okular starts scrolling from the position from step 1.
Test plan:
* Scroll using scrollbar
+ Click on the vertical scrollbar below the slider
+ Middle-click on the vertical scrollbar below the slider
+ Click on the little arrow of the vertical scrollbar
+ Scroll using a scrolling device (e. g. `xdotool click 4`) on the vertical scrollbar
+ Drag the slider of the scrollbar
* “cross-product” verify QScroller state
+ Scroll using a scrolling device on the viewport
+ Scroll using Browse tool dragging
+ Scroll the viewport by clicking a point in the thumbnails view
+ Scroll the viewport using arrow keys and Page Up/Down keys
BUG: 421159
Selecting highlight tool, pressing left mouse button while over text, and
immediately releasing without dragging a selection caused inconsistent state.
It left TextSelectorEnigne in the state m_creationCompleted == false and
m_lockedItem == something. Then in continuous mode all events kept on being
propagated to TextSelectorEngine::event, even if the user started unrelated
interactions in the meantime. This caused various side effects.
It notably happened when you double clicked a finished highlight annotation,
as described in bug 426658.
We can go to m_creationComplete after release even without a selection,
because TextSelectorEngine::end and PageViewAnnotator::performRouteMouseOrTabletEvent
handle the case just fine, i.e. don't create an annotation but reset the state machine.
Fixes bug 426658 at least partially. I couldn't reproduce the described crash,
so no idea if that's also fixed.
BUG: 446658
`setViewport` automatically adds an item to the history if it finds that it
moved for more than a page, which we don't want to do when automatically
scrolling, as with inertial scrolling.
This commit adds a new function `setViewportWithHistory()` which takes an
argument to optionally avoid preserving history. This avoids breaking ABI.
The new history-less functionality is used when inertially scrolling.
BUG: 421354
FIXED-IN: 1.11.2
Even though the animated smooth scrolling transitions are now affected
by the global animation speed setting in Plasma, this is not totally
satisfactory for the full pool of people who hate smooth scrolling, as
it does not address the cases of people using Okular outside of Plasma
or people who generally want animations but just not in Okular's
scrolling implementation.
Accordingly, there is now a GUI option to disable smooth scrolling in
Okular's settings window.
BUG: 420755
FIXED-IN: 20.12
Unite handling of right click in mouse release event
Before we had handling on press -> show annot menu if annot
and in release -> show link menu if link or show the genericmenu if nothing
Now we do everything on release and do
show link and annot menu if both
show link menu if link
show annot menu if annot
show generic menu if nothing
It helps with the fact that you can't click on links if there's an
annotation on top, which is a bit of a pain but it makes sense since
annotations usually have more interaction than links, you can select,
move, etc. them
BUGS: 425291
QScroller uses a minimum drag distance before drag scrolling starts by default.
This sets the minimum distance to 0.0, to restore the original behavior of the Browse tool.
BUG: 420842
This uses KConfigWatcher to listen for changes to the relevant config
value and update the speed dynamically, rather that just once when the
app is launched.
Now people who don't like animations can set thenm to "Instant" globally
and smooth scrolling will be effectively disabled off in Okular.
There is no change in speed for people using the default global
animation duration.
BUG: 420755
FIXED-IN: 1.12.0
This is safe now that the animated transitions no longer block repeated
scroll actions during the animation.
This partially reverts 08d368c13b
BUG: 422041
BUG: 425850
FIXED-IN: 1.11.2
When the view is paged (ie, non continuous), and an annotation is
selected while the user navigate through pages, the annotation
selection will become an artifact in other pages. Besides that,
the annotation will still receive keystrokes (such as delete).
Steps to Reproduce:
- Open a PDF file with Okular
- Draw an ellipsis annotation in the document
- Select the ellipsis
- Change to the previous or next page
During the upgrade to Okular 1.11.0 the shortcuts for the quick annotations have been changed from the keys 1, 2, 3,... to Alt + 1, 2, 3,... making some users unhappy.
CCBUG: 426009
* createColorIcon creates a QIcon which visualizes the given colors
using rectangles. A background icon can be provided, in that case
only the lowest 25% of the icon will be filled by the rectangles.
* createOpacityIcon creates a QIcon that visualizes a given opacity
using the current foreground color and a checkerboard background.
These functions are now used in place of colorIcon, colorPicerIcon,
opacityIcon in AnnotationActionHandler. The new functions have some
advantages: support most common icon sizes, and dark color schemes.
Perform extra checks on the existence of QDomElement attributes and on the correctness of their conversion from QString to int.
This also prevents a crash if it is not possible to find the built in tool associated to the triggered quick tool.
Using the new configuration key BuiltinAnnotationTools instead of AnnotationTools, we avoid any conflicts in the configuration files due to the fact that the key AnnotationTools had a different meaning in the previous versions of Okular. In particular we avoid the critical problem that the actions in the UI do not match the actual annotation tools. The conflict may happen if the kconf_update script is not executed for some reason (e.g. okular running from flatpack).
BUG: 425354
FIXED-IN: 1.11.1
* QDesktopWidget -> QScreen
Simplifications:
* After setting new screen/geometry, forget them and let resizeEvent() handle any updates.
* Specifically, don’t connect to screen size change signals.
* Specifically, setScreen() only sets the new widget position and then waits for resizeEvent().
* This also means applyNewScreenSize() and repositionContent() can be collapsed into resizeEvent().
* Replace recalcGeometry() by setScreen(defaultScreen()), where defaultScreen() only checks the configuration.
Screen switching from inside presentation mode currently does not work correctly.
The reason is that the widget geometry() shall be moved
*while* the widget is configured as fullscreen.
This patch temporarily disables fullscreen, so the screen can be switched.
You can check it with release 20.04:
Screen switching from within presentation mode will not work.
Set the widget to windowed (e. g. Alt+F3 or right-click in task manager),
screen switching will work now.
!233 shall port PresentationWidget to QScreen in release 20.12,
so this is just a compact workaround without much intelligence.
The drawback is that custom window rules might get confused when the
screen geometry changes for some reasons.
In this way it is possible to drop the `sourceId` attribute from the quick tools definition. This simplifies the code logic and makes it easier to update user settings from the previous version of Okular (because there is no need to add the attribute `sourceId`
This also fixes the crash due to the fact that `sourceId` was not correctly created when a quick annotation is created from the Annotation page of Okualr Settings.
BUG: 424810
FIXED-IN: 1.11.0
Write doxygen documentation for:
* PagePainter::paintPageOnPainter(), paintCroppedPageOnPainter()
* `Change Colors` algorithm functions of PagePainter
* PagePainter::drawShapeOnImage(), drawPixmapOnImage(); very straightforward,
but added a note on the coordinate system.
* LineAnnotPainter constructor, draw()
Remove unused functions:
* PagePainter::cropPixmapOnImage(), QPixmap::copy() can do it easily today.
PagePainter::drawShapeOnImage() and drawEllipseOnImage() didn’t respect the image’s device pixel ratio.
Steps to reproduce:
* Set your screen scale to e. g. 1.25.
* Open e. g. a .txt document.
* Draw e. g. an arrow annotation or a text markup annotation.
If the annotations are disabled in the current pdf we can skip repopulating "Quick annotations" and in this way we also assure that the enabled/disabled state of the action is preserved upon configuration reparsing.
d->toolsEnabled must be initialized to true, in order to correctly populate the "Quick annotations" action the first time for non-protected pdf, given that setToolsEnabled is called after the first call to populateQuickAnnotations.
BUG: 424296
FIXED-IN: 1.11.0
This fixes the jagged freehand lines problem.
It was caused because tablet events were not accepted, and so were delivered again as mouse event, creating an additional line point slightly offset, causing sharp line angles.
BUG: 410723
FIXED-IN: 1.11