/** Create a new window menu. */ Menu *CreateWindowMenu(void) { Menu *menu; menu = Allocate(sizeof(Menu)); menu->itemHeight = 0; menu->items = NULL; menu->label = NULL; /* Note that items are added in reverse order of display. */ if(!(client->state.status & STAT_WMDIALOG)) { AddWindowMenuItem(menu, _("Close"), MA_CLOSE, 0); AddWindowMenuItem(menu, _("Kill"), MA_KILL, 0); AddWindowMenuItem(menu, NULL, MA_NONE, 0); } if(!(client->state.status & (STAT_FULLSCREEN | STAT_MINIMIZED) || client->state.maxFlags)) { if(client->state.status & (STAT_MAPPED | STAT_SHADED)) { if(client->state.border & BORDER_RESIZE) { AddWindowMenuItem(menu, _("Resize"), MA_RESIZE, 0); } if(client->state.border & BORDER_MOVE) { AddWindowMenuItem(menu, _("Move"), MA_MOVE, 0); } } } if(client->state.status & STAT_MINIMIZED) { AddWindowMenuItem(menu, _("Restore"), MA_RESTORE, 0); } else if(client->state.border & BORDER_MIN) { AddWindowMenuItem(menu, _("Minimize"), MA_MINIMIZE, 0); } if(!(client->state.status & STAT_FULLSCREEN)) { if(client->state.status & STAT_SHADED) { AddWindowMenuItem(menu, _("Unshade"), MA_SHADE, 0); } else if(client->state.border & BORDER_SHADE) { AddWindowMenuItem(menu, _("Shade"), MA_SHADE, 0); } if((client->state.border & BORDER_MAX) && (client->state.status & (STAT_MAPPED | STAT_SHADED))) { if(!(client->state.maxFlags & MAX_VERT)) { AddWindowMenuItem(menu, _("Maximize-y"), MA_MAXIMIZE_V, 0); } if(!(client->state.maxFlags & MAX_HORIZ)) { AddWindowMenuItem(menu, _("Maximize-x"), MA_MAXIMIZE_H, 0); } if(client->state.maxFlags) { AddWindowMenuItem(menu, _("Restore"), MA_MAXIMIZE, 0); } else { AddWindowMenuItem(menu, _("Maximize"), MA_MAXIMIZE, 0); } } } if(!(client->state.status & STAT_WMDIALOG)) { if(settings.desktopCount > 1) { if(client->state.status & STAT_STICKY) { AddWindowMenuItem(menu, _("Unstick"), MA_STICK, 0); } else { AddWindowMenuItem(menu, _("Stick"), MA_STICK, 0); } } CreateWindowLayerMenu(menu); if(settings.desktopCount > 1) { if(!(client->state.status & STAT_STICKY)) { CreateWindowSendToMenu(menu); } } } return menu; }
/** Create a new window menu. */ Menu *CreateWindowMenu(ClientNode *np) { Menu *menu; menu = CreateMenu(); /* Note that items are added in reverse order of display. */ if(!(np->state.status & STAT_WMDIALOG)) { AddWindowMenuItem(menu, _("Close"), MA_CLOSE, np, 0); AddWindowMenuItem(menu, _("Kill"), MA_KILL, np, 0); AddWindowMenuItem(menu, NULL, MA_NONE, np, 0); } if(!(np->state.status & (STAT_FULLSCREEN | STAT_MINIMIZED) || np->state.maxFlags)) { if(np->state.status & (STAT_MAPPED | STAT_SHADED)) { if(np->state.border & BORDER_RESIZE) { AddWindowMenuItem(menu, _("Resize"), MA_RESIZE, np, 0); } if(np->state.border & BORDER_MOVE) { AddWindowMenuItem(menu, _("Move"), MA_MOVE, np, 0); } } } if((np->state.border & BORDER_MIN) && !(np->state.status & STAT_MINIMIZED)) { AddWindowMenuItem(menu, _("Minimize"), MA_MINIMIZE, np, 0); } if(!(np->state.status & STAT_FULLSCREEN)) { if(!(np->state.status & STAT_MINIMIZED)) { if(np->state.status & STAT_SHADED) { AddWindowMenuItem(menu, _("Unshade"), MA_SHADE, np, 0); } else if(np->state.border & BORDER_SHADE) { AddWindowMenuItem(menu, _("Shade"), MA_SHADE, np, 0); } } if(np->state.border & BORDER_MAX) { if(np->state.status & STAT_MINIMIZED || !(np->state.maxFlags & MAX_VERT) || np->state.maxFlags & MAX_HORIZ) { AddWindowMenuItem(menu, _("Maximize-y"), MA_MAXIMIZE_V, np, 0); } if(np->state.status & STAT_MINIMIZED || !(np->state.maxFlags & MAX_HORIZ) || np->state.maxFlags & MAX_VERT) { AddWindowMenuItem(menu, _("Maximize-x"), MA_MAXIMIZE_H, np, 0); } if(np->state.status & STAT_MINIMIZED || !(np->state.maxFlags & (MAX_VERT | MAX_HORIZ))) { AddWindowMenuItem(menu, _("Maximize"), MA_MAXIMIZE, np, 0); } if(!(np->state.status & STAT_MINIMIZED)) { if((np->state.maxFlags & MAX_HORIZ) && (np->state.maxFlags & MAX_VERT)) { AddWindowMenuItem(menu, _("Restore"), MA_MAXIMIZE, np, 0); } else if(np->state.maxFlags & MAX_VERT) { AddWindowMenuItem(menu, _("Restore"), MA_MAXIMIZE_V, np, 0); } else if(np->state.maxFlags & MAX_HORIZ) { AddWindowMenuItem(menu, _("Restore"), MA_MAXIMIZE_H, np, 0); } } } } if(np->state.status & STAT_MINIMIZED) { AddWindowMenuItem(menu, _("Restore"), MA_RESTORE, np, 0); } if(!(np->state.status & STAT_WMDIALOG)) { if(settings.desktopCount > 1) { if(np->state.status & STAT_STICKY) { AddWindowMenuItem(menu, _("Unstick"), MA_STICK, np, 0); } else { AddWindowMenuItem(menu, _("Stick"), MA_STICK, np, 0); } } CreateWindowLayerMenu(menu, np); if(settings.desktopCount > 1) { if(!(np->state.status & STAT_STICKY)) { CreateWindowSendToMenu(menu, np); } } } return menu; }