Author: olivier
Date: 2008-06-21 15:17:00 +0000 (Sat, 21 Jun 2008)
New Revision: 27111

Modified:
   xfwm4/trunk/src/client.c
   xfwm4/trunk/src/client.h
   xfwm4/trunk/src/events.c
   xfwm4/trunk/src/menu.c
   xfwm4/trunk/src/menu.h
   xfwm4/trunk/src/netwm.c
   xfwm4/trunk/src/netwm.h
Log:
Rework the window menu, add more actions (above/normal/below, 
fullscreen/un-fullscreen)

Modified: xfwm4/trunk/src/client.c
===================================================================
--- xfwm4/trunk/src/client.c    2008-06-21 14:07:15 UTC (rev 27110)
+++ xfwm4/trunk/src/client.c    2008-06-21 15:17:00 UTC (rev 27111)
@@ -1144,12 +1144,12 @@
     if (FLAG_TEST_AND_NOT (c->flags, CLIENT_FLAG_ABOVE, CLIENT_FLAG_BELOW))
     {
         TRACE ("Applying client's initial state: above");
-        clientUpdateAboveState (c);
+        clientUpdateLayerState (c);
     }
     if (FLAG_TEST_AND_NOT (c->flags, CLIENT_FLAG_BELOW, CLIENT_FLAG_ABOVE))
     {
         TRACE ("Applying client's initial state: below");
-        clientUpdateBelowState (c);
+        clientUpdateLayerState (c);
     }
     if (FLAG_TEST (c->flags, CLIENT_FLAG_STICKY) &&
         FLAG_TEST (c->xfwm_flags, XFWM_FLAG_HAS_STICK))
@@ -2678,40 +2678,53 @@
         }
     }
 
-    if (!clientIsValidTransientOrModal (c) && (c->type == WINDOW_NORMAL))
+    if (!clientIsTransientOrModal (c) && (c->type == WINDOW_NORMAL))
     {
         FLAG_TOGGLE (c->flags, CLIENT_FLAG_FULLSCREEN);
         clientUpdateFullscreenState (c);
     }
 }
 
-void clientToggleAbove (Client * c)
+void clientToggleLayerAbove (Client * c)
 {
     g_return_if_fail (c != NULL);
     TRACE ("entering clientToggleAbove");
-    TRACE ("toggle above client \"%s\" (0x%lx)", c->name, c->window);
 
-    if (!clientIsValidTransientOrModal (c) &&
-        !FLAG_TEST (c->flags, CLIENT_FLAG_BELOW | CLIENT_FLAG_FULLSCREEN))
+    if (!clientIsTransientOrModal (c) &&
+        !FLAG_TEST (c->flags, CLIENT_FLAG_FULLSCREEN))
     {
+        FLAG_UNSET (c->flags, CLIENT_FLAG_BELOW);
         FLAG_TOGGLE (c->flags, CLIENT_FLAG_ABOVE);
-        clientUpdateAboveState (c);
+        clientUpdateLayerState (c);
     }
 }
 
-void clientToggleBelow (Client * c)
+void clientToggleLayerBelow (Client * c)
 {
     g_return_if_fail (c != NULL);
     TRACE ("entering clientToggleBelow");
-    TRACE ("toggle below client \"%s\" (0x%lx)", c->name, c->window);
 
-    if (!FLAG_TEST (c->flags, CLIENT_FLAG_ABOVE))
+    if (!clientIsTransientOrModal (c) &&
+        !FLAG_TEST (c->flags, CLIENT_FLAG_FULLSCREEN))
     {
+        FLAG_UNSET (c->flags, CLIENT_FLAG_ABOVE);
         FLAG_TOGGLE (c->flags, CLIENT_FLAG_BELOW);
-        clientUpdateAboveState (c);
+        clientUpdateLayerState (c);
     }
 }
 
+void clientSetLayerNormal (Client * c)
+{
+    g_return_if_fail (c != NULL);
+    TRACE ("entering clientSetLayerNormal");
+
+    if (!FLAG_TEST (c->flags, CLIENT_FLAG_FULLSCREEN))
+    {
+        FLAG_UNSET (c->flags, CLIENT_FLAG_ABOVE | CLIENT_FLAG_BELOW);
+        clientUpdateLayerState (c);
+    }
+}
+
 void
 clientRemoveMaximizeFlag (Client * c)
 {

Modified: xfwm4/trunk/src/client.h
===================================================================
--- xfwm4/trunk/src/client.h    2008-06-21 14:07:15 UTC (rev 27110)
+++ xfwm4/trunk/src/client.h    2008-06-21 15:17:00 UTC (rev 27111)
@@ -384,8 +384,9 @@
 void                     clientToggleSticky                     (Client *,
                                                                  gboolean);
 void                     clientToggleFullscreen                 (Client *);
-void                     clientToggleAbove                      (Client *);
-void                     clientToggleBelow                      (Client *);
+void                     clientToggleLayerAbove                 (Client *);
+void                     clientToggleLayerBelow                 (Client *);
+void                     clientSetLayerNormal                   (Client *);
 void                     clientRemoveMaximizeFlag               (Client *);
 void                     clientToggleMaximized                  (Client *,
                                                                  int,

Modified: xfwm4/trunk/src/events.c
===================================================================
--- xfwm4/trunk/src/events.c    2008-06-21 14:07:15 UTC (rev 27110)
+++ xfwm4/trunk/src/events.c    2008-06-21 15:17:00 UTC (rev 27111)
@@ -383,7 +383,7 @@
                 clientLower (c, None);
                 break;
             case KEY_TOGGLE_ABOVE:
-                clientToggleAbove (c);
+                clientToggleLayerAbove (c);
                 break;
             case KEY_TOGGLE_FULLSCREEN:
                 clientToggleFullscreen (c);
@@ -2519,7 +2519,6 @@
                 {
                     clientHide (c, c->win_workspace, TRUE);
                 }
-                frameQueueDraw (c, FALSE);
                 break;
             case MENU_OP_MOVE:
                 clientMove (c, NULL);
@@ -2529,7 +2528,6 @@
                 break;
             case MENU_OP_MINIMIZE_ALL:
                 clientHideAll (c, c->win_workspace);
-                frameQueueDraw (c, FALSE);
                 break;
             case MENU_OP_UNMINIMIZE:
                 clientShow (c, TRUE);
@@ -2546,20 +2544,26 @@
                 break;
             case MENU_OP_WORKSPACES:
                 clientSetWorkspace (c, GPOINTER_TO_INT (item_data), TRUE);
-                frameQueueDraw (c, FALSE);
                 break;
             case MENU_OP_DELETE:
-                frameQueueDraw (c, FALSE);
                 clientClose (c);
                 break;
             case MENU_OP_CONTEXT_HELP:
                 clientEnterContextMenuState (c);
-                frameQueueDraw (c, FALSE);
                 break;
             case MENU_OP_ABOVE:
+                clientToggleLayerAbove (c);
+                break;
             case MENU_OP_NORMAL:
-                clientToggleAbove (c);
-                /* Fall thru */
+                clientSetLayerNormal (c);
+                break;
+            case MENU_OP_BELOW:
+                clientToggleLayerBelow (c);
+                break;
+            case MENU_OP_FULLSCREEN:
+            case MENU_OP_UNFULLSCREEN:
+                clientToggleFullscreen (c);
+                break;
             default:
                 frameQueueDraw (c, FALSE);
                 break;
@@ -2590,11 +2594,16 @@
 
     TRACE ("entering show_window_menu");
 
-    if (!c || ((button != Button1) && (button != Button3)))
+    if ((button != Button1) && (button != Button3))
     {
         return;
     }
 
+    if (!c || !FLAG_TEST_ALL (c->xfwm_flags, XFWM_FLAG_HAS_BORDER | 
XFWM_FLAG_VISIBLE))
+    {
+        return;
+    }
+
     screen_info = c->screen_info;
     display_info = screen_info->display_info;
 
@@ -2607,26 +2616,13 @@
     ops = MENU_OP_DELETE | MENU_OP_MINIMIZE_ALL | MENU_OP_WORKSPACES | 
MENU_OP_MOVE | MENU_OP_RESIZE;
     insensitive = 0;
 
-    if (!FLAG_TEST (c->xfwm_flags, XFWM_FLAG_HAS_CLOSE))
-    {
-        insensitive |= MENU_OP_DELETE;
-    }
-
     if (FLAG_TEST (c->flags, CLIENT_FLAG_MAXIMIZED))
     {
         ops |= MENU_OP_UNMAXIMIZE;
-        if (!CLIENT_CAN_MAXIMIZE_WINDOW (c))
-        {
-            insensitive |= MENU_OP_UNMAXIMIZE;
-        }
     }
     else
     {
         ops |= MENU_OP_MAXIMIZE;
-        if (!CLIENT_CAN_MAXIMIZE_WINDOW (c))
-        {
-            insensitive |= MENU_OP_MAXIMIZE;
-        }
     }
 
     if (!FLAG_TEST (c->xfwm_flags, XFWM_FLAG_HAS_MOVE))
@@ -2634,27 +2630,13 @@
         insensitive |= MENU_OP_MOVE;
     }
 
-    if (!FLAG_TEST_ALL (c->xfwm_flags, XFWM_FLAG_HAS_RESIZE | 
XFWM_FLAG_IS_RESIZABLE) ||
-        FLAG_TEST_ALL (c->flags, CLIENT_FLAG_MAXIMIZED))
-    {
-        insensitive |= MENU_OP_RESIZE;
-    }
-
     if (FLAG_TEST (c->flags, CLIENT_FLAG_ICONIFIED))
     {
         ops |= MENU_OP_UNMINIMIZE;
-        if (!CLIENT_CAN_HIDE_WINDOW (c))
-        {
-            insensitive |= MENU_OP_UNMINIMIZE;
-        }
     }
     else
     {
         ops |= MENU_OP_MINIMIZE;
-        if (!CLIENT_CAN_HIDE_WINDOW (c))
-        {
-            insensitive |= MENU_OP_MINIMIZE;
-        }
     }
 
     if (FLAG_TEST (c->flags, CLIENT_FLAG_SHADED))
@@ -2669,46 +2651,88 @@
     if (FLAG_TEST (c->flags, CLIENT_FLAG_STICKY))
     {
         ops |= MENU_OP_UNSTICK;
-        if (!CLIENT_CAN_STICK_WINDOW(c))
-        {
-            insensitive |= MENU_OP_UNSTICK;
-        }
     }
     else
     {
         ops |= MENU_OP_STICK;
-        if (!CLIENT_CAN_STICK_WINDOW(c))
-        {
-            insensitive |= MENU_OP_STICK;
-        }
     }
 
-    /* KDE extension */
-    clientGetWMProtocols(c);
-    if (FLAG_TEST (c->wm_flags, WM_FLAG_CONTEXT_HELP))
+    if (!FLAG_TEST (c->xfwm_flags, XFWM_FLAG_HAS_CLOSE))
     {
-        ops |= MENU_OP_CONTEXT_HELP;
+        insensitive |= MENU_OP_DELETE;
     }
 
+    if (!CLIENT_CAN_STICK_WINDOW(c))
+    {
+        insensitive |= MENU_OP_STICK | MENU_OP_UNSTICK;
+    }
+
+    if (!CLIENT_CAN_HIDE_WINDOW (c))
+    {
+        insensitive |= MENU_OP_MINIMIZE;
+    }
+
+    if (!CLIENT_CAN_MAXIMIZE_WINDOW (c))
+    {
+        insensitive |= MENU_OP_MAXIMIZE;
+    }
+
+    if (!FLAG_TEST (c->xfwm_flags, XFWM_FLAG_HAS_MOVE))
+    {
+        insensitive |= MENU_OP_MOVE;
+    }
+
+    if (!FLAG_TEST_ALL (c->xfwm_flags, XFWM_FLAG_HAS_RESIZE | 
XFWM_FLAG_IS_RESIZABLE) ||
+        FLAG_TEST_ALL (c->flags, CLIENT_FLAG_MAXIMIZED))
+    {
+        insensitive |= MENU_OP_RESIZE;
+    }
+
+    if (FLAG_TEST (c->flags, CLIENT_FLAG_FULLSCREEN))
+    {
+        insensitive |= MENU_OP_SHADE | MENU_OP_MOVE | MENU_OP_RESIZE | 
MENU_OP_MAXIMIZE | MENU_OP_UNMAXIMIZE;
+    }
+
+    if (FLAG_TEST(c->flags, CLIENT_FLAG_FULLSCREEN))
+    {
+        ops |= MENU_OP_UNFULLSCREEN;
+    }
+    else
+    {
+        ops |= MENU_OP_FULLSCREEN;
+    }
+
+    if (clientIsTransientOrModal (c) || (c->type != WINDOW_NORMAL))
+    {
+        insensitive |= MENU_OP_FULLSCREEN | MENU_OP_UNFULLSCREEN;
+    }
+
     if (FLAG_TEST(c->flags, CLIENT_FLAG_ABOVE))
     {
-        ops |= MENU_OP_NORMAL;
-        if (clientIsValidTransientOrModal (c) ||
-            FLAG_TEST (c->flags, CLIENT_FLAG_BELOW | CLIENT_FLAG_FULLSCREEN))
-        {
-            insensitive |= MENU_OP_NORMAL;
-        }
+        ops |= MENU_OP_NORMAL | MENU_OP_BELOW;
     }
+    else if (FLAG_TEST(c->flags, CLIENT_FLAG_BELOW))
+    {
+        ops |= MENU_OP_NORMAL | MENU_OP_ABOVE;
+    }
     else
     {
-        ops |= MENU_OP_ABOVE;
-        if (clientIsValidTransientOrModal (c) ||
-            FLAG_TEST (c->flags, CLIENT_FLAG_BELOW | CLIENT_FLAG_FULLSCREEN))
-        {
-            insensitive |= MENU_OP_ABOVE;
-        }
+        ops |= MENU_OP_ABOVE | MENU_OP_BELOW;
     }
 
+    if (clientIsValidTransientOrModal (c) ||
+        FLAG_TEST (c->flags, CLIENT_FLAG_FULLSCREEN))
+    {
+        insensitive |= MENU_OP_NORMAL | MENU_OP_ABOVE | MENU_OP_BELOW;
+    }
+
+    /* KDE extension */
+    clientGetWMProtocols(c);
+    if (FLAG_TEST (c->wm_flags, WM_FLAG_CONTEXT_HELP))
+    {
+        ops |= MENU_OP_CONTEXT_HELP;
+    }
+
     if (clientIsValidTransientOrModal (c)
         || !FLAG_TEST (c->xfwm_flags, XFWM_FLAG_HAS_STICK)
         || FLAG_TEST (c->flags, CLIENT_FLAG_STICKY))

Modified: xfwm4/trunk/src/menu.c
===================================================================
--- xfwm4/trunk/src/menu.c      2008-06-21 14:07:15 UTC (rev 27110)
+++ xfwm4/trunk/src/menu.c      2008-06-21 15:17:00 UTC (rev 27111)
@@ -40,20 +40,24 @@
 static GtkWidget *menu_open = NULL;
 static MenuItem menuitems[] = {
     {MENU_OP_MAXIMIZE, "gtk-zoom-100", N_("Ma_ximize")},
-    {MENU_OP_UNMAXIMIZE, "gtk-zoom-out", N_("Un_maximize")},
-    {MENU_OP_MINIMIZE, "gtk-undo", N_("_Hide")},
+    {MENU_OP_UNMAXIMIZE, "gtk-zoom-out", N_("(Un)Ma_ximize")},
+    {MENU_OP_MINIMIZE, "gtk-undo", N_("Mi_nimize")},
     {MENU_OP_MINIMIZE_ALL, "gtk-clear", N_("Hide _all others")},
     {MENU_OP_UNMINIMIZE, "gtk-add", N_("S_how")},
-    {MENU_OP_MOVE, NULL, N_("Move")},
-    {MENU_OP_RESIZE, NULL, N_("Resize")},
+    {MENU_OP_MOVE, NULL, N_("_Move")},
+    {MENU_OP_RESIZE, NULL, N_("_Resize")},
     {0, NULL, NULL},
     {MENU_OP_SHADE, "gtk-goto-top", N_("_Shade")},
-    {MENU_OP_UNSHADE, "gtk-goto-bottom", N_("Un_shade")},
+    {MENU_OP_UNSHADE, "gtk-goto-bottom", N_("(Un)_Shade")},
     {MENU_OP_STICK, "gtk-add", N_("S_tick")},
-    {MENU_OP_UNSTICK, "gtk-remove", N_("Uns_tick")},
+    {MENU_OP_UNSTICK, "gtk-remove", N_("(Un)S_tick")},
     {MENU_OP_CONTEXT_HELP, "gtk-help", N_("Context _help")},
-    {MENU_OP_ABOVE, NULL, N_("Always on top")},
-    {MENU_OP_NORMAL, "gtk-apply", N_("Always on top")},
+    {0, NULL, NULL},
+    {MENU_OP_ABOVE, "gtk-go-up", N_("Above")},
+    {MENU_OP_NORMAL, "gtk-go-forward", N_("Normal")},
+    {MENU_OP_BELOW, "gtk-go-down", N_("Below")},
+    {MENU_OP_FULLSCREEN, "gtk-fullscreen", N_("_Fullscreen")},
+    {MENU_OP_UNFULLSCREEN, "gtk-fullscreen", N_("(Un)_Fullscreen")},
     {MENU_OP_WORKSPACES, NULL, N_("Send to...")},
     {0, NULL, NULL},
     {MENU_OP_DELETE, "gtk-close", N_("_Close")},

Modified: xfwm4/trunk/src/menu.h
===================================================================
--- xfwm4/trunk/src/menu.h      2008-06-21 14:07:15 UTC (rev 27110)
+++ xfwm4/trunk/src/menu.h      2008-06-21 15:17:00 UTC (rev 27111)
@@ -54,9 +54,12 @@
     MENU_OP_QUIT         = 1 << 14,
     MENU_OP_RESTART      = 1 << 15,
     MENU_OP_ABOVE        = 1 << 16,
-    MENU_OP_NORMAL       = 1 << 17,
-    MENU_OP_CONTEXT_HELP = 1 << 18,
-    MENU_OP_OTHER        = 1 << 19
+    MENU_OP_BELOW        = 1 << 17,
+    MENU_OP_NORMAL       = 1 << 18,
+    MENU_OP_FULLSCREEN   = 1 << 19,
+    MENU_OP_UNFULLSCREEN = 1 << 20,
+    MENU_OP_CONTEXT_HELP = 1 << 21,
+    MENU_OP_OTHER        = 1 << 22
 }
 MenuOp;
 

Modified: xfwm4/trunk/src/netwm.c
===================================================================
--- xfwm4/trunk/src/netwm.c     2008-06-21 14:07:15 UTC (rev 27110)
+++ xfwm4/trunk/src/netwm.c     2008-06-21 15:17:00 UTC (rev 27111)
@@ -448,17 +448,17 @@
             if ((action == NET_WM_STATE_ADD) && !FLAG_TEST (c->flags, 
CLIENT_FLAG_ABOVE))
             {
                 FLAG_SET (c->flags, CLIENT_FLAG_ABOVE);
-                clientUpdateAboveState (c);
+                clientUpdateLayerState (c);
             }
             else if ((action == NET_WM_STATE_REMOVE) && FLAG_TEST (c->flags, 
CLIENT_FLAG_ABOVE))
             {
                 FLAG_UNSET (c->flags, CLIENT_FLAG_ABOVE);
-                clientUpdateAboveState (c);
+                clientUpdateLayerState (c);
             }
             else if (action == NET_WM_STATE_TOGGLE)
             {
                 FLAG_TOGGLE (c->flags, CLIENT_FLAG_ABOVE);
-                clientUpdateAboveState (c);
+                clientUpdateLayerState (c);
             }
         }
     }
@@ -471,17 +471,17 @@
             if ((action == NET_WM_STATE_ADD) && !FLAG_TEST (c->flags, 
CLIENT_FLAG_BELOW))
             {
                 FLAG_SET (c->flags, CLIENT_FLAG_BELOW);
-                clientUpdateBelowState (c);
+                clientUpdateLayerState (c);
             }
             else if ((action == NET_WM_STATE_REMOVE) && FLAG_TEST (c->flags, 
CLIENT_FLAG_BELOW))
             {
                 FLAG_UNSET (c->flags, CLIENT_FLAG_BELOW);
-                clientUpdateBelowState (c);
+                clientUpdateLayerState (c);
             }
             else if (action == NET_WM_STATE_TOGGLE)
             {
                 FLAG_TOGGLE (c->flags, CLIENT_FLAG_BELOW);
-                clientUpdateBelowState (c);
+                clientUpdateLayerState (c);
             }
         }
     }
@@ -1312,37 +1312,20 @@
 }
 
 void
-clientUpdateAboveState (Client * c)
+clientUpdateLayerState (Client * c)
 {
     int layer;
 
     g_return_if_fail (c != NULL);
-    TRACE ("entering clientUpdateAboveState");
-    TRACE ("Update above state for client \"%s\" (0x%lx)", c->name, c->window);
+    TRACE ("entering clientUpdateLayerState");
+    TRACE ("Update layer state for client \"%s\" (0x%lx)", c->name, c->window);
 
     if (FLAG_TEST (c->flags, CLIENT_FLAG_ABOVE))
     {
         layer = WIN_LAYER_ABOVE_DOCK;
     }
-    else
+    else if (FLAG_TEST (c->flags, CLIENT_FLAG_BELOW))
     {
-        layer = c->initial_layer;
-    }
-    clientSetNetState (c);
-    clientSetLayer (c, layer);
-}
-
-void
-clientUpdateBelowState (Client * c)
-{
-    int layer;
-
-    g_return_if_fail (c != NULL);
-    TRACE ("entering clientUpdateBelowState");
-    TRACE ("Update below state for client \"%s\" (0x%lx)", c->name, c->window);
-
-    if (FLAG_TEST (c->flags, CLIENT_FLAG_BELOW))
-    {
         layer = WIN_LAYER_BELOW;
     }
     else

Modified: xfwm4/trunk/src/netwm.h
===================================================================
--- xfwm4/trunk/src/netwm.h     2008-06-21 14:07:15 UTC (rev 27110)
+++ xfwm4/trunk/src/netwm.h     2008-06-21 15:17:00 UTC (rev 27111)
@@ -49,8 +49,7 @@
 gboolean                 clientGetNetStruts                     (Client *);
 void                     clientSetNetActions                    (Client *);
 void                     clientWindowType                       (Client *);
-void                     clientUpdateAboveState                 (Client *);
-void                     clientUpdateBelowState                 (Client *);
+void                     clientUpdateLayerState                 (Client *);
 void                     clientSetNetActiveWindow               (ScreenInfo *,
                                                                  Client *,
                                                                  Time);

_______________________________________________
Xfce4-commits mailing list
Xfce4-commits@xfce.org
http://foo-projects.org/mailman/listinfo/xfce4-commits

Reply via email to