From fbc7607fbd1a380428a53094e727ac7631871bd4 Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Fri, 22 Jun 2007 04:37:33 +0000 Subject: [PATCH] add the cyclewindows action --- Makefile.am | 1 + openbox/action.c | 59 ----------------------------- openbox/actions.c | 5 +-- openbox/actions.h | 2 - openbox/actions/all.c | 1 + openbox/actions/all.h | 1 + openbox/actions/execute.c | 3 +- openbox/client_list_combined_menu.c | 3 +- openbox/client_list_menu.c | 3 +- openbox/client_menu.c | 9 ++--- openbox/event.c | 7 ++-- openbox/focus_cycle.c | 14 +++---- openbox/focus_cycle.h | 8 ++-- openbox/keyboard.c | 3 +- openbox/menu.h | 2 +- openbox/menuframe.c | 7 ++-- openbox/menuframe.h | 2 +- openbox/mouse.c | 18 ++++----- openbox/startupnotify.c | 7 ++-- openbox/startupnotify.h | 3 +- 20 files changed, 42 insertions(+), 116 deletions(-) diff --git a/Makefile.am b/Makefile.am index 6d58e90c..70b6fc7c 100644 --- a/Makefile.am +++ b/Makefile.am @@ -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 \ diff --git a/openbox/action.c b/openbox/action.c index 0c241b46..7f0cca15 100644 --- a/openbox/action.c +++ b/openbox/action.c @@ -318,28 +318,6 @@ void setup_action_desktop_down(ObAction **a, ObUserAction uact) (*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; @@ -805,16 +783,6 @@ ActionString actionstrings[] = 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, @@ -1000,18 +968,6 @@ ObAction *action_parse(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, } 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); @@ -1691,21 +1647,6 @@ void action_resize(union ActionData *data) 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) { /* if using focus_delay, stop the timer now so that focus doesn't go moving diff --git a/openbox/actions.c b/openbox/actions.c index 9a5d193c..b56d834a 100644 --- a/openbox/actions.c +++ b/openbox/actions.c @@ -190,7 +190,6 @@ void actions_act_unref(ObActionsAct *act) static void actions_setup_data(ObActionsData *data, ObUserAction uact, - Time time, guint state, gint x, gint y, @@ -198,7 +197,6 @@ static void actions_setup_data(ObActionsData *data, struct _ObClient *client) { data->uact = uact; - data->time = time; data->state = state; data->x = x; data->y = y; @@ -208,7 +206,6 @@ static void actions_setup_data(ObActionsData *data, void actions_run_acts(GSList *acts, ObUserAction uact, - Time time, guint state, gint x, gint y, @@ -230,7 +227,7 @@ void actions_run_acts(GSList *acts, 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)) diff --git a/openbox/actions.h b/openbox/actions.h index 3db6d792..8e3154b8 100644 --- a/openbox/actions.h +++ b/openbox/actions.h @@ -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 @@ void actions_act_unref(ObActionsAct *act); */ void actions_run_acts(GSList *acts, ObUserAction uact, - Time time, guint state, gint x, gint y, diff --git a/openbox/actions/all.c b/openbox/actions/all.c index 141fd12e..d60693b4 100644 --- a/openbox/actions/all.c +++ b/openbox/actions/all.c @@ -9,4 +9,5 @@ void action_all_startup() action_reconfigure_startup(); action_exit_startup(); action_restart_startup(); + action_cyclewindows_startup(); } diff --git a/openbox/actions/all.h b/openbox/actions/all.h index 789cce37..c3ab3a87 100644 --- a/openbox/actions/all.h +++ b/openbox/actions/all.h @@ -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 diff --git a/openbox/actions/execute.c b/openbox/actions/execute.c index 606bb153..8d45aad6 100644 --- a/openbox/actions/execute.c +++ b/openbox/actions/execute.c @@ -103,8 +103,7 @@ static gboolean run_func(ObActionsData *data, gpointer options) /* 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, diff --git a/openbox/client_list_combined_menu.c b/openbox/client_list_combined_menu.c index af2819bb..60d6e687 100644 --- a/openbox/client_list_combined_menu.c +++ b/openbox/client_list_combined_menu.c @@ -94,8 +94,7 @@ static gboolean self_update(ObMenuFrame *frame, gpointer data) } static void menu_execute(ObMenuEntry *self, ObMenuFrame *f, - ObClient *c, guint state, gpointer data, - Time time) + ObClient *c, guint state, gpointer data) { if (self->id == -1) { if (self->data.normal.data) /* it's set to NULL if its destroyed */ diff --git a/openbox/client_list_menu.c b/openbox/client_list_menu.c index 936c3125..512cb3e8 100644 --- a/openbox/client_list_menu.c +++ b/openbox/client_list_menu.c @@ -94,8 +94,7 @@ static gboolean desk_menu_update(ObMenuFrame *frame, gpointer data) } static void desk_menu_execute(ObMenuEntry *self, ObMenuFrame *f, - ObClient *c, guint state, gpointer data, - Time time) + ObClient *c, guint state, gpointer data) { if (self->id == -1) { if (self->data.normal.data) /* it's set to NULL if its destroyed */ diff --git a/openbox/client_menu.c b/openbox/client_menu.c index 8e29bd7e..e92a772c 100644 --- a/openbox/client_menu.c +++ b/openbox/client_menu.c @@ -103,8 +103,7 @@ static gboolean client_menu_update(ObMenuFrame *frame, gpointer data) } static void client_menu_execute(ObMenuEntry *e, ObMenuFrame *f, - ObClient *c, guint state, gpointer data, - Time time) + ObClient *c, guint state, gpointer data) { gint x, y; gulong ignore_start; @@ -202,8 +201,7 @@ static gboolean layer_menu_update(ObMenuFrame *frame, gpointer data) } static void layer_menu_execute(ObMenuEntry *e, ObMenuFrame *f, - ObClient *c, guint state, gpointer data, - Time time) + ObClient *c, guint state, gpointer data) { gulong ignore_start; @@ -281,8 +279,7 @@ static gboolean send_to_menu_update(ObMenuFrame *frame, gpointer data) } static void send_to_menu_execute(ObMenuEntry *e, ObMenuFrame *f, - ObClient *c, guint state, gpointer data, - Time time) + ObClient *c, guint state, gpointer data) { g_assert(c); diff --git a/openbox/event.c b/openbox/event.c index 2a12d990..cd66014b 100644 --- a/openbox/event.c +++ b/openbox/event.c @@ -1630,7 +1630,7 @@ static gboolean event_handle_menu_keyboard(XEvent *ev) 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 @@ static gboolean event_handle_menu_keyboard(XEvent *ev) 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 @@ static gboolean event_handle_menu(XEvent *ev) 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(); diff --git a/openbox/focus_cycle.c b/openbox/focus_cycle.c index a5ac4e68..971f116f 100644 --- a/openbox/focus_cycle.c +++ b/openbox/focus_cycle.c @@ -67,15 +67,16 @@ void focus_cycle_stop(ObClient *ifclient) } } -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 @@ void focus_cycle(gboolean forward, gboolean all_desktops, } 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 @@ done_cycle: focus_cycle_popup_hide(); } - return; + return ret; } /* this be mostly ripped from fvwm */ diff --git a/openbox/focus_cycle.h b/openbox/focus_cycle.h index 2e32805f..3fecc9e4 100644 --- a/openbox/focus_cycle.h +++ b/openbox/focus_cycle.h @@ -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); diff --git a/openbox/keyboard.c b/openbox/keyboard.c index ac92f5f9..b12ad53d 100644 --- a/openbox/keyboard.c +++ b/openbox/keyboard.c @@ -255,8 +255,7 @@ void keyboard_event(ObClient *client, const XEvent *e) 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; diff --git a/openbox/menu.h b/openbox/menu.h index f0fc42ba..f4368229 100644 --- a/openbox/menu.h +++ b/openbox/menu.h @@ -44,7 +44,7 @@ typedef gboolean (*ObMenuUpdateFunc)(struct _ObMenuFrame *frame, typedef void (*ObMenuExecuteFunc)(struct _ObMenuEntry *entry, struct _ObMenuFrame *frame, struct _ObClient *client, - guint state, gpointer data, Time time); + guint state, gpointer data); typedef void (*ObMenuDestroyFunc)(struct _ObMenu *menu, gpointer data); /*! @param x is the mouse x coordinate. on return it should be the x coordinate for the menu diff --git a/openbox/menuframe.c b/openbox/menuframe.c index 4cdf6a37..6a25a9ae 100644 --- a/openbox/menuframe.c +++ b/openbox/menuframe.c @@ -1179,7 +1179,7 @@ void menu_entry_frame_show_submenu(ObMenuEntryFrame *self) menu_frame_show_submenu(f, self->frame, self); } -void menu_entry_frame_execute(ObMenuEntryFrame *self, guint state, Time time) +void menu_entry_frame_execute(ObMenuEntryFrame *self, guint state) { if (self->entry->type == OB_MENU_ENTRY_TYPE_NORMAL && self->entry->data.normal.enabled) @@ -1200,11 +1200,10 @@ void menu_entry_frame_execute(ObMenuEntryFrame *self, guint state, Time time) } if (func) - func(entry, frame, client, state, data, time); + func(entry, frame, client, state, data); else actions_run_acts(acts, OB_USER_ACTION_MENU_SELECTION, - time, state, -1, -1, OB_FRAME_CONTEXT_NONE, - client); + state, -1, -1, OB_FRAME_CONTEXT_NONE, client); } } diff --git a/openbox/menuframe.h b/openbox/menuframe.h index 75e03da4..191bcfe8 100644 --- a/openbox/menuframe.h +++ b/openbox/menuframe.h @@ -141,6 +141,6 @@ ObMenuEntryFrame* menu_entry_frame_under(gint x, gint y); void menu_entry_frame_show_submenu(ObMenuEntryFrame *self); -void menu_entry_frame_execute(ObMenuEntryFrame *self, guint state, Time time); +void menu_entry_frame_execute(ObMenuEntryFrame *self, guint state); #endif diff --git a/openbox/mouse.c b/openbox/mouse.c index d8813162..493e1000 100644 --- a/openbox/mouse.c +++ b/openbox/mouse.c @@ -182,7 +182,7 @@ static ObUserAction mouse_action_to_user_action(ObMouseAction a) 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 @@ static gboolean fire_binding(ObMouseAction a, ObFrameContext context, 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 @@ void mouse_event(ObClient *client, XEvent *e) 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 @@ void mouse_event(ObClient *client, XEvent *e) 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 @@ void mouse_event(ObClient *client, XEvent *e) 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; } diff --git a/openbox/startupnotify.c b/openbox/startupnotify.c index 83e8c75b..f1b067c7 100644 --- a/openbox/startupnotify.c +++ b/openbox/startupnotify.c @@ -19,6 +19,7 @@ #include "startupnotify.h" #include "gettext.h" +#include "event.h" #include @@ -228,8 +229,7 @@ static gboolean sn_launch_wait_timeout(gpointer data) } 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 @@ void sn_setup_spawn_environment(gchar *program, gchar *name, 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 */ diff --git a/openbox/startupnotify.h b/openbox/startupnotify.h index 82b87a58..7c28faba 100644 --- a/openbox/startupnotify.h +++ b/openbox/startupnotify.h @@ -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 -- 2.39.2