add the cyclewindows action
jump to
@@ -156,6 +156,7 @@ openbox_openbox_SOURCES = \
gettext.h \ openbox/actions/all.c \ openbox/actions/all.h \ + openbox/actions/cyclewindows.c \ openbox/actions/debug.c \ openbox/actions/execute.c \ openbox/actions/exit.c \
@@ -318,28 +318,6 @@ (*a)->data.desktopdir.linear = FALSE;
(*a)->data.desktopdir.wrap = TRUE; } -void setup_action_cycle_windows_next(ObAction **a, ObUserAction uact) -{ - (*a)->data.cycle.inter.any.interactive = TRUE; - (*a)->data.cycle.linear = FALSE; - (*a)->data.cycle.forward = TRUE; - (*a)->data.cycle.dialog = TRUE; - (*a)->data.cycle.dock_windows = FALSE; - (*a)->data.cycle.desktop_windows = FALSE; - (*a)->data.cycle.all_desktops = FALSE; -} - -void setup_action_cycle_windows_previous(ObAction **a, ObUserAction uact) -{ - (*a)->data.cycle.inter.any.interactive = TRUE; - (*a)->data.cycle.linear = FALSE; - (*a)->data.cycle.forward = FALSE; - (*a)->data.cycle.dialog = TRUE; - (*a)->data.cycle.dock_windows = FALSE; - (*a)->data.cycle.desktop_windows = FALSE; - (*a)->data.cycle.all_desktops = FALSE; -} - void setup_action_movefromedge_north(ObAction **a, ObUserAction uact) { (*a)->data.diraction.any.client_action = OB_CLIENT_ACTION_ALWAYS;@@ -806,16 +784,6 @@ action_toggle_layer,
setup_action_bottom_layer }, { - "nextwindow", - action_cycle_windows, - setup_action_cycle_windows_next - }, - { - "previouswindow", - action_cycle_windows, - setup_action_cycle_windows_previous - }, - { "movefromedgenorth", action_movetoedge, setup_action_movefromedge_north@@ -1000,18 +968,6 @@ parse_bool(doc, n);
} else if (act->func == action_activate) { if ((n = parse_find_node("here", node->xmlChildrenNode))) act->data.activate.here = parse_bool(doc, n); - } else if (act->func == action_cycle_windows) { - if ((n = parse_find_node("linear", node->xmlChildrenNode))) - act->data.cycle.linear = parse_bool(doc, n); - if ((n = parse_find_node("dialog", node->xmlChildrenNode))) - 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("desktop", node->xmlChildrenNode))) - act->data.cycle.desktop_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);@@ -1689,21 +1645,6 @@ c->area.height + c->frame->size.top +
c->frame->size.bottom, c->shaded); moveresize_start(c, data->any.x, data->any.y, data->any.button, corner); -} - -void action_cycle_windows(union ActionData *data) -{ - /* if using focus_delay, stop the timer now so that focus doesn't go moving - on us */ - event_halt_focus_delay(); - - focus_cycle(data->cycle.forward, - data->cycle.all_desktops, - data->cycle.dock_windows, - data->cycle.desktop_windows, - data->cycle.linear, data->any.interactive, - data->cycle.dialog, - data->cycle.inter.final, data->cycle.inter.cancel); } void action_directional_focus(union ActionData *data)
@@ -190,7 +190,6 @@ }
static void actions_setup_data(ObActionsData *data, ObUserAction uact, - Time time, guint state, gint x, gint y,@@ -198,7 +197,6 @@ ObFrameContext con,
struct _ObClient *client) { data->uact = uact; - data->time = time; data->state = state; data->x = x; data->y = y;@@ -208,7 +206,6 @@ }
void actions_run_acts(GSList *acts, ObUserAction uact, - Time time, guint state, gint x, gint y,@@ -230,7 +227,7 @@ ObActionsData data;
ObActionsAct *act = it->data; gboolean ok = TRUE; - actions_setup_data(&data, uact, time, state, x, y, con, client); + actions_setup_data(&data, uact, state, x, y, con, client); if (actions_act_is_interactive(act) && (!interactive_act || interactive_act->def != act->def))
@@ -43,7 +43,6 @@ typedef void (*ObActionsInteractiveCancelFunc)(gpointer options);
struct _ObActionsData { ObUserAction uact; - Time time; guint state; gint x; gint y;@@ -79,7 +78,6 @@ @return TRUE if an action is in interactive state, FALSE is none are
*/ void actions_run_acts(GSList *acts, ObUserAction uact, - Time time, guint state, gint x, gint y,
@@ -9,4 +9,5 @@ action_showdesktop_startup();
action_reconfigure_startup(); action_exit_startup(); action_restart_startup(); + action_cyclewindows_startup(); }
@@ -10,5 +10,6 @@ void action_showdesktop_startup();
void action_reconfigure_startup(); void action_exit_startup(); void action_restart_startup(); +void action_cyclewindows_startup(); #endif
@@ -103,8 +103,7 @@ program = g_path_get_basename(argv[0]);
/* sets up the environment */ sn_setup_spawn_environment(program, o->sn_name, o->sn_icon, /* launch it on the current desktop */ - screen_desktop, - data->time); + screen_desktop); } if (!g_spawn_async(NULL, argv, NULL,
@@ -1630,7 +1630,7 @@ Control-Enter runs it without closing the menu. */
if (frame->child) menu_frame_select_next(frame->child); else if (frame->selected) - menu_entry_frame_execute(frame->selected, state, ev->xkey.time); + menu_entry_frame_execute(frame->selected, state); } else if (keycode == ob_keycode(OB_KEY_LEFT) && ev->xkey.state == 0) {@@ -1700,7 +1700,7 @@ {
menu_frame_select(frame, found, TRUE); usleep(50000); /* highlight the item for a short bit so the user can see what happened */ - menu_entry_frame_execute(found, state, ev->xkey.time); + menu_entry_frame_execute(found, state); } else { menu_frame_select(frame, found, TRUE); if (num_found == 1)@@ -1730,8 +1730,7 @@ if ((e = menu_entry_frame_under(ev->xbutton.x_root,
ev->xbutton.y_root))) { menu_frame_select(e->frame, e, TRUE); - menu_entry_frame_execute(e, ev->xbutton.state, - ev->xbutton.time); + menu_entry_frame_execute(e, ev->xbutton.state); } else menu_frame_hide_all();
@@ -67,15 +67,16 @@ focus_directional_cycle(0, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE);
} } -void focus_cycle(gboolean forward, gboolean all_desktops, - gboolean dock_windows, gboolean desktop_windows, - gboolean linear, gboolean interactive, - gboolean dialog, gboolean done, gboolean cancel) +ObClient* focus_cycle(gboolean forward, gboolean all_desktops, + gboolean dock_windows, gboolean desktop_windows, + gboolean linear, gboolean interactive, + gboolean dialog, gboolean done, gboolean cancel) { static ObClient *t = NULL; static GList *order = NULL; GList *it, *start, *list; ObClient *ft = NULL; + ObClient *ret = NULL; if (interactive) { if (cancel) {@@ -146,8 +147,7 @@ }
} while (it != start); done_cycle: - if (done && focus_cycle_target) - client_activate(focus_cycle_target, FALSE, TRUE); + if (done && !cancel) ret = focus_cycle_target; t = NULL; focus_cycle_target = NULL;@@ -159,7 +159,7 @@ focus_cycle_draw_indicator(NULL);
focus_cycle_popup_hide(); } - return; + return ret; } /* this be mostly ripped from fvwm */
@@ -34,10 +34,10 @@ void focus_cycle_startup(gboolean reconfig);
void focus_cycle_shutdown(gboolean reconfig); /*! Cycle focus amongst windows. */ -void focus_cycle(gboolean forward, gboolean all_desktops, - gboolean dock_windows, gboolean desktop_windows, - gboolean linear, gboolean interactive, - gboolean dialog, gboolean done, gboolean cancel); +struct _ObClient* focus_cycle(gboolean forward, gboolean all_desktops, + gboolean dock_windows, gboolean desktop_windows, + gboolean linear, gboolean interactive, + gboolean dialog, gboolean done, gboolean cancel); void focus_directional_cycle(ObDirection dir, gboolean dock_windows, gboolean desktop_windows, gboolean interactive, gboolean dialog, gboolean done, gboolean cancel);
@@ -255,8 +255,7 @@ if (it == NULL) /* reset if the actions are not interactive */
keyboard_reset_chains(0); actions_run_acts(p->actions, OB_USER_ACTION_KEYBOARD_KEY, - e->xkey.time, e->xkey.state, - e->xkey.x_root, e->xkey.y_root, + e->xkey.state, e->xkey.x_root, e->xkey.y_root, OB_FRAME_CONTEXT_NONE, client); } break;
@@ -182,7 +182,7 @@ }
static gboolean fire_binding(ObMouseAction a, ObFrameContext context, ObClient *c, guint state, - guint button, gint x, gint y, Time time) + guint button, gint x, gint y) { GSList *it; ObMouseBinding *b;@@ -196,7 +196,7 @@ /* if not bound, then nothing to do! */
if (it == NULL) return FALSE; actions_run_acts(b->actions[a], mouse_action_to_user_action(a), - time, state, x, y, context, c); + state, x, y, context, c); return TRUE; }@@ -228,8 +228,7 @@
fire_binding(OB_MOUSE_ACTION_PRESS, context, client, e->xbutton.state, e->xbutton.button, - e->xbutton.x_root, e->xbutton.y_root, - e->xbutton.time); + e->xbutton.x_root, e->xbutton.y_root); /* if the bindings grab the pointer, there won't be a ButtonRelease event for us */@@ -293,22 +292,19 @@ fire_binding(OB_MOUSE_ACTION_RELEASE, context,
client, e->xbutton.state, e->xbutton.button, e->xbutton.x_root, - e->xbutton.y_root, - e->xbutton.time); + e->xbutton.y_root); if (click) fire_binding(OB_MOUSE_ACTION_CLICK, context, client, e->xbutton.state, e->xbutton.button, e->xbutton.x_root, - e->xbutton.y_root, - e->xbutton.time); + e->xbutton.y_root); if (dclick) fire_binding(OB_MOUSE_ACTION_DOUBLE_CLICK, context, client, e->xbutton.state, e->xbutton.button, e->xbutton.x_root, - e->xbutton.y_root, - e->xbutton.time); + e->xbutton.y_root); break; case MotionNotify:@@ -329,7 +325,7 @@ context == OB_FRAME_CONTEXT_CLOSE)
break; fire_binding(OB_MOUSE_ACTION_MOTION, context, - client, state, button, px, py, e->xmotion.time); + client, state, button, px, py); button = 0; state = 0; }
@@ -19,6 +19,7 @@ */
#include "startupnotify.h" #include "gettext.h" +#include "event.h" #include <stdlib.h>@@ -228,8 +229,7 @@ return FALSE; /* don't repeat */
} void sn_setup_spawn_environment(gchar *program, gchar *name, - gchar *icon_name, gint desktop, - Time time) + gchar *icon_name, gint desktop) { gchar *desc; const char *id;@@ -247,7 +247,8 @@ sn_launcher_context_set_icon_name(sn_launcher, icon_name ? icon_name : program);
sn_launcher_context_set_binary_name(sn_launcher, program); if (desktop >= 0 && (unsigned) desktop < screen_num_desktops) sn_launcher_context_set_workspace(sn_launcher, (signed) desktop); - sn_launcher_context_initiate(sn_launcher, "openbox", program, time); + sn_launcher_context_initiate(sn_launcher, "openbox", program, + event_curtime); id = sn_launcher_context_get_startup_id(sn_launcher); /* 20 second timeout for apps to start */
@@ -36,8 +36,7 @@ gboolean sn_get_desktop(gchar *id, guint *desktop);
/* Get the environment to run the program in, with startup notification */ void sn_setup_spawn_environment(gchar *program, gchar *name, - gchar *icon_name, gint desktop, - Time time); + gchar *icon_name, gint desktop); /* Tell startup notification we're not actually running the program we told it we were