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 8ae5fb8..2d020c7 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 d680cf2..d97d438 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 dc53d03..7702d12 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 3dad8e7..e28c5c2 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);
--
1.7.9.1
>From e9892f45b62b9bf7356c9bf08571e038bd692fe5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?"Rodolfo=20Garc=C3=ADa=20Pe=C3=B1as=20(kix)"?= <[email protected]>
Date: Sat, 14 Apr 2012 11:53:43 +0200
Subject: [PATCH 08/16] 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 8ae5fb8..2d020c7 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 d680cf2..d97d438 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 dc53d03..7702d12 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 3dad8e7..e28c5c2 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);
--
1.7.9.1