all repos — openbox @ 2ca83f67137c41ecd7d2cc2742b79aa8b2d7c8a8

openbox fork - make it a bit more like ryudo

grab the pointer when windows move them selves so no enter events happen. i wonder if this will cause but reports. it still does for restacking though..

little cleanup in client.c, and remove client_configure macro which was now
redundant
Dana Jansens danakj@orodu.net
commit

2ca83f67137c41ecd7d2cc2742b79aa8b2d7c8a8

parent

619eeaa962e8718901cfc9eabe56e503ba40cd90

4 files changed, 40 insertions(+), 30 deletions(-)

jump to
M openbox/client.copenbox/client.c

@@ -1771,8 +1771,8 @@ {

/* by making this pass FALSE for user, we avoid the emacs event storm where every configurenotify causes an update in its normal hints, i think this is generally what we want anyways... */ - client_configure(self, self->area.x, self->area.y, - self->area.width, self->area.height, FALSE, TRUE); + client_configure_full(self, self->area.x, self->area.y, + self->area.width, self->area.height, FALSE, TRUE); } void client_update_wmhints(ObClient *self)

@@ -2710,6 +2710,7 @@ {

gint oldw, oldh; gboolean send_resize_client; gboolean moved = FALSE, resized = FALSE; + gboolean fmoved, fresized; guint fdecor = self->frame->decorations; gboolean fhorz = self->frame->max_horz; gint logicalw, logicalh;

@@ -2745,10 +2746,12 @@ frame_adjust_client_area(self->frame);

} /* find the frame's dimensions and move/resize it */ + fmoved = moved; + fresized = resized; if (self->decorations != fdecor || self->max_horz != fhorz) - moved = resized = TRUE; - if (moved || resized) - frame_adjust_area(self->frame, moved, resized, FALSE); + fmoved = fresized = TRUE; + if (fmoved || fresized) + frame_adjust_area(self->frame, fmoved, fresized, FALSE); if ((!user || (user && final)) && !resized) {

@@ -3304,19 +3307,26 @@ self->below = below;

client_calc_layer(self); } - /* These things below can change focus so we can't grab pointer for them */ - ungrab_pointer(); - if (modal != self->modal) { self->modal = modal; /* when a window changes modality, then its stacking order with its transients needs to change */ stacking_raise(CLIENT_AS_WINDOW(self)); + + /* These things below can change focus so we can't grab pointer for + them. Note how we have two ungrab_pointers.. */ + ungrab_pointer(); + /* it also may get focused. if something is focused that shouldn't be focused anymore, then move the focus */ if (focus_client && client_focus_target(focus_client) != focus_client) client_focus(focus_client); } + else + /* These things below can change focus so we can't grab pointer for + them. Note how we have two ungrab_pointers.. */ + ungrab_pointer(); + if (iconic != self->iconic) client_iconify(self, iconic, FALSE, FALSE);

@@ -3576,13 +3586,6 @@ {

if (self->undecorated != undecorated) { self->undecorated = undecorated; client_setup_decor_and_functions(self); - /* Make sure the client knows it might have moved. Maybe there is a - * better way of doing this so only one client_configure is sent, but - * since 125 of these are sent per second when moving the window (with - * user = FALSE) i doubt it matters much. - */ - client_configure(self, self->area.x, self->area.y, - self->area.width, self->area.height, TRUE, TRUE); client_change_state(self); /* reflect this in the state hints */ } }
M openbox/client.hopenbox/client.h

@@ -369,15 +369,12 @@ void client_convert_gravity(ObClient *self, gint gravity, gint *x, gint *y,

gint w, gint h); #define client_move(self, x, y) \ - client_configure(self, x, y, self->area.width, self->area.height, \ - TRUE, TRUE) + client_configure_full(self, x, y, self->area.width, self->area.height, \ + TRUE, TRUE) #define client_resize(self, w, h) \ - client_configure(self, self->area.x, self->area.y, w, h, TRUE, TRUE) + client_configure_full(self, self->area.x, self->area.y, w, h, TRUE, TRUE) #define client_move_resize(self, x, y, w, h) \ - client_configure(self, x, y, w, h, TRUE, TRUE) - -#define client_configure(self, x, y, w, h, user, final) \ - client_configure_full(self, x, y, w, h, user, final) + client_configure_full(self, x, y, w, h, TRUE, TRUE) /*! Figure out where a window will end up and what size it will be if you told it to move/resize to these coordinates.
M openbox/event.copenbox/event.c

@@ -28,6 +28,7 @@ #include "prop.h"

#include "config.h" #include "screen.h" #include "frame.h" +#include "grab.h" #include "menu.h" #include "menuframe.h" #include "keyboard.h"

@@ -1081,7 +1082,11 @@ }

if (config) { client_find_onscreen(client, &x, &y, w, h, FALSE); + + /* don't create enter events from clients moving themselves */ + grab_pointer(FALSE, FALSE, OB_CURSOR_NONE); client_configure_full(client, x, y, w, h, FALSE, TRUE); + ungrab_pointer(); } break; }

@@ -1258,7 +1263,11 @@ e->xclient.data.l[0] & 1 << 8, x,

e->xclient.data.l[0] & 1 << 9, y); client_convert_gravity(client, grav, &x, &y, w, h); client_find_onscreen(client, &x, &y, w, h, FALSE); - client_configure(client, x, y, w, h, FALSE, TRUE); + + /* don't create enter events from clients moving themselves */ + grab_pointer(FALSE, FALSE, OB_CURSOR_NONE); + client_configure_full(client, x, y, w, h, FALSE, TRUE); + ungrab_pointer(); } else if (msgtype == prop_atoms.net_restack_window) { if (e->xclient.data.l[0] != 2) { ob_debug_type(OB_DEBUG_APP_BUGS,
M openbox/moveresize.copenbox/moveresize.c

@@ -295,9 +295,9 @@ }

#endif get_resize_position(&x, &y, cancel); - client_configure(moveresize_client, x, y, - (cancel ? start_cw : cur_x), - (cancel ? start_ch : cur_y), TRUE, TRUE); + client_configure_full(moveresize_client, x, y, + (cancel ? start_cw : cur_x), + (cancel ? start_ch : cur_y), TRUE, TRUE); } moveresize_in_progress = FALSE;

@@ -314,9 +314,9 @@ resist_move_windows(moveresize_client, resist, &cur_x, &cur_y);

if (!keyboard) resist = config_resist_edge; resist_move_monitors(moveresize_client, resist, &cur_x, &cur_y); - client_configure(moveresize_client, cur_x, cur_y, - moveresize_client->area.width, - moveresize_client->area.height, TRUE, FALSE); + client_configure_full(moveresize_client, cur_x, cur_y, + moveresize_client->area.width, + moveresize_client->area.height, TRUE, FALSE); if (config_resize_popup_show == 2) /* == "Always" */ popup_coords(moveresize_client, "%d x %d", moveresize_client->frame->area.x,

@@ -375,7 +375,8 @@

{ gint x, y; get_resize_position(&x, &y, FALSE); - client_configure(moveresize_client, x, y, cur_x, cur_y, TRUE, FALSE); + client_configure_full(moveresize_client, + x, y, cur_x, cur_y, TRUE, FALSE); } /* this would be better with a fixed width font ... XXX can do it better