The variable workspaces, that contains the list of workspaces
is moved to the global workspace properties.

Now the screen is not needed to know the workspaces.

The function getWindowState() doesn't need the WScreen argument.

Signed-off-by: Rodolfo García Peñas (kix) <[email protected]>
---
 src/appicon.c    | 20 +++++++++------
 src/balloon.c    |  4 +--
 src/defaults.c   |  2 +-
 src/dock.c       | 39 +++++++++++++++--------------
 src/event.c      |  2 +-
 src/menu.c       |  4 ++-
 src/screen.h     |  2 --
 src/session.c    | 26 +++++++++-----------
 src/startup.c    |  8 +++---
 src/switchmenu.c |  9 ++++---
 src/winmenu.c    |  7 +++---
 src/winspector.c |  5 ++--
 src/wmspec.c     |  4 +--
 src/workspace.c  | 74 ++++++++++++++++++++++++++++----------------------------
 src/workspace.h  |  2 +-
 15 files changed, 106 insertions(+), 102 deletions(-)

diff --git a/src/appicon.c b/src/appicon.c
index 70b83cd..0ee66b9 100644
--- a/src/appicon.c
+++ b/src/appicon.c
@@ -184,7 +184,7 @@ void unpaint_app_icon(WApplication *wapp)
                return;
 
        scr = wapp->main_window_desc->screen_ptr;
-       clip = scr->workspaces[wks_info.current_workspace]->clip;
+       clip = wks_info.workspaces[wks_info.current_workspace]->clip;
 
        if (!clip || !aicon->attracted || !clip->collapsed)
                XUnmapWindow(dpy, aicon->icon->core->window);
@@ -218,7 +218,7 @@ void paint_app_icon(WApplication *wapp)
 
        attracting_dock = scr->attracting_drawer != NULL ?
                scr->attracting_drawer :
-               scr->workspaces[wks_info.current_workspace]->clip;
+               wks_info.workspaces[wks_info.current_workspace]->clip;
        if (attracting_dock && attracting_dock->attract_icons &&
                wDockFindFreeSlot(attracting_dock, &x, &y)) {
                wapp->app_icon->attracted = 1;
@@ -808,9 +808,11 @@ Bool wHandleAppIconMove(WAppIcon *aicon, XEvent *event)
        }
        if (!wPreferences.flags.nodock && scr->dock != originalDock)
                allDocks[ i++ ] = scr->dock;
+
        if (!wPreferences.flags.noclip &&
-           originalDock != scr->workspaces[wks_info.current_workspace]->clip)
-               allDocks[ i++ ] = 
scr->workspaces[wks_info.current_workspace]->clip;
+           originalDock != 
wks_info.workspaces[wks_info.current_workspace]->clip)
+               allDocks[i++] = 
wks_info.workspaces[wks_info.current_workspace]->clip;
+
        for ( ; i < scr->drawer_count + 2; i++) /* In case the clip, the dock, 
or both, are disabled */
                allDocks[ i ] = NULL;
 
@@ -863,7 +865,8 @@ Bool wHandleAppIconMove(WAppIcon *aicon, XEvent *event)
                                for (i = 0; i < wks_info.workspace_count; i++) {
                                        if (i == wks_info.current_workspace)
                                                continue;
-                                       
wDockShowIcons(scr->workspaces[i]->clip);
+
+                                       
wDockShowIcons(wks_info.workspaces[i]->clip);
                                        /* Note: if dock is collapsed (for 
instance, because it
                                           auto-collapses), its icons still 
won't show up */
                                }
@@ -1068,7 +1071,8 @@ Bool wHandleAppIconMove(WAppIcon *aicon, XEvent *event)
                                for (i = 0; i < wks_info.workspace_count; i++) {
                                        if (i == wks_info.current_workspace)
                                                continue;
-                                       
wDockHideIcons(scr->workspaces[i]->clip);
+
+                                       
wDockHideIcons(wks_info.workspaces[i]->clip);
                                }
                        }
                        if (wPreferences.auto_arrange_icons && !(originalDock 
!= NULL && docked))
@@ -1148,9 +1152,11 @@ static void create_appicon_from_dock(WWindow *wwin, 
WApplication *wapp, Window m
        if (!wapp->app_icon) {
                int i;
                for (i = 0; i < wks_info.workspace_count; i++) {
-                       WDock *dock = scr->workspaces[i]->clip;
+                       WDock *dock = wks_info.workspaces[i]->clip;
+
                        if (dock)
                                wapp->app_icon = findDockIconFor(dock, 
main_window);
+
                        if (wapp->app_icon)
                                break;
                }
diff --git a/src/balloon.c b/src/balloon.c
index 11a106e..d6f0cfd 100644
--- a/src/balloon.c
+++ b/src/balloon.c
@@ -441,8 +441,8 @@ static void appiconBalloon(WObjDescriptor *object)
 
        /* Show balloon if it is the Clip and the workspace name is > 5 chars */
        if (object->parent == scr->clip_icon) {
-               if (strlen(scr->workspaces[wks_info.current_workspace]->name) > 
5) {
-                       scr->balloon->text = 
wstrdup(scr->workspaces[wks_info.current_workspace]->name);
+               if 
(strlen(wks_info.workspaces[wks_info.current_workspace]->name) > 5) {
+                       scr->balloon->text = 
wstrdup(wks_info.workspaces[wks_info.current_workspace]->name);
                } else {
                        wBalloonHide(scr);
                        return;
diff --git a/src/defaults.c b/src/defaults.c
index b8c8dd8..319bf21 100644
--- a/src/defaults.c
+++ b/src/defaults.c
@@ -2452,7 +2452,7 @@ static int setWrapAppiconsInDock(WScreen *scr, 
WDefaultEntry *entry, void *tdata
 
 static int setStickyIcons(WScreen * scr, WDefaultEntry * entry, void *bar, 
void *foo)
 {
-       if (scr->workspaces) {
+       if (wks_info.workspaces) {
                wWorkspaceForceChange(scr, wks_info.current_workspace);
                wArrangeIcons(scr, False);
        }
diff --git a/src/dock.c b/src/dock.c
index 85be41f..64a51d0 100644
--- a/src/dock.c
+++ b/src/dock.c
@@ -176,7 +176,7 @@ static void renameCallback(WMenu *menu, WMenuEntry *entry)
 
        wspace = wks_info.current_workspace;
 
-       name = wstrdup(dock->screen_ptr->workspaces[wspace]->name);
+       name = wstrdup(wks_info.workspaces[wspace]->name);
 
        snprintf(buffer, sizeof(buffer), _("Type the name for workspace %i:"), 
wspace + 1);
        if (wInputDialog(dock->screen_ptr, _("Rename Workspace"), buffer, 
&name))
@@ -598,7 +598,7 @@ static void toggleAutoAttractCallback(WMenu *menu, 
WMenuEntry *entry)
                /* check if at least one clip already auto attracts icons */
                int i, ask_for_confirmation = False;
                for (i = 0; i < wks_info.workspace_count; i++) {
-                       if (scr->workspaces[ i ]->clip->attract_icons) {
+                       if (wks_info.workspaces[i]->clip->attract_icons) {
                                ask_for_confirmation = True;
                                break;
                        }
@@ -624,7 +624,7 @@ static void toggleAutoAttractCallback(WMenu *menu, 
WMenuEntry *entry)
                         * previously attracting drawer */
                        int i;
                        for (i = 0; i < wks_info.workspace_count; i++)
-                               scr->workspaces[ i ]->clip->attract_icons = 
False;
+                               wks_info.workspaces[i]->clip->attract_icons = 
False;
                                /* dock menu will be updated later, when opened 
*/
 
                        if (scr->attracting_drawer != NULL)
@@ -870,7 +870,7 @@ static void switchWSCommand(WMenu *menu, WMenuEntry *entry)
        if (entry->order == wks_info.current_workspace)
                return;
        src = icon->dock;
-       dest = scr->workspaces[entry->order]->clip;
+       dest = wks_info.workspaces[entry->order]->clip;
 
        selectedIcons = getSelected(src);
 
@@ -937,7 +937,6 @@ static void launchDockedApplication(WAppIcon *btn, Bool 
withSelection)
 
 static void updateWorkspaceMenu(WMenu *menu, WAppIcon *icon)
 {
-       WScreen *scr = menu->frame->screen_ptr;
        char title[MAX_WORKSPACENAME_WIDTH + 1];
        int i;
 
@@ -946,15 +945,15 @@ static void updateWorkspaceMenu(WMenu *menu, WAppIcon 
*icon)
 
        for (i = 0; i < wks_info.workspace_count; i++) {
                if (i < menu->entry_no) {
-                       if (strcmp(menu->entries[i]->text, 
scr->workspaces[i]->name) != 0) {
+                       if (strcmp(menu->entries[i]->text, 
wks_info.workspaces[i]->name) != 0) {
                                wfree(menu->entries[i]->text);
-                               strcpy(title, scr->workspaces[i]->name);
+                               strcpy(title, wks_info.workspaces[i]->name);
                                menu->entries[i]->text = wstrdup(title);
                                menu->flags.realized = 0;
                        }
                        menu->entries[i]->clientdata = (void *)icon;
                } else {
-                       strcpy(title, scr->workspaces[i]->name);
+                       strcpy(title, wks_info.workspaces[i]->name);
 
                        wMenuAddCallback(menu, title, switchWSCommand, (void 
*)icon);
 
@@ -1369,7 +1368,7 @@ void wDockDestroy(WDock *dock)
 void wClipIconPaint(WAppIcon *aicon)
 {
        WScreen *scr = aicon->icon->core->screen_ptr;
-       WWorkspace *workspace = scr->workspaces[wks_info.current_workspace];
+       WWorkspace *workspace = wks_info.workspaces[wks_info.current_workspace];
        WMColor *color;
        Window win = aicon->icon->core->window;
        int length, nlength;
@@ -1595,7 +1594,7 @@ void wClipSaveState(WScreen *scr)
 
 WMPropList *wClipSaveWorkspaceState(WScreen *scr, int workspace)
 {
-       return dockSaveState(scr->workspaces[workspace]->clip);
+       return dockSaveState(wks_info.workspaces[workspace]->clip);
 }
 
 static Bool getBooleanDockValue(WMPropList *value, WMPropList *key)
@@ -2031,7 +2030,7 @@ static WDock *findDock(WScreen *scr, XEvent *event, int 
*icon_pos)
                        }
                }
        }
-       if (*icon_pos < 0 && (dock = 
scr->workspaces[wks_info.current_workspace]->clip) != NULL) {
+       if (*icon_pos < 0 && (dock = 
wks_info.workspaces[wks_info.current_workspace]->clip) != NULL) {
                for (i = 0; i < dock->max_icons; i++) {
                        if (dock->icon_array[i]
                            && dock->icon_array[i]->icon->core->window == 
event->xclient.window) {
@@ -2583,7 +2582,7 @@ Bool wDockSnapIcon(WDock *dock, WAppIcon *icon, int 
req_x, int req_y, int *ret_x
 
                aicon = NULL;
                for (k = start; k < stop; k++) {
-                       WDock *tmp = scr->workspaces[k]->clip;
+                       WDock *tmp = wks_info.workspaces[k]->clip;
                        if (!tmp)
                                continue;
                        for (i = 0; i < tmp->max_icons; i++) {
@@ -2597,7 +2596,7 @@ Bool wDockSnapIcon(WDock *dock, WAppIcon *icon, int 
req_x, int req_y, int *ret_x
                                break;
                }
                for (k = start; k < stop; k++) {
-                       WDock *tmp = scr->workspaces[k]->clip;
+                       WDock *tmp = wks_info.workspaces[k]->clip;
                        if (!tmp)
                                continue;
                        for (i = 0; i < tmp->max_icons; i++) {
@@ -2708,7 +2707,7 @@ Bool wDockFindFreeSlot(WDock *dock, int *x_pos, int 
*y_pos)
                return True;
        }
 
-       if (dock->type == WM_CLIP && dock != 
scr->workspaces[wks_info.current_workspace]->clip)
+       if (dock->type == WM_CLIP && dock != 
wks_info.workspaces[wks_info.current_workspace]->clip)
                extra_count = scr->global_icon_count;
 
        /* if the dock is full */
@@ -3274,16 +3273,16 @@ void wDockTrackWindowLaunch(WDock *dock, Window window)
 void wClipUpdateForWorkspaceChange(WScreen *scr, int workspace)
 {
        if (!wPreferences.flags.noclip) {
-               scr->clip_icon->dock = scr->workspaces[workspace]->clip;
+               scr->clip_icon->dock = wks_info.workspaces[workspace]->clip;
                if (wks_info.current_workspace != workspace) {
-                       WDock *old_clip = 
scr->workspaces[wks_info.current_workspace]->clip;
+                       WDock *old_clip = 
wks_info.workspaces[wks_info.current_workspace]->clip;
                        WAppIconChain *chain = scr->global_icons;
 
                        while (chain) {
                                wDockMoveIconBetweenDocks(chain->aicon->dock,
-                                                    
scr->workspaces[workspace]->clip,
+                                                    
wks_info.workspaces[workspace]->clip,
                                                     chain->aicon, 
chain->aicon->xindex, chain->aicon->yindex);
-                               if (scr->workspaces[workspace]->clip->collapsed)
+                               if 
(wks_info.workspaces[workspace]->clip->collapsed)
                                        XUnmapWindow(dpy, 
chain->aicon->icon->core->window);
                                chain = chain->next;
                        }
@@ -3303,7 +3302,7 @@ void wClipUpdateForWorkspaceChange(WScreen *scr, int 
workspace)
                                }
                                old_clip->collapsed = 1;
                        }
-                       wDockShowIcons(scr->workspaces[workspace]->clip);
+                       wDockShowIcons(wks_info.workspaces[workspace]->clip);
                }
        }
 }
@@ -4152,7 +4151,7 @@ static Bool iconCanBeOmnipresent(WAppIcon *aicon)
        int i, j;
 
        for (i = 0; i < wks_info.workspace_count; i++) {
-               clip = scr->workspaces[i]->clip;
+               clip = wks_info.workspaces[i]->clip;
 
                if (clip == aicon->dock)
                        continue;
diff --git a/src/event.c b/src/event.c
index 96a3511..928ebcb 100644
--- a/src/event.c
+++ b/src/event.c
@@ -1742,7 +1742,7 @@ static void handleKeyPress(XEvent * event)
                break;
        case WKBD_CLIPRAISELOWER:
                if (!wPreferences.flags.noclip)
-                       
wDockRaiseLower(scr->workspaces[wks_info.current_workspace]->clip);
+                       
wDockRaiseLower(wks_info.workspaces[wks_info.current_workspace]->clip);
                break;
        case WKBD_DOCKRAISELOWER:
                if (!wPreferences.flags.nodock)
diff --git a/src/menu.c b/src/menu.c
index de1630b..9c7b7b5 100644
--- a/src/menu.c
+++ b/src/menu.c
@@ -45,6 +45,8 @@
 #include "rootmenu.h"
 #include "switchmenu.h"
 
+/****** Global Variables ******/
+extern WWorkspace_info wks_info;
 
 #define MOD_MASK wPreferences.modifier_mask
 
@@ -1761,7 +1763,7 @@ static void menuMouseDown(WObjDescriptor * desc, XEvent * 
event)
                        char *name;
                        int number = entry_no - 3; /* Entries "New", "Destroy 
Last" and "Last Used" appear before workspaces */
 
-                       name = wstrdup(scr->workspaces[number]->name);
+                       name = wstrdup(wks_info.workspaces[number]->name);
                        snprintf(buffer, sizeof(buffer), _("Type the name for 
workspace %i:"), number + 1);
 
                        wMenuUnmap(scr->root_menu);
diff --git a/src/screen.h b/src/screen.h
index f08a6cb..0496a91 100644
--- a/src/screen.h
+++ b/src/screen.h
@@ -121,8 +121,6 @@ typedef struct _WScreen {
 
     int window_count;                 /* number of windows in window_list */
 
-    struct WWorkspace **workspaces;    /* workspace array */
-
     WReservedArea *reservedAreas;      /* used to build totalUsableArea */
 
     WArea *usableArea;                /* area of the workspace where
diff --git a/src/session.c b/src/session.c
index 9ce2d70..8d89632 100644
--- a/src/session.c
+++ b/src/session.c
@@ -200,9 +200,8 @@ static WMPropList *makeWindowState(WWindow * wwin, 
WApplication * wapp)
 
                name = WMCreatePLString(buffer);
                cmd = WMCreatePLString(command);
-               /*sprintf(buffer, "%d", wwin->frame->workspace+1);
-                  workspace = WMCreatePLString(buffer); */
-               workspace = 
WMCreatePLString(scr->workspaces[wwin->frame->workspace]->name);
+
+               workspace = 
WMCreatePLString(wks_info.workspaces[wwin->frame->workspace]->name);
                shaded = wwin->flags.shaded ? sYes : sNo;
                miniaturized = wwin->flags.miniaturized ? sYes : sNo;
                hidden = wwin->flags.hidden ? sYes : sNo;
@@ -241,16 +240,15 @@ static WMPropList *makeWindowState(WWindow * wwin, 
WApplication * wapp)
                        /* Try the clips */
                        if (name == NULL) {
                                for (i = 0; i < wks_info.workspace_count; i++)
-                                       if (scr->workspaces[i]->clip == 
wapp->app_icon->dock)
+                                       if (wks_info.workspaces[i]->clip == 
wapp->app_icon->dock)
                                                break;
                                if (i < wks_info.workspace_count)
-                                       name = scr->workspaces[i]->name;
+                                       name = wks_info.workspaces[i]->name;
                        }
-                       if (name == NULL) // Try the drawers
-                       {
+                       /* Try the drawers */
+                       if (name == NULL) {
                                WDrawerChain *dc;
-                               for (dc = scr->drawers; dc != NULL; dc = 
dc->next)
-                               {
+                               for (dc = scr->drawers; dc != NULL; dc = 
dc->next) {
                                        if (dc->adrawer == wapp->app_icon->dock)
                                                break;
                                }
@@ -320,7 +318,7 @@ void wSessionSaveState(WScreen * scr)
        WMPutInPLDictionary(scr->session_state, sApplications, list);
        WMReleasePropList(list);
 
-       wks = 
WMCreatePLString(scr->workspaces[wks_info.current_workspace]->name);
+       wks = 
WMCreatePLString(wks_info.workspaces[wks_info.current_workspace]->name);
        WMPutInPLDictionary(scr->session_state, sWorkspace, wks);
        WMReleasePropList(wks);
 
@@ -387,7 +385,7 @@ static WSavedState *getWindowState(WScreen * scr, 
WMPropList * win_state)
                if (sscanf(tmp, "%i", &state->workspace) != 1) {
                        state->workspace = -1;
                        for (i = 0; i < wks_info.workspace_count; i++) {
-                               if (strcmp(scr->workspaces[i]->name, tmp) == 0) 
{
+                               if (strcmp(wks_info.workspaces[i]->name, tmp) 
== 0) {
                                        state->workspace = i;
                                        break;
                                }
@@ -476,8 +474,8 @@ void wSessionRestoreState(WScreen *scr)
                                /* Try the clips */
                                if (dock == NULL) {
                                        for (j = 0; j < 
wks_info.workspace_count; j++) {
-                                               if 
(strcmp(scr->workspaces[j]->name, tmp) == 0) {
-                                                       dock = 
scr->workspaces[j]->clip;
+                                               if 
(strcmp(wks_info.workspaces[j]->name, tmp) == 0) {
+                                                       dock = 
wks_info.workspaces[j]->clip;
                                                        break;
                                                }
                                        }
@@ -498,7 +496,7 @@ void wSessionRestoreState(WScreen *scr)
                                if (n == 0) {
                                        dock = scr->dock;
                                } else if (n > 0 && n <= 
wks_info.workspace_count) {
-                                       dock = scr->workspaces[n - 1]->clip;
+                                       dock = wks_info.workspaces[n - 1]->clip;
                                }
                        }
                }
diff --git a/src/startup.c b/src/startup.c
index 6ab54ab..91f6924 100644
--- a/src/startup.c
+++ b/src/startup.c
@@ -721,9 +721,9 @@ void StartUp(Bool defaultScreenOnly)
                        if (!wPreferences.flags.noclip) {
                                int i;
                                for (i = 0; i < wks_info.workspace_count; i++) {
-                                       if (wScreen[j]->workspaces[i]->clip) {
-                                               wScreen[j]->last_dock = 
wScreen[j]->workspaces[i]->clip;
-                                               
wDockDoAutoLaunch(wScreen[j]->workspaces[i]->clip, i);
+                                       if (wks_info.workspaces[i]->clip) {
+                                               wScreen[j]->last_dock = 
wks_info.workspaces[i]->clip;
+                                               
wDockDoAutoLaunch(wks_info.workspaces[i]->clip, i);
                                        }
                                }
                        }
@@ -877,6 +877,6 @@ static void manageAllWindows(WScreen * scr, int 
crashRecovery)
        wks_info.last_used_workspace = 0;
        wWorkspaceForceChange(scr, 0);
        if (!wPreferences.flags.noclip)
-               
wDockShowIcons(scr->workspaces[wks_info.current_workspace]->clip);
+               
wDockShowIcons(wks_info.workspaces[wks_info.current_workspace]->clip);
        scr->flags.startup2 = 0;
 }
diff --git a/src/switchmenu.c b/src/switchmenu.c
index 191063d..bd27113 100644
--- a/src/switchmenu.c
+++ b/src/switchmenu.c
@@ -38,12 +38,15 @@
 #include "workspace.h"
 #include "framewin.h"
 #include "switchmenu.h"
+#include "workspace.h"
 
 #define IS_GNUSTEP_MENU(w) ((w)->wm_gnustep_attr && \
        ((w)->wm_gnustep_attr->flags & GSWindowLevelAttr) && \
        ((w)->wm_gnustep_attr->window_level == WMMainMenuWindowLevel || \
         (w)->wm_gnustep_attr->window_level == WMSubmenuWindowLevel))
 
+extern WWorkspace_info wks_info;
+
 static int initialized = 0;
 static void observer(void *self, WMNotification * notif);
 static void wsobserver(void *self, WMNotification * notif);
@@ -238,7 +241,7 @@ void UpdateSwitchMenu(WScreen * scr, WWindow * wwin, int 
action)
                        snprintf(entry->rtext, MAX_WORKSPACENAME_WIDTH, "[*]");
                else
                        snprintf(entry->rtext, MAX_WORKSPACENAME_WIDTH, "[%s]",
-                                scr->workspaces[wwin->frame->workspace]->name);
+                                
wks_info.workspaces[wwin->frame->workspace]->name);
 
                if (wwin->flags.hidden) {
                        entry->flags.indicator_type = MI_HIDDEN;
@@ -296,7 +299,7 @@ void UpdateSwitchMenu(WScreen * scr, WWindow * wwin, int 
action)
                                                } else {
                                                        snprintf(entry->rtext, 
MAX_WORKSPACENAME_WIDTH,
                                                                 "[%s]",
-                                                                
scr->workspaces[wwin->frame->workspace]->name);
+                                                                
wks_info.workspaces[wwin->frame->workspace]->name);
                                                }
 
                                                rt = entry->rtext;
@@ -374,7 +377,7 @@ static void UpdateSwitchMenuWorkspace(WScreen *scr, int 
workspace)
                                snprintf(menu->entries[i]->rtext, 
MAX_WORKSPACENAME_WIDTH, "[*]");
                        else
                                snprintf(menu->entries[i]->rtext, 
MAX_WORKSPACENAME_WIDTH, "[%s]",
-                                        
scr->workspaces[wwin->frame->workspace]->name);
+                                        
wks_info.workspaces[wwin->frame->workspace]->name);
                        menu->flags.realized = 0;
                }
        }
diff --git a/src/winmenu.c b/src/winmenu.c
index e4a217e..19302f5 100644
--- a/src/winmenu.c
+++ b/src/winmenu.c
@@ -216,7 +216,6 @@ static void makeShortcutCommand(WMenu * menu, WMenuEntry * 
entry)
 
 static void updateWorkspaceMenu(WMenu * menu)
 {
-       WScreen *scr = menu->frame->screen_ptr;
        char title[MAX_WORKSPACENAME_WIDTH + 1];
        WMenuEntry *entry;
        int i;
@@ -225,16 +224,16 @@ static void updateWorkspaceMenu(WMenu * menu)
                if (i < menu->entry_no) {
 
                        entry = menu->entries[i];
-                       if (strcmp(entry->text, scr->workspaces[i]->name) != 0) 
{
+                       if (strcmp(entry->text, wks_info.workspaces[i]->name) 
!= 0) {
                                wfree(entry->text);
-                               strncpy(title, scr->workspaces[i]->name, 
MAX_WORKSPACENAME_WIDTH);
+                               strncpy(title, wks_info.workspaces[i]->name, 
MAX_WORKSPACENAME_WIDTH);
                                title[MAX_WORKSPACENAME_WIDTH] = 0;
                                menu->entries[i]->text = wstrdup(title);
                                menu->entries[i]->rtext = 
GetShortcutKey(wKeyBindings[WKBD_MOVE_WORKSPACE1 + i]);
                                menu->flags.realized = 0;
                        }
                } else {
-                       strncpy(title, scr->workspaces[i]->name, 
MAX_WORKSPACENAME_WIDTH);
+                       strncpy(title, wks_info.workspaces[i]->name, 
MAX_WORKSPACENAME_WIDTH);
                        title[MAX_WORKSPACENAME_WIDTH] = 0;
 
                        entry = wMenuAddCallback(menu, title, switchWSCommand, 
NULL);
diff --git a/src/winspector.c b/src/winspector.c
index 0f22ad5..253855e 100644
--- a/src/winspector.c
+++ b/src/winspector.c
@@ -496,7 +496,7 @@ static void saveSettings(WMButton *button, InspectorPanel 
*panel)
 
        i = WMGetPopUpButtonSelectedItem(panel->wsP) - 1;
        if (i >= 0 && i < wks_info.workspace_count) {
-               value = 
WMCreatePLString(panel->frame->screen_ptr->workspaces[i]->name);
+               value = WMCreatePLString(wks_info.workspaces[i]->name);
                different |= insertAttribute(dict, winDic, AStartWorkspace, 
value, flags);
                WMReleasePropList(value);
        }
@@ -1479,7 +1479,6 @@ static void create_tab_window_advanced(WWindow *wwin, 
InspectorPanel *panel, int
 
 static void create_tab_icon_workspace(WWindow *wwin, InspectorPanel *panel, 
int frame_width)
 {
-       WScreen *scr = wwin->screen_ptr;
        int i = 0;
 
        /* miniwindow/workspace */
@@ -1531,7 +1530,7 @@ static void create_tab_icon_workspace(WWindow *wwin, 
InspectorPanel *panel, int
        WMAddPopUpButtonItem(panel->wsP, _("Nowhere in particular"));
 
        for (i = 0; i < wks_info.workspace_count; i++)
-               WMAddPopUpButtonItem(panel->wsP, scr->workspaces[i]->name);
+               WMAddPopUpButtonItem(panel->wsP, wks_info.workspaces[i]->name);
 
        i = wDefaultGetStartWorkspace(wwin->screen_ptr, wwin->wm_instance, 
wwin->wm_class);
        if (i >= 0 && i <= wks_info.workspace_count)
diff --git a/src/wmspec.c b/src/wmspec.c
index 968bbd6..4b01aaa 100644
--- a/src/wmspec.c
+++ b/src/wmspec.c
@@ -762,8 +762,8 @@ static void updateWorkspaceNames(WScreen *scr)
        pos = buf;
        len = 0;
        for (i = 0; i < wks_info.workspace_count; i++) {
-               curr_size = strlen(scr->workspaces[i]->name);
-               strcpy(pos, scr->workspaces[i]->name);
+               curr_size = strlen(wks_info.workspaces[i]->name);
+               strcpy(pos, wks_info.workspaces[i]->name);
                pos += (curr_size + 1);
                len += (curr_size + 1);
        }
diff --git a/src/workspace.c b/src/workspace.c
index dfd7b3e..4ae1ecf 100644
--- a/src/workspace.c
+++ b/src/workspace.c
@@ -107,13 +107,13 @@ int wWorkspaceNew(WScreen *scr)
                list = wmalloc(sizeof(WWorkspace *) * wks_info.workspace_count);
 
                for (i = 0; i < wks_info.workspace_count - 1; i++)
-                       list[i] = scr->workspaces[i];
+                       list[i] = wks_info.workspaces[i];
 
                list[i] = wspace;
-               if (scr->workspaces)
-                       wfree(scr->workspaces);
+               if (wks_info.workspaces)
+                       wfree(wks_info.workspaces);
 
-               scr->workspaces = list;
+               wks_info.workspaces = list;
 
                wWorkspaceMenuUpdate(scr, scr->workspace_menu);
                wWorkspaceMenuUpdate(scr, scr->clip_ws_menu);
@@ -145,23 +145,23 @@ Bool wWorkspaceDelete(WScreen * scr, int workspace)
        }
 
        if (!wPreferences.flags.noclip) {
-               wDockDestroy(scr->workspaces[workspace]->clip);
-               scr->workspaces[workspace]->clip = NULL;
+               wDockDestroy(wks_info.workspaces[workspace]->clip);
+               wks_info.workspaces[workspace]->clip = NULL;
        }
 
        list = wmalloc(sizeof(WWorkspace *) * (wks_info.workspace_count - 1));
        j = 0;
        for (i = 0; i < wks_info.workspace_count; i++) {
                if (i != workspace) {
-                       list[j++] = scr->workspaces[i];
+                       list[j++] = wks_info.workspaces[i];
                } else {
-                       if (scr->workspaces[i]->name)
-                               wfree(scr->workspaces[i]->name);
-                       wfree(scr->workspaces[i]);
+                       if (wks_info.workspaces[i]->name)
+                               wfree(wks_info.workspaces[i]->name);
+                       wfree(wks_info.workspaces[i]);
                }
        }
-       wfree(scr->workspaces);
-       scr->workspaces = list;
+       wfree(wks_info.workspaces);
+       wks_info.workspaces = list;
 
        wks_info.workspace_count--;
 
@@ -251,7 +251,7 @@ static void showWorkspaceName(WScreen * scr, int workspace)
        Pixmap text, mask;
        int w, h;
        int px, py;
-       char *name = scr->workspaces[workspace]->name;
+       char *name = wks_info.workspaces[workspace]->name;
        int len = strlen(name);
        int x, y;
 #ifdef XINERAMA
@@ -618,8 +618,8 @@ void wWorkspaceForceChange(WScreen * scr, int workspace)
        if (scr->dock)
                wAppIconPaint(scr->dock->icon_array[0]);
 
-       if (!wPreferences.flags.noclip && 
(scr->workspaces[workspace]->clip->auto_collapse ||
-                                               
scr->workspaces[workspace]->clip->auto_raise_lower)) {
+       if (!wPreferences.flags.noclip && 
(wks_info.workspaces[workspace]->clip->auto_collapse ||
+                                          
wks_info.workspaces[workspace]->clip->auto_raise_lower)) {
                /* to handle enter notify. This will also */
                XUnmapWindow(dpy, scr->clip_icon->icon->core->window);
                XMapWindow(dpy, scr->clip_icon->icon->core->window);
@@ -682,8 +682,8 @@ void wWorkspaceRename(WScreen *scr, int workspace, const 
char *name)
        wfree(tmp);
 
        /* update workspace */
-       wfree(scr->workspaces[workspace]->name);
-       scr->workspaces[workspace]->name = wstrdup(buf);
+       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) {
@@ -754,7 +754,7 @@ void wWorkspaceMenuUpdate(WScreen * scr, WMenu * menu)
                i = wks_info.workspace_count - (menu->entry_no - MC_WORKSPACE1);
                ws = menu->entry_no - MC_WORKSPACE1;
                while (i > 0) {
-                       wstrlcpy(title, scr->workspaces[ws]->name, 
MAX_WORKSPACENAME_WIDTH);
+                       wstrlcpy(title, wks_info.workspaces[ws]->name, 
MAX_WORKSPACENAME_WIDTH);
 
                        entry = wMenuAddCallback(menu, title, switchWSCommand, 
(void *)ws);
                        entry->flags.indicator = 1;
@@ -811,7 +811,7 @@ void wWorkspaceSaveState(WScreen * scr, WMPropList * 
old_state)
        old_wks_state = WMGetFromPLDictionary(old_state, dWorkspaces);
        parr = WMCreatePLArray(NULL);
        for (i = 0; i < wks_info.workspace_count; i++) {
-               pstr = WMCreatePLString(scr->workspaces[i]->name);
+               pstr = WMCreatePLString(wks_info.workspaces[i]->name);
                wks_state = WMCreatePLDictionary(dName, pstr, NULL);
                WMReleasePropList(pstr);
                if (!wPreferences.flags.noclip) {
@@ -863,26 +863,26 @@ void wWorkspaceRestoreState(WScreen *scr)
                        scr->workspace_menu->flags.realized = 0;
                }
 
-               wfree(scr->workspaces[i]->name);
-               scr->workspaces[i]->name = wstrdup(WMGetFromPLString(pstr));
+               wfree(wks_info.workspaces[i]->name);
+               wks_info.workspaces[i]->name = wstrdup(WMGetFromPLString(pstr));
                if (!wPreferences.flags.noclip) {
                        int added_omnipresent_icons = 0;
 
                        clip_state = WMGetFromPLDictionary(wks_state, dClip);
-                       if (scr->workspaces[i]->clip)
-                               wDockDestroy(scr->workspaces[i]->clip);
+                       if (wks_info.workspaces[i]->clip)
+                               wDockDestroy(wks_info.workspaces[i]->clip);
 
-                       scr->workspaces[i]->clip = wDockRestoreState(scr, 
clip_state, WM_CLIP);
+                       wks_info.workspaces[i]->clip = wDockRestoreState(scr, 
clip_state, WM_CLIP);
                        if (i > 0)
-                               wDockHideIcons(scr->workspaces[i]->clip);
+                               wDockHideIcons(wks_info.workspaces[i]->clip);
 
                        /* We set the global icons here, because 
scr->workspaces[i]->clip
                         * was not valid in wDockRestoreState().
                         * There we only set icon->omnipresent to know which 
icons we
                         * need to set here.
                         */
-                       for (j = 0; j < scr->workspaces[i]->clip->max_icons; 
j++) {
-                               WAppIcon *aicon = 
scr->workspaces[i]->clip->icon_array[j];
+                       for (j = 0; j < 
wks_info.workspaces[i]->clip->max_icons; j++) {
+                               WAppIcon *aicon = 
wks_info.workspaces[i]->clip->icon_array[j];
                                int k;
 
                                if (!aicon || !aicon->omnipresent)
@@ -894,21 +894,21 @@ void wWorkspaceRestoreState(WScreen *scr)
                                        continue;
 
                                /* Move this appicon from workspace i to 
workspace 0 */
-                               scr->workspaces[i]->clip->icon_array[j] = NULL;
-                               scr->workspaces[i]->clip->icon_count--;
+                               wks_info.workspaces[i]->clip->icon_array[j] = 
NULL;
+                               wks_info.workspaces[i]->clip->icon_count--;
 
                                added_omnipresent_icons++;
                                /* If there are too many omnipresent appicons, 
we are in trouble */
-                               assert(scr->workspaces[0]->clip->icon_count + 
added_omnipresent_icons
-                                      <= scr->workspaces[0]->clip->max_icons);
+                               assert(wks_info.workspaces[0]->clip->icon_count 
+ added_omnipresent_icons
+                                      <= 
wks_info.workspaces[0]->clip->max_icons);
                                /* Find first free spot on workspace 0 */
-                               for (k = 0; k < 
scr->workspaces[0]->clip->max_icons; k++)
-                                       if 
(scr->workspaces[0]->clip->icon_array[k] == NULL)
+                               for (k = 0; k < 
wks_info.workspaces[0]->clip->max_icons; k++)
+                                       if 
(wks_info.workspaces[0]->clip->icon_array[k] == NULL)
                                                break;
-                               scr->workspaces[0]->clip->icon_array[k] = aicon;
-                               aicon->dock = scr->workspaces[0]->clip;
+                               wks_info.workspaces[0]->clip->icon_array[k] = 
aicon;
+                               aicon->dock = wks_info.workspaces[0]->clip;
                        }
-                       scr->workspaces[0]->clip->icon_count += 
added_omnipresent_icons;
+                       wks_info.workspaces[0]->clip->icon_count += 
added_omnipresent_icons;
                }
 
                WMPostNotificationName(WMNWorkspaceNameChanged, scr, (void 
*)(uintptr_t) i);
@@ -923,7 +923,7 @@ int wGetWorkspaceNumber(WScreen *scr, const char *value)
        if (sscanf(value, "%i", &w) != 1) {
                w = -1;
                for (i = 0; i < wks_info.workspace_count; i++) {
-                       if (strcmp(scr->workspaces[i]->name, value) == 0) {
+                       if (strcmp(wks_info.workspaces[i]->name, value) == 0) {
                                w = i;
                                break;
                        }
diff --git a/src/workspace.h b/src/workspace.h
index 13bb02b..5fcbe9b 100644
--- a/src/workspace.h
+++ b/src/workspace.h
@@ -22,7 +22,6 @@
 #ifndef WMWORKSPACE_H_
 #define WMWORKSPACE_H_
 
-
 typedef struct WWorkspace {
     char *name;
     struct WDock *clip;
@@ -30,6 +29,7 @@ typedef struct WWorkspace {
 
 typedef struct WWorkspace_info {
        /* Workspace stuff */
+       struct WWorkspace **workspaces; /* workspace array */
        int workspace_count;            /* number of workspaces */
        int current_workspace;          /* current workspace number */
        int last_used_workspace;        /* last used workspace number */
-- 
1.8.4.rc3


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

Reply via email to