X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Faction.c;h=fa41e788670af3f2608854408ec9679393ca6e04;hb=df1ef6b8adf6347030335541c33cb53173550728;hp=0ab6120deabc149a1ca1d38b1e4d5de4c9c4a4f6;hpb=0993012776e159a5b94a34034289f2274ad6c7bf;p=chaz%2Fopenbox diff --git a/openbox/action.c b/openbox/action.c index 0ab6120d..fa41e788 100644 --- a/openbox/action.c +++ b/openbox/action.c @@ -471,6 +471,11 @@ ActionString actionstrings[] = action_iconify, setup_client_action }, + { + "focustobottom", + action_focus_order_to_bottom, + setup_client_action + }, { "raiselower", action_raiselower, @@ -536,6 +541,11 @@ ActionString actionstrings[] = action_move_relative_vert, setup_client_action }, + { + "movetocenter", + action_move_to_center, + setup_client_action + }, { "resizerelativehorz", action_resize_relative_horz, @@ -591,6 +601,11 @@ ActionString actionstrings[] = action_toggle_maximize_vert, setup_client_action }, + { + "togglefullscreen", + action_toggle_fullscreen, + setup_client_action + }, { "sendtodesktop", action_send_to_desktop, @@ -896,6 +911,13 @@ ObAction *action_parse(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, } else if (act->func == action_directional_focus) { if ((n = parse_find_node("dialog", node->xmlChildrenNode))) act->data.cycle.dialog = parse_bool(doc, n); + } else if (act->func == action_raise || + act->func == action_lower || + act->func == action_raiselower || + act->func == action_shadelower || + act->func == action_unshaderaise) { + if ((n = parse_find_node("group", node->xmlChildrenNode))) + act->data.stacking.group = parse_bool(doc, n); } INTERACTIVE_LIMIT(act, uact); } @@ -1030,7 +1052,14 @@ void action_unfocus (union ActionData *data) void action_iconify(union ActionData *data) { + client_action_start(data); client_iconify(data->client.any.c, TRUE, TRUE); + client_action_end(data); +} + +void action_focus_order_to_bottom(union ActionData *data) +{ + focus_order_to_bottom(data->client.any.c); } void action_raiselower(union ActionData *data) @@ -1064,7 +1093,7 @@ void action_raiselower(union ActionData *data) void action_raise(union ActionData *data) { client_action_start(data); - stacking_raise(CLIENT_AS_WINDOW(data->client.any.c)); + stacking_raise(CLIENT_AS_WINDOW(data->client.any.c), data->stacking.group); client_action_end(data); } @@ -1087,7 +1116,7 @@ void action_shadelower(union ActionData *data) void action_lower(union ActionData *data) { client_action_start(data); - stacking_lower(CLIENT_AS_WINDOW(data->client.any.c)); + stacking_lower(CLIENT_AS_WINDOW(data->client.any.c), data->stacking.group); client_action_end(data); } @@ -1145,6 +1174,17 @@ void action_move_relative_vert(union ActionData *data) client_action_end(data); } +void action_move_to_center(union ActionData *data) +{ + ObClient *c = data->client.any.c; + Rect *area; + area = screen_area_monitor(c->desktop, 0); + client_action_start(data); + client_move(c, area->width / 2 - c->area.width / 2, + area->height / 2 - c->area.height / 2); + client_action_end(data); +} + void action_resize_relative_horz(union ActionData *data) { ObClient *c = data->relative.any.c; @@ -1234,6 +1274,14 @@ void action_toggle_maximize_vert(union ActionData *data) client_action_end(data); } +void action_toggle_fullscreen(union ActionData *data) +{ + client_action_start(data); + client_fullscreen(data->client.any.c, + !(data->client.any.c->fullscreen), TRUE); + client_action_end(data); +} + void action_send_to_desktop(union ActionData *data) { ObClient *c = data->sendto.any.c; @@ -1331,25 +1379,40 @@ void action_toggle_decorations(union ActionData *data) static guint32 pick_corner(gint x, gint y, gint cx, gint cy, gint cw, gint ch) { - if ((cw / 3 < 1) || (x - cx > cw / 3 * 2)) { - if ((ch / 3 < 1) || (y - cy > ch / 3 * 2)) - return prop_atoms.net_wm_moveresize_size_bottomright; - else if (y - cy < ch / 3) - return prop_atoms.net_wm_moveresize_size_topright; - else - return prop_atoms.net_wm_moveresize_size_right; - } else if (x - cx < cw / 3) { - if (y - cy > ch / 3 * 2) - return prop_atoms.net_wm_moveresize_size_bottomleft; - else if (y - cy < ch / 3) - return prop_atoms.net_wm_moveresize_size_topleft; - else - return prop_atoms.net_wm_moveresize_size_left; + if (config_resize_four_corners) { + if (x - cx > cw / 2) { + if (y - cy > ch / 2) + return prop_atoms.net_wm_moveresize_size_bottomright; + else + return prop_atoms.net_wm_moveresize_size_topright; + } else { + if (y - cy > ch / 2) + return prop_atoms.net_wm_moveresize_size_bottomleft; + else + return prop_atoms.net_wm_moveresize_size_topleft; + } } else { - if (y - cy > ch / 2) - return prop_atoms.net_wm_moveresize_size_bottom; - else - return prop_atoms.net_wm_moveresize_size_top; + if (x - cx > cw * 2 / 3) { + if (y - cy > ch * 2 / 3) + return prop_atoms.net_wm_moveresize_size_bottomright; + else if (y - cy < ch / 3) + return prop_atoms.net_wm_moveresize_size_topright; + else + return prop_atoms.net_wm_moveresize_size_right; + } else if (x - cx < cw / 3) { + if (y - cy > ch * 2 / 3) + return prop_atoms.net_wm_moveresize_size_bottomleft; + else if (y - cy < ch / 3) + return prop_atoms.net_wm_moveresize_size_topleft; + else + return prop_atoms.net_wm_moveresize_size_left; + } else + if (y - cy > ch * 2 / 3) + return prop_atoms.net_wm_moveresize_size_bottom; + else if (y - cy < ch / 3) + return prop_atoms.net_wm_moveresize_size_top; + else + return prop_atoms.net_wm_moveresize_move; } } @@ -1467,6 +1530,10 @@ void action_growtoedge(union ActionData *data) ObClient *c = data->diraction.any.c; Rect *a; + //FIXME growtoedge resizes shaded windows to 0 height + if (c->shaded) + return; + a = screen_area(c->desktop); x = c->frame->area.x; y = c->frame->area.y;