X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fclient.c;h=a338df16b956c1d50ed621aa48c1a8564f1841ba;hb=a866259d1f3fc88eb56a16e8b09712871fd09bcf;hp=e5666c0a55e098179dc1620ce065da1fab5442b9;hpb=af42ac2a535d3625e689c3e60bc525f8a455fcd6;p=chaz%2Fopenbox diff --git a/openbox/client.c b/openbox/client.c index e5666c0a..a338df16 100644 --- a/openbox/client.c +++ b/openbox/client.c @@ -2310,7 +2310,7 @@ static void client_change_wm_state(ObClient *self) static void client_change_state(ObClient *self) { - gulong netstate[11]; + gulong netstate[12]; guint num; num = 0; @@ -2898,7 +2898,20 @@ void client_configure(ObClient *self, gint x, gint y, gint w, gint h, if (fmoved || fresized) frame_adjust_area(self->frame, fmoved, fresized, FALSE); - if ((!user || (user && final)) && !resized) + /* This is kinda tricky and should not be changed.. let me explain! + + When user = FALSE, then the request is coming from the application + itself, and we are more strict about when to send a synthetic + ConfigureNotify. We strictly follow the rules of the ICCCM sec 4.1.5 + in this case. + + When user = TRUE, then the request is coming from "us", like when we + maximize a window or sometihng. In this case we are more lenient. We + used to follow the same rules as above, but _Java_ Swing can't handle + this. So just to appease Swing, when user = TRUE, we always send + a synthetic ConfigureNotify to give the window its root coordinates. + */ + if ((!user && !resized) || (user && final)) { XEvent event; @@ -3233,8 +3246,7 @@ void client_set_desktop_recursive(ObClient *self, client_set_desktop_recursive(it->data, target, donthide); } -void client_set_desktop(ObClient *self, guint target, - gboolean donthide) +void client_set_desktop(ObClient *self, guint target, gboolean donthide) { self = client_search_top_normal_parent(self); client_set_desktop_recursive(self, target, donthide); @@ -3864,13 +3876,12 @@ ObClient *client_search_transient(ObClient *self, ObClient *search) } #define WANT_EDGE(cur, c) \ - if(cur == c) \ - continue; \ - if(!client_normal(cur)) \ + if (cur == c) \ continue; \ - if(screen_desktop != cur->desktop && cur->desktop != DESKTOP_ALL) \ + if (c->desktop != cur->desktop && cur->desktop != DESKTOP_ALL && \ + cur->desktop != screen_desktop) \ continue; \ - if(cur->iconic) \ + if (cur->iconic) \ continue; #define HIT_EDGE(my_edge_start, my_edge_end, his_edge_start, his_edge_end) \