all repos — openbox @ 220e568d75eaad436be403cd66d4e47d31d42392

openbox fork - make it a bit more like ryudo

allow noninteractive directional focus.

make keybinds noninteractive when the last key in the chain has no modifiers (i think this is what the code was supposed to do but failed.)

don't reset key chains during an interactive action. reset them after an interactive action finishes (honoring chroot)
so you can <C-t><C-Up>Stuff<//> and it'll do stuff as you hit C-Up, you dont have to keep hitting C-t
Dana Jansens danakj@orodu.net
commit

220e568d75eaad436be403cd66d4e47d31d42392

parent

897c70e8dd8e3f01c5f90f5a89c82762508e6667

3 files changed, 23 insertions(+), 18 deletions(-)

jump to
M openbox/action.copenbox/action.c

@@ -1831,6 +1831,7 @@ /* if using focus_delay, stop the timer now so that focus doesn't go moving

on us */ event_halt_focus_delay(); + g_print("action\n"); focus_directional_cycle(data->interdiraction.direction, data->interdiraction.dock_windows, data->interdiraction.desktop_windows,
M openbox/focus_cycle.copenbox/focus_cycle.c

@@ -358,13 +358,13 @@ {

static ObClient *first = NULL; ObClient *ft = NULL; - if (!interactive) - return; + g_print("interactive %d dialog %d done %d cancel %d\n", + interactive, dialog, done, cancel); if (cancel) { focus_cycle_target = NULL; goto done_cycle; - } else if (done) + } else if (done && interactive) goto done_cycle; if (!focus_order)

@@ -396,11 +396,11 @@ focus_cycle_desktop_windows))

ft = it->data; } - if (ft) { - if (ft != focus_cycle_target) {/* prevents flicker */ - focus_cycle_target = ft; - focus_cycle_draw_indicator(ft); - } + if (ft && ft != focus_cycle_target) {/* prevents flicker */ + focus_cycle_target = ft; + if (!interactive) + goto done_cycle; + focus_cycle_draw_indicator(ft); } if (focus_cycle_target && dialog) /* same arguments as focus_target_valid */
M openbox/keyboard.copenbox/keyboard.c

@@ -145,7 +145,6 @@ gboolean keyboard_bind(GList *keylist, ObAction *action)

{ KeyBindingTree *tree, *t; gboolean conflict; - gboolean mods = TRUE; g_assert(keylist != NULL); g_assert(action != NULL);

@@ -166,17 +165,13 @@ tree_destroy(tree);

return FALSE; } - /* find if every key in this chain has modifiers, and also find the - bottom node of the tree */ - while (t->first_child) { - if (!t->state) - mods = FALSE; - t = t->first_child; - } + /* find the bottom node */ + for (; t->first_child; t = t->first_child); /* when there are no modifiers in the binding, then the action cannot be interactive */ - if (!mods && action->data.any.interactive) { + if (!t->state && action->data.any.interactive) { + g_print("not interactive\n"); action->data.any.interactive = FALSE; action->data.inter.final = TRUE; }

@@ -208,6 +203,8 @@

alist = g_slist_append(NULL, istate.action); action_run_interactive(alist, istate.client, state, time, cancel, TRUE); g_slist_free(alist); + + keyboard_reset_chains(0); } static void keyboard_interactive_end_client(ObClient *client, gpointer data)

@@ -311,7 +308,14 @@ set_curpos(p);

} else if (p->chroot) /* an empty chroot */ set_curpos(p); else { - keyboard_reset_chains(0); + GSList *it; + gboolean inter = FALSE; + + for (it = p->actions; it && !inter; it = g_slist_next(it)) + if (((ObAction*)it->data)->data.any.interactive) + inter = TRUE; + if (!inter) /* don't reset if the action is interactive */ + keyboard_reset_chains(0); action_run_key(p->actions, client, e->xkey.state, e->xkey.x_root, e->xkey.y_root,