aboutsummaryrefslogtreecommitdiff
path: root/src/gui
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui')
-rw-r--r--src/gui/kwindowconfig.cpp86
1 files changed, 59 insertions, 27 deletions
diff --git a/src/gui/kwindowconfig.cpp b/src/gui/kwindowconfig.cpp
index 98fb5165..7a47b17a 100644
--- a/src/gui/kwindowconfig.cpp
+++ b/src/gui/kwindowconfig.cpp
@@ -32,6 +32,42 @@ static QString allConnectedScreens()
return names.join(QLatin1Char(' '));
}
+// Convenience function to get an appropriate config file key under which to
+// save window size, position, or maximization information.
+static QString configFileString(const QRect &desk, const QString &key)
+{
+ // We include resolution data to also save data on a per-resolution basis
+ const QString returnString = QStringLiteral("%1 %2 %3x%4").arg(allConnectedScreens()).arg(key).arg(desk.width()).arg(desk.height());
+ return returnString;
+}
+
+// Convenience function for "window is maximized" string
+static QString screenMaximizedString(const QRect &desk)
+{
+ return configFileString(desk, QStringLiteral("Window-Maximized"));
+}
+// Convenience function for window width string
+static QString windowWidthString(const QRect &desk)
+{
+ return configFileString(desk, QStringLiteral("Width"));
+}
+// Convenience function for window height string
+static QString windowHeightString(const QRect &desk)
+{
+ return configFileString(desk, QStringLiteral("Height"));
+}
+// Convenience function for window X position string
+static QString windowXPositionString(const QRect &desk)
+{
+ return configFileString(desk, QStringLiteral("XPosition"));
+}
+// Convenience function for window Y position string
+static QString windowYPositionString(const QRect &desk)
+{
+ return configFileString(desk, QStringLiteral("YPosition"));
+}
+
+
void KWindowConfig::saveWindowSize(const QWindow *window, KConfigGroup &config, KConfigGroup::WriteConfigFlags options)
{
// QWindow::screen() shouldn't return null, but it sometimes does due to bugs.
@@ -43,30 +79,23 @@ void KWindowConfig::saveWindowSize(const QWindow *window, KConfigGroup &config,
const QSize sizeToSave = window->size();
const bool isMaximized = window->windowState() & Qt::WindowMaximized;
- // Prepend the names of all connected screens so that we save the size
- // on a per-screen-arrangement basis, since people often like to have
- // windows laid out differently depending on their screen arrangements
- const QString allScreens = allConnectedScreens();
- const QString screenMaximizedString(allScreens + QStringLiteral(" Window-Maximized %1x%2").arg(desk.width()).arg(desk.height()));
// Save size only if window is not maximized
if (!isMaximized) {
const QSize defaultSize(window->property(s_initialSizePropertyName).toSize());
const QSize defaultScreenSize(window->property(s_initialScreenSizePropertyName).toSize());
const bool sizeValid = defaultSize.isValid() && defaultScreenSize.isValid();
if (!sizeValid || (sizeValid && (defaultSize != sizeToSave || defaultScreenSize != desk.size()))) {
- const QString wString(allScreens + QStringLiteral(" Width %1").arg(desk.width()));
- const QString hString(allScreens + QStringLiteral(" Height %1").arg(desk.height()));
- config.writeEntry(wString, sizeToSave.width(), options);
- config.writeEntry(hString, sizeToSave.height(), options);
+ config.writeEntry(windowWidthString(desk), sizeToSave.width(), options);
+ config.writeEntry(windowHeightString(desk), sizeToSave.height(), options);
// Don't keep the maximized string in the file since the window is
// no longer maximized at this point
- config.deleteEntry(screenMaximizedString);
+ config.deleteEntry(screenMaximizedString(desk));
}
}
- if ((isMaximized == false) && !config.hasDefault(screenMaximizedString)) {
- config.revertToDefault(screenMaximizedString);
+ if ((isMaximized == false) && !config.hasDefault(screenMaximizedString(desk))) {
+ config.revertToDefault(screenMaximizedString(desk));
} else {
- config.writeEntry(screenMaximizedString, isMaximized, options);
+ config.writeEntry(screenMaximizedString(desk), isMaximized, options);
}
}
@@ -81,13 +110,14 @@ void KWindowConfig::restoreWindowSize(QWindow *window, const KConfigGroup &confi
// Fall back to non-per-screen-arrangement info if it's available but
// per-screen-arrangement information is not
+ // TODO: Remove in KF6 or maybe even KF5.80 or something. It really only needs
+ // to be here to transition existing users once they upgrade from 5.73 -> 5.74
const int fallbackWidth = config.readEntry(QStringLiteral("Width %1").arg(desk.width()), window->size().width());
const int fallbackHeight = config.readEntry(QStringLiteral("Height %1").arg(desk.height()), window->size().height());
- const QString allScreens = allConnectedScreens();
- const int width = config.readEntry(allScreens + QStringLiteral(" Width %1").arg(desk.width()), fallbackWidth);
- const int height = config.readEntry(allScreens + QStringLiteral(" Height %1").arg(desk.height()), fallbackHeight);
- const bool isMaximized = config.readEntry(allScreens + QStringLiteral(" Window-Maximized %1x%2").arg(desk.width()).arg(desk.height()), false);
+ const int width = config.readEntry(windowWidthString(desk), fallbackWidth);
+ const int height = config.readEntry(windowHeightString(desk), fallbackHeight);
+ const bool isMaximized = config.readEntry(configFileString(desk, QStringLiteral("Window-Maximized")), false);
// Check default size
const QSize defaultSize(window->property(s_initialSizePropertyName).toSize());
@@ -112,12 +142,9 @@ void KWindowConfig::saveWindowPosition(const QWindow *window, KConfigGroup &conf
return;
}
- // Prepend the names of all connected screens so that we save the position
- // on a per-screen-arrangement basis, since people often like to have
- // windows positioned differently depending on their screen arrangements
- const QString allScreens = allConnectedScreens();
- config.writeEntry(allScreens + QStringLiteral(" XPosition"), window->x(), options);
- config.writeEntry(allScreens + QStringLiteral(" YPosition"), window->y(), options);
+ const QRect desk = window->screen()->geometry();
+ config.writeEntry(windowXPositionString(desk), window->x(), options);
+ config.writeEntry(windowYPositionString(desk), window->y(), options);
}
void KWindowConfig::restoreWindowPosition(QWindow *window, const KConfigGroup &config)
@@ -129,8 +156,7 @@ void KWindowConfig::restoreWindowPosition(QWindow *window, const KConfigGroup &c
}
const QRect desk = window->screen()->geometry();
- const QString allScreens = allConnectedScreens();
- const bool isMaximized = config.readEntry(allScreens + QStringLiteral(" Window-Maximized %1x%2").arg(desk.width()).arg(desk.height()), false);
+ const bool isMaximized = config.readEntry(configFileString(desk, QStringLiteral("Window-Maximized")), false);
// Don't need to restore position if the window was maximized
if (isMaximized) {
@@ -138,8 +164,14 @@ void KWindowConfig::restoreWindowPosition(QWindow *window, const KConfigGroup &c
return;
}
- const int xPos = config.readEntry(allScreens + QStringLiteral(" XPosition"), -1);
- const int yPos = config.readEntry(allScreens + QStringLiteral(" YPosition"), -1);
+ // Fall back to non-per-resolution info if it's available but
+ // per-resolution information is not
+ // TODO: Remove in KF6 or maybe even KF5.85 or something. It really only needs
+ // to be here to transition existing users once they upgrade from 5.78 -> 5.79
+ const int fallbackXPosition = config.readEntry(QStringLiteral("%1 XPosition %2").arg(allConnectedScreens()).arg(desk.width()), window->size().width());
+ const int fallbackYPosition = config.readEntry(QStringLiteral("%1 YPosition %2").arg(allConnectedScreens()).arg(desk.height()), window->size().height());
+ const int xPos = config.readEntry(windowXPositionString(desk), fallbackXPosition);
+ const int yPos = config.readEntry(windowYPositionString(desk), fallbackYPosition);
if (xPos == -1 || yPos == -1) {
return;