Fix saving maximized state on Linux

This commit is contained in:
Ilya Fedin 2020-09-18 13:09:05 +04:00 committed by John Preston
parent 70c993774a
commit 4c2779bbaf
4 changed files with 38 additions and 10 deletions

View File

@ -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);

View File

@ -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;

View File

@ -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;

View File

@ -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<void> _dragFinished;
rpl::event_stream<> _leaveEvents;
bool _maximizedBeforeHide = false;
};
} // namespace Window