X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Faction.c;h=4839088c710ffc25e20606f40efd4656fff3e62c;hb=f0fdba8ad36010280fc84c2425010c195b76562a;hp=2e348c7c20aa9ef3e5a2a9f220e85f39f8745329;hpb=b5e597f1b3a810610fd63f50c55dc5a8b715744e;p=chaz%2Fopenbox diff --git a/openbox/action.c b/openbox/action.c index 2e348c7c..4839088c 100644 --- a/openbox/action.c +++ b/openbox/action.c @@ -293,6 +293,7 @@ void setup_action_cycle_windows_next(ObAction **a, ObUserAction uact) (*a)->data.cycle.forward = TRUE; (*a)->data.cycle.dialog = TRUE; (*a)->data.cycle.dock_windows = FALSE; + (*a)->data.cycle.all_desktops = FALSE; } void setup_action_cycle_windows_previous(ObAction **a, ObUserAction uact) @@ -302,6 +303,7 @@ void setup_action_cycle_windows_previous(ObAction **a, ObUserAction uact) (*a)->data.cycle.forward = FALSE; (*a)->data.cycle.dialog = TRUE; (*a)->data.cycle.dock_windows = FALSE; + (*a)->data.cycle.all_desktops = FALSE; } void setup_action_movefromedge_north(ObAction **a, ObUserAction uact) @@ -1009,6 +1011,9 @@ ObAction *action_parse(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, act->data.cycle.dialog = parse_bool(doc, n); if ((n = parse_find_node("panels", node->xmlChildrenNode))) act->data.cycle.dock_windows = parse_bool(doc, n); + if ((n = parse_find_node("allDesktops", + node->xmlChildrenNode))) + act->data.cycle.all_desktops = parse_bool(doc, n); } else if (act->func == action_directional_focus) { if ((n = parse_find_node("dialog", node->xmlChildrenNode))) act->data.interdiraction.dialog = parse_bool(doc, n); @@ -1194,10 +1199,9 @@ void action_execute(union ActionData *data) void action_activate(union ActionData *data) { if (data->client.any.c) { - /* similar to the openbox dock for dockapps, don't let user actions - give focus to 3rd-party docks (panels) either (unless they ask for - it themselves). */ - if (data->client.any.c->type != OB_CLIENT_TYPE_DOCK) { + if (!data->any.button || client_mouse_focusable(data->client.any.c) || + data->any.context != OB_FRAME_CONTEXT_CLIENT) + { /* if using focus_delay, stop the timer now so that focus doesn't go moving on us */ event_halt_focus_delay(); @@ -1215,10 +1219,9 @@ void action_activate(union ActionData *data) void action_focus(union ActionData *data) { if (data->client.any.c) { - /* similar to the openbox dock for dockapps, don't let user actions - give focus to 3rd-party docks (panels) either (unless they ask for - it themselves). */ - if (data->client.any.c->type != OB_CLIENT_TYPE_DOCK) { + if (!data->any.button || client_mouse_focusable(data->client.any.c) || + data->any.context != OB_FRAME_CONTEXT_CLIENT) + { /* if using focus_delay, stop the timer now so that focus doesn't go moving on us */ event_halt_focus_delay(); @@ -1263,9 +1266,9 @@ void action_raiselower(union ActionData *data) if (cit == c) break; if (client_normal(cit) == client_normal(c) && - cit->layer == c->layer && - frame_visible(cit->frame) && - !client_search_transient(c, cit)) + cit->layer == c->layer && + cit->frame->visible && + !client_search_transient(c, cit)) { if (RECT_INTERSECTS_RECT(cit->frame->area, c->frame->area)) { raise = TRUE; @@ -1512,7 +1515,7 @@ void action_send_to_desktop(union ActionData *data) data->sendto.desk == DESKTOP_ALL) { client_set_desktop(c, data->sendto.desk, data->sendto.follow); if (data->sendto.follow) - screen_set_desktop(data->sendto.desk); + screen_set_desktop(data->sendto.desk, TRUE); } } @@ -1529,12 +1532,12 @@ void action_desktop(union ActionData *data) if (data->desktop.desk < screen_num_desktops || data->desktop.desk == DESKTOP_ALL) { - screen_set_desktop(data->desktop.desk); + screen_set_desktop(data->desktop.desk, TRUE); if (data->inter.any.interactive) screen_desktop_popup(data->desktop.desk, TRUE); } } else if (data->inter.cancel) { - screen_set_desktop(first); + screen_set_desktop(first, TRUE); } if (!data->inter.any.interactive || data->inter.final) { @@ -1557,7 +1560,7 @@ void action_desktop_dir(union ActionData *data) !data->sendtodir.inter.final || data->sendtodir.inter.cancel) { - screen_set_desktop(d); + screen_set_desktop(d, TRUE); } } @@ -1579,13 +1582,13 @@ void action_send_to_desktop_dir(union ActionData *data) { client_set_desktop(c, d, data->sendtodir.follow); if (data->sendtodir.follow) - screen_set_desktop(d); + screen_set_desktop(d, TRUE); } } void action_desktop_last(union ActionData *data) { - screen_set_desktop(screen_last_desktop); + screen_set_desktop(screen_last_desktop, TRUE); } void action_toggle_decorations(union ActionData *data) @@ -1716,26 +1719,6 @@ void action_moveresize(union ActionData *data) c->frame->size.right, c->area.height + c->frame->size.top + c->frame->size.bottom)); - const gchar *c; - if (corner == prop_atoms.net_wm_moveresize_size_topright) - c = "topright"; - else if (corner == prop_atoms.net_wm_moveresize_size_top) - c = "top"; - else if (corner == prop_atoms.net_wm_moveresize_size_topleft) - c = "topleft"; - else if (corner == prop_atoms.net_wm_moveresize_size_right) - c = "right"; - else if (corner == prop_atoms.net_wm_moveresize_move) - c = "middle"; - else if (corner == prop_atoms.net_wm_moveresize_size_left) - c = "left"; - else if (corner == prop_atoms.net_wm_moveresize_size_bottomright) - c = "bottomright"; - else if (corner == prop_atoms.net_wm_moveresize_size_bottom) - c = "bottom"; - else if (corner == prop_atoms.net_wm_moveresize_size_bottomleft) - c = "bottomleft"; - ob_debug("corner: %s\n", c); } moveresize_start(c, data->any.x, data->any.y, data->any.button, corner); @@ -1771,6 +1754,7 @@ void action_cycle_windows(union ActionData *data) event_halt_focus_delay(); focus_cycle(data->cycle.forward, + data->cycle.all_desktops, data->cycle.dock_windows, data->cycle.linear, data->any.interactive, data->cycle.dialog,