]> git.sur5r.net Git - i3/i3/commitdiff
don’t close workspaces which are still visible (multi-monitor)
authorMichael Stapelberg <michael@stapelberg.de>
Fri, 12 Nov 2010 16:34:13 +0000 (17:34 +0100)
committerMichael Stapelberg <michael@stapelberg.de>
Fri, 12 Nov 2010 16:34:13 +0000 (17:34 +0100)
include/workspace.h
src/workspace.c

index 28b7e571395fa8322496040121523e143dec2b60..a2c1836e56d67f3890653dcc92aec76849d40741 100644 (file)
@@ -34,6 +34,7 @@ Con *workspace_get(const char *num);
  *
  */
 void workspace_set_name(Workspace *ws, const char *name);
+#endif
 
 /**
  * Returns true if the workspace is currently visible. Especially important for
@@ -41,9 +42,8 @@ void workspace_set_name(Workspace *ws, const char *name);
  * workspaces.
  *
  */
-bool workspace_is_visible(Workspace *ws);
+bool workspace_is_visible(Con *ws);
 
-#endif
 /** Switches to the given workspace */
 void workspace_show(const char *num);
 
index 81492240a57cf9ecb1cb120793c59f2686d34ed1..06f742d7767e90cac0f0911c29b014897b6473f4 100644 (file)
@@ -80,6 +80,7 @@ void workspace_set_name(Workspace *ws, const char *name) {
         else ws->text_width = 0;
         ws->utf8_name = label;
 }
+#endif
 
 /*
  * Returns true if the workspace is currently visible. Especially important for
@@ -87,10 +88,14 @@ void workspace_set_name(Workspace *ws, const char *name) {
  * workspaces.
  *
  */
-bool workspace_is_visible(Workspace *ws) {
-        return (ws->output != NULL && ws->output->current_workspace == ws);
+bool workspace_is_visible(Con *ws) {
+    Con *output = con_get_output(ws);
+    if (output == NULL)
+        return false;
+    Con *fs = con_get_fullscreen_con(output);
+    LOG("workspace visible? fs = %p, ws = %p\n", fs, ws);
+    return (fs == ws);
 }
-#endif
 
 /*
  * XXX: we need to clean up all this recursive walking code.
@@ -197,8 +202,11 @@ void workspace_show(const char *num) {
 
 
     if (TAILQ_EMPTY(&(old->nodes_head))) {
-        LOG("Closing old workspace (%p / %s), it is empty\n", old, old->name);
-        tree_close(old, false);
+        /* check if this workspace is currently visible */
+        if (!workspace_is_visible(old)) {
+            LOG("Closing old workspace (%p / %s), it is empty\n", old, old->name);
+            tree_close(old, false);
+        }
     }
 
     con_focus(next);