From: Mikael Magnusson Date: Mon, 27 Oct 2014 22:33:12 +0000 (+0100) Subject: Clip client rect to monitor bounds while picking a corner for resizing X-Git-Tag: release-3.6.0~35 X-Git-Url: http://git.openbox.org/?p=mikachu%2Fopenbox.git;a=commitdiff_plain;h=bf5357f9fb8b2af98da5a8eeaa36cbcffe5ab19a;ds=sidebyside Clip client rect to monitor bounds while picking a corner for resizing This way you can actually do everything to it when it's offscreen, not just resize the one edge that's poking out --- diff --git a/openbox/actions/resize.c b/openbox/actions/resize.c index f6858d2..fc85c0b 100644 --- a/openbox/actions/resize.c +++ b/openbox/actions/resize.c @@ -2,6 +2,7 @@ #include "openbox/moveresize.h" #include "openbox/client.h" #include "openbox/frame.h" +#include "openbox/screen.h" #include "obt/prop.h" typedef struct { @@ -95,6 +96,12 @@ static gboolean run_func(ObActionsData *data, gpointer options) static guint32 pick_corner(gint x, gint y, gint cx, gint cy, gint cw, gint ch, gboolean shaded) { + const Rect *full = screen_physical_area_all_monitors(); + if (cx < full->x) { cw = cw + cx - full->x; cx = full->x; } + if (cy < full->y) { ch = ch + cy - full->y; cy = full->y; } + if (cx + cw > full->x + full->width) cw = full->x + full->width - cx; + if (cy + ch > full->y + full->height) ch = full->y + full->height - cy; + /* let's make x and y client relative instead of screen relative */ x = x - cx; y = ch - (y - cy); /* y is inverted, 0 is at the bottom of the window */