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