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();
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->desktopdir.inter.final,
data->desktopdir.inter.cancel);
if (!data->sendtodir.inter.any.interactive ||
- !data->sendtodir.inter.final ||
- data->sendtodir.inter.cancel)
+ (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);
if (!data->sendtodir.inter.any.interactive ||
- !data->sendtodir.inter.final ||
- data->sendtodir.inter.cancel)
+ (data->sendtodir.inter.final && !data->sendtodir.inter.cancel))
{
client_set_desktop(c, d, data->sendtodir.follow);
- if (data->sendtodir.follow)
+ if (data->sendtodir.follow && d != screen_desktop)
screen_set_desktop(d, TRUE);
}
}
client_action_end(data);
}
-static guint32 pick_corner(gint x, gint y, gint cx, gint cy, gint cw, gint ch)
+static guint32 pick_corner(gint x, gint y, gint cx, gint cy, gint cw, gint ch,
+ gboolean shaded)
{
/* let's make x and y client relative instead of screen relative */
x = x - cx;
|CCCCCCC | A B | DDDDDDD|
| CCCCCCCC | A | | B | DDDDDDDD |
| CCCCCCC A B DDDDDDD |
- - - - - - - - - - - - +CCCCCCC+aaaaaaa+DDDDDDD+ - - - - - - - - - - -
- | | b c | |
- | west | b move c | east |
- | | b c | |
- - - - - - - - - - - - +EEEEEEE+ddddddd+FFFFFFF+- - - - - - - - - - -
+ - - - - - - - - - - - +CCCCCCC+aaaaaaa+DDDDDDD+ - - - - - - - - - - - -
+ | | b c | | sh
+ | west | b move c | east | ad
+ | | b c | | ed
+ - - - - - - - - - - - +EEEEEEE+ddddddd+FFFFFFF+- - - - - - - - - - - -
| EEEEEEE G H FFFFFFF |
| EEEEEEEE | G | | H | FFFFFFFF |
|EEEEEEE | G H | FFFFFFF|
+---------------------G-------|-------|-------H---------------------+
*/
+ if (shaded) {
+ /* for shaded windows, you can only resize west/east and move */
+ if (b)
+ return prop_atoms.net_wm_moveresize_size_left;
+ if (c)
+ return prop_atoms.net_wm_moveresize_size_right;
+ return prop_atoms.net_wm_moveresize_move;
+ }
+
if (y < A && y >= C)
return prop_atoms.net_wm_moveresize_size_topleft;
else if (y >= A && y >= B && a)
ObClient *c = data->moveresize.any.c;
guint32 corner;
- if (!client_normal(c)) return;
-
if (data->moveresize.keyboard) {
corner = (data->moveresize.move ?
prop_atoms.net_wm_moveresize_move_keyboard :
c->area.width + c->frame->size.left +
c->frame->size.right,
c->area.height + c->frame->size.top +
- c->frame->size.bottom));
- const gchar *c;
- if (corner == prop_atoms.net_wm_moveresize_size_topright)
- c = "topright";
- else if (corner == prop_atoms.net_wm_moveresize_size_top)
- c = "top";
- else if (corner == prop_atoms.net_wm_moveresize_size_topleft)
- c = "topleft";
- else if (corner == prop_atoms.net_wm_moveresize_size_right)
- c = "right";
- else if (corner == prop_atoms.net_wm_moveresize_move)
- c = "middle";
- else if (corner == prop_atoms.net_wm_moveresize_size_left)
- c = "left";
- else if (corner == prop_atoms.net_wm_moveresize_size_bottomright)
- c = "bottomright";
- else if (corner == prop_atoms.net_wm_moveresize_size_bottom)
- c = "bottom";
- else if (corner == prop_atoms.net_wm_moveresize_size_bottomleft)
- c = "bottomleft";
- ob_debug("corner: %s\n", c);
+ c->frame->size.bottom, c->shaded));
}
moveresize_start(c, data->any.x, data->any.y, data->any.button, corner);