void action_activate(union ActionData *data)
{
if (data->client.any.c) {
- /* similar to the openbox dock for dockapps, don't let user actions
- give focus to 3rd-party docks (panels) either (unless they ask for
- it themselves). */
- if (data->client.any.c->type != OB_CLIENT_TYPE_DOCK) {
+ if (!data->any.button || client_mouse_focusable(data->client.any.c) ||
+ data->any.context != OB_FRAME_CONTEXT_CLIENT)
+ {
/* if using focus_delay, stop the timer now so that focus doesn't
go moving on us */
event_halt_focus_delay();
void action_focus(union ActionData *data)
{
if (data->client.any.c) {
- /* similar to the openbox dock for dockapps, don't let user actions
- give focus to 3rd-party docks (panels) either (unless they ask for
- it themselves). */
- if (data->client.any.c->type != OB_CLIENT_TYPE_DOCK) {
+ if (!data->any.button || client_mouse_focusable(data->client.any.c) ||
+ data->any.context != OB_FRAME_CONTEXT_CLIENT)
+ {
/* if using focus_delay, stop the timer now so that focus doesn't
go moving on us */
event_halt_focus_delay();
{
client_set_desktop(data->client.any.c,
data->client.any.c->desktop == DESKTOP_ALL ?
- screen_desktop : DESKTOP_ALL, FALSE, FALSE);
+ screen_desktop : DESKTOP_ALL, FALSE);
}
void action_move_relative_horz(union ActionData *data)
if (data->sendto.desk < screen_num_desktops ||
data->sendto.desk == DESKTOP_ALL) {
- client_set_desktop(c, data->sendto.desk, data->sendto.follow, FALSE);
+ client_set_desktop(c, data->sendto.desk, data->sendto.follow);
if (data->sendto.follow)
screen_set_desktop(data->sendto.desk, TRUE);
}
void action_desktop(union ActionData *data)
{
- static guint first = (unsigned) -1;
-
- if (data->inter.any.interactive && first == (unsigned) -1)
- first = screen_desktop;
-
if (!data->inter.any.interactive ||
(!data->inter.cancel && !data->inter.final))
{
if (data->inter.any.interactive)
screen_desktop_popup(data->desktop.desk, TRUE);
}
- } else if (data->inter.cancel) {
- screen_set_desktop(first, TRUE);
- }
-
- if (!data->inter.any.interactive || data->inter.final) {
+ } else
screen_desktop_popup(0, FALSE);
- first = (unsigned) -1;
- }
}
void action_desktop_dir(union ActionData *data)
!data->sendtodir.inter.final ||
data->sendtodir.inter.cancel)
{
- screen_set_desktop(d, TRUE);
+ if (d != screen_desktop) screen_set_desktop(d, TRUE);
}
}
!data->sendtodir.inter.final ||
data->sendtodir.inter.cancel)
{
- client_set_desktop(c, d, data->sendtodir.follow, FALSE);
- if (data->sendtodir.follow)
+ client_set_desktop(c, d, data->sendtodir.follow);
+ if (data->sendtodir.follow && d != screen_desktop)
screen_set_desktop(d, TRUE);
}
}