summaryrefslogtreecommitdiff
path: root/src/workspaces.c
diff options
context:
space:
mode:
authorOlivier Fourdan <fourdan.olivier@wanadoo.fr>2008-05-01 16:36:57 +0000
committerOlivier Fourdan <fourdan.olivier@wanadoo.fr>2008-05-01 16:36:57 +0000
commit356d5f7bfae71ac0b43c1f21adccabe06f30cc37 (patch)
tree012db9d2273c028145461f37752879f9f534a644 /src/workspaces.c
parenta5d655372b7f6f818b3f8c89bbf410be3e2f9281 (diff)
downloadxfwm4-356d5f7bfae71ac0b43c1f21adccabe06f30cc37.tar.gz
Add adjacent workscape/delete active workspace - Patch from xsdg <xsdg+xfcedev@mit.edu> (Bug #3595)
(Old svn revision: 26915)
Diffstat (limited to 'src/workspaces.c')
-rw-r--r--src/workspaces.c69
1 files changed, 69 insertions, 0 deletions
diff --git a/src/workspaces.c b/src/workspaces.c
index 9052e4adb..81a149c20 100644
--- a/src/workspaces.c
+++ b/src/workspaces.c
@@ -180,6 +180,10 @@ workspaceMove (ScreenInfo *screen_info, int rowmod, int colmod, Client * c, Time
{
int row, col, newrow, newcol, previous_ws, n;
+ g_return_if_fail (screen_info != NULL);
+
+ TRACE ("entering workspaceMove");
+
workspaceGetPosition (screen_info, screen_info->current_ws, &row, &col);
newrow = modify_with_wrap (row, rowmod, screen_info->desktop_layout.rows, screen_info->params->wrap_layout);
newcol = modify_with_wrap (col, colmod, screen_info->desktop_layout.cols, screen_info->params->wrap_layout);
@@ -241,6 +245,8 @@ workspaceSwitch (ScreenInfo *screen_info, int new_ws, Client * c2, gboolean upda
unsigned int mask;
unsigned long data[1];
+ g_return_if_fail (screen_info != NULL);
+
TRACE ("entering workspaceSwitch");
display_info = screen_info->display_info;
@@ -404,6 +410,11 @@ workspaceSwitch (ScreenInfo *screen_info, int new_ws, Client * c2, gboolean upda
void
workspaceSetNames (ScreenInfo * screen_info, gchar **names, int items)
{
+ g_return_if_fail (screen_info != NULL);
+ g_return_if_fail (names != NULL);
+
+ TRACE ("entering workspaceSetNames");
+
if (screen_info->workspace_names)
{
g_strfreev (screen_info->workspace_names);
@@ -420,6 +431,8 @@ workspaceSetCount (ScreenInfo * screen_info, int count)
Client *c;
int i;
+ g_return_if_fail (screen_info != NULL);
+
TRACE ("entering workspaceSetCount");
if (count < 1)
@@ -455,6 +468,62 @@ workspaceSetCount (ScreenInfo * screen_info, int count)
}
void
+workspaceInsert (ScreenInfo * screen_info, int index)
+{
+ DisplayInfo *display_info;
+ Client *c;
+ int i, count;
+
+ g_return_if_fail (screen_info != NULL);
+
+ TRACE ("entering workspaceInsert");
+
+ count = screen_info->workspace_count;
+ workspaceSetCount(screen_info, count + 1);
+
+ if ((index < 0) || (index > count))
+ {
+ return;
+ }
+
+ for (c = screen_info->clients, i = 0; i < screen_info->client_count; c = c->next, i++)
+ {
+ if (c->win_workspace >= index)
+ {
+ clientSetWorkspace (c, c->win_workspace + 1, TRUE);
+ }
+ }
+}
+
+void
+workspaceDelete (ScreenInfo * screen_info, int index)
+{
+ DisplayInfo *display_info;
+ Client *c;
+ int i, count;
+
+ g_return_if_fail (screen_info != NULL);
+
+ TRACE ("entering workspaceDelete");
+
+ count = screen_info->workspace_count;
+ if ((index < 0) || (index > count))
+ {
+ return;
+ }
+
+ for (c = screen_info->clients, i = 0; i < screen_info->client_count; c = c->next, i++)
+ {
+ if (c->win_workspace > index)
+ {
+ clientSetWorkspace (c, c->win_workspace - 1, TRUE);
+ }
+ }
+
+ workspaceSetCount(screen_info, count - 1);
+}
+
+void
workspaceUpdateArea (ScreenInfo *screen_info)
{
DisplayInfo *display_info;