rememebers - make relative to zone useful geom for diff screen setup

if on some screens you have shelves eating up useful geometry then
window position can be off/wrong. this fixes this to use the zone
useful geom as the baseline.

@fix
This commit is contained in:
Carsten Haitzler 2020-05-04 15:47:35 +01:00
parent cbca5fa3f3
commit 8489a96a23
1 changed files with 35 additions and 32 deletions

View File

@ -348,12 +348,12 @@ e_remember_apply(E_Remember *rem, E_Client *ec)
h = ec->client.h; h = ec->client.h;
if (rem->prop.pos_w) ec->client.w = rem->prop.pos_w; if (rem->prop.pos_w) ec->client.w = rem->prop.pos_w;
if (rem->prop.pos_h) ec->client.h = rem->prop.pos_h; if (rem->prop.pos_h) ec->client.h = rem->prop.pos_h;
if (ec->zone->w != rem->prop.res_x) if (uzw != rem->prop.res_x)
{ {
if (ec->client.w > (uzw - rem->prop.frame_w)) if (ec->client.w > (uzw - rem->prop.frame_w))
ec->client.w = uzw - rem->prop.frame_w; ec->client.w = uzw - rem->prop.frame_w;
} }
if (ec->zone->h != rem->prop.res_y) if (uzh != rem->prop.res_y)
{ {
if (ec->client.h > (uzh - rem->prop.frame_h)) if (ec->client.h > (uzh - rem->prop.frame_h))
ec->client.h = uzh - rem->prop.frame_h; ec->client.h = uzh - rem->prop.frame_h;
@ -391,42 +391,42 @@ e_remember_apply(E_Remember *rem, E_Client *ec)
e_zone_useful_geometry_get(ec->zone, &uzx, &uzy, &uzw, &uzh); e_zone_useful_geometry_get(ec->zone, &uzx, &uzy, &uzw, &uzh);
ec->x = rem->prop.pos_x; ec->x = rem->prop.pos_x;
ec->y = rem->prop.pos_y; ec->y = rem->prop.pos_y;
if (ec->zone->w != rem->prop.res_x) if (uzw != rem->prop.res_x)
{ {
int px; int px;
px = ec->zone->w - (ec->w + rem->prop.frame_w); px = uzw - (ec->w + rem->prop.frame_w);
if (px < 1) px = 0; if (px < 1) px = 0;
else px = (3 * ec->x) / px; else px = (3 * ec->x) / px;
if (px < 1) if (px < 1)
{ {
if (ec->zone->w >= (rem->prop.res_x / 3)) if (uzw >= (rem->prop.res_x / 3))
ec->x = rem->prop.pos_x; ec->x = rem->prop.pos_x;
else else
ec->x = ((rem->prop.pos_x - 0) * ec->zone->w) / ec->x = ((rem->prop.pos_x - 0) * uzw) /
(rem->prop.res_x / 3); (rem->prop.res_x / 3);
} }
else if (px == 1) else if (px == 1)
{ {
if (ec->zone->w >= (rem->prop.res_x / 3)) if (uzw >= (rem->prop.res_x / 3))
ec->x = (ec->zone->w / 2) + ec->x = (uzw / 2) +
(px - (rem->prop.res_x / 2)) - (px - (rem->prop.res_x / 2)) -
(ec->w / 2); (ec->w / 2);
else else
ec->x = (ec->zone->w / 2) + ec->x = (uzw / 2) +
(((px - (rem->prop.res_x / 2)) * ec->zone->w) / (((px - (rem->prop.res_x / 2)) * uzw) /
(rem->prop.res_x / 3)) - (rem->prop.res_x / 3)) -
(ec->w / 2); (ec->w / 2);
} }
else // >= 2 else // >= 2
{ {
if (ec->zone->w >= (rem->prop.res_x / 3)) if (uzw >= (rem->prop.res_x / 3))
ec->x = ec->zone->w + ec->x = uzw +
rem->prop.pos_x - rem->prop.res_x + rem->prop.pos_x - rem->prop.res_x +
(rem->prop.w - ec->client.w); (rem->prop.w - ec->client.w);
else else
ec->x = ec->zone->w + ec->x = uzw +
(((rem->prop.pos_x - rem->prop.res_x) * ec->zone->w) / (((rem->prop.pos_x - rem->prop.res_x) * uzw) /
(rem->prop.res_x / 3)) + (rem->prop.res_x / 3)) +
(rem->prop.w - ec->client.w); (rem->prop.w - ec->client.w);
} }
@ -436,42 +436,42 @@ e_remember_apply(E_Remember *rem, E_Client *ec)
((ec->x + ec->client.w + rem->prop.frame_w) > (uzw - (uzx - ec->zone->x)))) ((ec->x + ec->client.w + rem->prop.frame_w) > (uzw - (uzx - ec->zone->x))))
ec->x = (uzw - (uzx - ec->zone->x)) - ec->client.w - rem->prop.frame_w; ec->x = (uzw - (uzx - ec->zone->x)) - ec->client.w - rem->prop.frame_w;
} }
if (ec->zone->h != rem->prop.res_y) if (uzh != rem->prop.res_y)
{ {
int py; int py;
py = ec->zone->h - (ec->h + rem->prop.frame_h); py = uzh - (ec->h + rem->prop.frame_h);
if (py < 1) py = 0; if (py < 1) py = 0;
else py = (3 * ec->y) / py; else py = (3 * ec->y) / py;
if (py < 1) if (py < 1)
{ {
if (ec->zone->h >= (rem->prop.res_y / 3)) if (uzh >= (rem->prop.res_y / 3))
ec->y = rem->prop.pos_y; ec->y = rem->prop.pos_y;
else else
ec->y = ((rem->prop.pos_y - 0) * ec->zone->h) / ec->y = ((rem->prop.pos_y - 0) * uzh) /
(rem->prop.res_y / 3); (rem->prop.res_y / 3);
} }
else if (py == 1) else if (py == 1)
{ {
if (ec->zone->h >= (rem->prop.res_y / 3)) if (uzh >= (rem->prop.res_y / 3))
ec->y = (ec->zone->h / 2) + ec->y = (uzh / 2) +
(py - (rem->prop.res_y / 2)) - (py - (rem->prop.res_y / 2)) -
(ec->h / 2); (ec->h / 2);
else else
ec->y = (ec->zone->h / 2) + ec->y = (uzh / 2) +
(((py - (rem->prop.res_y / 2)) * ec->zone->h) / (((py - (rem->prop.res_y / 2)) * uzh) /
(rem->prop.res_y / 3)) - (rem->prop.res_y / 3)) -
(ec->h / 2); (ec->h / 2);
} }
else // >= 2 else // >= 2
{ {
if (ec->zone->h >= (rem->prop.res_y / 3)) if (uzh >= (rem->prop.res_y / 3))
ec->y = ec->zone->h + ec->y = uzh +
rem->prop.pos_y - rem->prop.res_y + rem->prop.pos_y - rem->prop.res_y +
(rem->prop.h - ec->client.h); (rem->prop.h - ec->client.h);
else else
ec->y = ec->zone->h + ec->y = uzh +
(((rem->prop.pos_y - rem->prop.res_y) * ec->zone->h) / (((rem->prop.pos_y - rem->prop.res_y) * uzh) /
(rem->prop.res_y / 3)) + (rem->prop.res_y / 3)) +
(rem->prop.h - ec->client.h); (rem->prop.h - ec->client.h);
} }
@ -724,10 +724,13 @@ _e_remember_update(E_Client *ec, E_Remember *rem)
if (rem->apply & E_REMEMBER_APPLY_POS || if (rem->apply & E_REMEMBER_APPLY_POS ||
rem->apply & E_REMEMBER_APPLY_SIZE) rem->apply & E_REMEMBER_APPLY_SIZE)
{ {
int uzx = 0, uzy = 0, uxw = 0, uzh = 0;
e_zone_useful_geometry_get(ec->zone, &uzx, &uzy, &uxw, &uzh);
if (ec->fullscreen || ec->maximized) if (ec->fullscreen || ec->maximized)
{ {
rem->prop.pos_x = ec->saved.x; rem->prop.pos_x = ec->saved.x - uzx;
rem->prop.pos_y = ec->saved.y; rem->prop.pos_y = ec->saved.y - uzy;
rem->prop.pos_w = ec->saved.w; rem->prop.pos_w = ec->saved.w;
rem->prop.pos_h = ec->saved.h; rem->prop.pos_h = ec->saved.h;
rem->prop.frame_w = ec->w - ec->client.w; rem->prop.frame_w = ec->w - ec->client.w;
@ -735,10 +738,10 @@ _e_remember_update(E_Client *ec, E_Remember *rem)
} }
else else
{ {
rem->prop.pos_x = ec->x - ec->zone->x; rem->prop.pos_x = ec->x - uzx;
rem->prop.pos_y = ec->y - ec->zone->y; rem->prop.pos_y = ec->y - uzy;
rem->prop.res_x = ec->zone->w; rem->prop.res_x = uxw;
rem->prop.res_y = ec->zone->h; rem->prop.res_y = uzh;
rem->prop.pos_w = ec->client.w; rem->prop.pos_w = ec->client.w;
rem->prop.pos_h = ec->client.h; rem->prop.pos_h = ec->client.h;
rem->prop.w = ec->client.w; rem->prop.w = ec->client.w;