From: "Rodolfo García Peñas (kix)" <k...@kix.es> 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. --- src/appicon.c | 14 +++++------ src/balloon.c | 4 +-- src/defaults.c | 2 +- src/dock.c | 39 ++++++++++++++-------------- src/event.c | 2 +- src/menu.c | 3 ++- src/screen.h | 2 -- src/session.c | 23 ++++++++--------- 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 | 11 ++++---- 15 files changed, 103 insertions(+), 104 deletions(-) diff --git a/src/appicon.c b/src/appicon.c index 2ad4005..3459612 100644 --- a/src/appicon.c +++ b/src/appicon.c @@ -186,7 +186,7 @@ void unpaint_app_icon(WApplication *wapp) return; scr = wapp->main_window_desc->screen_ptr; - clip = scr->workspaces[wks_nfo.current_workspace]->clip; + clip = wks_nfo.workspaces[wks_nfo.current_workspace]->clip; if (!clip || !aicon->attracted || !clip->collapsed) XUnmapWindow(dpy, aicon->icon->core->window); @@ -220,7 +220,7 @@ void paint_app_icon(WApplication *wapp) attracting_dock = scr->attracting_drawer != NULL ? scr->attracting_drawer : - scr->workspaces[wks_nfo.current_workspace]->clip; + wks_nfo.workspaces[wks_nfo.current_workspace]->clip; if (attracting_dock && attracting_dock->attract_icons && wDockFindFreeSlot(attracting_dock, &x, &y)) { wapp->app_icon->attracted = 1; @@ -816,8 +816,8 @@ 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_nfo.current_workspace]->clip) - allDocks[ i++ ] = scr->workspaces[wks_nfo.current_workspace]->clip; + originalDock != wks_nfo.workspaces[wks_nfo.current_workspace]->clip) + allDocks[ i++ ] = wks_nfo.workspaces[wks_nfo.current_workspace]->clip; for ( ; i < scr->drawer_count + 2; i++) /* In case the clip, the dock, or both, are disabled */ allDocks[ i ] = NULL; @@ -870,7 +870,7 @@ Bool wHandleAppIconMove(WAppIcon *aicon, XEvent *event) for (i = 0; i < wks_nfo.workspace_count; i++) { if (i == wks_nfo.current_workspace) continue; - wDockShowIcons(scr->workspaces[i]->clip); + wDockShowIcons(wks_nfo.workspaces[i]->clip); /* Note: if dock is collapsed (for instance, because it auto-collapses), its icons still won't show up */ } @@ -1075,7 +1075,7 @@ Bool wHandleAppIconMove(WAppIcon *aicon, XEvent *event) for (i = 0; i < wks_nfo.workspace_count; i++) { if (i == wks_nfo.current_workspace) continue; - wDockHideIcons(scr->workspaces[i]->clip); + wDockHideIcons(wks_nfo.workspaces[i]->clip); } } if (wPreferences.auto_arrange_icons && !(originalDock != NULL && docked)) @@ -1155,7 +1155,7 @@ static void create_appicon_from_dock(WWindow *wwin, WApplication *wapp, Window m if (!wapp->app_icon) { int i; for (i = 0; i < wks_nfo.workspace_count; i++) { - WDock *dock = scr->workspaces[i]->clip; + WDock *dock = wks_nfo.workspaces[i]->clip; if (dock) wapp->app_icon = findDockIconFor(dock, main_window); if (wapp->app_icon) diff --git a/src/balloon.c b/src/balloon.c index b210b7c..59700be 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_nfo.current_workspace]->name) > 5) { - scr->balloon->text = wstrdup(scr->workspaces[wks_nfo.current_workspace]->name); + if (strlen(wks_nfo.workspaces[wks_nfo.current_workspace]->name) > 5) { + scr->balloon->text = wstrdup(wks_nfo.workspaces[wks_nfo.current_workspace]->name); } else { wBalloonHide(scr); return; diff --git a/src/defaults.c b/src/defaults.c index 1fc0064..142097a 100644 --- a/src/defaults.c +++ b/src/defaults.c @@ -2453,7 +2453,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_nfo.workspaces) { wWorkspaceForceChange(scr, wks_nfo.current_workspace); wArrangeIcons(scr, False); } diff --git a/src/dock.c b/src/dock.c index abfde26..27359cd 100644 --- a/src/dock.c +++ b/src/dock.c @@ -178,7 +178,7 @@ static void renameCallback(WMenu *menu, WMenuEntry *entry) wspace = wks_nfo.current_workspace; - name = wstrdup(dock->screen_ptr->workspaces[wspace]->name); + name = wstrdup(wks_nfo.workspaces[wspace]->name); snprintf(buffer, sizeof(buffer), _("Type the name for workspace %i:"), wspace + 1); if (wInputDialog(dock->screen_ptr, _("Rename Workspace"), buffer, &name)) @@ -600,7 +600,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_nfo.workspace_count; i++) { - if (scr->workspaces[ i ]->clip->attract_icons) { + if (wks_nfo.workspaces[i]->clip->attract_icons) { ask_for_confirmation = True; break; } @@ -626,7 +626,7 @@ static void toggleAutoAttractCallback(WMenu *menu, WMenuEntry *entry) * previously attracting drawer */ int i; for (i = 0; i < wks_nfo.workspace_count; i++) - scr->workspaces[ i ]->clip->attract_icons = False; + wks_nfo.workspaces[ i ]->clip->attract_icons = False; /* dock menu will be updated later, when opened */ if (scr->attracting_drawer != NULL) @@ -872,7 +872,7 @@ static void switchWSCommand(WMenu *menu, WMenuEntry *entry) if (entry->order == wks_nfo.current_workspace) return; src = icon->dock; - dest = scr->workspaces[entry->order]->clip; + dest = wks_nfo.workspaces[entry->order]->clip; selectedIcons = getSelected(src); @@ -939,7 +939,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; @@ -948,15 +947,15 @@ static void updateWorkspaceMenu(WMenu *menu, WAppIcon *icon) for (i = 0; i < wks_nfo.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_nfo.workspaces[i]->name) != 0) { wfree(menu->entries[i]->text); - strcpy(title, scr->workspaces[i]->name); + strcpy(title, wks_nfo.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_nfo.workspaces[i]->name); wMenuAddCallback(menu, title, switchWSCommand, (void *)icon); @@ -1371,7 +1370,7 @@ void wDockDestroy(WDock *dock) void wClipIconPaint(WAppIcon *aicon) { WScreen *scr = aicon->icon->core->screen_ptr; - WWorkspace *workspace = scr->workspaces[wks_nfo.current_workspace]; + WWorkspace *workspace = wks_nfo.workspaces[wks_nfo.current_workspace]; WMColor *color; Window win = aicon->icon->core->window; int length, nlength; @@ -1597,7 +1596,7 @@ void wClipSaveState(WScreen *scr) WMPropList *wClipSaveWorkspaceState(WScreen *scr, int workspace) { - return dockSaveState(scr->workspaces[workspace]->clip); + return dockSaveState(wks_nfo.workspaces[workspace]->clip); } static Bool getBooleanDockValue(WMPropList *value, WMPropList *key) @@ -2033,7 +2032,7 @@ static WDock *findDock(WScreen *scr, XEvent *event, int *icon_pos) } } } - if (*icon_pos < 0 && (dock = scr->workspaces[wks_nfo.current_workspace]->clip) != NULL) { + if (*icon_pos < 0 && (dock = wks_nfo.workspaces[wks_nfo.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) { @@ -2585,7 +2584,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_nfo.workspaces[k]->clip; if (!tmp) continue; for (i = 0; i < tmp->max_icons; i++) { @@ -2599,7 +2598,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_nfo.workspaces[k]->clip; if (!tmp) continue; for (i = 0; i < tmp->max_icons; i++) { @@ -2710,7 +2709,7 @@ Bool wDockFindFreeSlot(WDock *dock, int *x_pos, int *y_pos) return True; } - if (dock->type == WM_CLIP && dock != scr->workspaces[wks_nfo.current_workspace]->clip) + if (dock->type == WM_CLIP && dock != wks_nfo.workspaces[wks_nfo.current_workspace]->clip) extra_count = scr->global_icon_count; /* if the dock is full */ @@ -3276,16 +3275,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_nfo.workspaces[workspace]->clip; if (wks_nfo.current_workspace != workspace) { - WDock *old_clip = scr->workspaces[wks_nfo.current_workspace]->clip; + WDock *old_clip = wks_nfo.workspaces[wks_nfo.current_workspace]->clip; WAppIconChain *chain = scr->global_icons; while (chain) { wDockMoveIconBetweenDocks(chain->aicon->dock, - scr->workspaces[workspace]->clip, + wks_nfo.workspaces[workspace]->clip, chain->aicon, chain->aicon->xindex, chain->aicon->yindex); - if (scr->workspaces[workspace]->clip->collapsed) + if (wks_nfo.workspaces[workspace]->clip->collapsed) XUnmapWindow(dpy, chain->aicon->icon->core->window); chain = chain->next; } @@ -3305,7 +3304,7 @@ void wClipUpdateForWorkspaceChange(WScreen *scr, int workspace) } old_clip->collapsed = 1; } - wDockShowIcons(scr->workspaces[workspace]->clip); + wDockShowIcons(wks_nfo.workspaces[workspace]->clip); } } } @@ -4154,7 +4153,7 @@ static Bool iconCanBeOmnipresent(WAppIcon *aicon) int i, j; for (i = 0; i < wks_nfo.workspace_count; i++) { - clip = scr->workspaces[i]->clip; + clip = wks_nfo.workspaces[i]->clip; if (clip == aicon->dock) continue; diff --git a/src/event.c b/src/event.c index 98ad609..ac2375b 100644 --- a/src/event.c +++ b/src/event.c @@ -1760,7 +1760,7 @@ static void handleKeyPress(XEvent * event) break; case WKBD_CLIPRAISELOWER: if (!wPreferences.flags.noclip) - wDockRaiseLower(scr->workspaces[wks_nfo.current_workspace]->clip); + wDockRaiseLower(wks_nfo.workspaces[wks_nfo.current_workspace]->clip); break; case WKBD_DOCKRAISELOWER: if (!wPreferences.flags.nodock) diff --git a/src/menu.c b/src/menu.c index 0ececa7..1891d03 100644 --- a/src/menu.c +++ b/src/menu.c @@ -48,6 +48,7 @@ /****** Global Variables ******/ extern Cursor wCursor[WCUR_LAST]; +extern wks_info wks_nfo; extern XContext wWinContext; @@ -1766,7 +1767,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_nfo.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 70eb10d..0fa1e75 100644 --- a/src/session.c +++ b/src/session.c @@ -204,9 +204,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_nfo.workspaces[wwin->frame->workspace]->name); shaded = wwin->flags.shaded ? sYes : sNo; miniaturized = wwin->flags.miniaturized ? sYes : sNo; hidden = wwin->flags.hidden ? sYes : sNo; @@ -245,10 +244,10 @@ static WMPropList *makeWindowState(WWindow * wwin, WApplication * wapp) if (name == NULL) // Try the clips { for (i = 0; i < wks_nfo.workspace_count; i++) - if (scr->workspaces[i]->clip == wapp->app_icon->dock) + if (wks_nfo.workspaces[i]->clip == wapp->app_icon->dock) break; if (i < wks_nfo.workspace_count) - name = scr->workspaces[i]->name; + name = wks_nfo.workspaces[i]->name; } if (name == NULL) // Try the drawers { @@ -324,7 +323,7 @@ void wSessionSaveState(WScreen * scr) WMPutInPLDictionary(scr->session_state, sApplications, list); WMReleasePropList(list); - wks = WMCreatePLString(scr->workspaces[wks_nfo.current_workspace]->name); + wks = WMCreatePLString(wks_nfo.workspaces[wks_nfo.current_workspace]->name); WMPutInPLDictionary(scr->session_state, sWorkspace, wks); WMReleasePropList(wks); @@ -376,7 +375,7 @@ static pid_t execCommand(WScreen *scr, char *command) return pid; } -static WSavedState *getWindowState(WScreen * scr, WMPropList * win_state) +static WSavedState *getWindowState(WMPropList *win_state) { WSavedState *state = wmalloc(sizeof(WSavedState)); WMPropList *value; @@ -391,7 +390,7 @@ static WSavedState *getWindowState(WScreen * scr, WMPropList * win_state) if (sscanf(tmp, "%i", &state->workspace) != 1) { state->workspace = -1; for (i = 0; i < wks_nfo.workspace_count; i++) { - if (strcmp(scr->workspaces[i]->name, tmp) == 0) { + if (strcmp(wks_nfo.workspaces[i]->name, tmp) == 0) { state->workspace = i; break; } @@ -468,7 +467,7 @@ void wSessionRestoreState(WScreen *scr) if (!instance && !class) continue; - state = getWindowState(scr, win_info); + state = getWindowState(win_info); dock = NULL; value = WMGetFromPLDictionary(win_info, sDock); @@ -480,8 +479,8 @@ void wSessionRestoreState(WScreen *scr) if (dock == NULL) // Try the clips { for (j = 0; j < wks_nfo.workspace_count; j++) { - if (strcmp(scr->workspaces[j]->name, tmp) == 0) { - dock = scr->workspaces[j]->clip; + if (strcmp(wks_nfo.workspaces[j]->name, tmp) == 0) { + dock = wks_nfo.workspaces[j]->clip; break; } } @@ -502,7 +501,7 @@ void wSessionRestoreState(WScreen *scr) if (n == 0) { dock = scr->dock; } else if (n > 0 && n <= wks_nfo.workspace_count) { - dock = scr->workspaces[n - 1]->clip; + dock = wks_nfo.workspaces[n - 1]->clip; } } } diff --git a/src/startup.c b/src/startup.c index b2190ba..54659ba 100644 --- a/src/startup.c +++ b/src/startup.c @@ -754,9 +754,9 @@ void StartUp(Bool defaultScreenOnly) if (!wPreferences.flags.noclip) { int i; for (i = 0; i < wks_nfo.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_nfo.workspaces[i]->clip) { + wScreen[j]->last_dock = wks_nfo.workspaces[i]->clip; + wDockDoAutoLaunch(wks_nfo.workspaces[i]->clip, i); } } } @@ -910,6 +910,6 @@ static void manageAllWindows(WScreen * scr, int crashRecovery) wks_nfo.last_used_workspace = 0; wWorkspaceForceChange(scr, 0); if (!wPreferences.flags.noclip) - wDockShowIcons(scr->workspaces[wks_nfo.current_workspace]->clip); + wDockShowIcons(wks_nfo.workspaces[wks_nfo.current_workspace]->clip); scr->flags.startup2 = 0; } diff --git a/src/switchmenu.c b/src/switchmenu.c index 191063d..1b7a257 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 wks_info wks_nfo; + 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_nfo.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_nfo.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_nfo.workspaces[wwin->frame->workspace]->name); menu->flags.realized = 0; } } diff --git a/src/winmenu.c b/src/winmenu.c index 7f93a3d..84140ae 100644 --- a/src/winmenu.c +++ b/src/winmenu.c @@ -218,7 +218,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; @@ -227,16 +226,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_nfo.workspaces[i]->name) != 0) { wfree(entry->text); - strncpy(title, scr->workspaces[i]->name, MAX_WORKSPACENAME_WIDTH); + strncpy(title, wks_nfo.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_nfo.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 d2e480e..5e02010 100644 --- a/src/winspector.c +++ b/src/winspector.c @@ -497,7 +497,7 @@ static void saveSettings(WMButton *button, InspectorPanel *panel) i = WMGetPopUpButtonSelectedItem(panel->wsP) - 1; if (i >= 0 && i < wks_nfo.workspace_count) { - value = WMCreatePLString(panel->frame->screen_ptr->workspaces[i]->name); + value = WMCreatePLString(wks_nfo.workspaces[i]->name); different |= insertAttribute(dict, winDic, AStartWorkspace, value, flags); WMReleasePropList(value); } @@ -1480,7 +1480,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 */ @@ -1532,7 +1531,7 @@ static void create_tab_icon_workspace(WWindow *wwin, InspectorPanel *panel, int WMAddPopUpButtonItem(panel->wsP, _("Nowhere in particular")); for (i = 0; i < wks_nfo.workspace_count; i++) - WMAddPopUpButtonItem(panel->wsP, scr->workspaces[i]->name); + WMAddPopUpButtonItem(panel->wsP, wks_nfo.workspaces[i]->name); i = wDefaultGetStartWorkspace(wwin->screen_ptr, wwin->wm_instance, wwin->wm_class); if (i >= 0 && i <= wks_nfo.workspace_count) diff --git a/src/wmspec.c b/src/wmspec.c index 4df1d81..7c61143 100644 --- a/src/wmspec.c +++ b/src/wmspec.c @@ -764,8 +764,8 @@ static void updateWorkspaceNames(WScreen *scr) pos = buf; len = 0; for (i = 0; i < wks_nfo.workspace_count; i++) { - curr_size = strlen(scr->workspaces[i]->name); - strcpy(pos, scr->workspaces[i]->name); + curr_size = strlen(wks_nfo.workspaces[i]->name); + strcpy(pos, wks_nfo.workspaces[i]->name); pos += (curr_size + 1); len += (curr_size + 1); } diff --git a/src/workspace.c b/src/workspace.c index c5c2526..41196bc 100644 --- a/src/workspace.c +++ b/src/workspace.c @@ -108,13 +108,13 @@ int wWorkspaceNew(WScreen *scr) list = wmalloc(sizeof(WWorkspace *) * wks_nfo.workspace_count); for (i = 0; i < wks_nfo.workspace_count - 1; i++) - list[i] = scr->workspaces[i]; + list[i] = wks_nfo.workspaces[i]; list[i] = wspace; - if (scr->workspaces) - wfree(scr->workspaces); + if (wks_nfo.workspaces) + wfree(wks_nfo.workspaces); - scr->workspaces = list; + wks_nfo.workspaces = list; wWorkspaceMenuUpdate(scr, scr->workspace_menu); wWorkspaceMenuUpdate(scr, scr->clip_ws_menu); @@ -146,23 +146,23 @@ Bool wWorkspaceDelete(WScreen * scr, int workspace) } if (!wPreferences.flags.noclip) { - wDockDestroy(scr->workspaces[workspace]->clip); - scr->workspaces[workspace]->clip = NULL; + wDockDestroy(wks_nfo.workspaces[workspace]->clip); + wks_nfo.workspaces[workspace]->clip = NULL; } list = wmalloc(sizeof(WWorkspace *) * (wks_nfo.workspace_count - 1)); j = 0; for (i = 0; i < wks_nfo.workspace_count; i++) { if (i != workspace) { - list[j++] = scr->workspaces[i]; + list[j++] = wks_nfo.workspaces[i]; } else { - if (scr->workspaces[i]->name) - wfree(scr->workspaces[i]->name); - wfree(scr->workspaces[i]); + if (wks_nfo.workspaces[i]->name) + wfree(wks_nfo.workspaces[i]->name); + wfree(wks_nfo.workspaces[i]); } } - wfree(scr->workspaces); - scr->workspaces = list; + wfree(wks_nfo.workspaces); + wks_nfo.workspaces = list; wks_nfo.workspace_count--; @@ -252,7 +252,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_nfo.workspaces[workspace]->name; int len = strlen(name); int x, y; #ifdef XINERAMA @@ -623,8 +623,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_nfo.workspaces[workspace]->clip->auto_collapse || + wks_nfo.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); @@ -687,8 +687,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_nfo.workspaces[workspace]->name); + wks_nfo.workspaces[workspace]->name = wstrdup(buf); if (scr->clip_ws_menu) { if (strcmp(scr->clip_ws_menu->entries[workspace + MC_WORKSPACE1]->text, buf) != 0) { @@ -759,7 +759,7 @@ void wWorkspaceMenuUpdate(WScreen * scr, WMenu * menu) i = wks_nfo.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_nfo.workspaces[ws]->name, MAX_WORKSPACENAME_WIDTH); entry = wMenuAddCallback(menu, title, switchWSCommand, (void *)ws); entry->flags.indicator = 1; @@ -817,7 +817,7 @@ void wWorkspaceSaveState(WScreen * scr, WMPropList * old_state) old_wks_state = WMGetFromPLDictionary(old_state, dWorkspaces); parr = WMCreatePLArray(NULL); for (i = 0; i < wks_nfo.workspace_count; i++) { - pstr = WMCreatePLString(scr->workspaces[i]->name); + pstr = WMCreatePLString(wks_nfo.workspaces[i]->name); wks_state = WMCreatePLDictionary(dName, pstr, NULL); WMReleasePropList(pstr); if (!wPreferences.flags.noclip) { @@ -869,26 +869,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_nfo.workspaces[i]->name); + wks_nfo.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_nfo.workspaces[i]->clip) + wDockDestroy(wks_nfo.workspaces[i]->clip); - scr->workspaces[i]->clip = wDockRestoreState(scr, clip_state, WM_CLIP); + wks_nfo.workspaces[i]->clip = wDockRestoreState(scr, clip_state, WM_CLIP); if (i > 0) - wDockHideIcons(scr->workspaces[i]->clip); + wDockHideIcons(wks_nfo.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_nfo.workspaces[i]->clip->max_icons; j++) { + WAppIcon *aicon = wks_nfo.workspaces[i]->clip->icon_array[j]; int k; if (!aicon || !aicon->omnipresent) @@ -900,21 +900,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_nfo.workspaces[i]->clip->icon_array[j] = NULL; + wks_nfo.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_nfo.workspaces[0]->clip->icon_count + added_omnipresent_icons + <= wks_nfo.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_nfo.workspaces[0]->clip->max_icons; k++) + if (wks_nfo.workspaces[0]->clip->icon_array[k] == NULL) break; - scr->workspaces[0]->clip->icon_array[k] = aicon; - aicon->dock = scr->workspaces[0]->clip; + wks_nfo.workspaces[0]->clip->icon_array[k] = aicon; + aicon->dock = wks_nfo.workspaces[0]->clip; } - scr->workspaces[0]->clip->icon_count += added_omnipresent_icons; + wks_nfo.workspaces[0]->clip->icon_count += added_omnipresent_icons; } WMPostNotificationName(WMNWorkspaceNameChanged, scr, (void *)(uintptr_t) i); @@ -929,7 +929,7 @@ int wGetWorkspaceNumber(WScreen *scr, const char *value) if (sscanf(value, "%i", &w) != 1) { w = -1; for (i = 0; i < wks_nfo.workspace_count; i++) { - if (strcmp(scr->workspaces[i]->name, value) == 0) { + if (strcmp(wks_nfo.workspaces[i]->name, value) == 0) { w = i; break; } diff --git a/src/workspace.h b/src/workspace.h index e77c661..07d9e4f 100644 --- a/src/workspace.h +++ b/src/workspace.h @@ -22,18 +22,19 @@ #ifndef WMWORKSPACE_H_ #define WMWORKSPACE_H_ +typedef struct WWorkspace { + char *name; + struct WDock *clip; +} WWorkspace; + typedef struct wks_info { + 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 */ WMFont *workspace_name_font; } wks_info; -typedef struct WWorkspace { - char *name; - struct WDock *clip; -} WWorkspace; - void wWorkspaceMake(WScreen *scr, int count); int wWorkspaceNew(WScreen *scr); int wGetWorkspaceNumber(WScreen *scr, const char *value); -- 1.7.10.4 -- To unsubscribe, send mail to wmaker-dev-unsubscr...@lists.windowmaker.org.