add the cyclewindows action
This commit is contained in:
parent
58d8b90122
commit
fbc7607fbd
20 changed files with 42 additions and 116 deletions
|
@ -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 @@ 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
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -9,4 +9,5 @@ void action_all_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 @@ 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,
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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 @@ 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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue