Limit vtile/htile actions to clients fully within the screen of master client.
from Charles A Daniels.
This commit is contained in:
parent
0f74e48ccf
commit
aadf21edf2
@ -15,7 +15,7 @@
|
||||
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*
|
||||
* $OpenBSD: client.c,v 1.247 2018/11/13 17:37:13 okan Exp $
|
||||
* $OpenBSD: client.c,v 1.248 2019/02/22 14:39:18 okan Exp $
|
||||
*/
|
||||
|
||||
#include <sys/types.h>
|
||||
@ -986,19 +986,23 @@ client_htile(struct client_ctx *cc)
|
||||
return;
|
||||
i = n = 0;
|
||||
|
||||
area = screen_area(sc,
|
||||
cc->geom.x + cc->geom.w / 2,
|
||||
cc->geom.y + cc->geom.h / 2, CWM_GAP);
|
||||
|
||||
TAILQ_FOREACH(ci, &gc->clientq, group_entry) {
|
||||
if (ci->flags & CLIENT_HIDDEN ||
|
||||
ci->flags & CLIENT_IGNORE || (ci == cc))
|
||||
ci->flags & CLIENT_IGNORE || (ci == cc) ||
|
||||
ci->geom.x < area.x ||
|
||||
ci->geom.x > (area.x + area.w) ||
|
||||
ci->geom.y < area.y ||
|
||||
ci->geom.y > (area.y + area.h))
|
||||
continue;
|
||||
n++;
|
||||
}
|
||||
if (n == 0)
|
||||
return;
|
||||
|
||||
area = screen_area(sc,
|
||||
cc->geom.x + cc->geom.w / 2,
|
||||
cc->geom.y + cc->geom.h / 2, CWM_GAP);
|
||||
|
||||
if (cc->flags & CLIENT_VMAXIMIZED ||
|
||||
cc->geom.h + (cc->bwidth * 2) >= area.h)
|
||||
return;
|
||||
@ -1017,7 +1021,11 @@ client_htile(struct client_ctx *cc)
|
||||
h = area.h - mh;
|
||||
TAILQ_FOREACH(ci, &gc->clientq, group_entry) {
|
||||
if (ci->flags & CLIENT_HIDDEN ||
|
||||
ci->flags & CLIENT_IGNORE || (ci == cc))
|
||||
ci->flags & CLIENT_IGNORE || (ci == cc) ||
|
||||
ci->geom.x < area.x ||
|
||||
ci->geom.x > (area.x + area.w) ||
|
||||
ci->geom.y < area.y ||
|
||||
ci->geom.y > (area.y + area.h))
|
||||
continue;
|
||||
ci->bwidth = Conf.bwidth;
|
||||
ci->geom.x = x;
|
||||
@ -1044,21 +1052,26 @@ client_vtile(struct client_ctx *cc)
|
||||
|
||||
if (!gc)
|
||||
return;
|
||||
|
||||
area = screen_area(sc,
|
||||
cc->geom.x + cc->geom.w / 2,
|
||||
cc->geom.y + cc->geom.h / 2, CWM_GAP);
|
||||
|
||||
i = n = 0;
|
||||
|
||||
TAILQ_FOREACH(ci, &gc->clientq, group_entry) {
|
||||
if (ci->flags & CLIENT_HIDDEN ||
|
||||
ci->flags & CLIENT_IGNORE || (ci == cc))
|
||||
ci->flags & CLIENT_IGNORE || (ci == cc) ||
|
||||
ci->geom.x < area.x ||
|
||||
ci->geom.x > (area.x + area.w) ||
|
||||
ci->geom.y < area.y ||
|
||||
ci->geom.y > (area.y + area.h))
|
||||
continue;
|
||||
n++;
|
||||
}
|
||||
if (n == 0)
|
||||
return;
|
||||
|
||||
area = screen_area(sc,
|
||||
cc->geom.x + cc->geom.w / 2,
|
||||
cc->geom.y + cc->geom.h / 2, CWM_GAP);
|
||||
|
||||
if (cc->flags & CLIENT_HMAXIMIZED ||
|
||||
cc->geom.w + (cc->bwidth * 2) >= area.w)
|
||||
return;
|
||||
@ -1077,7 +1090,11 @@ client_vtile(struct client_ctx *cc)
|
||||
w = area.w - mw;
|
||||
TAILQ_FOREACH(ci, &gc->clientq, group_entry) {
|
||||
if (ci->flags & CLIENT_HIDDEN ||
|
||||
ci->flags & CLIENT_IGNORE || (ci == cc))
|
||||
ci->flags & CLIENT_IGNORE || (ci == cc) ||
|
||||
ci->geom.x < area.x ||
|
||||
ci->geom.x > (area.x + area.w) ||
|
||||
ci->geom.y < area.y ||
|
||||
ci->geom.y > (area.y + area.h))
|
||||
continue;
|
||||
ci->bwidth = Conf.bwidth;
|
||||
ci->geom.x = area.x + mw;
|
||||
|
Loading…
Reference in New Issue
Block a user