diff --git a/src/session.c b/src/session.c index 8ae5fb8b..2d020c72 100644 --- a/src/session.c +++ b/src/session.c @@ -518,8 +518,8 @@ void wSessionRestoreState(WScreen * scr) void wSessionRestoreLastWorkspace(WScreen * scr) { WMPropList *wks; - int w, i; - char *tmp; + int w; + char *value; make_keys(); @@ -532,23 +532,18 @@ void wSessionRestoreLastWorkspace(WScreen * scr) if (!wks || !WMIsPLString(wks)) return; - tmp = WMGetFromPLString(wks); + value = WMGetFromPLString(wks); + if (!value) + return; /* clean up */ WMPLSetCaseSensitive(False); - if (sscanf(tmp, "%i", &w) != 1) { - w = -1; - for (i = 0; i < scr->workspace_count; i++) { - if (strcmp(scr->workspaces[i]->name, tmp) == 0) { - w = i; - break; - } - } - } else { - w--; - } + /* Get the workspace number for the workspace name */ + w = wGetWorkspaceNumber(scr, value); + + wfree(value); if (w != scr->current_workspace && w < scr->workspace_count) wWorkspaceChange(scr, w); diff --git a/src/wdefaults.c b/src/wdefaults.c index c22ad5b1..d89671bd 100644 --- a/src/wdefaults.c +++ b/src/wdefaults.c @@ -433,7 +433,7 @@ RImage *wDefaultGetImage(WScreen * scr, char *winstance, char *wclass, int max_s int wDefaultGetStartWorkspace(WScreen * scr, char *instance, char *class) { WMPropList *value; - int w, i; + int w; char *tmp; if (!ANoTitlebar) @@ -452,17 +452,10 @@ int wDefaultGetStartWorkspace(WScreen * scr, char *instance, char *class) if (!tmp || strlen(tmp) == 0) return -1; - if (sscanf(tmp, "%i", &w) != 1) { - w = -1; - for (i = 0; i < scr->workspace_count; i++) { - if (strcmp(scr->workspaces[i]->name, tmp) == 0) { - w = i; - break; - } - } - } else { - w--; - } + /* Get the workspace number for the workspace name */ + w = wGetWorkspaceNumber(scr, tmp); + + wfree(value); return w; } diff --git a/src/workspace.c b/src/workspace.c index dc53d03b..7702d124 100644 --- a/src/workspace.c +++ b/src/workspace.c @@ -877,3 +877,23 @@ void wWorkspaceRestoreState(WScreen * scr) WMPostNotificationName(WMNWorkspaceNameChanged, scr, (void *)(uintptr_t) i); } } + +/* Returns the workspace number for a given workspace name */ +int wGetWorkspaceNumber(WScreen * scr, char * value) +{ + int w, i; + + if (sscanf(value, "%i", &w) != 1) { + w = -1; + for (i = 0; i < scr->workspace_count; i++) { + if (strcmp(scr->workspaces[i]->name, value) == 0) { + w = i; + break; + } + } + } else { + w--; + } + + return w; +} diff --git a/src/workspace.h b/src/workspace.h index 3dad8e7e..e28c5c21 100644 --- a/src/workspace.h +++ b/src/workspace.h @@ -31,6 +31,7 @@ typedef struct WWorkspace { void wWorkspaceMake(WScreen *scr, int count); int wWorkspaceNew(WScreen *scr); +int wGetWorkspaceNumber(WScreen * scr, char * value); Bool wWorkspaceDelete(WScreen *scr, int workspace); void wWorkspaceChange(WScreen *scr, int workspace); void wWorkspaceForceChange(WScreen *scr, int workspace);