From e86b8dcb2f28bf06ff04e12ea15754b684437f31 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Rodolfo=20Garc=C3=ADa=20Pe=C3=B1as=20=28kix=29?= Date: Tue, 8 Oct 2013 00:56:35 +0200 Subject: [PATCH] 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. --- src/WindowMaker.h | 15 +++++++++++++++ src/defaults.c | 12 ++++++------ src/dock.c | 48 ++++++++++++++++++++++++------------------------ src/screen.h | 7 ------- src/winmenu.c | 25 ++++++++++++------------- src/workspace.c | 24 ++++++++++++------------ 6 files changed, 69 insertions(+), 62 deletions(-) diff --git a/src/WindowMaker.h b/src/WindowMaker.h index 5fd9d697..24a3806e 100644 --- a/src/WindowMaker.h +++ b/src/WindowMaker.h @@ -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 { diff --git a/src/defaults.c b/src/defaults.c index 2db256fc..0cceb375 100644 --- a/src/defaults.c +++ b/src/defaults.c @@ -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; } } } diff --git a/src/dock.c b/src/dock.c index 2ac86850..aa7c57dd 100644 --- a/src/dock.c +++ b/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); diff --git a/src/screen.h b/src/screen.h index 892a53c8..a8540026 100644 --- a/src/screen.h +++ b/src/screen.h @@ -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 */ diff --git a/src/winmenu.c b/src/winmenu.c index 451beeac..1266edfb 100644 --- a/src/winmenu.c +++ b/src/winmenu.c @@ -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; diff --git a/src/workspace.c b/src/workspace.c index 0ff60f02..d34b5558 100644 --- a/src/workspace.c +++ b/src/workspace.c @@ -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) { -- 2.11.4.GIT