diff options
author | Olivier Fourdan <fourdan.olivier@wanadoo.fr> | 2008-05-01 16:36:57 +0000 |
---|---|---|
committer | Olivier Fourdan <fourdan.olivier@wanadoo.fr> | 2008-05-01 16:36:57 +0000 |
commit | 356d5f7bfae71ac0b43c1f21adccabe06f30cc37 (patch) | |
tree | 012db9d2273c028145461f37752879f9f534a644 /src/workspaces.c | |
parent | a5d655372b7f6f818b3f8c89bbf410be3e2f9281 (diff) | |
download | xfwm4-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.c | 69 |
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; |