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 )