diff -dupr a/dlls/winex11.drv/event.c b/dlls/winex11.drv/event.c
--- a/dlls/winex11.drv/event.c	2020-06-19 21:47:21.000000000 +0200
+++ b/dlls/winex11.drv/event.c	2020-07-08 20:41:34.149779408 +0200
@@ -1325,6 +1331,17 @@ static void handle_wm_state_notify( HWND
     }
     else if (!data->iconic && data->wm_state == IconicState)
     {
+        read_net_wm_states( event->display, data );
+        if (!(data->net_wm_state & (1 << NET_WM_STATE_HIDDEN)))
+        {
+             if (IsWindowEnabled( data->hwnd ))
+             {
+                 EnableWindow ( data->hwnd, FALSE );
+                 data->off_desktop = TRUE;
+             }
+             goto done;
+        }
+
         data->iconic = TRUE;
         if ((style & WS_MINIMIZEBOX) && !(style & WS_DISABLED))
         {
@@ -1335,6 +1354,14 @@ static void handle_wm_state_notify( HWND
         }
         TRACE( "not minimizing win %p/%lx style %08x\n", data->hwnd, data->whole_window, style );
     }
+    else if (!data->iconic && data->wm_state == NormalState)
+    {
+        if (data->off_desktop)
+        {
+            EnableWindow ( data->hwnd, TRUE );
+            data->off_desktop = FALSE;
+        }
+    }
 done:
     release_win_data( data );
 }
diff -dupr a/dlls/winex11.drv/x11drv.h b/dlls/winex11.drv/x11drv.h
--- a/dlls/winex11.drv/x11drv.h	2020-06-19 21:47:21.000000000 +0200
+++ b/dlls/winex11.drv/x11drv.h	2020-07-02 14:17:01.328287460 +0200
@@ -441,6 +441,7 @@ enum x11drv_atoms
     XATOM__NET_WM_STATE_ABOVE,
     XATOM__NET_WM_STATE_DEMANDS_ATTENTION,
     XATOM__NET_WM_STATE_FULLSCREEN,
+    XATOM__NET_WM_STATE_HIDDEN,
     XATOM__NET_WM_STATE_MAXIMIZED_HORZ,
     XATOM__NET_WM_STATE_MAXIMIZED_VERT,
     XATOM__NET_WM_STATE_SKIP_PAGER,
@@ -534,6 +535,7 @@ enum x11drv_net_wm_state
 {
     NET_WM_STATE_FULLSCREEN,
     NET_WM_STATE_ABOVE,
+    NET_WM_STATE_HIDDEN,
     NET_WM_STATE_MAXIMIZED,
     NET_WM_STATE_SKIP_PAGER,
     NET_WM_STATE_SKIP_TASKBAR,
@@ -568,6 +568,7 @@ struct x11drv_win_data
     BOOL        managed : 1;    /* is window managed? */
     BOOL        mapped : 1;     /* is window mapped? (in either normal or iconic state) */
     BOOL        iconic : 1;     /* is window in iconic state? */
+    BOOL        off_desktop : 1; /* is window on desktop? */
     BOOL        embedded : 1;   /* is window an XEMBED client? */
     BOOL        shaped : 1;     /* is window using a custom region shape? */
     BOOL        layered : 1;    /* is window layered and with valid attributes? */
diff -dupr a/dlls/winex11.drv/x11drv_main.c b/dlls/winex11.drv/x11drv_main.c
--- a/dlls/winex11.drv/x11drv_main.c	2017-09-01 19:20:52.000000000 +0200
+++ b/dlls/winex11.drv/x11drv_main.c	2017-09-15 22:55:48.064662483 +0200
@@ -143,6 +143,7 @@ static const char * const atom_names[NB_
     "_NET_WM_STATE_ABOVE",
     "_NET_WM_STATE_DEMANDS_ATTENTION",
     "_NET_WM_STATE_FULLSCREEN",
+    "_NET_WM_STATE_HIDDEN",
     "_NET_WM_STATE_MAXIMIZED_HORZ",
     "_NET_WM_STATE_MAXIMIZED_VERT",
     "_NET_WM_STATE_SKIP_PAGER",
--- a/dlls/winex11.drv/window.c	2017-09-01 19:20:52.000000000 +0200
+++ b/dlls/winex11.drv/window.c	2018-02-03 02:56:33.005720389 +0100
@@ -69,6 +69,7 @@ static const unsigned int net_wm_state_a
 {
     XATOM__NET_WM_STATE_FULLSCREEN,
     XATOM__NET_WM_STATE_ABOVE,
+    XATOM__NET_WM_STATE_HIDDEN,
     XATOM__NET_WM_STATE_MAXIMIZED_VERT,
     XATOM__NET_WM_STATE_SKIP_PAGER,
     XATOM__NET_WM_STATE_SKIP_TASKBAR
