From: "Rodolfo García Peñas (kix)" <[email protected]>
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 [email protected].