From f7af113261f7e899e1d954b0558b2c637a9cced1 Mon Sep 17 00:00:00 2001 From: Vlad Zagorodniy Date: Mon, 4 Mar 2019 16:09:55 +0200 Subject: [PATCH] Properly restore current desktop from session Summary: VirtualDesktopManager is initialized in two places: Workspace::init and Workspace::initWithX11. The former method loads virtual desktops from the config file and the latter method synchronizes VirtualDesktopManager with RootInfo. Both methods do if (!VirtualDesktopManager::self()->setCurrent(m_initialDesktop)) VirtualDesktopManager::self()->setCurrent(1); which makes sense in Workspace::init, but not in Workspace::initWithX11. When Workspace::initWithX11 is called, the current virtual desktop is the same as m_initialDesktop. So that piece of code basically makes the first virtual desktop current no matter what. BUG: 390295 FIXED-IN: 5.15.3 Reviewers: #kwin, davidedmundson Reviewed By: #kwin, davidedmundson Subscribers: kwin Tags: #kwin Differential Revision: https://phabricator.kde.org/D19520 --- workspace.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/workspace.cpp b/workspace.cpp index bb3673d185..a0e6d5dbcc 100644 --- a/workspace.cpp +++ b/workspace.cpp @@ -398,10 +398,10 @@ void Workspace::initWithX11() // TODO: only in X11 mode // Extra NETRootInfo instance in Client mode is needed to get the values of the properties NETRootInfo client_info(connection(), NET::ActiveWindow | NET::CurrentDesktop); - if (!qApp->isSessionRestored()) + if (!qApp->isSessionRestored()) { m_initialDesktop = client_info.currentDesktop(); - if (!VirtualDesktopManager::self()->setCurrent(m_initialDesktop)) - VirtualDesktopManager::self()->setCurrent(1); + vds->setCurrent(m_initialDesktop); + } // TODO: better value rootInfo->setActiveWindow(None);