From ad373ef0ddb27802237df191d039ceeb8e14b35d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodolfo=20Garc=C3=ADa=20Pe=C3=B1as=20=28kix=29?= Date: Sat, 14 Apr 2012 11:53:43 +0200 Subject: [PATCH] WindowMaker: New function wGetWorkspaceNumber The new function wGetWorkspaceNumber returns the workspace number for a given workspace name. The code of this function is already used in session.c and wdefaults.c and now is moved to workspace.c In wSessionRestoreLastWorkspace the char value is checked before calling the function, because without string, the function don't do nothing. --- src/session.c | 23 +++++++++-------------- src/wdefaults.c | 17 +++++------------ src/workspace.c | 20 ++++++++++++++++++++ src/workspace.h | 1 + 4 files changed, 35 insertions(+), 26 deletions(-) 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);