From 55f7c599300cdcb4e67edf67646bf44fc386c827 Mon Sep 17 00:00:00 2001
From: Olivier Fourdan <fourdan.olivier@wanadoo.fr>
Date: Tue, 14 May 2002 21:16:39 +0000
Subject: [PATCH] Rearrange menu and add a new option "hide all others"

(Old svn revision: 10312)
---
 src/client.c | 29 +++++++++++++++++++++++++++++
 src/client.h |  1 +
 src/events.c |  5 ++++-
 src/menu.c   | 38 ++++++++++++++++++++------------------
 src/menu.h   | 35 ++++++++++++++++++-----------------
 5 files changed, 72 insertions(+), 36 deletions(-)

diff --git a/src/client.c b/src/client.c
index 7a61139f4..47bd13cd8 100644
--- a/src/client.c
+++ b/src/client.c
@@ -1732,6 +1732,35 @@ void clientHide(Client * c, int change_state)
     XFlush (dpy);
 }
 
+void clientHideAll(Client * c)
+{
+    int i;
+    Client *c2;
+    
+    DBG("entering clientHideAll\n");
+
+    for(c2 = c->next, i = 0; i < client_count; c2 = c2->next, i++)
+    {
+        if ((c2 != c) && (c2->type == WINDOW_NORMAL))
+	{
+            if (c)
+	    {
+	        if ((c->transient_for != c2->window) && (c2->transient_for != c->window) && (c2->win_workspace == c->win_workspace))
+		{
+		    clientHide(c2, True);
+		}
+	    }
+	    else
+	    {
+	        if ((c2->transient_for == None) && (c2->win_workspace == workspace))
+		{
+		    clientHide(c2, True);
+		}
+	    }
+	}
+    }
+}
+
 void clientClose(Client * c)
 {
     g_return_if_fail (c != NULL);
diff --git a/src/client.h b/src/client.h
index 86ae97d73..7495a4459 100644
--- a/src/client.h
+++ b/src/client.h
@@ -227,6 +227,7 @@ void clientUngrabKeys(Client *);
 Client *clientGetFromWindow(Window, int);
 void clientShow(Client *, int);
 void clientHide(Client *, int);
+void clientHideAll(Client *);
 void clientClose(Client *);
 void clientKill(Client *);
 void clientRaise(Client *);
diff --git a/src/events.c b/src/events.c
index 0f9fedb2e..4d308bfdb 100644
--- a/src/events.c
+++ b/src/events.c
@@ -870,6 +870,9 @@ static void menu_callback (Menu *menu, MenuOp op, Window client_xwindow, gpointe
         	clientHide(c, True);
 	    }
 	    break;
+	case MENU_OP_MINIMIZE_ALL:
+	    clientHideAll(c);
+	    break;
 	case MENU_OP_UNMINIMIZE:
 	    if (c)
 	    {
@@ -931,7 +934,7 @@ static gboolean show_popup_cb (GtkWidget *widget, GdkEventButton *ev, gpointer d
          c->button_pressed[MENU_BUTTON] = True;
          frameDraw(c);
 	 y = c->y; 
-         ops = MENU_OP_DELETE | MENU_OP_DESTROY;
+         ops = MENU_OP_DELETE | MENU_OP_DESTROY | MENU_OP_MINIMIZE_ALL;
 	 insensitive = 0;
 	 
 	 if (c->win_state & (WIN_STATE_MAXIMIZED | WIN_STATE_MAXIMIZED_HORIZ | WIN_STATE_MAXIMIZED_VERT))
diff --git a/src/menu.c b/src/menu.c
index 5715171cc..8213fc80e 100644
--- a/src/menu.c
+++ b/src/menu.c
@@ -34,26 +34,28 @@
 
 static GtkWidget *menu_open = NULL;
 static MenuItem menuitems[] = {
-    { MENU_OP_MAXIMIZE,   NULL, "Maximize"   },
-    { MENU_OP_UNMAXIMIZE, NULL, "Unmaximize" },
-    { MENU_OP_MINIMIZE,   NULL, "Minimize"   },
-    { MENU_OP_UNMINIMIZE, NULL, "Unminimize" },
-    { MENU_OP_SHADE,      NULL, "Shade"      },
-    { MENU_OP_UNSHADE,    NULL, "Unshade"    },
-    { MENU_OP_STICK,      NULL, "Stick"      },
-    { MENU_OP_UNSTICK,    NULL, "Unstick"    },
-    { MENU_OP_MOVE,       NULL, "Move"       },
-    { MENU_OP_RESIZE,     NULL, "Resize"     },
-    { MENU_OP_SWITCH,     NULL, "Switch"     },
-    { MENU_OP_DELETE,     NULL, "Close"      },
-    { MENU_OP_DESTROY,    NULL, "Destroy"    },
+    { MENU_OP_MAXIMIZE,       NULL, "Maximize"        },
+    { MENU_OP_UNMAXIMIZE,     NULL, "Unmaximize"      },
+    { MENU_OP_MINIMIZE,       NULL, "Hide"	      },
+    { MENU_OP_MINIMIZE_ALL,   NULL, "Hide all others" },
+    { MENU_OP_UNMINIMIZE,     NULL, "Show"	      },
+    { MENU_OP_SHADE,          NULL, "Shade"	      },
+    { MENU_OP_UNSHADE,        NULL, "Unshade"	      },
+    { MENU_OP_STICK,          NULL, "Stick"	      },
+    { MENU_OP_UNSTICK,        NULL, "Unstick"	      },
+    { MENU_OP_MOVE,           NULL, "Move"	      },
+    { MENU_OP_RESIZE,         NULL, "Resize"	      },
+    { MENU_OP_SWITCH,         NULL, "Switch"	      },
+    { MENU_OP_DELETE,         NULL, "Close"	      },
+    { 0,                      NULL,	NULL	      },
+    { MENU_OP_DESTROY,        NULL, "Destroy"	      },
 #if 0
-    { 0,                  NULL,     NULL     },
-    { MENU_OP_WORKSPACES, NULL,  "Workspace" },
-    { 0,                  NULL,     NULL     },
+    { 0,                      NULL,	NULL	      },
+    { MENU_OP_WORKSPACES,     NULL,  "Workspace"      },
+    { 0,                      NULL,	NULL	      },
 #endif
-    { MENU_OP_QUIT,       NULL,  "Quit"      },
-    { MENU_OP_RESTART,    NULL,  "Restart"   },
+    { MENU_OP_QUIT,           NULL,  "Quit"	      },
+    { MENU_OP_RESTART,        NULL,  "Restart"        },
 };
 
 static GtkToXEventFilterStatus menu_filter(XEvent *xevent, gpointer  data)
diff --git a/src/menu.h b/src/menu.h
index 92a47d3a7..36b7eee40 100644
--- a/src/menu.h
+++ b/src/menu.h
@@ -31,23 +31,24 @@
 
 typedef enum 
 {
-  MENU_OP_MAXIMIZE    = 1 << 0,
-  MENU_OP_UNMAXIMIZE  = 1 << 1,
-  MENU_OP_MINIMIZE    = 1 << 2,
-  MENU_OP_UNMINIMIZE  = 1 << 3,
-  MENU_OP_SHADE       = 1 << 4,
-  MENU_OP_UNSHADE     = 1 << 5,
-  MENU_OP_STICK       = 1 << 6,
-  MENU_OP_UNSTICK     = 1 << 7,
-  MENU_OP_MOVE        = 1 << 8,
-  MENU_OP_RESIZE      = 1 << 9,
-  MENU_OP_DELETE      = 1 << 10,
-  MENU_OP_DESTROY     = 1 << 11,
-  MENU_OP_WORKSPACES  = 1 << 12,
-  MENU_OP_QUIT        = 1 << 13,
-  MENU_OP_RESTART     = 1 << 14,
-  MENU_OP_SWITCH      = 1 << 15,
-  MENU_OP_OTHER       = 1 << 16
+  MENU_OP_MAXIMIZE     = 1 << 0,
+  MENU_OP_UNMAXIMIZE   = 1 << 1,
+  MENU_OP_MINIMIZE     = 1 << 2,
+  MENU_OP_MINIMIZE_ALL = 1 << 3,
+  MENU_OP_UNMINIMIZE   = 1 << 4,
+  MENU_OP_SHADE        = 1 << 5,
+  MENU_OP_UNSHADE      = 1 << 6,
+  MENU_OP_STICK        = 1 << 7,
+  MENU_OP_UNSTICK      = 1 << 8,
+  MENU_OP_MOVE         = 1 << 9,
+  MENU_OP_RESIZE       = 1 << 10,
+  MENU_OP_DELETE       = 1 << 11,
+  MENU_OP_DESTROY      = 1 << 12,
+  MENU_OP_WORKSPACES   = 1 << 13,
+  MENU_OP_QUIT         = 1 << 14,
+  MENU_OP_RESTART      = 1 << 15,
+  MENU_OP_SWITCH       = 1 << 16,
+  MENU_OP_OTHER        = 1 << 17
 } MenuOp;
 
 typedef struct _Menu Menu;
-- 
GitLab