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 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 5fd9d69..24a3806 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 2db256f..0cceb37 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 2ac8685..aa7c57d 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 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 451beea..1266edf 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 0ff60f0..d34b555 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) {
--
1.8.4.rc3
--
To unsubscribe, send mail to [email protected].