The variable workspace_menu, that contains the workspace_menu
is moved to the global workspace properties.

Now the screen is not needed to know the workspace_menu.

This variable is moved to the wks_info struct because is related
to the workspace system, and not to the screen.

Signed-off-by: Rodolfo García Peñas (kix) <[email protected]>
---
 src/defaults.c  |  4 ++--
 src/menu.c      |  4 ++--
 src/rootmenu.c  |  9 +++++----
 src/screen.h    |  1 -
 src/workspace.c | 24 ++++++++++++------------
 src/workspace.h |  3 +++
 6 files changed, 24 insertions(+), 21 deletions(-)

diff --git a/src/defaults.c b/src/defaults.c
index 319bf21..71c6ed0 100644
--- a/src/defaults.c
+++ b/src/defaults.c
@@ -1203,8 +1203,8 @@ void wReadDefaults(WScreen * scr, WMPropList * new_dict)
                        WMPostNotificationName(WNIconTileSettingsChanged, NULL, 
NULL);
 
                if (needs_refresh & REFRESH_WORKSPACE_MENU) {
-                       if (scr->workspace_menu)
-                               wWorkspaceMenuUpdate(scr, scr->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)
diff --git a/src/menu.c b/src/menu.c
index 9c7b7b5..efdc7f0 100644
--- a/src/menu.c
+++ b/src/menu.c
@@ -2266,9 +2266,9 @@ void wMenuSaveState(WScreen * scr)
        if (saveMenuRecurs(menus, scr, scr->root_menu))
                save_menus = 1;
 
-       if (scr->workspace_menu && scr->workspace_menu->flags.buttoned) {
+       if (wks_info.workspace_menu && wks_info.workspace_menu->flags.buttoned) 
{
                key = WMCreatePLString("WorkspaceMenu");
-               saveMenuInfo(menus, scr->workspace_menu, key);
+               saveMenuInfo(menus, wks_info.workspace_menu, key);
                WMReleasePropList(key);
                save_menus = 1;
        }
diff --git a/src/rootmenu.c b/src/rootmenu.c
index 9a4f36b..aed27e0 100644
--- a/src/rootmenu.c
+++ b/src/rootmenu.c
@@ -61,6 +61,7 @@
 #define MAX_SHORTCUT_LENGTH 32
 
 extern WDDomain *WDRootMenu;
+extern WWorkspace_info wks_info;
 
 static WMenu *readMenuPipe(WScreen * scr, char **file_name);
 static WMenu *readPLMenuPipe(WScreen * scr, char **file_name);
@@ -755,10 +756,10 @@ static void constructPLMenuFromPipe(WMenu * menu, 
WMenuEntry * entry)
                wfree(cmd);
 
 }
-static void cleanupWorkspaceMenu(WMenu * menu)
+static void cleanupWorkspaceMenu(WMenu *menu)
 {
-       if (menu->frame->screen_ptr->workspace_menu == menu)
-               menu->frame->screen_ptr->workspace_menu = NULL;
+       if (wks_info.workspace_menu == menu)
+               wks_info.workspace_menu = NULL;
 }
 
 static WMenuEntry *addWorkspaceMenu(WScreen *scr, WMenu *menu, const char 
*title)
@@ -776,7 +777,7 @@ static WMenuEntry *addWorkspaceMenu(WScreen *scr, WMenu 
*menu, const char *title
                wsmenu = wWorkspaceMenuMake(scr, True);
                wsmenu->on_destroy = cleanupWorkspaceMenu;
 
-               scr->workspace_menu = wsmenu;
+               wks_info.workspace_menu = wsmenu;
                entry = wMenuAddCallback(menu, title, NULL, NULL);
                wMenuEntrySetCascade(menu, entry, wsmenu);
 
diff --git a/src/screen.h b/src/screen.h
index 0496a91..892a53c 100644
--- a/src/screen.h
+++ b/src/screen.h
@@ -209,7 +209,6 @@ typedef struct _WScreen {
 
     struct WMenu *root_menu;          /* root window menu */
     struct WMenu *switch_menu;        /* window list menu */
-    struct WMenu *workspace_menu;      /* workspace operation */
     struct WMenu *window_menu;        /* window command menu */
     struct WMenu *icon_menu;          /* icon/appicon menu */
     struct WMenu *workspace_submenu;   /* workspace list for window_menu */
diff --git a/src/workspace.c b/src/workspace.c
index 4ae1ecf..b5e8e5e 100644
--- a/src/workspace.c
+++ b/src/workspace.c
@@ -115,7 +115,7 @@ int wWorkspaceNew(WScreen *scr)
 
                wks_info.workspaces = list;
 
-               wWorkspaceMenuUpdate(scr, scr->workspace_menu);
+               wWorkspaceMenuUpdate(scr, wks_info.workspace_menu);
                wWorkspaceMenuUpdate(scr, scr->clip_ws_menu);
                wNETWMUpdateDesktop(scr);
                WMPostNotificationName(WMNWorkspaceCreated, scr, (void 
*)(uintptr_t) (wks_info.workspace_count - 1));
@@ -166,7 +166,7 @@ Bool wWorkspaceDelete(WScreen * scr, int workspace)
        wks_info.workspace_count--;
 
        /* update menu */
-       wWorkspaceMenuUpdate(scr, scr->workspace_menu);
+       wWorkspaceMenuUpdate(scr, wks_info.workspace_menu);
        /* clip workspace menu */
        wWorkspaceMenuUpdate(scr, scr->clip_ws_menu);
 
@@ -483,7 +483,7 @@ void wWorkspaceForceChange(WScreen * scr, int workspace)
        wks_info.last_used_workspace = wks_info.current_workspace;
        wks_info.current_workspace = workspace;
 
-       wWorkspaceMenuUpdate(scr, scr->workspace_menu);
+       wWorkspaceMenuUpdate(scr, wks_info.workspace_menu);
 
        wWorkspaceMenuUpdate(scr, scr->clip_ws_menu);
 
@@ -692,11 +692,11 @@ void wWorkspaceRename(WScreen *scr, int workspace, const 
char *name)
                        wMenuRealize(scr->clip_ws_menu);
                }
        }
-       if (scr->workspace_menu) {
-               if (strcmp(scr->workspace_menu->entries[workspace + 
MC_WORKSPACE1]->text, buf) != 0) {
-                       wfree(scr->workspace_menu->entries[workspace + 
MC_WORKSPACE1]->text);
-                       scr->workspace_menu->entries[workspace + 
MC_WORKSPACE1]->text = wstrdup(buf);
-                       wMenuRealize(scr->workspace_menu);
+       if (wks_info.workspace_menu) {
+               if (strcmp(wks_info.workspace_menu->entries[workspace + 
MC_WORKSPACE1]->text, buf) != 0) {
+                       wfree(wks_info.workspace_menu->entries[workspace + 
MC_WORKSPACE1]->text);
+                       wks_info.workspace_menu->entries[workspace + 
MC_WORKSPACE1]->text = wstrdup(buf);
+                       wMenuRealize(wks_info.workspace_menu);
                }
        }
 
@@ -857,10 +857,10 @@ void wWorkspaceRestoreState(WScreen *scr)
                if (i >= wks_info.workspace_count)
                        wWorkspaceNew(scr);
 
-               if (scr->workspace_menu) {
-                       wfree(scr->workspace_menu->entries[i + 
MC_WORKSPACE1]->text);
-                       scr->workspace_menu->entries[i + MC_WORKSPACE1]->text = 
wstrdup(WMGetFromPLString(pstr));
-                       scr->workspace_menu->flags.realized = 0;
+               if (wks_info.workspace_menu) {
+                       wfree(wks_info.workspace_menu->entries[i + 
MC_WORKSPACE1]->text);
+                       wks_info.workspace_menu->entries[i + 
MC_WORKSPACE1]->text = wstrdup(WMGetFromPLString(pstr));
+                       wks_info.workspace_menu->flags.realized = 0;
                }
 
                wfree(wks_info.workspaces[i]->name);
diff --git a/src/workspace.h b/src/workspace.h
index 5fcbe9b..0c434bd 100644
--- a/src/workspace.h
+++ b/src/workspace.h
@@ -34,6 +34,9 @@ typedef struct WWorkspace_info {
        int current_workspace;          /* current workspace number */
        int last_used_workspace;        /* last used workspace number */
        WMFont *workspace_name_font;
+
+       /* Menus */
+       struct WMenu *workspace_menu;   /* workspace operation */
 } WWorkspace_info;
 
 void wWorkspaceMake(WScreen *scr, int count);
-- 
1.8.4.rc3


-- 
To unsubscribe, send mail to [email protected].

Reply via email to