diff --git a/Telegram/SourceFiles/platform/linux/main_window_linux.cpp b/Telegram/SourceFiles/platform/linux/main_window_linux.cpp index 900892f02..32a587f60 100644 --- a/Telegram/SourceFiles/platform/linux/main_window_linux.cpp +++ b/Telegram/SourceFiles/platform/linux/main_window_linux.cpp @@ -461,12 +461,6 @@ void MainWindow::initHook() { handleAppMenuOwnerChanged(service, oldOwner, newOwner); }); - connect( - windowHandle(), - &QWindow::visibleChanged, - this, - [=](bool visible) { handleVisibleChanged(visible); }); - if (AppMenuSupported) { LOG(("Using D-Bus global menu.")); } else { @@ -775,6 +769,9 @@ void MainWindow::createGlobalMenu() { void MainWindow::updateGlobalMenuHook() { } +void MainWindow::handleVisibleChangedHook(bool visible) { +} + #else // DESKTOP_APP_DISABLE_DBUS_INTEGRATION void MainWindow::createGlobalMenu() { @@ -1076,7 +1073,7 @@ void MainWindow::updateGlobalMenuHook() { ForceDisabled(psClearFormat, !markdownEnabled); } -void MainWindow::handleVisibleChanged(bool visible) { +void MainWindow::handleVisibleChangedHook(bool visible) { if (AppMenuSupported && !_mainMenuPath.path().isEmpty()) { if (visible) { RegisterAppMenu(winId(), _mainMenuPath); diff --git a/Telegram/SourceFiles/platform/linux/main_window_linux.h b/Telegram/SourceFiles/platform/linux/main_window_linux.h index 0190b4262..143c47234 100644 --- a/Telegram/SourceFiles/platform/linux/main_window_linux.h +++ b/Telegram/SourceFiles/platform/linux/main_window_linux.h @@ -41,6 +41,7 @@ protected: void initHook() override; void unreadCounterChangedHook() override; void updateGlobalMenuHook() override; + void handleVisibleChangedHook(bool visible) override; void initTrayMenuHook() override; bool hasTrayIcon() const override; @@ -67,7 +68,6 @@ private: void updateIconCounters(); void updateWaylandDecorationColors(); - void handleVisibleChanged(bool visible); #ifndef DESKTOP_APP_DISABLE_DBUS_INTEGRATION StatusNotifierItem *_sniTrayIcon = nullptr; diff --git a/Telegram/SourceFiles/window/main_window.cpp b/Telegram/SourceFiles/window/main_window.cpp index 6c87c1b87..8fe85f397 100644 --- a/Telegram/SourceFiles/window/main_window.cpp +++ b/Telegram/SourceFiles/window/main_window.cpp @@ -236,6 +236,11 @@ void MainWindow::init() { &QWindow::windowStateChanged, this, [=](Qt::WindowState state) { handleStateChanged(state); }); + connect( + windowHandle(), + &QWindow::visibleChanged, + this, + [=](bool visible) { handleVisibleChanged(visible); }); updatePalette(); @@ -278,6 +283,19 @@ void MainWindow::handleActiveChanged() { }); } +void MainWindow::handleVisibleChanged(bool visible) { + if (visible) { + if (_maximizedBeforeHide) { + DEBUG_LOG(("Window Pos: Window was maximized before hidding, setting maximized.")); + setWindowState(Qt::WindowMaximized); + } + } else { + _maximizedBeforeHide = cWindowPos().maximized; + } + + handleVisibleChangedHook(visible); +} + void MainWindow::updatePalette() { Ui::ForceFullRepaint(this); @@ -521,8 +539,15 @@ void MainWindow::updateUnreadCounter() { } void MainWindow::savePosition(Qt::WindowState state) { - if (state == Qt::WindowActive) state = windowHandle()->windowState(); - if (state == Qt::WindowMinimized || !positionInited()) return; + if (state == Qt::WindowActive) { + state = windowHandle()->windowState(); + } + + if (state == Qt::WindowMinimized + || !isVisible() + || !positionInited()) { + return; + } auto savedPosition = cWindowPos(); auto realPosition = savedPosition; diff --git a/Telegram/SourceFiles/window/main_window.h b/Telegram/SourceFiles/window/main_window.h index 9483e30e7..264782419 100644 --- a/Telegram/SourceFiles/window/main_window.h +++ b/Telegram/SourceFiles/window/main_window.h @@ -124,6 +124,7 @@ protected: void savePosition(Qt::WindowState state = Qt::WindowActive); void handleStateChanged(Qt::WindowState state); void handleActiveChanged(); + void handleVisibleChanged(bool visible); virtual void initHook() { } @@ -134,6 +135,9 @@ protected: virtual void handleActiveChangedHook() { } + virtual void handleVisibleChangedHook(bool visible) { + } + virtual void clearWidgetsHook() { } @@ -210,6 +214,8 @@ private: base::Observable _dragFinished; rpl::event_stream<> _leaveEvents; + bool _maximizedBeforeHide = false; + }; } // namespace Window