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