diff options
| author | Dana Jansens <danakj@orodu.net> | 2008-01-19 23:59:40 -0500 |
|---|---|---|
| committer | Dana Jansens <danakj@orodu.net> | 2008-01-19 23:59:40 -0500 |
| commit | 3ae58f457bcdfa90b26dad4c9d192f045874ddae (patch) | |
| tree | 23d603a47cfedc8e51cf36bf3480f83118b94710 /openbox/actions | |
| parent | 2b8b5da04b14af1639143cc332874c7e1a03a8bb (diff) | |
| parent | 4b41ac8343efa21a959d81a4db8aea32e5960f10 (diff) | |
Merge branch 'backport'
Diffstat (limited to 'openbox/actions')
| -rw-r--r-- | openbox/actions/cyclewindows.c | 36 | ||||
| -rw-r--r-- | openbox/actions/directionalwindows.c | 33 | ||||
| -rw-r--r-- | openbox/actions/lower.c | 1 | ||||
| -rw-r--r-- | openbox/actions/raise.c | 1 | ||||
| -rw-r--r-- | openbox/actions/resize.c | 8 |
5 files changed, 60 insertions, 19 deletions
diff --git a/openbox/actions/cyclewindows.c b/openbox/actions/cyclewindows.c index 965ac993..059db93f 100644 --- a/openbox/actions/cyclewindows.c +++ b/openbox/actions/cyclewindows.c @@ -1,4 +1,6 @@ #include "openbox/actions.h" +#include "openbox/stacking.h" +#include "openbox/window.h" #include "openbox/event.h" #include "openbox/focus_cycle.h" #include "openbox/openbox.h" @@ -11,6 +13,8 @@ typedef struct { gboolean desktop_windows; gboolean all_desktops; gboolean forward; + gboolean bar; + gboolean raise; GSList *actions; } Options; @@ -46,11 +50,16 @@ static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node) o = g_new0(Options, 1); o->dialog = TRUE; + o->bar = TRUE; if ((n = parse_find_node("linear", node))) o->linear = parse_bool(doc, n); if ((n = parse_find_node("dialog", node))) o->dialog = parse_bool(doc, n); + if ((n = parse_find_node("bar", node))) + o->bar = parse_bool(doc, n); + if ((n = parse_find_node("raise", node))) + o->raise = parse_bool(doc, n); if ((n = parse_find_node("panels", node))) o->dock_windows = parse_bool(doc, n); if ((n = parse_find_node("desktop", node))) @@ -111,17 +120,22 @@ static void free_func(gpointer options) static gboolean run_func(ObActionsData *data, gpointer options) { Options *o = options; + struct _ObClient *ft; - focus_cycle(o->forward, - o->all_desktops, - o->dock_windows, - o->desktop_windows, - o->linear, - TRUE, - o->dialog, - FALSE, FALSE); + ft = focus_cycle(o->forward, + o->all_desktops, + o->dock_windows, + o->desktop_windows, + o->linear, + TRUE, + o->bar, + o->dialog, + FALSE, FALSE); cycling = TRUE; + stacking_restore(); + if (o->raise) stacking_temp_raise(CLIENT_AS_WINDOW(ft)); + return TRUE; } @@ -174,12 +188,14 @@ static void end_cycle(gboolean cancel, guint state, Options *o) o->desktop_windows, o->linear, TRUE, + o->bar, o->dialog, TRUE, cancel); cycling = FALSE; - if (ft) { + if (ft) actions_run_acts(o->actions, OB_USER_ACTION_KEYBOARD_KEY, state, -1, -1, 0, OB_FRAME_CONTEXT_NONE, ft); - } + + stacking_restore(); } diff --git a/openbox/actions/directionalwindows.c b/openbox/actions/directionalwindows.c index 707659eb..c575d84e 100644 --- a/openbox/actions/directionalwindows.c +++ b/openbox/actions/directionalwindows.c @@ -1,5 +1,7 @@ #include "openbox/actions.h" #include "openbox/event.h" +#include "openbox/stacking.h" +#include "openbox/window.h" #include "openbox/focus_cycle.h" #include "openbox/openbox.h" #include "openbox/misc.h" @@ -11,6 +13,8 @@ typedef struct { gboolean dock_windows; gboolean desktop_windows; ObDirection direction; + gboolean bar; + gboolean raise; GSList *actions; } Options; @@ -46,9 +50,14 @@ static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node) o = g_new0(Options, 1); o->dialog = TRUE; + o->bar = TRUE; if ((n = parse_find_node("dialog", node))) o->dialog = parse_bool(doc, n); + if ((n = parse_find_node("bar", node))) + o->bar = parse_bool(doc, n); + if ((n = parse_find_node("raise", node))) + o->raise = parse_bool(doc, n); if ((n = parse_find_node("panels", node))) o->dock_windows = parse_bool(doc, n); if ((n = parse_find_node("desktop", node))) @@ -135,13 +144,19 @@ static gboolean run_func(ObActionsData *data, gpointer options) if (!o->interactive) end_cycle(FALSE, data->state, o); else { - focus_directional_cycle(o->direction, - o->dock_windows, - o->desktop_windows, - TRUE, - o->dialog, - FALSE, FALSE); + struct _ObClient *ft; + + ft = focus_directional_cycle(o->direction, + o->dock_windows, + o->desktop_windows, + TRUE, + o->bar, + o->dialog, + FALSE, FALSE); cycling = TRUE; + + stacking_restore(); + if (o->raise) stacking_temp_raise(CLIENT_AS_WINDOW(ft)); } return o->interactive; @@ -194,12 +209,14 @@ static void end_cycle(gboolean cancel, guint state, Options *o) o->dock_windows, o->desktop_windows, o->interactive, + o->bar, o->dialog, TRUE, cancel); cycling = FALSE; - if (ft) { + if (ft) actions_run_acts(o->actions, OB_USER_ACTION_KEYBOARD_KEY, state, -1, -1, 0, OB_FRAME_CONTEXT_NONE, ft); - } + + stacking_restore(); } diff --git a/openbox/actions/lower.c b/openbox/actions/lower.c index 3a214ea7..d34e933b 100644 --- a/openbox/actions/lower.c +++ b/openbox/actions/lower.c @@ -1,5 +1,6 @@ #include "openbox/actions.h" #include "openbox/stacking.h" +#include "openbox/window.h" static gboolean run_func(ObActionsData *data, gpointer options); diff --git a/openbox/actions/raise.c b/openbox/actions/raise.c index 5dfe281a..6837bce2 100644 --- a/openbox/actions/raise.c +++ b/openbox/actions/raise.c @@ -1,5 +1,6 @@ #include "openbox/actions.h" #include "openbox/stacking.h" +#include "openbox/window.h" static gboolean run_func(ObActionsData *data, gpointer options); diff --git a/openbox/actions/resize.c b/openbox/actions/resize.c index 81901bdd..3714e38b 100644 --- a/openbox/actions/resize.c +++ b/openbox/actions/resize.c @@ -5,6 +5,7 @@ #include "openbox/frame.h" typedef struct { + gboolean corner_specified; guint32 corner; } Options; @@ -33,6 +34,8 @@ static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node) if ((n = parse_find_node("edge", node))) { gchar *s = parse_string(doc, n); + + o->corner_specified = TRUE; if (!g_ascii_strcasecmp(s, "top")) o->corner = prop_atoms.net_wm_moveresize_size_top; else if (!g_ascii_strcasecmp(s, "bottom")) @@ -49,6 +52,9 @@ static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node) o->corner = prop_atoms.net_wm_moveresize_size_bottomleft; else if (!g_ascii_strcasecmp(s, "bottomright")) o->corner = prop_atoms.net_wm_moveresize_size_bottomright; + else + o->corner_specified = FALSE; + g_free(s); } return o; @@ -72,7 +78,7 @@ static gboolean run_func(ObActionsData *data, gpointer options) if (!data->button) corner = prop_atoms.net_wm_moveresize_size_keyboard; - else if (o->corner) + else if (o->corner_specified) corner = o->corner; /* it was specified in the binding */ else corner = pick_corner(data->x, data->y, |
