[Xfce4-commits] r26915 - xfwm4/trunk/src

Olivier Fourdan olivier at xfce.org
Thu May 1 18:36:57 CEST 2008


Author: olivier
Date: 2008-05-01 16:36:57 +0000 (Thu, 01 May 2008)
New Revision: 26915

Modified:
   xfwm4/trunk/src/events.c
   xfwm4/trunk/src/settings.c
   xfwm4/trunk/src/settings.h
   xfwm4/trunk/src/workspaces.c
   xfwm4/trunk/src/workspaces.h
Log:
Add adjacent workscape/delete active workspace - Patch from xsdg <xsdg+xfcedev at mit.edu> (Bug #3595)

Modified: xfwm4/trunk/src/events.c
===================================================================
--- xfwm4/trunk/src/events.c	2008-05-01 07:04:05 UTC (rev 26914)
+++ xfwm4/trunk/src/events.c	2008-05-01 16:36:57 UTC (rev 26915)
@@ -531,6 +531,12 @@
             status = EVENT_FILTER_REMOVE;
             workspaceSetCount (ev_screen_info, ev_screen_info->workspace_count - 1);
             break;
+        case KEY_ADD_ADJACENT_WORKSPACE:
+            workspaceInsert (ev_screen_info, ev_screen_info->current_ws + 1);
+            break;
+        case KEY_DEL_ACTIVE_WORKSPACE:
+            workspaceDelete (ev_screen_info, ev_screen_info->current_ws);
+            break;
         case KEY_WORKSPACE_1:
         case KEY_WORKSPACE_2:
         case KEY_WORKSPACE_3:

Modified: xfwm4/trunk/src/settings.c
===================================================================
--- xfwm4/trunk/src/settings.c	2008-05-01 07:04:05 UTC (rev 26914)
+++ xfwm4/trunk/src/settings.c	2008-05-01 16:36:57 UTC (rev 26915)
@@ -1234,10 +1234,12 @@
     }
 
     parseKeyString (dpy, &screen_info->params->keys[KEY_ADD_WORKSPACE], getValue ("add_workspace_key", rc));
+    parseKeyString (dpy, &screen_info->params->keys[KEY_ADD_ADJACENT_WORKSPACE], getValue ("add_adjacent_workspace_key", rc));
     parseKeyString (dpy, &screen_info->params->keys[KEY_CANCEL], getValue ("cancel_key", rc));
     parseKeyString (dpy, &screen_info->params->keys[KEY_CLOSE_WINDOW], getValue ("close_window_key", rc));
     parseKeyString (dpy, &screen_info->params->keys[KEY_CYCLE_WINDOWS], getValue ("cycle_windows_key", rc));
     parseKeyString (dpy, &screen_info->params->keys[KEY_DEL_WORKSPACE], getValue ("del_workspace_key", rc));
+    parseKeyString (dpy, &screen_info->params->keys[KEY_DEL_ACTIVE_WORKSPACE], getValue ("del_active_workspace_key", rc));
     parseKeyString (dpy, &screen_info->params->keys[KEY_DOWN_WORKSPACE], getValue ("down_workspace_key", rc));
     parseKeyString (dpy, &screen_info->params->keys[KEY_FILL_HORIZ], getValue ("fill_horiz_key", rc));
     parseKeyString (dpy, &screen_info->params->keys[KEY_FILL_VERT], getValue ("fill_vert_key", rc));
@@ -1388,10 +1390,12 @@
         /* Keys */
         {"above_key", NULL, TRUE},
         {"add_workspace_key", NULL, TRUE},
+        {"add_adjacent_workspace_key", NULL, TRUE},
         {"cancel_key", NULL, TRUE},
         {"close_window_key", NULL, TRUE},
         {"cycle_windows_key", NULL, TRUE},
         {"del_workspace_key", NULL, TRUE},
+        {"del_active_workspace_key", NULL, TRUE},
         {"down_workspace_key", NULL, TRUE},
         {"fullscreen_key", NULL, TRUE},
         {"hide_window_key", NULL, TRUE},

Modified: xfwm4/trunk/src/settings.h
===================================================================
--- xfwm4/trunk/src/settings.h	2008-05-01 07:04:05 UTC (rev 26914)
+++ xfwm4/trunk/src/settings.h	2008-05-01 16:36:57 UTC (rev 26915)
@@ -40,13 +40,15 @@
     TITLE_SHADOW_FRAME = 2
 };
 
-#define FIRST_KEY KEY_ADD_WORKSPACE
+#define FIRST_KEY KEY_ADD_ADJACENT_WORKSPACE
 enum
 {
     KEY_CANCEL = 0,
+    KEY_ADD_ADJACENT_WORKSPACE,
     KEY_ADD_WORKSPACE,
     KEY_CLOSE_WINDOW,
     KEY_CYCLE_WINDOWS,
+    KEY_DEL_ACTIVE_WORKSPACE,
     KEY_DEL_WORKSPACE,
     KEY_DOWN_WORKSPACE,
     KEY_FILL_HORIZ,

Modified: xfwm4/trunk/src/workspaces.c
===================================================================
--- xfwm4/trunk/src/workspaces.c	2008-05-01 07:04:05 UTC (rev 26914)
+++ xfwm4/trunk/src/workspaces.c	2008-05-01 16:36:57 UTC (rev 26915)
@@ -180,6 +180,10 @@
 {
     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 @@
     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 @@
 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 @@
     Client *c;
     int i;
 
+    g_return_if_fail (screen_info != NULL);
+
     TRACE ("entering workspaceSetCount");
 
     if (count < 1)
@@ -455,6 +468,62 @@
 }
 
 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;

Modified: xfwm4/trunk/src/workspaces.h
===================================================================
--- xfwm4/trunk/src/workspaces.h	2008-05-01 07:04:05 UTC (rev 26914)
+++ xfwm4/trunk/src/workspaces.h	2008-05-01 16:36:57 UTC (rev 26915)
@@ -52,4 +52,10 @@
                                                                  int);
 void                    workspaceUpdateArea                     (ScreenInfo *);
 
+void                    workspaceInsert                         (ScreenInfo *,
+                                                                 int);
+
+void                    workspaceDelete                         (ScreenInfo *,
+                                                                 int);
+
 #endif /* INC_WORKSPACES_H */



More information about the Xfce4-commits mailing list