From: "Rodolfo García Peñas (kix)" <[email protected]>
The variable workspace_count, that contains the number of workspaces
is moved to the global workspace properties.
Now the screen is not needed to know the workspace_count.
---
src/appicon.c | 7 +++---
src/dock.c | 17 +++++++-------
src/event.c | 9 ++++----
src/moveres.c | 19 ++++++++-------
src/screen.h | 2 --
src/session.c | 13 ++++++-----
src/startup.c | 3 ++-
src/window.c | 21 +++++++++--------
src/winmenu.c | 4 ++--
src/winspector.c | 9 ++++----
src/wmspec.c | 19 +++++++--------
src/workspace.c | 68 +++++++++++++++++++++++++++---------------------------
src/workspace.h | 1 +
13 files changed, 101 insertions(+), 91 deletions(-)
diff --git a/src/appicon.c b/src/appicon.c
index a6b8609..26457f2 100644
--- a/src/appicon.c
+++ b/src/appicon.c
@@ -64,6 +64,7 @@
extern Cursor wCursor[WCUR_LAST];
extern WDDomain *WDWindowAttributes;
extern XContext wWinContext;
+extern wks_info wks_nfo;
#define MOD_MASK wPreferences.modifier_mask
#define ICON_SIZE wPreferences.icon_size
@@ -866,7 +867,7 @@ Bool wHandleAppIconMove(WAppIcon *aicon, XEvent *event)
if (omnipresent && !showed_all_clips) {
int i;
- for (i = 0; i < scr->workspace_count; i++) {
+ for (i = 0; i < wks_nfo.workspace_count; i++) {
if (i == scr->current_workspace)
continue;
wDockShowIcons(scr->workspaces[i]->clip);
@@ -1071,7 +1072,7 @@ Bool wHandleAppIconMove(WAppIcon *aicon, XEvent *event)
}
if (showed_all_clips) {
int i;
- for (i = 0; i < scr->workspace_count; i++) {
+ for (i = 0; i < wks_nfo.workspace_count; i++) {
if (i == scr->current_workspace)
continue;
wDockHideIcons(scr->workspaces[i]->clip);
@@ -1153,7 +1154,7 @@ static void create_appicon_from_dock(WWindow *wwin,
WApplication *wapp, Window m
/* check clips */
if (!wapp->app_icon) {
int i;
- for (i = 0; i < scr->workspace_count; i++) {
+ for (i = 0; i < wks_nfo.workspace_count; i++) {
WDock *dock = scr->workspaces[i]->clip;
if (dock)
wapp->app_icon = findDockIconFor(dock,
main_window);
diff --git a/src/dock.c b/src/dock.c
index 69bebde..60c8910 100644
--- a/src/dock.c
+++ b/src/dock.c
@@ -68,6 +68,7 @@
/**** Global variables ****/
extern Cursor wCursor[WCUR_LAST];
extern XContext wWinContext;
+extern wks_info wks_nfo;
#define MOD_MASK wPreferences.modifier_mask
#define ICON_SIZE wPreferences.icon_size
@@ -598,7 +599,7 @@ static void toggleAutoAttractCallback(WMenu *menu,
WMenuEntry *entry)
} else if (dock->type == WM_DRAWER) {
/* check if at least one clip already auto attracts icons */
int i, ask_for_confirmation = False;
- for (i = 0; i < scr->workspace_count; i++) {
+ for (i = 0; i < wks_nfo.workspace_count; i++) {
if (scr->workspaces[ i ]->clip->attract_icons) {
ask_for_confirmation = True;
break;
@@ -624,10 +625,10 @@ static void toggleAutoAttractCallback(WMenu *menu,
WMenuEntry *entry)
/* The newly auto-attracting dock is a drawer: disable
any clip and
* previously attracting drawer */
int i;
- for (i = 0; i < scr->workspace_count; i++) {
+ for (i = 0; i < wks_nfo.workspace_count; i++)
scr->workspaces[ i ]->clip->attract_icons =
False;
/* dock menu will be updated later, when opened
*/
- }
+
if (scr->attracting_drawer != NULL)
scr->attracting_drawer->attract_icons = False;
scr->attracting_drawer = dock;
@@ -945,7 +946,7 @@ static void updateWorkspaceMenu(WMenu *menu, WAppIcon *icon)
if (!menu || !icon)
return;
- for (i = 0; i < scr->workspace_count; i++) {
+ 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) {
wfree(menu->entries[i]->text);
@@ -2580,7 +2581,7 @@ Bool wDockSnapIcon(WDock *dock, WAppIcon *icon, int
req_x, int req_y, int *ret_x
int start, stop, k;
start = icon->omnipresent ? 0 : scr->current_workspace;
- stop = icon->omnipresent ? scr->workspace_count : start + 1;
+ stop = icon->omnipresent ? wks_nfo.workspace_count : start + 1;
aicon = NULL;
for (k = start; k < stop; k++) {
@@ -3899,7 +3900,7 @@ static void handleClipChangeWorkspace(WScreen *scr,
XEvent *event)
new_ws = wPreferences.ws_advance || (event->xbutton.state &
ControlMask);
if (direction == CLIP_FORWARD) {
- if (scr->current_workspace < scr->workspace_count - 1)
+ if (scr->current_workspace < wks_nfo.workspace_count - 1)
wWorkspaceChange(scr, scr->current_workspace + 1);
else if (new_ws && scr->current_workspace < MAX_WORKSPACES - 1)
wWorkspaceChange(scr, scr->current_workspace + 1);
@@ -3909,7 +3910,7 @@ static void handleClipChangeWorkspace(WScreen *scr,
XEvent *event)
if (scr->current_workspace > 0)
wWorkspaceChange(scr, scr->current_workspace - 1);
else if (scr->current_workspace == 0 && wPreferences.ws_cycle)
- wWorkspaceChange(scr, scr->workspace_count - 1);
+ wWorkspaceChange(scr, wks_nfo.workspace_count - 1);
}
wClipIconPaint(scr->clip_icon);
@@ -4152,7 +4153,7 @@ static Bool iconCanBeOmnipresent(WAppIcon *aicon)
WAppIcon *btn;
int i, j;
- for (i = 0; i < scr->workspace_count; i++) {
+ for (i = 0; i < wks_nfo.workspace_count; i++) {
clip = scr->workspaces[i]->clip;
if (clip == aicon->dock)
diff --git a/src/event.c b/src/event.c
index 95b437b..481dc55 100644
--- a/src/event.c
+++ b/src/event.c
@@ -84,6 +84,7 @@ extern Cursor wCursor[WCUR_LAST];
extern WShortKey wKeyBindings[WKBD_LAST];
extern int wScreenCount;
+extern wks_info wks_nfo;
extern Time LastTimestamp;
extern Time LastFocusChange;
@@ -1585,7 +1586,7 @@ static void handleKeyPress(XEvent * event)
case WKBD_WORKSPACE1 ... WKBD_WORKSPACE10:
widx = command - WKBD_WORKSPACE1;
i = (scr->current_workspace / 10) * 10 + widx;
- if (wPreferences.ws_advance || i < scr->workspace_count)
+ if (wPreferences.ws_advance || i < wks_nfo.workspace_count)
wWorkspaceChange(scr, i);
break;
@@ -1602,7 +1603,7 @@ static void handleKeyPress(XEvent * event)
case WKBD_MOVE_WORKSPACE1 ... WKBD_MOVE_WORKSPACE10:
widx = command - WKBD_MOVE_WORKSPACE1;
i = (scr->current_workspace / 10) * 10 + widx;
- if (wwin && (wPreferences.ws_advance || i <
scr->workspace_count))
+ if (wwin && (wPreferences.ws_advance || i <
wks_nfo.workspace_count))
wWindowChangeWorkspace(wwin, i);
break;
@@ -1629,7 +1630,7 @@ static void handleKeyPress(XEvent * event)
column = scr->current_workspace % 10;
if (command == WKBD_MOVE_NEXTWSLAYER) {
- if ((row + 1) * 10 <
scr->workspace_count)
+ if ((row + 1) * 10 <
wks_nfo.workspace_count)
wWindowChangeWorkspace(wwin,
column + (row + 1) * 10);
} else {
if (row > 0)
@@ -1749,7 +1750,7 @@ static void handleKeyPress(XEvent * event)
column = scr->current_workspace % 10;
if (command == WKBD_NEXTWSLAYER) {
- if ((row + 1) * 10 < scr->workspace_count)
+ if ((row + 1) * 10 < wks_nfo.workspace_count)
wWorkspaceChange(scr, column + (row +
1) * 10);
} else {
if (row > 0)
diff --git a/src/moveres.c b/src/moveres.c
index 26b8cf9..b0026b5 100644
--- a/src/moveres.c
+++ b/src/moveres.c
@@ -62,6 +62,7 @@
/****** Global Variables ******/
extern Cursor wCursor[WCUR_LAST];
+extern wks_info wks_nfo;
/*
*----------------------------------------------------------------------
@@ -847,15 +848,15 @@ static Bool checkWorkspaceChange(WWindow * wwin, MoveData
* data, Bool opaqueMov
} else if (scr->current_workspace == 0 &&
wPreferences.ws_cycle) {
- crossWorkspace(scr, wwin, opaqueMove,
scr->workspace_count - 1, True);
+ crossWorkspace(scr, wwin, opaqueMove,
wks_nfo.workspace_count - 1, True);
changed = True;
data->rubCount = 0;
}
} else if (data->mouseX >= scr->scr_width - 2) {
- if (scr->current_workspace == scr->workspace_count - 1) {
+ if (scr->current_workspace == wks_nfo.workspace_count - 1) {
- if (wPreferences.ws_cycle || scr->workspace_count ==
MAX_WORKSPACES) {
+ if (wPreferences.ws_cycle || wks_nfo.workspace_count ==
MAX_WORKSPACES) {
crossWorkspace(scr, wwin, opaqueMove, 0, False);
changed = True;
@@ -884,7 +885,7 @@ static Bool checkWorkspaceChange(WWindow * wwin, MoveData *
data, Bool opaqueMov
changed = True;
data->rubCount = 0;
}
- } else if (scr->current_workspace < scr->workspace_count) {
+ } else if (scr->current_workspace < wks_nfo.workspace_count) {
/* go to next workspace */
crossWorkspace(scr, wwin, opaqueMove,
scr->current_workspace + 1, False);
@@ -1397,15 +1398,17 @@ int wKeyboardMoveResizeWindow(WWindow * wwin)
if (wPreferences.ws_cycle) {
if (src_x + off_x + ww < 20) {
if (!scr->current_workspace) {
- wWorkspaceChange(scr,
scr->workspace_count - 1);
- } else
+ wWorkspaceChange(scr,
wks_nfo.workspace_count - 1);
+ } else {
wWorkspaceChange(scr,
scr->current_workspace - 1);
+ }
off_x += scr_width;
} else if (src_x + off_x + 20 >
scr_width) {
- if (scr->current_workspace ==
scr->workspace_count - 1) {
+ if (scr->current_workspace ==
wks_nfo.workspace_count - 1) {
wWorkspaceChange(scr,
0);
- } else
+ } else {
wWorkspaceChange(scr,
scr->current_workspace + 1);
+ }
off_x -= scr_width;
}
} else {
diff --git a/src/screen.h b/src/screen.h
index 02694ec..4ac9a96 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 */
- int workspace_count; /* number of workspaces */
-
struct WWorkspace **workspaces; /* workspace array */
int current_workspace; /* current workspace number */
diff --git a/src/session.c b/src/session.c
index c4ba5af..131339f 100644
--- a/src/session.c
+++ b/src/session.c
@@ -90,6 +90,7 @@
extern Atom _XA_WM_SAVE_YOURSELF;
extern Time LastTimestamp;
+extern wks_info wks_nfo;
static WMPropList *sApplications = NULL;
static WMPropList *sCommand;
@@ -243,10 +244,10 @@ static WMPropList *makeWindowState(WWindow * wwin,
WApplication * wapp)
}
if (name == NULL) // Try the clips
{
- for (i = 0; i < scr->workspace_count; i++)
+ for (i = 0; i < wks_nfo.workspace_count; i++)
if (scr->workspaces[i]->clip ==
wapp->app_icon->dock)
break;
- if (i < scr->workspace_count)
+ if (i < wks_nfo.workspace_count)
name = scr->workspaces[i]->name;
}
if (name == NULL) // Try the drawers
@@ -389,7 +390,7 @@ static WSavedState *getWindowState(WScreen * scr,
WMPropList * win_state)
tmp = WMGetFromPLString(value);
if (sscanf(tmp, "%i", &state->workspace) != 1) {
state->workspace = -1;
- for (i = 0; i < scr->workspace_count; i++) {
+ for (i = 0; i < wks_nfo.workspace_count; i++) {
if (strcmp(scr->workspaces[i]->name, tmp) == 0)
{
state->workspace = i;
break;
@@ -478,7 +479,7 @@ void wSessionRestoreState(WScreen *scr)
}
if (dock == NULL) // Try the clips
{
- for (j = 0; j < scr->workspace_count;
j++) {
+ for (j = 0; j <
wks_nfo.workspace_count; j++) {
if
(strcmp(scr->workspaces[j]->name, tmp) == 0) {
dock =
scr->workspaces[j]->clip;
break;
@@ -500,7 +501,7 @@ void wSessionRestoreState(WScreen *scr)
} else {
if (n == 0) {
dock = scr->dock;
- } else if (n > 0 && n <= scr->workspace_count) {
+ } else if (n > 0 && n <=
wks_nfo.workspace_count) {
dock = scr->workspaces[n - 1]->clip;
}
}
@@ -563,6 +564,6 @@ void wSessionRestoreLastWorkspace(WScreen * scr)
/* Get the workspace number for the workspace name */
w = wGetWorkspaceNumber(scr, value);
- if (w != scr->current_workspace && w < scr->workspace_count)
+ if (w != scr->current_workspace && w < wks_nfo.workspace_count)
wWorkspaceChange(scr, w);
}
diff --git a/src/startup.c b/src/startup.c
index c39ecaf..1158eee 100644
--- a/src/startup.c
+++ b/src/startup.c
@@ -90,6 +90,7 @@ extern WDDomain *WDRootMenu;
extern WDDomain *WDWindowAttributes;
extern WShortKey wKeyBindings[WKBD_LAST];
extern int wScreenCount;
+extern wks_info wks_nfo;
#ifdef SHAPE
extern Bool wShapeSupported;
@@ -752,7 +753,7 @@ void StartUp(Bool defaultScreenOnly)
/* auto-launch apps in clip */
if (!wPreferences.flags.noclip) {
int i;
- for (i = 0; i < wScreen[j]->workspace_count;
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);
diff --git a/src/window.c b/src/window.c
index a5de8a9..443182d 100644
--- a/src/window.c
+++ b/src/window.c
@@ -74,6 +74,7 @@
/****** Global Variables ******/
extern WShortKey wKeyBindings[WKBD_LAST];
+extern wks_info wks_nfo;
#ifdef SHAPE
extern Bool wShapeSupported;
@@ -388,7 +389,7 @@ void wWindowSetupInitialAttributes(WWindow *wwin, int
*level, int *workspace)
}
if (tmp_workspace >= 0)
- *workspace = tmp_workspace % scr->workspace_count;
+ *workspace = tmp_workspace % wks_nfo.workspace_count;
}
/*
@@ -851,9 +852,9 @@ WWindow *wManageWindow(WScreen *scr, Window window)
if (!IS_OMNIPRESENT(wwin)) {
int w = wDefaultGetStartWorkspace(scr,
wwin->wm_instance,
wwin->wm_class);
- if (w < 0 || w >= scr->workspace_count) {
+ if (w < 0 || w >= wks_nfo.workspace_count) {
workspace = win_state->state->workspace;
- if (workspace >= scr->workspace_count)
+ if (workspace >= wks_nfo.workspace_count)
workspace = scr->current_workspace;
} else {
workspace = w;
@@ -922,14 +923,14 @@ WWindow *wManageWindow(WScreen *scr, Window window)
/* set workspace on which the window starts */
if (workspace >= 0) {
- if (workspace > scr->workspace_count - 1)
- workspace = workspace % scr->workspace_count;
+ if (workspace > wks_nfo.workspace_count - 1)
+ workspace = workspace % wks_nfo.workspace_count;
} else {
int w;
w = wDefaultGetStartWorkspace(scr, wwin->wm_instance,
wwin->wm_class);
- if (w >= 0 && w < scr->workspace_count &&
!(IS_OMNIPRESENT(wwin))) {
+ if (w >= 0 && w < wks_nfo.workspace_count &&
!(IS_OMNIPRESENT(wwin))) {
workspace = w;
} else {
if (wPreferences.open_transients_with_parent &&
transientOwner)
@@ -1876,7 +1877,7 @@ void wWindowChangeWorkspace(WWindow *wwin, int workspace)
WApplication *wapp;
int unmap = 0;
- if (workspace >= scr->workspace_count || workspace < 0 || workspace ==
wwin->frame->workspace)
+ if (workspace >= wks_nfo.workspace_count || workspace < 0 || workspace
== wwin->frame->workspace)
return;
if (workspace != scr->current_workspace) {
@@ -1929,17 +1930,17 @@ void wWindowChangeWorkspaceRelative(WWindow *wwin, int
amount)
if (w >= 0) {
wWindowChangeWorkspace(wwin, w);
} else if (wPreferences.ws_cycle) {
- wWindowChangeWorkspace(wwin, scr->workspace_count + w);
+ wWindowChangeWorkspace(wwin, wks_nfo.workspace_count +
w);
}
} else if (amount > 0) {
- if (w < scr->workspace_count) {
+ if (w < wks_nfo.workspace_count) {
wWindowChangeWorkspace(wwin, w);
} else if (wPreferences.ws_advance) {
int workspace = WMIN(w, MAX_WORKSPACES - 1);
wWorkspaceMake(scr, workspace);
wWindowChangeWorkspace(wwin, workspace);
} else if (wPreferences.ws_cycle) {
- wWindowChangeWorkspace(wwin, w % scr->workspace_count);
+ wWindowChangeWorkspace(wwin, w %
wks_nfo.workspace_count);
}
}
}
diff --git a/src/winmenu.c b/src/winmenu.c
index a8a7bb8..fa232e4 100644
--- a/src/winmenu.c
+++ b/src/winmenu.c
@@ -74,7 +74,7 @@ extern Atom _XA_WM_DELETE_WINDOW;
extern Atom _XA_GNUSTEP_WM_MINIATURIZE_WINDOW;
extern WShortKey wKeyBindings[WKBD_LAST];
-
+extern wks_info wks_nfo;
static void updateOptionsMenu(WMenu * menu, WWindow * wwin);
@@ -223,7 +223,7 @@ static void updateWorkspaceMenu(WMenu * menu)
WMenuEntry *entry;
int i;
- for (i = 0; i < scr->workspace_count; i++) {
+ for (i = 0; i < wks_nfo.workspace_count; i++) {
if (i < menu->entry_no) {
entry = menu->entries[i];
diff --git a/src/winspector.c b/src/winspector.c
index fedc013..d2e480e 100644
--- a/src/winspector.c
+++ b/src/winspector.c
@@ -116,6 +116,7 @@ typedef struct InspectorPanel {
extern Cursor wCursor[WCUR_LAST];
extern WDDomain *WDWindowAttributes;
+extern wks_info wks_nfo;
static InspectorPanel *panelList = NULL;
static WMPropList *ANoTitlebar = NULL;
@@ -495,7 +496,7 @@ static void saveSettings(WMButton *button, InspectorPanel
*panel)
}
i = WMGetPopUpButtonSelectedItem(panel->wsP) - 1;
- if (i >= 0 && i < panel->frame->screen_ptr->workspace_count) {
+ if (i >= 0 && i < wks_nfo.workspace_count) {
value =
WMCreatePLString(panel->frame->screen_ptr->workspaces[i]->name);
different |= insertAttribute(dict, winDic, AStartWorkspace,
value, flags);
WMReleasePropList(value);
@@ -933,7 +934,7 @@ static void revertSettings(WMButton *button, InspectorPanel
*panel)
n = wDefaultGetStartWorkspace(wwin->screen_ptr, wm_instance, wm_class);
- if (n >= 0 && n < wwin->screen_ptr->workspace_count)
+ if (n >= 0 && n < wks_nfo.workspace_count)
WMSetPopUpButtonSelectedItem(panel->wsP, n + 1);
else
WMSetPopUpButtonSelectedItem(panel->wsP, 0);
@@ -1530,11 +1531,11 @@ static void create_tab_icon_workspace(WWindow *wwin,
InspectorPanel *panel, int
WMResizeWidget(panel->wsP, PWIDTH - (2 * 15) - (2 * 20), 20);
WMAddPopUpButtonItem(panel->wsP, _("Nowhere in particular"));
- for (i = 0; i < wwin->screen_ptr->workspace_count; i++)
+ for (i = 0; i < wks_nfo.workspace_count; i++)
WMAddPopUpButtonItem(panel->wsP, scr->workspaces[i]->name);
i = wDefaultGetStartWorkspace(wwin->screen_ptr, wwin->wm_instance,
wwin->wm_class);
- if (i >= 0 && i <= wwin->screen_ptr->workspace_count)
+ if (i >= 0 && i <= wks_nfo.workspace_count)
WMSetPopUpButtonSelectedItem(panel->wsP, i + 1);
else
WMSetPopUpButtonSelectedItem(panel->wsP, 0);
diff --git a/src/wmspec.c b/src/wmspec.c
index e71265b..b19175f 100644
--- a/src/wmspec.c
+++ b/src/wmspec.c
@@ -53,6 +53,7 @@
/* Global variables */
extern Atom _XA_WM_DELETE_WINDOW;
extern Time LastTimestamp;
+extern wks_info wks_nfo;
/* Root Window Properties */
static Atom net_supported;
@@ -318,16 +319,16 @@ void wNETWMUpdateDesktop(WScreen *scr)
long *views, sizes[2];
int count, i;
- if (scr->workspace_count == 0)
+ if (wks_nfo.workspace_count == 0)
return;
- count = scr->workspace_count * 2;
+ count = wks_nfo.workspace_count * 2;
views = wmalloc(sizeof(long) * count);
/*memset(views, 0, sizeof(long) * count); */
sizes[0] = scr->scr_width;
sizes[1] = scr->scr_height;
- for (i = 0; i < scr->workspace_count; i++) {
+ for (i = 0; i < wks_nfo.workspace_count; i++) {
views[2 * i + 0] = 0;
views[2 * i + 1] = 0;
}
@@ -739,7 +740,7 @@ static void updateWorkspaceCount(WScreen *scr)
{ /* changeable */
long count;
- count = scr->workspace_count;
+ count = wks_nfo.workspace_count;
XChangeProperty(dpy, scr->root_win, net_number_of_desktops, XA_CARDINAL,
32, PropModeReplace, (unsigned char *)&count, 1);
@@ -762,7 +763,7 @@ static void updateWorkspaceNames(WScreen *scr)
pos = buf;
len = 0;
- for (i = 0; i < scr->workspace_count; i++) {
+ for (i = 0; i < wks_nfo.workspace_count; i++) {
curr_size = strlen(scr->workspaces[i]->name);
strcpy(pos, scr->workspaces[i]->name);
pos += (curr_size + 1);
@@ -1355,13 +1356,13 @@ Bool wNETWMProcessClientMessage(XClientMessageEvent
*event)
long value;
value = event->data.l[0];
- if (value > scr->workspace_count) {
- wWorkspaceMake(scr, value -
scr->workspace_count);
- } else if (value < scr->workspace_count) {
+ if (value > wks_nfo.workspace_count) {
+ wWorkspaceMake(scr, value -
wks_nfo.workspace_count);
+ } else if (value < wks_nfo.workspace_count) {
int i;
Bool rebuild = False;
- for (i = scr->workspace_count - 1; i >= value;
i--) {
+ for (i = wks_nfo.workspace_count - 1; i >=
value; i--) {
if (!wWorkspaceDelete(scr, i)) {
rebuild = True;
break;
diff --git a/src/workspace.c b/src/workspace.c
index 1776b27..662a919 100644
--- a/src/workspace.c
+++ b/src/workspace.c
@@ -90,8 +90,8 @@ int wWorkspaceNew(WScreen *scr)
WWorkspace *wspace, **list;
int i;
- if (scr->workspace_count < MAX_WORKSPACES) {
- scr->workspace_count++;
+ if (wks_nfo.workspace_count < MAX_WORKSPACES) {
+ wks_nfo.workspace_count++;
wspace = wmalloc(sizeof(WWorkspace));
wspace->name = NULL;
@@ -99,15 +99,15 @@ int wWorkspaceNew(WScreen *scr)
if (!wspace->name) {
wspace->name = wmalloc(strlen(_("Workspace %i")) + 8);
- sprintf(wspace->name, _("Workspace %i"),
scr->workspace_count);
+ sprintf(wspace->name, _("Workspace %i"),
wks_nfo.workspace_count);
}
if (!wPreferences.flags.noclip)
wspace->clip = wDockCreate(scr, WM_CLIP, NULL);
- list = wmalloc(sizeof(WWorkspace *) * scr->workspace_count);
+ list = wmalloc(sizeof(WWorkspace *) * wks_nfo.workspace_count);
- for (i = 0; i < scr->workspace_count - 1; i++)
+ for (i = 0; i < wks_nfo.workspace_count - 1; i++)
list[i] = scr->workspaces[i];
list[i] = wspace;
@@ -119,10 +119,10 @@ int wWorkspaceNew(WScreen *scr)
wWorkspaceMenuUpdate(scr, scr->workspace_menu);
wWorkspaceMenuUpdate(scr, scr->clip_ws_menu);
wNETWMUpdateDesktop(scr);
- WMPostNotificationName(WMNWorkspaceCreated, scr, (void
*)(uintptr_t) (scr->workspace_count - 1));
+ WMPostNotificationName(WMNWorkspaceCreated, scr, (void
*)(uintptr_t) (wks_nfo.workspace_count - 1));
XFlush(dpy);
- return scr->workspace_count - 1;
+ return wks_nfo.workspace_count - 1;
}
return -1;
@@ -150,9 +150,9 @@ Bool wWorkspaceDelete(WScreen * scr, int workspace)
scr->workspaces[workspace]->clip = NULL;
}
- list = wmalloc(sizeof(WWorkspace *) * (scr->workspace_count - 1));
+ list = wmalloc(sizeof(WWorkspace *) * (wks_nfo.workspace_count - 1));
j = 0;
- for (i = 0; i < scr->workspace_count; i++) {
+ for (i = 0; i < wks_nfo.workspace_count; i++) {
if (i != workspace) {
list[j++] = scr->workspaces[i];
} else {
@@ -164,7 +164,7 @@ Bool wWorkspaceDelete(WScreen * scr, int workspace)
wfree(scr->workspaces);
scr->workspaces = list;
- scr->workspace_count--;
+ wks_nfo.workspace_count--;
/* update menu */
wWorkspaceMenuUpdate(scr, scr->workspace_menu);
@@ -176,7 +176,7 @@ Bool wWorkspaceDelete(WScreen * scr, int workspace)
WMenu *menu = scr->workspace_submenu;
i = menu->entry_no;
- while (i > scr->workspace_count)
+ while (i > wks_nfo.workspace_count)
wMenuRemoveItem(menu, --i);
wMenuRealize(menu);
}
@@ -185,16 +185,16 @@ Bool wWorkspaceDelete(WScreen * scr, int workspace)
WMenu *menu = scr->clip_submenu;
i = menu->entry_no;
- while (i > scr->workspace_count)
+ while (i > wks_nfo.workspace_count)
wMenuRemoveItem(menu, --i);
wMenuRealize(menu);
}
wNETWMUpdateDesktop(scr);
- WMPostNotificationName(WMNWorkspaceDestroyed, scr, (void *)(uintptr_t)
(scr->workspace_count - 1));
+ WMPostNotificationName(WMNWorkspaceDestroyed, scr, (void *)(uintptr_t)
(wks_nfo.workspace_count - 1));
- if (scr->current_workspace >= scr->workspace_count)
- wWorkspaceChange(scr, scr->workspace_count - 1);
- if (scr->last_workspace >= scr->workspace_count)
+ if (scr->current_workspace >= wks_nfo.workspace_count)
+ wWorkspaceChange(scr, wks_nfo.workspace_count - 1);
+ if (scr->last_workspace >= wks_nfo.workspace_count)
scr->last_workspace = 0;
return True;
@@ -261,7 +261,7 @@ static void showWorkspaceName(WScreen * scr, int workspace)
int xx, yy;
#endif
- if (wPreferences.workspace_name_display_position == WD_NONE ||
scr->workspace_count < 2) {
+ if (wPreferences.workspace_name_display_position == WD_NONE ||
wks_nfo.workspace_count < 2) {
return;
}
@@ -455,15 +455,15 @@ void wWorkspaceRelativeChange(WScreen * scr, int amount)
if (w >= 0) {
wWorkspaceChange(scr, w);
} else if (wPreferences.ws_cycle) {
- wWorkspaceChange(scr, scr->workspace_count + w);
+ wWorkspaceChange(scr, wks_nfo.workspace_count + w);
}
} else if (amount > 0) {
- if (w < scr->workspace_count) {
+ if (w < wks_nfo.workspace_count) {
wWorkspaceChange(scr, w);
} else if (wPreferences.ws_advance) {
wWorkspaceChange(scr, WMIN(w, MAX_WORKSPACES - 1));
} else if (wPreferences.ws_cycle) {
- wWorkspaceChange(scr, w % scr->workspace_count);
+ wWorkspaceChange(scr, w % wks_nfo.workspace_count);
}
}
}
@@ -479,8 +479,8 @@ void wWorkspaceForceChange(WScreen * scr, int workspace)
SendHelperMessage(scr, 'C', workspace + 1, NULL);
- if (workspace > scr->workspace_count - 1) {
- wWorkspaceMake(scr, workspace - scr->workspace_count + 1);
+ if (workspace > wks_nfo.workspace_count - 1) {
+ wWorkspaceMake(scr, workspace - wks_nfo.workspace_count + 1);
}
wClipUpdateForWorkspaceChange(scr, workspace);
@@ -653,7 +653,7 @@ static void lastWSCommand(WMenu * menu, WMenuEntry * entry)
static void deleteWSCommand(WMenu * menu, WMenuEntry * entry)
{
- wWorkspaceDelete(menu->frame->screen_ptr,
menu->frame->screen_ptr->workspace_count - 1);
+ wWorkspaceDelete(menu->frame->screen_ptr, wks_nfo.workspace_count - 1);
}
static void newWSCommand(WMenu *menu, WMenuEntry *foo)
@@ -672,7 +672,7 @@ void wWorkspaceRename(WScreen *scr, int workspace, const
char *name)
char buf[MAX_WORKSPACENAME_WIDTH + 1];
char *tmp;
- if (workspace >= scr->workspace_count)
+ if (workspace >= wks_nfo.workspace_count)
return;
/* trim white spaces */
@@ -754,9 +754,9 @@ void wWorkspaceMenuUpdate(WScreen * scr, WMenu * menu)
if (!menu)
return;
- if (menu->entry_no < scr->workspace_count + MC_WORKSPACE1) {
+ if (menu->entry_no < wks_nfo.workspace_count + MC_WORKSPACE1) {
/* new workspace(s) added */
- i = scr->workspace_count - (menu->entry_no - MC_WORKSPACE1);
+ 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);
@@ -768,14 +768,14 @@ void wWorkspaceMenuUpdate(WScreen * scr, WMenu * menu)
i--;
ws++;
}
- } else if (menu->entry_no > scr->workspace_count + MC_WORKSPACE1) {
+ } else if (menu->entry_no > wks_nfo.workspace_count + MC_WORKSPACE1) {
/* removed workspace(s) */
- for (i = menu->entry_no - 1; i >= scr->workspace_count +
MC_WORKSPACE1; i--) {
+ for (i = menu->entry_no - 1; i >= wks_nfo.workspace_count +
MC_WORKSPACE1; i--) {
wMenuRemoveItem(menu, i);
}
}
- for (i = 0; i < scr->workspace_count; i++) {
+ for (i = 0; i < wks_nfo.workspace_count; i++) {
/* workspace shortcut labels */
if (i / 10 == scr->current_workspace / 10)
menu->entries[i + MC_WORKSPACE1]->rtext =
GetShortcutKey(wKeyBindings[WKBD_WORKSPACE1 + (i % 10)]);
@@ -788,14 +788,14 @@ void wWorkspaceMenuUpdate(WScreen * scr, WMenu * menu)
wMenuRealize(menu);
/* don't let user destroy current workspace */
- if (scr->current_workspace == scr->workspace_count - 1) {
+ if (scr->current_workspace == wks_nfo.workspace_count - 1) {
wMenuSetEnabled(menu, MC_DESTROY_LAST, False);
} else {
wMenuSetEnabled(menu, MC_DESTROY_LAST, True);
}
/* back to last workspace */
- if (scr->workspace_count && scr->last_workspace !=
scr->current_workspace)
+ if (wks_nfo.workspace_count && scr->last_workspace !=
scr->current_workspace)
wMenuSetEnabled(menu, MC_LAST_USED, True);
else
wMenuSetEnabled(menu, MC_LAST_USED, False);
@@ -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 < scr->workspace_count; i++) {
+ for (i = 0; i < wks_nfo.workspace_count; i++) {
pstr = WMCreatePLString(scr->workspaces[i]->name);
wks_state = WMCreatePLDictionary(dName, pstr, NULL);
WMReleasePropList(pstr);
@@ -861,7 +861,7 @@ void wWorkspaceRestoreState(WScreen *scr)
else
pstr = wks_state;
- if (i >= scr->workspace_count)
+ if (i >= wks_nfo.workspace_count)
wWorkspaceNew(scr);
if (scr->workspace_menu) {
@@ -929,7 +929,7 @@ int wGetWorkspaceNumber(WScreen *scr, const char *value)
if (sscanf(value, "%i", &w) != 1) {
w = -1;
- for (i = 0; i < scr->workspace_count; i++) {
+ for (i = 0; i < wks_nfo.workspace_count; i++) {
if (strcmp(scr->workspaces[i]->name, value) == 0) {
w = i;
break;
diff --git a/src/workspace.h b/src/workspace.h
index 55c7aaf..28d3727 100644
--- a/src/workspace.h
+++ b/src/workspace.h
@@ -23,6 +23,7 @@
#define WMWORKSPACE_H_
typedef struct wks_info {
+ int workspace_count; /* number of workspaces */
WMFont *workspace_name_font;
} wks_info;
--
1.7.10.4
--
To unsubscribe, send mail to [email protected].