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].

Reply via email to