The clip, dock, workspaces and drawers menus are common for all workspaces, so they should be included in the WWorkspace_info struct.
Signed-off-by: Rodolfo García Peñas (kix) <k...@kix.es> --- src/defaults.c | 12 ++++++------ src/dock.c | 51 ++++++++++++++++++++++++++------------------------- src/screen.h | 7 ------- src/winmenu.c | 25 ++++++++++++------------- src/workspace.c | 24 ++++++++++++------------ src/workspace.h | 7 +++++++ 6 files changed, 63 insertions(+), 63 deletions(-) diff --git a/src/defaults.c b/src/defaults.c index 71c6ed0..bcd5835 100644 --- a/src/defaults.c +++ b/src/defaults.c @@ -1205,12 +1205,12 @@ void wReadDefaults(WScreen * scr, WMPropList * new_dict) if (needs_refresh & REFRESH_WORKSPACE_MENU) { if (wks_info.workspace_menu) wWorkspaceMenuUpdate(scr, wks_info.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 (wks_info.clip_ws_menu) + wWorkspaceMenuUpdate(scr, wks_info.clip_ws_menu); + if (wks_info.workspace_submenu) + wks_info.workspace_submenu->flags.realized = 0; + if (wks_info.clip_submenu) + wks_info.clip_submenu->flags.realized = 0; } } } diff --git a/src/dock.c b/src/dock.c index 64a51d0..49c9580 100644 --- a/src/dock.c +++ b/src/dock.c @@ -1188,18 +1188,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 && wks_info.clip_menu) + return wks_info.clip_menu; - if (type == WM_DRAWER && scr->drawer_menu) - return scr->drawer_menu; + if (type == WM_DRAWER && wks_info.drawer_menu) + return wks_info.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 (wks_info.dock_pos_menu == NULL) + wks_info.dock_pos_menu = makeDockPositionMenu(scr); + wMenuEntrySetCascade(menu, entry, wks_info.dock_pos_menu); if (!wPreferences.flags.nodrawer) { entry = wMenuAddCallback(menu, _("Add a drawer"), addADrawerCallback, NULL); @@ -1210,9 +1210,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); - wMenuEntrySetCascade(menu, entry, scr->clip_options); + if (wks_info.clip_options == NULL) + wks_info.clip_options = makeClipOptionsMenu(scr); + + wMenuEntrySetCascade(menu, entry, wks_info.clip_options); /* 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 @@ -1241,9 +1242,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); + wks_info.clip_submenu = makeWorkspaceMenu(scr); + if (wks_info.clip_submenu) + wMenuEntrySetCascade(menu, entry, wks_info.clip_submenu); } entry = wMenuAddCallback(menu, _("Remove Icon"), removeIconsCallback, NULL); @@ -1268,10 +1269,10 @@ static WMenu *dockMenuCreate(WScreen *scr, int type) entry->text = _("Kill"); /* can be: Remove drawer */ if (type == WM_CLIP) - scr->clip_menu = menu; + wks_info.clip_menu = menu; if (type == WM_DRAWER) - scr->drawer_menu = menu; + wks_info.drawer_menu = menu; return menu; } @@ -3411,7 +3412,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(wks_info.dock_pos_menu, dock); dock->menu->flags.realized = 0; if (!wPreferences.flags.nodrawer) { /* add a drawer */ @@ -3421,8 +3422,8 @@ static void openDockMenu(WDock *dock, WAppIcon *aicon, XEvent *event) } } else { /* clip/drawer options */ - if (scr->clip_options) - updateClipOptionsMenu(scr->clip_options, dock); + if (wks_info.clip_options) + updateClipOptionsMenu(wks_info.clip_options, dock); n_selected = numberOfSelectedIcons(dock); @@ -3483,8 +3484,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 (wks_info.clip_submenu) + updateWorkspaceMenu(wks_info.clip_submenu, aicon); wMenuSetEnabled(dock->menu, index, !aicon->omnipresent); } @@ -3959,11 +3960,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 (scr->clip_ws_menu) { - WMenu *wsMenu = scr->clip_ws_menu; + if (!wks_info.clip_ws_menu) + wks_info.clip_ws_menu = wWorkspaceMenuMake(scr, False); + + if (wks_info.clip_ws_menu) { + WMenu *wsMenu = wks_info.clip_ws_menu; int xpos; wWorkspaceMenuUpdate(scr, wsMenu); diff --git a/src/screen.h b/src/screen.h index 892a53c..a854002 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 19302f5..e4ad17b 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); + wks_info.workspace_submenu = makeWorkspaceMenu(scr); + if (wks_info.workspace_submenu) + wMenuEntrySetCascade(menu, entry, wks_info.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 < wks_info.workspace_submenu->entry_no; i++) { + wks_info.workspace_submenu->entries[i]->clientdata = wwin; + if (i == wks_info.current_workspace) - wMenuSetEnabled(scr->workspace_submenu, i, False); + wMenuSetEnabled(wks_info.workspace_submenu, i, False); else - wMenuSetEnabled(scr->workspace_submenu, i, True); + wMenuSetEnabled(wks_info.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(wks_info.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 < wks_info.workspace_submenu->entry_no; i++) { + wks_info.workspace_submenu->entries[i]->clientdata = wwin; + wMenuSetEnabled(wks_info.workspace_submenu, i, True); } x -= menu->frame->core->width / 2; diff --git a/src/workspace.c b/src/workspace.c index b5e8e5e..0d2ab3b 100644 --- a/src/workspace.c +++ b/src/workspace.c @@ -116,7 +116,7 @@ int wWorkspaceNew(WScreen *scr) wks_info.workspaces = list; wWorkspaceMenuUpdate(scr, wks_info.workspace_menu); - wWorkspaceMenuUpdate(scr, scr->clip_ws_menu); + wWorkspaceMenuUpdate(scr, wks_info.clip_ws_menu); wNETWMUpdateDesktop(scr); WMPostNotificationName(WMNWorkspaceCreated, scr, (void *)(uintptr_t) (wks_info.workspace_count - 1)); XFlush(dpy); @@ -168,11 +168,11 @@ Bool wWorkspaceDelete(WScreen * scr, int workspace) /* update menu */ wWorkspaceMenuUpdate(scr, wks_info.workspace_menu); /* clip workspace menu */ - wWorkspaceMenuUpdate(scr, scr->clip_ws_menu); + wWorkspaceMenuUpdate(scr, wks_info.clip_ws_menu); /* update also window menu */ - if (scr->workspace_submenu) { - WMenu *menu = scr->workspace_submenu; + if (wks_info.workspace_submenu) { + WMenu *menu = wks_info.workspace_submenu; i = menu->entry_no; while (i > wks_info.workspace_count) @@ -180,8 +180,8 @@ Bool wWorkspaceDelete(WScreen * scr, int workspace) wMenuRealize(menu); } /* and clip menu */ - if (scr->clip_submenu) { - WMenu *menu = scr->clip_submenu; + if (wks_info.clip_submenu) { + WMenu *menu = wks_info.clip_submenu; i = menu->entry_no; while (i > wks_info.workspace_count) @@ -485,7 +485,7 @@ void wWorkspaceForceChange(WScreen * scr, int workspace) wWorkspaceMenuUpdate(scr, wks_info.workspace_menu); - wWorkspaceMenuUpdate(scr, scr->clip_ws_menu); + wWorkspaceMenuUpdate(scr, wks_info.clip_ws_menu); toUnmapSize = 16; toUnmapCount = 0; @@ -685,11 +685,11 @@ void wWorkspaceRename(WScreen *scr, int workspace, const char *name) wfree(wks_info.workspaces[workspace]->name); wks_info.workspaces[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 (wks_info.clip_ws_menu) { + if (strcmp(wks_info.clip_ws_menu->entries[workspace + MC_WORKSPACE1]->text, buf) != 0) { + wfree(wks_info.clip_ws_menu->entries[workspace + MC_WORKSPACE1]->text); + wks_info.clip_ws_menu->entries[workspace + MC_WORKSPACE1]->text = wstrdup(buf); + wMenuRealize(wks_info.clip_ws_menu); } } if (wks_info.workspace_menu) { diff --git a/src/workspace.h b/src/workspace.h index 0c434bd..56f7cfa 100644 --- a/src/workspace.h +++ b/src/workspace.h @@ -37,6 +37,13 @@ typedef struct WWorkspace_info { /* Menus */ struct WMenu *workspace_menu; /* workspace operation */ + struct WMenu *workspace_submenu; /* workspace list for window_menu */ + 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 WMenu *dock_pos_menu; /* Dock position menu */ } WWorkspace_info; void wWorkspaceMake(WScreen *scr, int count); -- 1.8.4.rc3 -- To unsubscribe, send mail to wmaker-dev-unsubscr...@lists.windowmaker.org.