when an app tries to move to 0,0 and there is a strut there (java swing!), move it to inside the strut instead (unless it is an oldschool fullscreen app)
This commit is contained in:
parent
cfce98840a
commit
28df6162a9
2 changed files with 48 additions and 3 deletions
|
@ -345,9 +345,11 @@ void client_manage(Window window, ObPrompt *prompt)
|
||||||
Rect *r;
|
Rect *r;
|
||||||
|
|
||||||
r = screen_area(self->desktop, SCREEN_AREA_ALL_MONITORS, NULL);
|
r = screen_area(self->desktop, SCREEN_AREA_ALL_MONITORS, NULL);
|
||||||
place.x = r->x;
|
if (r->x || r->y) {
|
||||||
place.y = r->y;
|
place.x = r->x;
|
||||||
ob_debug("Moving buggy app from (0,0) to (%d,%d)", r->x, r->y);
|
place.y = r->y;
|
||||||
|
ob_debug("Moving buggy app from (0,0) to (%d,%d)", r->x, r->y);
|
||||||
|
}
|
||||||
g_slice_free(Rect, r);
|
g_slice_free(Rect, r);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1247,6 +1247,49 @@ static void event_handle_client(ObClient *client, XEvent *e)
|
||||||
notify is sent or not */
|
notify is sent or not */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* check for broken apps (java swing) moving to 0,0 when there is a
|
||||||
|
strut there.
|
||||||
|
|
||||||
|
XXX remove this some day...that would be nice. but really unexpected
|
||||||
|
from Sun Microsystems.
|
||||||
|
*/
|
||||||
|
g_print("x %d y %d grav %d %d\n", x, y, client->gravity, NorthWestGravity);
|
||||||
|
if (x == 0 && y == 0 && client->gravity == NorthWestGravity) {
|
||||||
|
const Rect to = { x, y, w, h };
|
||||||
|
Rect const *monitor, *allmonitors;
|
||||||
|
monitor = screen_physical_area_monitor(client_monitor(client));
|
||||||
|
allmonitors = screen_physical_area_all_monitors();
|
||||||
|
|
||||||
|
/* oldschool fullscreen windows are allowed */
|
||||||
|
if (!(client->decorations == 0 &&
|
||||||
|
(RECT_EQUAL(to, *monitor) ||
|
||||||
|
RECT_EQUAL(to, *allmonitors))))
|
||||||
|
{
|
||||||
|
Rect *r;
|
||||||
|
|
||||||
|
r = screen_area(client->desktop, SCREEN_AREA_ALL_MONITORS,
|
||||||
|
NULL);
|
||||||
|
if (r->x || r->y) {
|
||||||
|
/* move the window only to the corner outside struts */
|
||||||
|
x = r->x;
|
||||||
|
y = r->y;
|
||||||
|
|
||||||
|
ob_debug_type(OB_DEBUG_APP_BUGS,
|
||||||
|
"Application %s is trying to move via "
|
||||||
|
"ConfigureRequest to 0,0 using "
|
||||||
|
"NorthWestGravity, while there is a "
|
||||||
|
"strut there. "
|
||||||
|
"Moving buggy app from (0,0) to (%d,%d)",
|
||||||
|
client->title, r->x, r->y);
|
||||||
|
}
|
||||||
|
|
||||||
|
g_slice_free(Rect, r);
|
||||||
|
|
||||||
|
/* they still requested a move, so don't change whether a
|
||||||
|
notify is sent or not */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
gint lw, lh;
|
gint lw, lh;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue