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.

Reply via email to