mirror of
https://github.com/gryf/wmaker.git
synced 2025-12-19 20:38:08 +01:00
Clip, Dock and Drawers menu moved to appropriate global namespace
The clip, dock, workspaces and drawers menus are common for all workspaces, so they should be included in the global namespace instead of the screen struct.
This commit is contained in:
committed by
Carlos R. Mafra
parent
9c252988f8
commit
e86b8dcb2f
@@ -493,8 +493,23 @@ extern struct wmaker_global_variables {
|
||||
|
||||
/* Menus */
|
||||
struct WMenu *menu; /* workspace operation */
|
||||
struct WMenu *submenu; /* workspace list for window_menu */
|
||||
} workspace;
|
||||
|
||||
/* Clip related */
|
||||
struct {
|
||||
struct WMenu *menu; /* Menu for clips */
|
||||
struct WMenu *submenu; /* Workspace list for clips */
|
||||
struct WMenu *opt_menu; /* Options for Clip */
|
||||
struct WMenu *ws_menu; /* workspace menu for clip */
|
||||
} clip;
|
||||
|
||||
/* Dock related */
|
||||
struct {
|
||||
struct WMenu *pos_menu; /* menu for position of the dock */
|
||||
struct WMenu *drawer_menu; /* menu for the drawers */
|
||||
} dock;
|
||||
|
||||
/* definition for X Atoms */
|
||||
struct {
|
||||
|
||||
|
||||
@@ -1204,12 +1204,12 @@ void wReadDefaults(WScreen * scr, WMPropList * new_dict)
|
||||
if (needs_refresh & REFRESH_WORKSPACE_MENU) {
|
||||
if (w_global.workspace.menu)
|
||||
wWorkspaceMenuUpdate(scr, w_global.workspace.menu);
|
||||
if (scr->clip_ws_menu)
|
||||
wWorkspaceMenuUpdate(scr, scr->clip_ws_menu);
|
||||
if (scr->workspace_submenu)
|
||||
scr->workspace_submenu->flags.realized = 0;
|
||||
if (scr->clip_submenu)
|
||||
scr->clip_submenu->flags.realized = 0;
|
||||
if (w_global.clip.ws_menu)
|
||||
wWorkspaceMenuUpdate(scr, w_global.clip.ws_menu);
|
||||
if (w_global.workspace.submenu)
|
||||
w_global.workspace.submenu->flags.realized = 0;
|
||||
if (w_global.clip.submenu)
|
||||
w_global.clip.submenu->flags.realized = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
48
src/dock.c
48
src/dock.c
@@ -1186,18 +1186,18 @@ static WMenu *dockMenuCreate(WScreen *scr, int type)
|
||||
WMenu *menu;
|
||||
WMenuEntry *entry;
|
||||
|
||||
if (type == WM_CLIP && scr->clip_menu)
|
||||
return scr->clip_menu;
|
||||
if (type == WM_CLIP && w_global.clip.menu)
|
||||
return w_global.clip.menu;
|
||||
|
||||
if (type == WM_DRAWER && scr->drawer_menu)
|
||||
return scr->drawer_menu;
|
||||
if (type == WM_DRAWER && w_global.dock.drawer_menu)
|
||||
return w_global.dock.drawer_menu;
|
||||
|
||||
menu = wMenuCreate(scr, NULL, False);
|
||||
if (type == WM_DOCK) {
|
||||
entry = wMenuAddCallback(menu, _("Dock position"), NULL, NULL);
|
||||
if (scr->dock_pos_menu == NULL)
|
||||
scr->dock_pos_menu = makeDockPositionMenu(scr);
|
||||
wMenuEntrySetCascade(menu, entry, scr->dock_pos_menu);
|
||||
if (w_global.dock.pos_menu == NULL)
|
||||
w_global.dock.pos_menu = makeDockPositionMenu(scr);
|
||||
wMenuEntrySetCascade(menu, entry, w_global.dock.pos_menu);
|
||||
|
||||
if (!wPreferences.flags.nodrawer) {
|
||||
entry = wMenuAddCallback(menu, _("Add a drawer"), addADrawerCallback, NULL);
|
||||
@@ -1208,10 +1208,10 @@ static WMenu *dockMenuCreate(WScreen *scr, int type)
|
||||
else /* if (type == WM_DRAWER) */
|
||||
entry = wMenuAddCallback(menu, _("Drawer options"), NULL, NULL);
|
||||
|
||||
if (scr->clip_options == NULL)
|
||||
scr->clip_options = makeClipOptionsMenu(scr);
|
||||
if (w_global.clip.opt_menu == NULL)
|
||||
w_global.clip.opt_menu = makeClipOptionsMenu(scr);
|
||||
|
||||
wMenuEntrySetCascade(menu, entry, scr->clip_options);
|
||||
wMenuEntrySetCascade(menu, entry, w_global.clip.opt_menu);
|
||||
|
||||
/* The same menu is used for the dock and its appicons. If the menu
|
||||
* entry text is different between the two contexts, or if it can
|
||||
@@ -1240,9 +1240,9 @@ static WMenu *dockMenuCreate(WScreen *scr, int type)
|
||||
entry = wMenuAddCallback(menu, _("Move Icon To"), NULL, NULL);
|
||||
wfree(entry->text);
|
||||
entry->text = _("Move Icon To"); /* can be: Move Icons to */
|
||||
scr->clip_submenu = makeWorkspaceMenu(scr);
|
||||
if (scr->clip_submenu)
|
||||
wMenuEntrySetCascade(menu, entry, scr->clip_submenu);
|
||||
w_global.clip.submenu = makeWorkspaceMenu(scr);
|
||||
if (w_global.clip.submenu)
|
||||
wMenuEntrySetCascade(menu, entry, w_global.clip.submenu);
|
||||
}
|
||||
|
||||
entry = wMenuAddCallback(menu, _("Remove Icon"), removeIconsCallback, NULL);
|
||||
@@ -1267,10 +1267,10 @@ static WMenu *dockMenuCreate(WScreen *scr, int type)
|
||||
entry->text = _("Kill"); /* can be: Remove drawer */
|
||||
|
||||
if (type == WM_CLIP)
|
||||
scr->clip_menu = menu;
|
||||
w_global.clip.menu = menu;
|
||||
|
||||
if (type == WM_DRAWER)
|
||||
scr->drawer_menu = menu;
|
||||
w_global.dock.drawer_menu = menu;
|
||||
|
||||
return menu;
|
||||
}
|
||||
@@ -3410,7 +3410,7 @@ static void openDockMenu(WDock *dock, WAppIcon *aicon, XEvent *event)
|
||||
|
||||
if (dock->type == WM_DOCK) {
|
||||
/* Dock position menu */
|
||||
updateDockPositionMenu(scr->dock_pos_menu, dock);
|
||||
updateDockPositionMenu(w_global.dock.pos_menu, dock);
|
||||
dock->menu->flags.realized = 0;
|
||||
if (!wPreferences.flags.nodrawer) {
|
||||
/* add a drawer */
|
||||
@@ -3420,8 +3420,8 @@ static void openDockMenu(WDock *dock, WAppIcon *aicon, XEvent *event)
|
||||
}
|
||||
} else {
|
||||
/* clip/drawer options */
|
||||
if (scr->clip_options)
|
||||
updateClipOptionsMenu(scr->clip_options, dock);
|
||||
if (w_global.clip.opt_menu)
|
||||
updateClipOptionsMenu(w_global.clip.opt_menu, dock);
|
||||
|
||||
n_selected = numberOfSelectedIcons(dock);
|
||||
|
||||
@@ -3482,8 +3482,8 @@ static void openDockMenu(WDock *dock, WAppIcon *aicon, XEvent *event)
|
||||
else
|
||||
entry->text = _("Move Icon To");
|
||||
|
||||
if (scr->clip_submenu)
|
||||
updateWorkspaceMenu(scr->clip_submenu, aicon);
|
||||
if (w_global.clip.submenu)
|
||||
updateWorkspaceMenu(w_global.clip.submenu, aicon);
|
||||
|
||||
wMenuSetEnabled(dock->menu, index, !aicon->omnipresent);
|
||||
}
|
||||
@@ -3958,11 +3958,11 @@ static void iconMouseDown(WObjDescriptor *desc, XEvent *event)
|
||||
iconDblClick(desc, event);
|
||||
}
|
||||
} else if (event->xbutton.button == Button2 && aicon == scr->clip_icon) {
|
||||
if (!scr->clip_ws_menu)
|
||||
scr->clip_ws_menu = wWorkspaceMenuMake(scr, False);
|
||||
if (!w_global.clip.ws_menu)
|
||||
w_global.clip.ws_menu = wWorkspaceMenuMake(scr, False);
|
||||
|
||||
if (scr->clip_ws_menu) {
|
||||
WMenu *wsMenu = scr->clip_ws_menu;
|
||||
if (w_global.clip.ws_menu) {
|
||||
WMenu *wsMenu = w_global.clip.ws_menu;
|
||||
int xpos;
|
||||
|
||||
wWorkspaceMenuUpdate(scr, wsMenu);
|
||||
|
||||
@@ -211,18 +211,11 @@ typedef struct _WScreen {
|
||||
struct WMenu *switch_menu; /* window list menu */
|
||||
struct WMenu *window_menu; /* window command menu */
|
||||
struct WMenu *icon_menu; /* icon/appicon menu */
|
||||
struct WMenu *workspace_submenu; /* workspace list for window_menu */
|
||||
|
||||
struct WDock *dock; /* the application dock */
|
||||
struct WMenu *dock_pos_menu; /* Dock position menu */
|
||||
struct WPixmap *dock_dots; /* 3 dots for the Dock */
|
||||
Window dock_shadow; /* shadow for dock buttons */
|
||||
struct WAppIcon *clip_icon; /* The clip main icon, or the dock's, if they are merged */
|
||||
struct WMenu *clip_menu; /* Menu for clips */
|
||||
struct WMenu *clip_submenu; /* Workspace list for clips */
|
||||
struct WMenu *clip_options; /* Options for Clip */
|
||||
struct WMenu *clip_ws_menu; /* workspace menu for clip */
|
||||
struct WMenu *drawer_menu; /* Menu for drawers */
|
||||
struct WDock *last_dock;
|
||||
WAppIconChain *global_icons; /* for omnipresent icons chain in clip */
|
||||
int global_icon_count; /* How many global icons do we have */
|
||||
|
||||
@@ -436,9 +436,9 @@ static WMenu *createWindowMenu(WScreen * scr)
|
||||
entry->rtext = GetShortcutKey(wKeyBindings[WKBD_SELECT]);
|
||||
|
||||
entry = wMenuAddCallback(menu, _("Move To"), NULL, NULL);
|
||||
scr->workspace_submenu = makeWorkspaceMenu(scr);
|
||||
if (scr->workspace_submenu)
|
||||
wMenuEntrySetCascade(menu, entry, scr->workspace_submenu);
|
||||
w_global.workspace.submenu = makeWorkspaceMenu(scr);
|
||||
if (w_global.workspace.submenu)
|
||||
wMenuEntrySetCascade(menu, entry, w_global.workspace.submenu);
|
||||
|
||||
entry = wMenuAddCallback(menu, _("Attributes..."), execMenuCommand, NULL);
|
||||
|
||||
@@ -479,7 +479,6 @@ void CloseWindowMenu(WScreen * scr)
|
||||
static void updateMenuForWindow(WMenu * menu, WWindow * wwin)
|
||||
{
|
||||
WApplication *wapp = wApplicationOf(wwin->main_window);
|
||||
WScreen *scr = wwin->screen_ptr;
|
||||
int i;
|
||||
|
||||
updateOptionsMenu(menu, wwin);
|
||||
@@ -568,12 +567,13 @@ static void updateMenuForWindow(WMenu * menu, WWindow * wwin)
|
||||
menu->entries[i]->clientdata = wwin;
|
||||
}
|
||||
|
||||
for (i = 0; i < scr->workspace_submenu->entry_no; i++) {
|
||||
scr->workspace_submenu->entries[i]->clientdata = wwin;
|
||||
for (i = 0; i < w_global.workspace.submenu->entry_no; i++) {
|
||||
w_global.workspace.submenu->entries[i]->clientdata = wwin;
|
||||
|
||||
if (i == w_global.workspace.current)
|
||||
wMenuSetEnabled(scr->workspace_submenu, i, False);
|
||||
wMenuSetEnabled(w_global.workspace.submenu, i, False);
|
||||
else
|
||||
wMenuSetEnabled(scr->workspace_submenu, i, True);
|
||||
wMenuSetEnabled(w_global.workspace.submenu, i, True);
|
||||
}
|
||||
|
||||
menu->flags.realized = 0;
|
||||
@@ -596,7 +596,7 @@ static WMenu *open_window_menu_core(WWindow *wwin, int x, int y)
|
||||
wfree(scr->window_menu->entries[MC_SHADE]->text);
|
||||
wfree(scr->window_menu->entries[MC_SELECT]->text);
|
||||
} else {
|
||||
updateWorkspaceMenu(scr->workspace_submenu);
|
||||
updateWorkspaceMenu(w_global.workspace.submenu);
|
||||
}
|
||||
|
||||
menu = scr->window_menu;
|
||||
@@ -649,16 +649,15 @@ void OpenWindowMenu2(WWindow *wwin, int x, int y, int keyboard)
|
||||
{
|
||||
int i;
|
||||
WMenu *menu;
|
||||
WScreen *scr = wwin->screen_ptr;
|
||||
|
||||
menu = open_window_menu_core(wwin, x, y);
|
||||
if (!menu)
|
||||
return;
|
||||
|
||||
/* Specific menu position */
|
||||
for (i = 0; i < scr->workspace_submenu->entry_no; i++) {
|
||||
scr->workspace_submenu->entries[i]->clientdata = wwin;
|
||||
wMenuSetEnabled(scr->workspace_submenu, i, True);
|
||||
for (i = 0; i < w_global.workspace.submenu->entry_no; i++) {
|
||||
w_global.workspace.submenu->entries[i]->clientdata = wwin;
|
||||
wMenuSetEnabled(w_global.workspace.submenu, i, True);
|
||||
}
|
||||
|
||||
x -= menu->frame->core->width / 2;
|
||||
|
||||
@@ -115,7 +115,7 @@ int wWorkspaceNew(WScreen *scr)
|
||||
w_global.workspace.array = list;
|
||||
|
||||
wWorkspaceMenuUpdate(scr, w_global.workspace.menu);
|
||||
wWorkspaceMenuUpdate(scr, scr->clip_ws_menu);
|
||||
wWorkspaceMenuUpdate(scr, w_global.clip.ws_menu);
|
||||
wNETWMUpdateDesktop(scr);
|
||||
WMPostNotificationName(WMNWorkspaceCreated, scr, (void *)(uintptr_t) (w_global.workspace.count - 1));
|
||||
XFlush(dpy);
|
||||
@@ -167,11 +167,11 @@ Bool wWorkspaceDelete(WScreen * scr, int workspace)
|
||||
/* update menu */
|
||||
wWorkspaceMenuUpdate(scr, w_global.workspace.menu);
|
||||
/* clip workspace menu */
|
||||
wWorkspaceMenuUpdate(scr, scr->clip_ws_menu);
|
||||
wWorkspaceMenuUpdate(scr, w_global.clip.ws_menu);
|
||||
|
||||
/* update also window menu */
|
||||
if (scr->workspace_submenu) {
|
||||
WMenu *menu = scr->workspace_submenu;
|
||||
if (w_global.workspace.submenu) {
|
||||
WMenu *menu = w_global.workspace.submenu;
|
||||
|
||||
i = menu->entry_no;
|
||||
while (i > w_global.workspace.count)
|
||||
@@ -179,8 +179,8 @@ Bool wWorkspaceDelete(WScreen * scr, int workspace)
|
||||
wMenuRealize(menu);
|
||||
}
|
||||
/* and clip menu */
|
||||
if (scr->clip_submenu) {
|
||||
WMenu *menu = scr->clip_submenu;
|
||||
if (w_global.clip.submenu) {
|
||||
WMenu *menu = w_global.clip.submenu;
|
||||
|
||||
i = menu->entry_no;
|
||||
while (i > w_global.workspace.count)
|
||||
@@ -484,7 +484,7 @@ void wWorkspaceForceChange(WScreen * scr, int workspace)
|
||||
|
||||
wWorkspaceMenuUpdate(scr, w_global.workspace.menu);
|
||||
|
||||
wWorkspaceMenuUpdate(scr, scr->clip_ws_menu);
|
||||
wWorkspaceMenuUpdate(scr, w_global.clip.ws_menu);
|
||||
|
||||
toUnmapSize = 16;
|
||||
toUnmapCount = 0;
|
||||
@@ -684,11 +684,11 @@ void wWorkspaceRename(WScreen *scr, int workspace, const char *name)
|
||||
wfree(w_global.workspace.array[workspace]->name);
|
||||
w_global.workspace.array[workspace]->name = wstrdup(buf);
|
||||
|
||||
if (scr->clip_ws_menu) {
|
||||
if (strcmp(scr->clip_ws_menu->entries[workspace + MC_WORKSPACE1]->text, buf) != 0) {
|
||||
wfree(scr->clip_ws_menu->entries[workspace + MC_WORKSPACE1]->text);
|
||||
scr->clip_ws_menu->entries[workspace + MC_WORKSPACE1]->text = wstrdup(buf);
|
||||
wMenuRealize(scr->clip_ws_menu);
|
||||
if (w_global.clip.ws_menu) {
|
||||
if (strcmp(w_global.clip.ws_menu->entries[workspace + MC_WORKSPACE1]->text, buf) != 0) {
|
||||
wfree(w_global.clip.ws_menu->entries[workspace + MC_WORKSPACE1]->text);
|
||||
w_global.clip.ws_menu->entries[workspace + MC_WORKSPACE1]->text = wstrdup(buf);
|
||||
wMenuRealize(w_global.clip.ws_menu);
|
||||
}
|
||||
}
|
||||
if (w_global.workspace.menu) {
|
||||
|
||||
Reference in New Issue
Block a user