Commit Graph

3051 Commits

Author SHA1 Message Date
Sergio Martins
86bceb4c48 nested mdi: Fix detaching inner dock widgets
Only the outter-most MDI frame is dragged in MDI mode. The inner ones
are dragged in normal docking mode, they become real floating windows.
2022-01-23 21:46:37 +00:00
Sergio Martins
66b0ba8902 Added MDIArea::frames() 2022-01-23 21:46:37 +00:00
Sergio Martins
18457d80aa nested mdi: Get rid of unneeded drop area mdi wrapper when floating
When floating, the FloatingWindow has its own DropArea for nesting.
We delete the redundant level of wrappers when floating.
2022-01-23 21:46:37 +00:00
Sergio Martins
95c12dbd4c nested mdi: Fix floating picking the wrong title bar
Use DockWidget::titleBar() which will always travel the hierarchy
and pick the first visible title bar. We have more nesting now.
2022-01-23 21:46:37 +00:00
Sergio Martins
c7682a3524 Use QScopedValueRollback, it's more expressive 2022-01-23 21:46:37 +00:00
Sergio Martins
4922363e71 Simplify expression 2022-01-23 21:46:37 +00:00
Sergio Martins
68e01c70ee nested mdi: Delete wrappers once we close the last nested DW 2022-01-23 21:46:37 +00:00
Sergio Martins
296b2a3370 nested mdi: Fix MDI's frame title not being updated
Before we didn't need to update it because there was only 1
dock widget. But now, if there's more than one we need to set the
application's name instead of the dock widget's name as title.
2022-01-23 21:46:37 +00:00
Sergio Martins
074bc26be9 Added DropArea::mdiDockWidgetWrapper() 2022-01-23 21:46:37 +00:00
Sergio Martins
f8e6ecf821 Remove DropArea::setIsMDIWrapper(), use ctor instead
This propery is meant to be set only once, so enforce it via
compiler.
2022-01-23 21:46:37 +00:00
Sergio Martins
3e70a2cc71 nested mdi: Added DockWidgetBase::Private::isMDIWrapper 2022-01-23 21:46:37 +00:00
Sergio Martins
65ced9604f nested mdi: Fixed title bar visibility
When there's only one docked widget we only show 1 title bar.
Just like happens with a FloatingWindow
2022-01-23 21:46:37 +00:00
Sergio Martins
45b0536c6a Added DropArea::hasSingleFrame()
For readability
2022-01-23 21:46:37 +00:00
Sergio Martins
8c8f5a8fda Introduce Option_MDINestable
Should allow MDI dock widgets to also accept drops.
Befor, each MDI "window" only had 1 dock widget, but now each
MDI "window" a layout of dock widgets.

This is implemented by nesting the actual dock widget inside
a wrapper drop area. This drop area gives the drop support.

There's still bugs and more tests to fix before merging.
2022-01-23 21:46:37 +00:00
Mauro Persano
f13f0129d4 Add API to set center widget margins on MainWindow
We can't change the margins by subclassing MainWindow and overriding
centerWidgetMargins, since the margins are initialized in MainWindow's
constructor. This adds public API to MainWindow to allow us to change
the margins later on.
2022-01-20 22:37:36 +00:00
Sergio Martins
22ffc6c7ea Fix QtQuick build 2022-01-20 22:37:36 +00:00
Mauro Persano
d1767b5534 Don't render frame for central persistent widget
When the main window has a central persistent widget, make sure the
containing tab widget doesn't render a frame around it.
2022-01-20 22:08:17 +00:00
Allen Winter
2fbe4f872e Merge branch '1.5' 2022-01-20 08:15:23 -05:00
Allen Winter
93e60a743e update copyright year 2022-01-20 08:05:26 -05:00
Allen Winter
328a14b46a src/private/FloatingWindow.cpp - fix compile with mingw
NOMINMAX should only be defined with MSVC on Windows.
2022-01-20 07:50:24 -05:00
Sergio Martins
16c43b8c24 Make cmake config file honour KDDockWidgets_X11EXTRAS 2022-01-12 09:55:02 +00:00
Sergio Martins
1d8fad245a Fix build with 5.12
This is a special request from a customer who can't upgrade right
now.

Min is still 5.15 in CMakeLists.
2022-01-07 17:55:53 +00:00
Sergio Martins
789c531f3d Fix parent of the MDIArea layout
Fixes tests on QtQuick. On QtWidgets it would get reparented
so tests already passed.
2022-01-07 17:45:37 +00:00
Sergio Martins
402f0b9d90 Add a fwd header for MDIArea.h 2022-01-07 17:27:45 +00:00
Sergio Martins
37567d3980 Introduce MDIArea, a widget that can host MDI dock widgets
This is a public wrapper to MDILayoutWidget. The latter is private
and has internals we don't want to expose. Instead create a public
class with a thin API.

You no longer need to create a MainWindowMDI to have MDI support.
You can now have a normal MainWindow (with normal docking) and
add some dock widget that as a MDIArea as widget.
2022-01-07 17:13:16 +00:00
Sergio Martins
6cef4cea2c Port frameParent() to firstParentOfType() 2022-01-07 14:59:33 +00:00
Sergio Martins
00a0e455e7 Make MDILayoutWidget::addDockWidget's initial opt param optional
It's seldom needed
2022-01-07 12:41:24 +00:00
Sergio Martins
d5c7fbfedd Install MDILayoutWidget_p.h too 2022-01-07 12:32:39 +00:00
Allen Winter
0adb130d4b src/private/FloatingWindow.cpp - on Windows, define NOMINMAX
else windows.h will define the max() macro which doesn't
play nice with the std::numeric_limits::max()

Issue #266
2021-12-27 08:09:09 -05:00
Allen Winter
92d0d74641 src/private/FloatingWindow.cpp - on Windows, define NOMINMAX
else windows.h will define the max() macro which doesn't
play nice with the std::numeric_limits::max()

Issue #266
2021-12-27 07:56:00 -05:00
Sergio Martins
4d4f2a0183 Merge branch '1.5' 2021-12-22 17:07:24 +00:00
Alistair Baxter
f1e19ec59c Ensure that floating windows are not positioned off-screen when they are shown
At points when a Rect is to be used to position a floating widget,
test to see if it overlaps any of the system's screens.

If it does not, adjust the Rect to within the closest screen edges.
2021-12-22 16:48:45 +00:00
Eism
336f1146d3 Fixed the restoration of geometry when user closed maximized window 2021-12-22 15:31:26 +00:00
Mauro Persano
29b1a434c4 Make lazy resize rubber bands optionally top-level
To workaround MFC bug
2021-12-14 11:32:45 +00:00
Sergio Martins
b20ce0895b X11: Add support for robust z-order detection
Qt doesn't provide any way to know which window is directly
bellow the cursor. Generally this is fine since floating windows
are always on top of the main window. However, if Qt::Tool is removed,
then they can be behind, and KDDW can't know which window to overlay
the drop indicators onto.

This patch uses XLib's XQueryTree to solve this.
This is still experimental, hence disabled by default.

For now it's disabled by default, since it's experimental.
You can turn it on by passing -DKDDockWidgets_XLib=ON

Fixes bug #256
2021-11-25 20:59:16 +00:00
Sergio Martins
e67f55af51 Minor: Added Utils::isXCB() 2021-11-25 17:22:58 +00:00
Sergio Martins
fc172b66f8 Explain that changing window manager flags isn't portable
This restriction comes from Qt itself, not from KDDW.
Relates to bug #256

I will however try to reproduce it
2021-11-24 11:16:36 +00:00
Sergio Martins
c8b22e7ea5 Fix "Unpin" button not showing up in overlayed widgets 2021-11-18 12:15:23 +00:00
Sergio Martins
3e21787efb qtquick: Fully qualify setPersistentCentralWidget() arguments
So it works from QtQuick too
2021-11-17 14:13:01 +00:00
Sergio Martins
ea6adafc13 Fix QtQuick build
Fixes #254
2021-11-09 09:45:15 +00:00
Sergio Martins
0cee15c0d3 Don't do relative positioning restore if main window changed screen
We only shift floating windows position for simple cases.
Fixes floating windows being restored out of bounds in some cases.
2021-11-02 19:11:29 +00:00
Sergio Martins
4b56a336a0 Fix build on macOS 2021-10-19 14:34:27 +01:00
Sergio Martins
56bec0db04 Replace KDDOCKWIDGETS_RUBBERBAND_IS_TOPLEVEL with config option
This way one doesn't need to rebuild KDDW to make the rubber band
top-level.

Added it as internal option, as this will seldom be used.
2021-10-17 11:17:41 +01:00
Sergio Martins
a5f37f851b Fix relative inner resizing not working properly
When we resize the main window then we also resize the inner
dock widgets in the same proportion (based on saved percentages),
during a resize we should not recompute those percentages due to
rounding errors.

They were being recomputed by mistake, since only the root Item
was blocking them, but the function recurses into inner items

Fixes #186
2021-10-13 18:33:45 +01:00
Sergio Martins
0e866079da qtquick: Fix parentChanged() passing the wrong argument
QQuickItem::parentChanged(QQuickItem *parent) passes the *new*
parent, not *this*

Fixes #243 which is actually invalid, but uncovered this bug.
For #243 you can just use sender(), or connect to a lambda that
captures the dock widget.
2021-10-12 11:46:16 +01:00
Sergio Martins
a8bd6ba840 Fix corrupt layout when restoring old JSON
If the old *.json file doesn't know about some new docked widget
then we need to float it before restoring the main window

Fixes #237
2021-10-12 11:16:15 +01:00
Allen Winter
463dd2261e various - spelling fixes 2021-09-28 16:45:44 -04:00
Sergio Martins
33c5647e57 Don't create duplicate central frame with restoring
When using MainWindowOption_HasCentralFrame we have a persistent
central frame which is never destroyed. When restoring a layout
we shouldn't create it, as it exists already.
2021-09-20 12:26:45 +01:00
Waqar Ahmed
7af2095f2f Allow switching tabs via context menu in the tabs area
This change allows you to switch tabs via the context menu. The context
menu only shows up if you click on the empty area beside the tabs.

Can be tested with `--allow-switch-tabs-via-menu` option in the example.

Fixes #232
Signed-off-by: Waqar Ahmed <waqar.ahmed@kdab.com>
2021-09-11 12:46:23 +01:00
Waqar Ahmed
13fe276dbe Fix possible division by zero 2021-09-11 12:05:00 +01:00