diff --git a/kwin.kcfg b/kwin.kcfg index 2ae2b4e2d3..175dc0e4aa 100644 --- a/kwin.kcfg +++ b/kwin.kcfg @@ -59,6 +59,7 @@ + diff --git a/manage.cpp b/manage.cpp index c3e125193d..7e25b70249 100644 --- a/manage.cpp +++ b/manage.cpp @@ -470,7 +470,7 @@ bool Client::manage( Window w, bool isMapped ) break; } if( !belongs_to_desktop && workspace()->showingDesktop()) - workspace()->resetShowingDesktop( false ); + workspace()->resetShowingDesktop( options->showDesktopIsMinimizeAll ); if( isOnCurrentDesktop() && !isMapped && !allow && (!session || session->stackingOrder < 0 )) workspace()->restackClientUnderActive( this ); diff --git a/options.cpp b/options.cpp index 21394a1e61..b1e8a97d59 100644 --- a/options.cpp +++ b/options.cpp @@ -153,6 +153,7 @@ unsigned long Options::updateSettings() killPingTimeout = config->readEntry( "KillPingTimeout", 5000 ); hideUtilityWindowsForInactive = config->readEntry( "HideUtilityWindowsForInactive", QVariant( true)).toBool(); + showDesktopIsMinimizeAll = config->readEntry( "ShowDesktopIsMinimizeAll", false ); // Mouse bindings config->setGroup( "MouseBindings"); diff --git a/options.h b/options.h index d7997a9408..2188a59152 100644 --- a/options.h +++ b/options.h @@ -182,6 +182,8 @@ class Options : public KDecorationOptions * Animation speed (0 .. 10 ) */ int animateMinimizeSpeed; + + bool showDesktopIsMinimizeAll; /** * whether or not we roll over to the other edge when switching desktops past the edge diff --git a/workspace.cpp b/workspace.cpp index fd4fe9815e..7d4dbd6189 100644 --- a/workspace.cpp +++ b/workspace.cpp @@ -2616,7 +2616,10 @@ void Workspace::setShowingDesktop( bool showing ) // Unminimizing a window resets the state but keeps the windows hidden (except // the one that was unminimized). // A new window resets the state and shows the windows again, with the new window -// being active. +// being active. Due to popular demand (#67406) by people who apparently +// don't see a difference between "show desktop" and "minimize all", this is not +// true if "showDesktopIsMinimizeAll" is set in kwinrc. In such case showing +// a new window resets the state but doesn't show windows. void Workspace::resetShowingDesktop( bool keep_hidden ) { if( block_showing_desktop > 0 )