|
47 | 47 | #include <QMenu> |
48 | 48 | #include <QApplication> |
49 | 49 | #include <QWindow> |
| 50 | +#include <QWindowStateChangeEvent> |
50 | 51 |
|
51 | 52 | #include "FloatingDockContainer.h" |
52 | 53 | #include "DockOverlay.h" |
@@ -116,6 +117,7 @@ struct DockManagerPrivate |
116 | 117 | QVector<CFloatingDockContainer*> UninitializedFloatingWidgets; |
117 | 118 | CDockFocusController* FocusController = nullptr; |
118 | 119 | CDockWidget* CentralWidget = nullptr; |
| 120 | + bool IsLeavingMinimized = false; |
119 | 121 |
|
120 | 122 | /** |
121 | 123 | * Private data constructor |
@@ -510,9 +512,10 @@ CDockManager::CDockManager(QWidget *parent) : |
510 | 512 | d->FocusController = new CDockFocusController(this); |
511 | 513 | } |
512 | 514 |
|
513 | | -#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) |
| 515 | + |
514 | 516 | window()->installEventFilter(this); |
515 | 517 |
|
| 518 | +#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) |
516 | 519 | connect(qApp, &QApplication::focusWindowChanged, [](QWindow* focusWindow) |
517 | 520 | { |
518 | 521 | // bring modal dialogs to foreground to ensure that they are in front of any |
@@ -629,8 +632,39 @@ bool CDockManager::eventFilter(QObject *obj, QEvent *e) |
629 | 632 | } |
630 | 633 | return Super::eventFilter(obj, e); |
631 | 634 | } |
| 635 | +#else |
| 636 | +//============================================================================ |
| 637 | +bool CDockManager::eventFilter(QObject *obj, QEvent *e) |
| 638 | +{ |
| 639 | + if (e->type() == QEvent::WindowStateChange) |
| 640 | + { |
| 641 | + QWindowStateChangeEvent* ev = static_cast<QWindowStateChangeEvent*>(e); |
| 642 | + if (ev->oldState().testFlag(Qt::WindowMinimized)) |
| 643 | + { |
| 644 | + d->IsLeavingMinimized = true; |
| 645 | + QMetaObject::invokeMethod(this, "endLeavingMinimizedState", Qt::QueuedConnection); |
| 646 | + } |
| 647 | + } |
| 648 | + return Super::eventFilter(obj, e); |
| 649 | +} |
632 | 650 | #endif |
633 | 651 |
|
| 652 | + |
| 653 | +//============================================================================ |
| 654 | +void CDockManager::endLeavingMinimizedState() |
| 655 | +{ |
| 656 | + d->IsLeavingMinimized = false; |
| 657 | + this->activateWindow(); |
| 658 | +} |
| 659 | + |
| 660 | + |
| 661 | +//============================================================================ |
| 662 | +bool CDockManager::isLeavingMinimizedState() const |
| 663 | +{ |
| 664 | + return d->IsLeavingMinimized; |
| 665 | +} |
| 666 | + |
| 667 | + |
634 | 668 | //============================================================================ |
635 | 669 | void CDockManager::registerFloatingWidget(CFloatingDockContainer* FloatingWidget) |
636 | 670 | { |
|
0 commit comments