X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fclient_menu.c;h=ce29db10b5945d0ad0220a507391b8103b74a4bd;hb=7a6a516b8e3d8ad6b15379eabf6652a6f43eab27;hp=35acd4fd707d37ac2b3388e2ca427d3f4a1aba2d;hpb=65eb46bd1f1f6c97cf1ff9506dd65792303a7ed4;p=chaz%2Fopenbox diff --git a/openbox/client_menu.c b/openbox/client_menu.c index 35acd4fd..ce29db10 100644 --- a/openbox/client_menu.c +++ b/openbox/client_menu.c @@ -19,11 +19,13 @@ #include "debug.h" #include "menu.h" #include "menuframe.h" +#include "config.h" #include "screen.h" #include "client.h" #include "openbox.h" #include "frame.h" #include "moveresize.h" +#include "event.h" #include "prop.h" #include "gettext.h" @@ -90,7 +92,7 @@ static gboolean client_menu_update(ObMenuFrame *frame, gpointer data) *en = c->functions & OB_CLIENT_FUNC_CLOSE; break; case CLIENT_DECORATE: - *en = client_normal(c); + *en = c->functions & OB_CLIENT_FUNC_UNDECORATE; break; default: *en = TRUE; @@ -105,16 +107,20 @@ static void client_menu_execute(ObMenuEntry *e, ObMenuFrame *f, Time time) { gint x, y; + gulong ignore_start; g_assert(c); + if (!config_focus_under_mouse) + ignore_start = event_start_ignore_all_enters(); + switch (e->id) { case CLIENT_ICONIFY: /* the client won't be on screen anymore so hide the menu */ menu_frame_hide_all(); f = NULL; /* and don't update */ - client_iconify(c, TRUE, FALSE); + client_iconify(c, TRUE, FALSE, FALSE); break; case CLIENT_RESTORE: client_maximize(c, FALSE, 0); @@ -133,18 +139,18 @@ static void client_menu_execute(ObMenuEntry *e, ObMenuFrame *f, menu_frame_hide_all(); f = NULL; /* and don't update */ - if (screen_pointer_pos(&x, &y)) - moveresize_start(c, x, y, 0, - prop_atoms.net_wm_moveresize_move_keyboard); + screen_pointer_pos(&x, &y); + moveresize_start(c, x, y, 0, + prop_atoms.net_wm_moveresize_move_keyboard); break; case CLIENT_RESIZE: /* this needs to grab the keyboard so hide the menu */ menu_frame_hide_all(); f = NULL; /* and don't update */ - if (screen_pointer_pos(&x, &y)) - moveresize_start(c, x, y, 0, - prop_atoms.net_wm_moveresize_size_keyboard); + screen_pointer_pos(&x, &y); + moveresize_start(c, x, y, 0, + prop_atoms.net_wm_moveresize_size_keyboard); break; case CLIENT_CLOSE: client_close(c); @@ -153,6 +159,9 @@ static void client_menu_execute(ObMenuEntry *e, ObMenuFrame *f, g_assert_not_reached(); } + if (!config_focus_under_mouse) + event_end_ignore_all_enters(ignore_start); + /* update the menu cuz stuff can have changed */ if (f) { client_menu_update(f, NULL); @@ -176,13 +185,13 @@ static gboolean layer_menu_update(ObMenuFrame *frame, gpointer data) if (e->type == OB_MENU_ENTRY_TYPE_NORMAL) { switch (e->id) { case LAYER_TOP: - *en = !c->above; + *en = !c->above && (c->functions & OB_CLIENT_FUNC_ABOVE); break; case LAYER_NORMAL: *en = c->above || c->below; break; case LAYER_BOTTOM: - *en = !c->below; + *en = !c->below && (c->functions & OB_CLIENT_FUNC_BELOW); break; default: *en = TRUE; @@ -196,8 +205,13 @@ static void layer_menu_execute(ObMenuEntry *e, ObMenuFrame *f, ObClient *c, guint state, gpointer data, Time time) { + gulong ignore_start; + g_assert(c); + if (!config_focus_under_mouse) + ignore_start = event_start_ignore_all_enters(); + switch (e->id) { case LAYER_TOP: client_set_layer(c, 1); @@ -212,6 +226,9 @@ static void layer_menu_execute(ObMenuEntry *e, ObMenuFrame *f, g_assert_not_reached(); } + if (!config_focus_under_mouse) + event_end_ignore_all_enters(ignore_start); + /* update the menu cuz stuff can have changed */ if (f) { layer_menu_update(f, NULL); @@ -391,13 +408,7 @@ void client_menu_startup() e->data.normal.mask_disabled_selected_color = ob_rr_theme->menu_disabled_selected_color; - e = menu_add_normal(menu, CLIENT_SHADE, _("&Roll up/down"), NULL, TRUE); - e->data.normal.mask = ob_rr_theme->shade_mask; - e->data.normal.mask_normal_color = ob_rr_theme->menu_color; - e->data.normal.mask_selected_color = ob_rr_theme->menu_selected_color; - e->data.normal.mask_disabled_color = ob_rr_theme->menu_disabled_color; - e->data.normal.mask_disabled_selected_color = - ob_rr_theme->menu_disabled_selected_color; + menu_add_normal(menu, CLIENT_SHADE, _("&Roll up/down"), NULL, TRUE); menu_add_normal(menu, CLIENT_DECORATE, _("Un/&Decorate"), NULL, TRUE);