add the cyclewindows action

This commit is contained in:
Dana Jansens 2007-06-22 04:37:33 +00:00
parent 58d8b90122
commit fbc7607fbd
20 changed files with 42 additions and 116 deletions

View file

@ -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 \

View file

@ -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

View file

@ -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))

View file

@ -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,

View file

@ -9,4 +9,5 @@ void action_all_startup()
action_reconfigure_startup();
action_exit_startup();
action_restart_startup();
action_cyclewindows_startup();
}

View file

@ -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

View file

@ -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,

View file

@ -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 */

View file

@ -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 */

View file

@ -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);

View file

@ -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();

View file

@ -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 */

View file

@ -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);

View file

@ -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;

View file

@ -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

View file

@ -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);
}
}

View file

@ -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

View file

@ -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;
}

View file

@ -19,6 +19,7 @@
#include "startupnotify.h"
#include "gettext.h"
#include "event.h"
#include <stdlib.h>
@ -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 */

View file

@ -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