From: "Rodolfo García Peñas (kix)" <[email protected]>
The clip, dock, workspaces and drawers menus are common for all
workspaces, so they should be included in the wks_info struct.
---
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 a317151..8fe999a 100644
--- a/src/defaults.c
+++ b/src/defaults.c
@@ -1206,12 +1206,12 @@ void wReadDefaults(WScreen * scr, WMPropList * new_dict)
if (needs_refresh & REFRESH_WORKSPACE_MENU) {
if (wks_nfo.workspace_menu)
wWorkspaceMenuUpdate(scr,
wks_nfo.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_nfo.clip_ws_menu)
+ wWorkspaceMenuUpdate(scr, wks_nfo.clip_ws_menu);
+ if (wks_nfo.workspace_submenu)
+ wks_nfo.workspace_submenu->flags.realized = 0;
+ if (wks_nfo.clip_submenu)
+ wks_nfo.clip_submenu->flags.realized = 0;
}
}
}
diff --git a/src/dock.c b/src/dock.c
index 27359cd..c483622 100644
--- a/src/dock.c
+++ b/src/dock.c
@@ -1190,18 +1190,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_nfo.clip_menu)
+ return wks_nfo.clip_menu;
- if (type == WM_DRAWER && scr->drawer_menu)
- return scr->drawer_menu;
+ if (type == WM_DRAWER && wks_nfo.drawer_menu)
+ return wks_nfo.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_nfo.dock_pos_menu == NULL)
+ wks_nfo.dock_pos_menu = makeDockPositionMenu(scr);
+ wMenuEntrySetCascade(menu, entry, wks_nfo.dock_pos_menu);
if (!wPreferences.flags.nodrawer) {
entry = wMenuAddCallback(menu, _("Add a drawer"),
addADrawerCallback, NULL);
@@ -1212,9 +1212,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_nfo.clip_options == NULL)
+ wks_nfo.clip_options = makeClipOptionsMenu(scr);
+
+ wMenuEntrySetCascade(menu, entry, wks_nfo.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
@@ -1243,9 +1244,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_nfo.clip_submenu = makeWorkspaceMenu(scr);
+ if (wks_nfo.clip_submenu)
+ wMenuEntrySetCascade(menu, entry,
wks_nfo.clip_submenu);
}
entry = wMenuAddCallback(menu, _("Remove Icon"),
removeIconsCallback, NULL);
@@ -1270,10 +1271,10 @@ static WMenu *dockMenuCreate(WScreen *scr, int type)
entry->text = _("Kill"); /* can be: Remove drawer */
if (type == WM_CLIP)
- scr->clip_menu = menu;
+ wks_nfo.clip_menu = menu;
if (type == WM_DRAWER)
- scr->drawer_menu = menu;
+ wks_nfo.drawer_menu = menu;
return menu;
}
@@ -3413,7 +3414,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_nfo.dock_pos_menu, dock);
dock->menu->flags.realized = 0;
if (!wPreferences.flags.nodrawer) {
/* add a drawer */
@@ -3423,8 +3424,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_nfo.clip_options)
+ updateClipOptionsMenu(wks_nfo.clip_options, dock);
n_selected = numberOfSelectedIcons(dock);
@@ -3485,8 +3486,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_nfo.clip_submenu)
+ updateWorkspaceMenu(wks_nfo.clip_submenu,
aicon);
wMenuSetEnabled(dock->menu, index, !aicon->omnipresent);
}
@@ -3961,11 +3962,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_nfo.clip_ws_menu)
+ wks_nfo.clip_ws_menu = wWorkspaceMenuMake(scr, False);
+
+ if (wks_nfo.clip_ws_menu) {
+ WMenu *wsMenu = wks_nfo.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 84140ae..c45bea1 100644
--- a/src/winmenu.c
+++ b/src/winmenu.c
@@ -438,9 +438,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_nfo.workspace_submenu = makeWorkspaceMenu(scr);
+ if (wks_nfo.workspace_submenu)
+ wMenuEntrySetCascade(menu, entry, wks_nfo.workspace_submenu);
entry = wMenuAddCallback(menu, _("Attributes..."), execMenuCommand,
NULL);
@@ -481,7 +481,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);
@@ -570,12 +569,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_nfo.workspace_submenu->entry_no; i++) {
+ wks_nfo.workspace_submenu->entries[i]->clientdata = wwin;
+
if (i == wks_nfo.current_workspace)
- wMenuSetEnabled(scr->workspace_submenu, i, False);
+ wMenuSetEnabled(wks_nfo.workspace_submenu, i, False);
else
- wMenuSetEnabled(scr->workspace_submenu, i, True);
+ wMenuSetEnabled(wks_nfo.workspace_submenu, i, True);
}
menu->flags.realized = 0;
@@ -598,7 +598,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_nfo.workspace_submenu);
}
menu = scr->window_menu;
@@ -651,16 +651,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_nfo.workspace_submenu->entry_no; i++) {
+ wks_nfo.workspace_submenu->entries[i]->clientdata = wwin;
+ wMenuSetEnabled(wks_nfo.workspace_submenu, i, True);
}
x -= menu->frame->core->width / 2;
diff --git a/src/workspace.c b/src/workspace.c
index 07e0981..c8cd8b2 100644
--- a/src/workspace.c
+++ b/src/workspace.c
@@ -117,7 +117,7 @@ int wWorkspaceNew(WScreen *scr)
wks_nfo.workspaces = list;
wWorkspaceMenuUpdate(scr, wks_nfo.workspace_menu);
- wWorkspaceMenuUpdate(scr, scr->clip_ws_menu);
+ wWorkspaceMenuUpdate(scr, wks_nfo.clip_ws_menu);
wNETWMUpdateDesktop(scr);
WMPostNotificationName(WMNWorkspaceCreated, scr, (void
*)(uintptr_t) (wks_nfo.workspace_count - 1));
XFlush(dpy);
@@ -169,11 +169,11 @@ Bool wWorkspaceDelete(WScreen * scr, int workspace)
/* update menu */
wWorkspaceMenuUpdate(scr, wks_nfo.workspace_menu);
/* clip workspace menu */
- wWorkspaceMenuUpdate(scr, scr->clip_ws_menu);
+ wWorkspaceMenuUpdate(scr, wks_nfo.clip_ws_menu);
/* update also window menu */
- if (scr->workspace_submenu) {
- WMenu *menu = scr->workspace_submenu;
+ if (wks_nfo.workspace_submenu) {
+ WMenu *menu = wks_nfo.workspace_submenu;
i = menu->entry_no;
while (i > wks_nfo.workspace_count)
@@ -181,8 +181,8 @@ Bool wWorkspaceDelete(WScreen * scr, int workspace)
wMenuRealize(menu);
}
/* and clip menu */
- if (scr->clip_submenu) {
- WMenu *menu = scr->clip_submenu;
+ if (wks_nfo.clip_submenu) {
+ WMenu *menu = wks_nfo.clip_submenu;
i = menu->entry_no;
while (i > wks_nfo.workspace_count)
@@ -490,7 +490,7 @@ void wWorkspaceForceChange(WScreen * scr, int workspace)
wWorkspaceMenuUpdate(scr, wks_nfo.workspace_menu);
- wWorkspaceMenuUpdate(scr, scr->clip_ws_menu);
+ wWorkspaceMenuUpdate(scr, wks_nfo.clip_ws_menu);
toUnmapSize = 16;
toUnmapCount = 0;
@@ -690,11 +690,11 @@ void wWorkspaceRename(WScreen *scr, int workspace, const
char *name)
wfree(wks_nfo.workspaces[workspace]->name);
wks_nfo.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_nfo.clip_ws_menu) {
+ if (strcmp(wks_nfo.clip_ws_menu->entries[workspace +
MC_WORKSPACE1]->text, buf) != 0) {
+ wfree(wks_nfo.clip_ws_menu->entries[workspace +
MC_WORKSPACE1]->text);
+ wks_nfo.clip_ws_menu->entries[workspace +
MC_WORKSPACE1]->text = wstrdup(buf);
+ wMenuRealize(wks_nfo.clip_ws_menu);
}
}
if (wks_nfo.workspace_menu) {
diff --git a/src/workspace.h b/src/workspace.h
index 966b9fe..341e89d 100644
--- a/src/workspace.h
+++ b/src/workspace.h
@@ -36,6 +36,13 @@ typedef struct wks_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 */
} wks_info;
void wWorkspaceMake(WScreen *scr, int count);
--
1.7.10.4
--
To unsubscribe, send mail to [email protected].