From: "Rodolfo García Peñas (kix)" <k...@kix.es>

The code to restore the Clip is moved to a standalone function.
The code is the same, and some variables are provided as arguments.
---
 src/workspace.c |  105 +++++++++++++++++++++++++++++++------------------------
 1 file changed, 59 insertions(+), 46 deletions(-)

diff --git a/src/workspace.c b/src/workspace.c
index dcbe6e8..e917a69 100644
--- a/src/workspace.c
+++ b/src/workspace.c
@@ -67,6 +67,8 @@ extern WShortKey wKeyBindings[WKBD_LAST];
 static WMPropList *dWorkspaces = NULL;
 static WMPropList *dClip, *dName;
 
+static void update_workspace_clip(WScreen *scr, int workspace, WMPropList 
*wks_state);
+
 static void make_keys(void)
 {
        if (dWorkspaces != NULL)
@@ -847,9 +849,9 @@ void wWorkspaceSaveState(WScreen * scr, WMPropList * 
old_state)
 
 void wWorkspaceRestoreState(WScreen *scr)
 {
-       WMPropList *parr, *pstr, *wks_state, *clip_state;
+       WMPropList *parr, *pstr, *wks_state;
        WMenu *menu = NULL;
-       int i, j;
+       int i;
 
        make_keys();
 
@@ -883,51 +885,8 @@ void wWorkspaceRestoreState(WScreen *scr)
 
                wfree(scr->workspaces[i]->name);
                scr->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);
-
-                       scr->workspaces[i]->clip = wDockRestoreState(scr, 
clip_state, WM_CLIP);
-                       if (i > 0)
-                               wDockHideIcons(scr->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];
-                               int k;
-
-                               if (!aicon || !aicon->omnipresent)
-                                       continue;
-                               aicon->omnipresent = 0;
-                               if (wClipMakeIconOmnipresent(aicon, True) != 
WO_SUCCESS)
-                                       continue;
-                               if (i == 0)
-                                       continue;
-
-                               /* Move this appicon from workspace i to 
workspace 0 */
-                               scr->workspaces[i]->clip->icon_array[j] = NULL;
-                               scr->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);
-                               /* 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)
-                                               break;
-                               scr->workspaces[0]->clip->icon_array[k] = aicon;
-                               aicon->dock = scr->workspaces[0]->clip;
-                       }
-                       scr->workspaces[0]->clip->icon_count += 
added_omnipresent_icons;
-               }
+               update_workspace_clip(scr, i, wks_state);
 
                WMPostNotificationName(WMNWorkspaceNameChanged, scr, (void 
*)(uintptr_t) i);
        }
@@ -952,3 +911,57 @@ int wGetWorkspaceNumber(WScreen * scr, char * value)
 
        return w;
 }
+
+static void update_workspace_clip(WScreen *scr, int workspace, WMPropList 
*wks_state)
+{
+       WAppIcon *aicon;
+       WMPropList *clip_state;
+       int added_omnipresent_icons = 0, j, k;
+
+       if (wPreferences.flags.noclip)
+               return;
+
+       clip_state = WMGetFromPLDictionary(wks_state, dClip);
+       if (scr->workspaces[workspace]->clip)
+               wDockDestroy(scr->workspaces[workspace]->clip);
+
+       scr->workspaces[workspace]->clip = wDockRestoreState(scr, clip_state, 
WM_CLIP);
+       if (workspace > 0)
+               wDockHideIcons(scr->workspaces[workspace]->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[workspace]->clip->max_icons; j++) {
+               aicon = scr->workspaces[workspace]->clip->icon_array[j];
+               if (!aicon || !aicon->omnipresent)
+                       continue;
+
+               aicon->omnipresent = 0;
+               if (wClipMakeIconOmnipresent(aicon, True) != WO_SUCCESS)
+                       continue;
+
+               if (workspace == 0)
+                       continue;
+
+               /* Move this appicon from workspace i to workspace 0 */
+               scr->workspaces[workspace]->clip->icon_array[j] = NULL;
+               scr->workspaces[workspace]->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);
+               /* 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)
+                               break;
+
+               scr->workspaces[0]->clip->icon_array[k] = aicon;
+               aicon->dock = scr->workspaces[0]->clip;
+       }
+
+       scr->workspaces[0]->clip->icon_count += added_omnipresent_icons;
+}
-- 
1.7.10.4


-- 
To unsubscribe, send mail to wmaker-dev-unsubscr...@lists.windowmaker.org.

Reply via email to