Commit Graph

1748 Commits (0af7e5564c23c4b34dbea1ae4e31aceff71addc3)

Author SHA1 Message Date
Tor Arne Vestbø 0af7e5564c widgets: Simplify QWidgetRepaintManager::sync
Change-Id: Ifd0cdcd7f4c03112fd93c24707e43273e211f688
Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
2019-08-25 23:14:24 +02:00
Tor Arne Vestbø 36d734b3f8 widgets: Rename markDirtyOnScreen to markNeedsFlush
Including renaming the member touched by this function. This leaves the
logic for appendDirtyOnScreenWidget, which still needs investigating.

Change-Id: I405a5e3757f0a79992f88d9f70867aeb7b9764d8
Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
2019-08-25 23:14:21 +02:00
Tor Arne Vestbø ca3b48539d widgets: Share more code in appendDirtyOnScreenWidget
Change-Id: I0ed936c7d8b004d498a8956b1ba246ade41ce43d
Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
2019-08-25 23:14:17 +02:00
Tor Arne Vestbø 655e8b6eab widgets: Class initialize QWidgetRepaintManager members
Change-Id: Icc06ae8f5f542810d651e4834055cbcd1c1a4e2e
Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
2019-08-25 23:14:13 +02:00
Tor Arne Vestbø 1c2bcdb57a widgets: Rename a few missed uses of QWidgetRepaintManager
Change-Id: Ie28d5dea6fdf1c8728a68d419b487bc5e3e3ee16
Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
2019-08-25 23:14:09 +02:00
Tor Arne Vestbø b553335651 widgets: Remove unused member in QWidgetRepaintManager
Change-Id: I2f7eac2916bdcd9101e96e78a3d7c3c6c395dde7
Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
2019-08-25 23:13:47 +02:00
Tor Arne Vestbø 5bcfe771a5 widgets: Merge QPlatformTextureListWatcher into implementation file
Change-Id: Icf177a5b559bd1c108a66ee14a51fb23cd36e083
Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2019-08-25 23:13:43 +02:00
Tor Arne Vestbø 16868bd6a2 widgets: Clean up and reorder QWidgetRepaintManager implementation
Group functions by related areas and order them roughly by their
flow in a normal app repaint cycle.

Change-Id: I7a963f612134b3fdbaf748e0432606825b8db64e
Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
2019-08-22 12:10:13 +02:00
Marc Mutz 36cf237ea1 QWidget: two small fixes
- Use QPointer::data() instead of a C-style cast

- Remove an abuse of Q_UNLIKELY. Q_UNLIKELY is for error code. Using
  it for conditions that have a good chance of being true in normal
  operations just caused all the error handling code to be paged in
  needlessly.

Change-Id: I542a5b938b032ca84f2cf1f78fbc45049a12ad1a
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
2019-08-22 12:10:10 +02:00
Tor Arne Vestbø a8cc4cea92 widgets: Merge QWidgetRepaintManager::begin/endPaint into callsite
Change-Id: Iff5f78dcc8124bcecf53d42d920e74467937412a
Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
2019-08-22 09:44:53 +02:00
Tor Arne Vestbø a0484b8277 widgets: Rename QWidgetRepaintManager::doSync to paintAndFlush
Change-Id: Ie41bb76d33d59f70eb418f845defc212396d3915
Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
2019-08-22 09:44:42 +02:00
Tor Arne Vestbø 68cc2c2779 widgets: Don't rely on QWidget friending QWidgetRepaintManager
Change-Id: Id9fc28eb62103d38eaa51261f61a2294db85e0d6
Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
2019-08-22 09:44:20 +02:00
Tor Arne Vestbø c937f80fe5 widgets: Simplify QWidgetRepaintManager::qt_flush
No longer static, so we can access the members directly instead of
passing them as arguments. Renamed to flush() while we're at it.
Otherwise no changes to the code, just moved the function.

Change-Id: Id491a8628c8cecf7cf3b33d3458e7427f5bcd22e
Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
2019-08-22 09:44:08 +02:00
Tor Arne Vestbø 44fc2914be Goodbye showYellowThing
The code hasn't been working for at least 5 years, and is just making
the repaint manager more complex. We can always re-introduce the feature
at a later point.

Change-Id: Ib07c782c821f3e653f9452f6fbfe2f87effccc92
Fixes: QTBUG-36435
Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
2019-08-22 09:43:48 +02:00
Friedemann Kleint b455a863a1 Add screen() accessor to QWidget
Base it on QWidgetPrivate::associatedScreen(), but make a larger
effort to find a screen in case the widget is not shown yet.

Rename QDesktopScreenWidget::screen() to something else to avoid
clashes.

Task-number: QTBUG-62094
Task-number: QTBUG-53022
Change-Id: I36ba5ef5f0645a4ac89da0b38a391f7057b2f49c
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
2019-08-21 22:18:52 +02:00
Tor Arne Vestbø ce73b4db62 Remove dead code from Qt 4 times
The benefit of keeping this code around was to inspire or inform
changes in the areas to take into account possibly missing features
in Qt 5, but at this point that benefit is questionable. We can
always use the history to learn about missing pieces if needed.

Change-Id: I87a02dc451e9027be9b97554427bf8a1c6b2c025
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2019-08-20 22:27:46 +00:00
Tor Arne Vestbø 4dab6184f5 widgets: Remove stale documentation of QWidgetRepaintManager::flush
Change-Id: I5c4df4a8694bc56014beaec34a81219d91332fec
Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
2019-08-20 21:09:15 +02:00
Tor Arne Vestbø 5085f8e211 widgets: Remove unused arguments from QWidgetRepaintManager::beginPaint
Change-Id: I3720d8ef31e623e514fc2e382192d3c4f99fb4ed
Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
2019-08-20 21:09:04 +02:00
Tor Arne Vestbø e2a1fb9015 widgets: Remove unused function qt_dirtyRegion
Change-Id: I7e6dbc4fb777a2323d65b73164d8645d6efc95a4
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
2019-08-20 21:08:48 +02:00
Tor Arne Vestbø 38e55a26a4 widgets: Remove dead members from BeginPaintInfo
The flags haven't been used since 2011 (6ce6b8a37) and is dead code.

Change-Id: Ic5c47b30326ff70534bbf1aa37b25bae666b6b96
Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
2019-08-20 21:08:32 +02:00
Tor Arne Vestbø 8f083bade0 Remove dead macOS specific code from QWidgetPaintManager
Change-Id: I8fdde17d32f20407aed44e4708f30db21555b81a
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2019-08-20 11:34:44 +02:00
Tor Arne Vestbø 380dd8cde9 Widgets: Simplify discardSyncRequest
Change-Id: I3bc66a0f958fed44eac5fee6642ef1b00d45a2c4
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2019-08-20 11:34:20 +02:00
Tor Arne Vestbø 14fc3f4b0d Upgrade QWidgetPrivate::DrawWidgetFlag to QFlags
Allows for easier debugging of the paint cycle.

Change-Id: Iab85bccb99198a02f33c0beeccd4e3914375358d
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2019-08-20 11:34:04 +02:00
Tor Arne Vestbø 6d9d4e6817 Rename QWidgetBackingStore to QWidgetRepaintManager
Quoting a blog from 2009, "this class is responsible for figuring out which parts
of the window surface needs to be updated prior to showing it to screen, so it's
really a repaint manager."

https://blog.qt.io/blog/2009/12/16/qt-graphics-and-performance-an-overview/

What better time to do the rename than 10 years later!

Change-Id: Ibf3c3bc8c7df64ac03d72e1f71d296b62d832fee
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2019-08-20 11:33:47 +02:00
Tor Arne Vestbø f4db381169 Get rid of QWidgetBackingStoreTracker
It was added for Symbian almost 10 years ago (d7057e7c1f1a), for a somewhat
dubious use-case. The Symbian code is since long gone (ae30d7141), so the
remaining pieces are just adding complexity to the already intricate workings
of the QtWidgets backingstore/painting logic.

Task-number: QTBUG-8697
Change-Id: I82af610a8ac26719c588ac63f06b4501f59b400d
Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
(cherry picked from commit 2e0b0be2ce)
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2019-08-19 23:20:27 +02:00
Marc Mutz cb3e1e551f QWidgetBackingStore: clean up around dirtyOnScreenWidgets
The QVector dirtyOnScreenWidgets was aggregated by pointer, which
makes no sense, as a QVector is just as large as a pointer (and even
in Qt 6, when it will be larger, it's not going to be horrible). But
this complicated the code quite a bit.

Aggregate by value instead (it's just one of three such vectors now).

Drive-by fixes:

- use QVector::removeAll() instead of rolling your own

- port two indexed loops to ranged ones. In the first case, it's safe,
  as the loop body clearly doesn't touch the iteratee (it's just a
  std::accumulate). In the second, the question no longer applies, as
  we're now using a consume loop.

Change-Id: Icd4ac13bb4a6f9a783f0adf2fb6a5bdfacd1f91a
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2019-08-17 09:51:29 +02:00
Marc Mutz 7ac6cefd8a QWidget: unbreak QT_NO_OPENGL builds
Amends 94d7603d51.

The port from QVector<QPlatformTextureList*> to a container of
unique_ptr<QPlatformTextureList> uncovered that QPlatformTextureList
isn't defined for QT_NO_OPENGL builds.

Some unguarded forward-declarations made the old declaration compile
by accident. The new code caught this, so add the #ifdef that had been
missing all along.

Change-Id: If3b14fc24007b1c917a41ab83343c2e5e65fc643
Reviewed-by: Martin Storsjö <martin@martin.st>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Tasuku Suzuki <tasuku.suzuki@qbc.io>
2019-08-16 23:20:47 +02:00
Marc Mutz 70c624d93e QWidget: replace manual memory management with unique_ptr [5/N]: extra->topextra
It is a bit frustrating that all the initialization and cleanup code
are not in the QTLWExtra ctor and dtor. But that is for another patch.

Change-Id: I0e45f89c1a53eb2f9a5699d3fbbef1a628b55432
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2019-08-16 05:19:04 +00:00
Marc Mutz 45c5cc6199 QWidget: replace manual memory management with unique_ptr [4/N]: extra->curs
Change-Id: Id65ead5563321b8edbe0055ad1531c2442d4d597
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2019-08-16 08:19:01 +03:00
Marc Mutz 19ccbdabfe QWidget: replace manual memory management with unique_ptr [3/N]: topextra->shareContext
Despite the name, it's fully owned by an individual QWidget object.

Also make the member mutable, so we can remove the const_cast hack in
QWidgetPrivate::shareContext(), and protect QT_NO_OPENGL builds, since
the naked pointer compiled by chance due to some unguarded forward
declarations while a unique_ptr will somewhere want to call the dtor,
which doesn't compile on an object of merely forward-declared type.

Change-Id: If8027b55d303822236fcdc1a79e4f3010967b4d2
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2019-08-16 07:18:57 +02:00
Marc Mutz d473f216b9 QWidget: replace manual memory management with unique_ptr [2/N]: topextra->icon
I wonder whether a QIcon could be aggregated here by value,
as it has a null state and its default ctor sets d = nullptr.

Change-Id: I7a0f46e9fdd51a93afb5db768d46d93b08f307ec
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2019-08-14 18:36:27 +00:00
Marc Mutz 94d7603d51 QWidget: replace manual memory management with unique_ptr [1/N]: widgetTextures
Use a vector<unique_ptr> (QVector cannot hold move-only classes), adapt
to different API.

Change-Id: Iece4b1bfcb35a02aac05935963e1e7f8c986b18d
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2019-08-14 20:36:19 +02:00
Liang Qi 1dade1bd8a Merge remote-tracking branch 'origin/5.13' into dev
Conflicts:
	mkspecs/win32-clang-msvc/qmake.conf
	src/corelib/tools/qlist.h
	src/gui/painting/qcompositionfunctions.cpp
	src/gui/painting/qtriangulator_p.h
	src/gui/text/qfontengine_p.h
	src/network/kernel/qhostinfo_p.h
	src/platformsupport/fontdatabases/freetype/qfontengine_ft.cpp

Done-With: Allan Sandfeld Jensen <allan.jensen@qt.io>
Change-Id: Ib8a0308cf77224c4fbdcf56778fdac4a43e37798
2019-08-13 09:46:17 +02:00
Qt Forward Merge Bot 2b38408cbc Merge remote-tracking branch 'origin/5.12' into 5.13
Change-Id: I4c0fd501db974fb8339944b8df845336776d80a9
2019-08-08 01:00:08 +02:00
Tor Arne Vestbø fccb519809 Don't rely on QWidget::internalWinId in QWidgetBackingStore
QWidget does not handle QWindow and QPlatformWindow being destroyed
behind its back, and the QWidget state for internalWinId and the
Qt::WA_WState_Created attribute can easily get out of sync with
reality.

To avoid QWidgetBackingStore mistakenly thinking that a widget does
not have a platform window it can operate on we use the QWindow and
QPlatformWindow handles directly, instead of relying on the winId.

This is a stop gap until we can teach QWidget to deal with dynamic
changes to its underlying window handles.

Change-Id: Ib09bea2ad62c42e9667a20ca6b5faf0f957288da
Fixes: QTBUG-74559
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2019-08-07 13:45:34 +02:00
Sona Kurazyan 1932754e90 Clean up documentation of deprecated APIs from QApplication
Build docs for deprecated APIs conditionally, based on deprecation
version. Remove the docs of methods deprecated since 5.0.0, these
methods are not compiled anymore.

Change-Id: If9302eecc8b3fff4a27c2e4a66ac102add7d66c5
Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io>
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2019-08-01 19:04:19 +02:00
Liang Qi 4aec85b6bb Merge "Merge remote-tracking branch 'origin/5.13' into dev" 2019-07-30 21:41:23 +02:00
Marc Mutz 130fd22d39 QWidget/QLineEdit: deprecate get{Contents,Text}Margins()
We have contentsMargins() and textMargins() methods since 4.6 which
are much more efficient and easier to use.

[ChangeLog][QtWidgets][QLineEdit] The getTextMargins() member function
has been deprecated in favor of textMargins().

[ChangeLog][QtWidgets][QWidget] The getContentsMargins() member
function has been deprecated in favor of contentsMargins().

Change-Id: Ifdb890af6198fc682b94701786c67a5b945a4b4c
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
2019-07-30 22:41:19 +03:00
Liang Qi 71ec1d6d79 Merge remote-tracking branch 'origin/5.13' into dev
Conflicts:
	qmake/generators/win32/mingw_make.cpp

Change-Id: I2f790bc8572bd22fea01edf7ca74595b29f063eb
2019-07-30 13:47:36 +02:00
David Faure 3e7463411e Fix crash when the focus widget gets a focus proxy after the fact
QApplicationPrivate::focus_widget became a dangling pointer
in the following scenario:

A widget first gets focus and later on gets a focus proxy.
QApplicationPrivate::focus_widget was still pointing to the initial widget.
Upon destruction, QWidget::hasFocus() [which follows to the focus proxy
and then compares with focus_widget] was therefore false for both
widgets. So QWidget::clearFocus() didn't call
QApplicationPrivate::setFocusWidget(0) for either of them. As a
result, focus_widget remained set, and became dangling.

In real life, this happened with a QWebEngineView, which the application
gave focus to upon creation. At that time it doesn't have a focus proxy
yet. That happens later, in QWebEngineViewPrivate::widgetChanged.

https://bugs.kde.org/show_bug.cgi?id=381793

Change-Id: Ifee610bb76a2d4d2797b98ece9bffe5fffe3c6a6
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2019-07-29 17:15:02 +02:00
Sona Kurazyan 9c2f18d357 Remove usages of deprecated QApplication::keypadNavigationEnabled
Added QApplicationPrivate::keypadNavigationEnabled() as a
replacement of deprecated QApplication::keypadNavigationEnabled(),
for the internal usage.

Task-number: QTBUG-76491
Change-Id: I75f4c628b72d86b5e428e7e285a786d23abbf3f2
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2019-07-23 20:48:33 +02:00
Qt Forward Merge Bot 64df0eda36 Merge remote-tracking branch 'origin/5.13' into dev
Conflicts:
	src/corelib/global/qlogging.cpp
	src/gui/painting/qtextureglyphcache_p.h
	src/gui/text/qfontengine.cpp
	src/widgets/widgets/qlineedit.cpp

Change-Id: Ic8798538df466b7141caa8bbf1fb7605eb56be37
2019-07-17 10:44:21 +02:00
Qt Forward Merge Bot a3d1fee81b Merge remote-tracking branch 'origin/5.12' into 5.13
Change-Id: I5d2a4fa33b4aa22da39ac045e6b85ab940b8720b
2019-07-13 01:00:21 +02:00
Tor Arne Vestbø 7d3a55cbd2 Remove unused arguments from QWidgetPrivate::create_sys
The public QWidget::create still has them, but we don't need to
propagate them on - that just makes debugging the window creation
flow harder.

The window argument to QWidget::create is technically used to
guard an early exit in the function, but to keep behavior the
same we leave it for now.

Change-Id: Ic0287575aa25f1272e216adc1b75e34d6f55f6d9
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
2019-07-12 14:54:13 +00:00
Shawn Rutledge 7d29807296 Finish deprecating obsolete members of QWheelEvent
In Qt 5.0, delta() and orientation() were already marked obsolete,
but Widgets and tests have kept on depending on them all this time.
We now start using alternative API so they can really be deprecated.
All constructors except the newest one are also deprecated.
The plan is for all events from pointing devices to have
QPointF position() and globalPosition(), so we deprecate
the other position accessors.

[ChangeLog][QtGui] Obsolete constructors and accessors in QWheelEvent
now have proper deprecation macros.  What is left is intended to be
compatible with planned changes in Qt 6.

Change-Id: I26250dc90922b60a6ed20d7f65f38019da3e139e
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
2019-07-12 15:13:01 +02:00
Tor Arne Vestbø deac052a40 Revert "Reset QWidget's winId when backing window surface is destroyed"
This reverts commit a9246c7132.

The QWidget machinery is way to fragile to reset the winId under the
feet of QWidget like that. We would potentially need to include all
the logic in QWidget::destroy. This also ties into the flow between
QtGui and QtWidgets during window closing, which is still unresolved.

Change-Id: I168048a63c89796398eb5331a80ce3e5c8d9a208
Fixes: QTBUG-76588
Task-number: QTBUG-69289
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2019-07-12 14:17:43 +02:00
Qt Forward Merge Bot 77d126ccb5 Merge remote-tracking branch 'origin/5.12' into 5.13
Conflicts:
	configure.pri

Also required s/solid\.color/solidColor/ in a couple of places in:
	src/gui/painting/qpaintengine_raster.cpp

Change-Id: I29937f63e9779deb6dac7ae77e2948d06ebc0319
2019-07-12 12:23:29 +02:00
Friedemann Kleint 85dc392135 QWidget::restoreGeometry(): Fix Windows being restored out of screen area
Factor out the screen area check to a separate helper and apply to
restoredGeometry, too, fixing an oversight of
2f2bfc4e59.

Change-Id: I795d8d5e3cddb5e986c96c08a342d69063d04970
Fixes: QTBUG-76900
Reviewed-by: Gatis Paeglis <gatis.paeglis@qt.io>
2019-07-05 15:39:22 +02:00
Friedemann Kleint f66c22ff5b QWidget::restoreGeometry(): Remove code related to restoredFrameGeometry
restoredFrameGeometry is only used for a sanity check in format
version 0, add a comment and remove code.

Task-number: QTBUG-76900
Change-Id: I797b07d069f8568cb39541bcbe9009935a4a79f7
Reviewed-by: Gatis Paeglis <gatis.paeglis@qt.io>
2019-07-05 15:39:09 +02:00
Liang Qi deee7b7ece Merge remote-tracking branch 'origin/5.13' into dev
Conflicts:
	.qmake.conf
	qmake/generators/makefile.cpp

Change-Id: Ifb2633a69d0bf8cdf12d799c6259beefc279c49e
2019-07-05 15:37:50 +02:00