Add structure for sizes
This commit is contained in:
parent
87872079a7
commit
7bb6abbacd
126
src/dwm.c
126
src/dwm.c
|
@ -53,7 +53,7 @@
|
||||||
(x) + (w), \
|
(x) + (w), \
|
||||||
window_area_geometry.position.x \
|
window_area_geometry.position.x \
|
||||||
+ \
|
+ \
|
||||||
window_area_geometry.w \
|
window_area_geometry.sizes.w \
|
||||||
) \
|
) \
|
||||||
- \
|
- \
|
||||||
MAX( \
|
MAX( \
|
||||||
|
@ -68,7 +68,7 @@
|
||||||
(y) + (h), \
|
(y) + (h), \
|
||||||
window_area_geometry.position.y \
|
window_area_geometry.position.y \
|
||||||
+ \
|
+ \
|
||||||
window_area_geometry.h \
|
window_area_geometry.sizes.h \
|
||||||
) \
|
) \
|
||||||
- \
|
- \
|
||||||
MAX( \
|
MAX( \
|
||||||
|
@ -334,24 +334,24 @@ int applysizehints(
|
||||||
if (
|
if (
|
||||||
*x
|
*x
|
||||||
>=
|
>=
|
||||||
m->window_area_geometry.position.x + m->window_area_geometry.w
|
m->window_area_geometry.position.x + m->window_area_geometry.sizes.w
|
||||||
) {
|
) {
|
||||||
*x =
|
*x =
|
||||||
m->window_area_geometry.position.x
|
m->window_area_geometry.position.x
|
||||||
+
|
+
|
||||||
m->window_area_geometry.w
|
m->window_area_geometry.sizes.w
|
||||||
-
|
-
|
||||||
client_geometry_total_width(&c->state.geometry);
|
client_geometry_total_width(&c->state.geometry);
|
||||||
}
|
}
|
||||||
if (
|
if (
|
||||||
*y
|
*y
|
||||||
>=
|
>=
|
||||||
m->window_area_geometry.position.y + m->window_area_geometry.h
|
m->window_area_geometry.position.y + m->window_area_geometry.sizes.h
|
||||||
) {
|
) {
|
||||||
*y =
|
*y =
|
||||||
m->window_area_geometry.position.y
|
m->window_area_geometry.position.y
|
||||||
+
|
+
|
||||||
m->window_area_geometry.h
|
m->window_area_geometry.sizes.h
|
||||||
-
|
-
|
||||||
client_geometry_total_height(&c->state.geometry);
|
client_geometry_total_height(&c->state.geometry);
|
||||||
}
|
}
|
||||||
|
@ -424,9 +424,9 @@ int applysizehints(
|
||||||
||
|
||
|
||||||
*y != c->state.geometry.basic.position.y
|
*y != c->state.geometry.basic.position.y
|
||||||
||
|
||
|
||||||
*w != c->state.geometry.basic.w
|
*w != c->state.geometry.basic.sizes.w
|
||||||
||
|
||
|
||||||
*h != c->state.geometry.basic.h
|
*h != c->state.geometry.basic.sizes.h
|
||||||
||
|
||
|
||||||
bw != c->state.geometry.border_width
|
bw != c->state.geometry.border_width
|
||||||
);
|
);
|
||||||
|
@ -569,8 +569,8 @@ void configure(Client *c)
|
||||||
.window = c->win,
|
.window = c->win,
|
||||||
.x = c->state.geometry.basic.position.x,
|
.x = c->state.geometry.basic.position.x,
|
||||||
.y = c->state.geometry.basic.position.y,
|
.y = c->state.geometry.basic.position.y,
|
||||||
.width = c->state.geometry.basic.w,
|
.width = c->state.geometry.basic.sizes.w,
|
||||||
.height = c->state.geometry.basic.h,
|
.height = c->state.geometry.basic.sizes.h,
|
||||||
.border_width = c->state.geometry.border_width,
|
.border_width = c->state.geometry.border_width,
|
||||||
.above = None,
|
.above = None,
|
||||||
.override_redirect = False,
|
.override_redirect = False,
|
||||||
|
@ -890,8 +890,8 @@ void manage(Window w, XWindowAttributes *wa)
|
||||||
c->win = w;
|
c->win = w;
|
||||||
c->state.geometry.basic.position.x = wa->x;
|
c->state.geometry.basic.position.x = wa->x;
|
||||||
c->state.geometry.basic.position.y = wa->y;
|
c->state.geometry.basic.position.y = wa->y;
|
||||||
c->state.geometry.basic.w = wa->width;
|
c->state.geometry.basic.sizes.w = wa->width;
|
||||||
c->state.geometry.basic.h = wa->height;
|
c->state.geometry.basic.sizes.h = wa->height;
|
||||||
c->state.is_floating = false;
|
c->state.is_floating = false;
|
||||||
|
|
||||||
updatetitle(c);
|
updatetitle(c);
|
||||||
|
@ -914,12 +914,12 @@ void manage(Window w, XWindowAttributes *wa)
|
||||||
if (
|
if (
|
||||||
c->state.geometry.basic.position.x + total_width
|
c->state.geometry.basic.position.x + total_width
|
||||||
>
|
>
|
||||||
c->mon->screen_geometry.position.x + c->mon->screen_geometry.w
|
c->mon->screen_geometry.position.x + c->mon->screen_geometry.sizes.w
|
||||||
) {
|
) {
|
||||||
c->state.geometry.basic.position.x =
|
c->state.geometry.basic.position.x =
|
||||||
c->mon->screen_geometry.position.x
|
c->mon->screen_geometry.position.x
|
||||||
+
|
+
|
||||||
c->mon->screen_geometry.w
|
c->mon->screen_geometry.sizes.w
|
||||||
-
|
-
|
||||||
total_width;
|
total_width;
|
||||||
}
|
}
|
||||||
|
@ -930,12 +930,12 @@ void manage(Window w, XWindowAttributes *wa)
|
||||||
if (
|
if (
|
||||||
c->state.geometry.basic.position.y + total_height
|
c->state.geometry.basic.position.y + total_height
|
||||||
>
|
>
|
||||||
c->mon->screen_geometry.position.y + c->mon->screen_geometry.h
|
c->mon->screen_geometry.position.y + c->mon->screen_geometry.sizes.h
|
||||||
) {
|
) {
|
||||||
c->state.geometry.basic.position.y =
|
c->state.geometry.basic.position.y =
|
||||||
c->mon->screen_geometry.position.y
|
c->mon->screen_geometry.position.y
|
||||||
+
|
+
|
||||||
c->mon->screen_geometry.h
|
c->mon->screen_geometry.sizes.h
|
||||||
-
|
-
|
||||||
total_height;
|
total_height;
|
||||||
}
|
}
|
||||||
|
@ -973,11 +973,11 @@ void manage(Window w, XWindowAttributes *wa)
|
||||||
c->state.geometry.basic.position.x =
|
c->state.geometry.basic.position.x =
|
||||||
c->mon->screen_geometry.position.x
|
c->mon->screen_geometry.position.x
|
||||||
+
|
+
|
||||||
(c->mon->screen_geometry.w - total_width) / 2;
|
(c->mon->screen_geometry.sizes.w - total_width) / 2;
|
||||||
c->state.geometry.basic.position.y =
|
c->state.geometry.basic.position.y =
|
||||||
c->mon->screen_geometry.position.y
|
c->mon->screen_geometry.position.y
|
||||||
+
|
+
|
||||||
(c->mon->screen_geometry.h - total_height) / 2;
|
(c->mon->screen_geometry.sizes.h - total_height) / 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
XSelectInput(
|
XSelectInput(
|
||||||
|
@ -1019,8 +1019,8 @@ void manage(Window w, XWindowAttributes *wa)
|
||||||
c->win,
|
c->win,
|
||||||
c->state.geometry.basic.position.x + 2 * sw,
|
c->state.geometry.basic.position.x + 2 * sw,
|
||||||
c->state.geometry.basic.position.y,
|
c->state.geometry.basic.position.y,
|
||||||
c->state.geometry.basic.w,
|
c->state.geometry.basic.sizes.w,
|
||||||
c->state.geometry.basic.h
|
c->state.geometry.basic.sizes.h
|
||||||
);
|
);
|
||||||
|
|
||||||
setclientstate(c, NormalState);
|
setclientstate(c, NormalState);
|
||||||
|
@ -1093,7 +1093,7 @@ void movemouse(__attribute__((unused)) const Arg *arg)
|
||||||
(
|
(
|
||||||
selmon->window_area_geometry.position.x
|
selmon->window_area_geometry.position.x
|
||||||
+
|
+
|
||||||
selmon->window_area_geometry.w
|
selmon->window_area_geometry.sizes.w
|
||||||
)
|
)
|
||||||
-
|
-
|
||||||
(nx + client_geometry_total_width(&c->state.geometry))
|
(nx + client_geometry_total_width(&c->state.geometry))
|
||||||
|
@ -1104,7 +1104,7 @@ void movemouse(__attribute__((unused)) const Arg *arg)
|
||||||
nx =
|
nx =
|
||||||
selmon->window_area_geometry.position.x
|
selmon->window_area_geometry.position.x
|
||||||
+
|
+
|
||||||
selmon->window_area_geometry.w
|
selmon->window_area_geometry.sizes.w
|
||||||
-
|
-
|
||||||
client_geometry_total_width(&c->state.geometry);
|
client_geometry_total_width(&c->state.geometry);
|
||||||
}
|
}
|
||||||
|
@ -1120,7 +1120,7 @@ void movemouse(__attribute__((unused)) const Arg *arg)
|
||||||
(
|
(
|
||||||
selmon->window_area_geometry.position.y
|
selmon->window_area_geometry.position.y
|
||||||
+
|
+
|
||||||
selmon->window_area_geometry.h
|
selmon->window_area_geometry.sizes.h
|
||||||
) - (ny + client_geometry_total_height(&c->state.geometry))
|
) - (ny + client_geometry_total_height(&c->state.geometry))
|
||||||
)
|
)
|
||||||
<
|
<
|
||||||
|
@ -1129,7 +1129,7 @@ void movemouse(__attribute__((unused)) const Arg *arg)
|
||||||
ny =
|
ny =
|
||||||
selmon->window_area_geometry.position.y
|
selmon->window_area_geometry.position.y
|
||||||
+
|
+
|
||||||
selmon->window_area_geometry.h
|
selmon->window_area_geometry.sizes.h
|
||||||
-
|
-
|
||||||
client_geometry_total_height(&c->state.geometry);
|
client_geometry_total_height(&c->state.geometry);
|
||||||
}
|
}
|
||||||
|
@ -1150,8 +1150,8 @@ void movemouse(__attribute__((unused)) const Arg *arg)
|
||||||
c,
|
c,
|
||||||
nx,
|
nx,
|
||||||
ny,
|
ny,
|
||||||
c->state.geometry.basic.w,
|
c->state.geometry.basic.sizes.w,
|
||||||
c->state.geometry.basic.h,
|
c->state.geometry.basic.sizes.h,
|
||||||
c->state.geometry.border_width,
|
c->state.geometry.border_width,
|
||||||
1
|
1
|
||||||
);
|
);
|
||||||
|
@ -1166,8 +1166,8 @@ void movemouse(__attribute__((unused)) const Arg *arg)
|
||||||
Monitor *const m = recttomon(
|
Monitor *const m = recttomon(
|
||||||
c->state.geometry.basic.position.x,
|
c->state.geometry.basic.position.x,
|
||||||
c->state.geometry.basic.position.y,
|
c->state.geometry.basic.position.y,
|
||||||
c->state.geometry.basic.w,
|
c->state.geometry.basic.sizes.w,
|
||||||
c->state.geometry.basic.h
|
c->state.geometry.basic.sizes.h
|
||||||
);
|
);
|
||||||
|
|
||||||
if (m != selmon) {
|
if (m != selmon) {
|
||||||
|
@ -1303,8 +1303,8 @@ void resizeclient(Client *c, int x, int y, int w, int h, int bw)
|
||||||
|
|
||||||
c->state.geometry.basic.position.x = wc.x = x;
|
c->state.geometry.basic.position.x = wc.x = x;
|
||||||
c->state.geometry.basic.position.y = wc.y = y;
|
c->state.geometry.basic.position.y = wc.y = y;
|
||||||
c->state.geometry.basic.w = wc.width = w;
|
c->state.geometry.basic.sizes.w = wc.width = w;
|
||||||
c->state.geometry.basic.h = wc.height = h;
|
c->state.geometry.basic.sizes.h = wc.height = h;
|
||||||
c->state.geometry.border_width = wc.border_width = bw;
|
c->state.geometry.border_width = wc.border_width = bw;
|
||||||
|
|
||||||
XConfigureWindow(dpy, c->win, CWX|CWY|CWWidth|CWHeight|CWBorderWidth, &wc);
|
XConfigureWindow(dpy, c->win, CWX|CWY|CWWidth|CWHeight|CWBorderWidth, &wc);
|
||||||
|
@ -1334,8 +1334,8 @@ void resizemouse(__attribute__((unused)) const Arg *arg)
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
c->state.geometry.basic.w + c->state.geometry.border_width - 1,
|
c->state.geometry.basic.sizes.w + c->state.geometry.border_width - 1,
|
||||||
c->state.geometry.basic.h + c->state.geometry.border_width - 1
|
c->state.geometry.basic.sizes.h + c->state.geometry.border_width - 1
|
||||||
);
|
);
|
||||||
|
|
||||||
const unsigned int snap_distance = settings_get_snap_distance();
|
const unsigned int snap_distance = settings_get_snap_distance();
|
||||||
|
@ -1386,7 +1386,7 @@ void resizemouse(__attribute__((unused)) const Arg *arg)
|
||||||
(
|
(
|
||||||
selmon->window_area_geometry.position.x
|
selmon->window_area_geometry.position.x
|
||||||
+
|
+
|
||||||
selmon->window_area_geometry.w
|
selmon->window_area_geometry.sizes.w
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
&&
|
&&
|
||||||
|
@ -1402,15 +1402,21 @@ void resizemouse(__attribute__((unused)) const Arg *arg)
|
||||||
(
|
(
|
||||||
selmon->window_area_geometry.position.y
|
selmon->window_area_geometry.position.y
|
||||||
+
|
+
|
||||||
selmon->window_area_geometry.h
|
selmon->window_area_geometry.sizes.h
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
) {
|
) {
|
||||||
if (!c->state.is_floating &&
|
if (
|
||||||
(selmon->lt[selmon->sellt]->arrange == NULL ||
|
!c->state.is_floating
|
||||||
abs(nw - c->state.geometry.basic.w) > snap_distance ||
|
&&
|
||||||
abs(nh - c->state.geometry.basic.h) > snap_distance))
|
(
|
||||||
{
|
selmon->lt[selmon->sellt]->arrange == NULL
|
||||||
|
||
|
||||||
|
abs(nw - c->state.geometry.basic.sizes.w) > snap_distance
|
||||||
|
||
|
||||||
|
abs(nh - c->state.geometry.basic.sizes.h) > snap_distance
|
||||||
|
)
|
||||||
|
) {
|
||||||
togglefloating(NULL);
|
togglefloating(NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1439,8 +1445,8 @@ void resizemouse(__attribute__((unused)) const Arg *arg)
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
c->state.geometry.basic.w + c->state.geometry.border_width - 1,
|
c->state.geometry.basic.sizes.w + c->state.geometry.border_width - 1,
|
||||||
c->state.geometry.basic.h + c->state.geometry.border_width - 1
|
c->state.geometry.basic.sizes.h + c->state.geometry.border_width - 1
|
||||||
);
|
);
|
||||||
|
|
||||||
XUngrabPointer(dpy, CurrentTime);
|
XUngrabPointer(dpy, CurrentTime);
|
||||||
|
@ -1450,8 +1456,8 @@ void resizemouse(__attribute__((unused)) const Arg *arg)
|
||||||
Monitor *const m = recttomon(
|
Monitor *const m = recttomon(
|
||||||
c->state.geometry.basic.position.x,
|
c->state.geometry.basic.position.x,
|
||||||
c->state.geometry.basic.position.y,
|
c->state.geometry.basic.position.y,
|
||||||
c->state.geometry.basic.w,
|
c->state.geometry.basic.sizes.w,
|
||||||
c->state.geometry.basic.h
|
c->state.geometry.basic.sizes.h
|
||||||
);
|
);
|
||||||
|
|
||||||
if (m != selmon) {
|
if (m != selmon) {
|
||||||
|
@ -1765,8 +1771,8 @@ void showhide(Client *c)
|
||||||
c,
|
c,
|
||||||
c->state.geometry.basic.position.x,
|
c->state.geometry.basic.position.x,
|
||||||
c->state.geometry.basic.position.y,
|
c->state.geometry.basic.position.y,
|
||||||
c->state.geometry.basic.w,
|
c->state.geometry.basic.sizes.w,
|
||||||
c->state.geometry.basic.h,
|
c->state.geometry.basic.sizes.h,
|
||||||
c->state.geometry.border_width,
|
c->state.geometry.border_width,
|
||||||
0
|
0
|
||||||
);
|
);
|
||||||
|
@ -1826,9 +1832,9 @@ void togglefloating(__attribute__((unused)) const Arg *arg)
|
||||||
selmon->sel,
|
selmon->sel,
|
||||||
selmon->sel->state.geometry.basic.position.x,
|
selmon->sel->state.geometry.basic.position.x,
|
||||||
selmon->sel->state.geometry.basic.position.y,
|
selmon->sel->state.geometry.basic.position.y,
|
||||||
selmon->sel->state.geometry.basic.w -
|
selmon->sel->state.geometry.basic.sizes.w -
|
||||||
2 * (border_width - selmon->sel->state.geometry.border_width),
|
2 * (border_width - selmon->sel->state.geometry.border_width),
|
||||||
selmon->sel->state.geometry.basic.h -
|
selmon->sel->state.geometry.basic.sizes.h -
|
||||||
2 * (border_width - selmon->sel->state.geometry.border_width),
|
2 * (border_width - selmon->sel->state.geometry.border_width),
|
||||||
border_width,
|
border_width,
|
||||||
0
|
0
|
||||||
|
@ -1930,9 +1936,9 @@ int updategeom()
|
||||||
||
|
||
|
||||||
unique[i].y_org != m->screen_geometry.position.y
|
unique[i].y_org != m->screen_geometry.position.y
|
||||||
||
|
||
|
||||||
unique[i].width != m->screen_geometry.w
|
unique[i].width != m->screen_geometry.sizes.w
|
||||||
||
|
||
|
||||||
unique[i].height != m->screen_geometry.h
|
unique[i].height != m->screen_geometry.sizes.h
|
||||||
) {
|
) {
|
||||||
dirty = 1;
|
dirty = 1;
|
||||||
m->num = i;
|
m->num = i;
|
||||||
|
@ -1942,11 +1948,11 @@ int updategeom()
|
||||||
m->screen_geometry.position.y =
|
m->screen_geometry.position.y =
|
||||||
m->window_area_geometry.position.y =
|
m->window_area_geometry.position.y =
|
||||||
unique[i].y_org;
|
unique[i].y_org;
|
||||||
m->screen_geometry.w =
|
m->screen_geometry.sizes.w =
|
||||||
m->window_area_geometry.w =
|
m->window_area_geometry.sizes.w =
|
||||||
unique[i].width;
|
unique[i].width;
|
||||||
m->screen_geometry.h =
|
m->screen_geometry.sizes.h =
|
||||||
m->window_area_geometry.h =
|
m->window_area_geometry.sizes.h =
|
||||||
unique[i].height;
|
unique[i].height;
|
||||||
}
|
}
|
||||||
} else { /* less monitors available nn < n */
|
} else { /* less monitors available nn < n */
|
||||||
|
@ -1971,10 +1977,18 @@ int updategeom()
|
||||||
{ /* default monitor setup */
|
{ /* default monitor setup */
|
||||||
if (!mons)
|
if (!mons)
|
||||||
mons = createmon();
|
mons = createmon();
|
||||||
if (mons->screen_geometry.w != sw || mons->screen_geometry.h != sh) {
|
if (
|
||||||
|
mons->screen_geometry.sizes.w != sw
|
||||||
|
||
|
||||||
|
mons->screen_geometry.sizes.h != sh
|
||||||
|
) {
|
||||||
dirty = 1;
|
dirty = 1;
|
||||||
mons->screen_geometry.w = mons->window_area_geometry.w = sw;
|
mons->screen_geometry.sizes.w =
|
||||||
mons->screen_geometry.h = mons->window_area_geometry.h = sh;
|
mons->window_area_geometry.sizes.w =
|
||||||
|
sw;
|
||||||
|
mons->screen_geometry.sizes.h =
|
||||||
|
mons->window_area_geometry.sizes.h =
|
||||||
|
sh;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (dirty) {
|
if (dirty) {
|
||||||
|
|
|
@ -85,15 +85,19 @@ void on_configure_request(XEvent *e)
|
||||||
m->screen_geometry.position.y + ev->y;
|
m->screen_geometry.position.y + ev->y;
|
||||||
}
|
}
|
||||||
if (ev->value_mask & CWWidth) {
|
if (ev->value_mask & CWWidth) {
|
||||||
c->state.geometry.basic.w = ev->width;
|
c->state.geometry.basic.sizes.w = ev->width;
|
||||||
}
|
}
|
||||||
if (ev->value_mask & CWHeight) {
|
if (ev->value_mask & CWHeight) {
|
||||||
c->state.geometry.basic.h = ev->height;
|
c->state.geometry.basic.sizes.h = ev->height;
|
||||||
}
|
}
|
||||||
if (
|
if (
|
||||||
(c->state.geometry.basic.position.x + c->state.geometry.basic.w)
|
(
|
||||||
|
c->state.geometry.basic.position.x
|
||||||
|
+
|
||||||
|
c->state.geometry.basic.sizes.w
|
||||||
|
)
|
||||||
>
|
>
|
||||||
m->screen_geometry.position.x + m->screen_geometry.w
|
m->screen_geometry.position.x + m->screen_geometry.sizes.w
|
||||||
&&
|
&&
|
||||||
c->state.is_floating
|
c->state.is_floating
|
||||||
) {
|
) {
|
||||||
|
@ -102,15 +106,19 @@ void on_configure_request(XEvent *e)
|
||||||
m->screen_geometry.position.x
|
m->screen_geometry.position.x
|
||||||
+
|
+
|
||||||
(
|
(
|
||||||
m->screen_geometry.w / 2
|
m->screen_geometry.sizes.w / 2
|
||||||
-
|
-
|
||||||
client_geometry_total_width(&c->state.geometry) / 2
|
client_geometry_total_width(&c->state.geometry) / 2
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if (
|
if (
|
||||||
(c->state.geometry.basic.position.y + c->state.geometry.basic.h)
|
(
|
||||||
|
c->state.geometry.basic.position.y
|
||||||
|
+
|
||||||
|
c->state.geometry.basic.sizes.h
|
||||||
|
)
|
||||||
>
|
>
|
||||||
m->screen_geometry.position.y + m->screen_geometry.h
|
m->screen_geometry.position.y + m->screen_geometry.sizes.h
|
||||||
&&
|
&&
|
||||||
c->state.is_floating
|
c->state.is_floating
|
||||||
) {
|
) {
|
||||||
|
@ -119,7 +127,7 @@ void on_configure_request(XEvent *e)
|
||||||
m->screen_geometry.position.y
|
m->screen_geometry.position.y
|
||||||
+
|
+
|
||||||
(
|
(
|
||||||
m->screen_geometry.h / 2
|
m->screen_geometry.sizes.h / 2
|
||||||
-
|
-
|
||||||
client_geometry_total_height(&c->state.geometry) / 2
|
client_geometry_total_height(&c->state.geometry) / 2
|
||||||
);
|
);
|
||||||
|
@ -133,8 +141,8 @@ void on_configure_request(XEvent *e)
|
||||||
c->win,
|
c->win,
|
||||||
c->state.geometry.basic.position.x,
|
c->state.geometry.basic.position.x,
|
||||||
c->state.geometry.basic.position.y,
|
c->state.geometry.basic.position.y,
|
||||||
c->state.geometry.basic.w,
|
c->state.geometry.basic.sizes.w,
|
||||||
c->state.geometry.basic.h
|
c->state.geometry.basic.sizes.h
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
} else
|
} else
|
||||||
|
|
|
@ -10,17 +10,19 @@ void centeredmaster(Monitor *m)
|
||||||
const float master_area_factor = unit_get_master_area_factor(m->unit);
|
const float master_area_factor = unit_get_master_area_factor(m->unit);
|
||||||
|
|
||||||
unsigned int mx = 0;
|
unsigned int mx = 0;
|
||||||
unsigned int mw = m->window_area_geometry.w;
|
unsigned int mw = m->window_area_geometry.sizes.w;
|
||||||
unsigned int tw = mw;
|
unsigned int tw = mw;
|
||||||
if (n > m->nmaster) {
|
if (n > m->nmaster) {
|
||||||
/* go mfact box in the center if more than nmaster clients */
|
/* go mfact box in the center if more than nmaster clients */
|
||||||
mw = m->nmaster ? m->window_area_geometry.w * master_area_factor : 0;
|
mw = m->nmaster
|
||||||
tw = m->window_area_geometry.w - mw;
|
? m->window_area_geometry.sizes.w * master_area_factor
|
||||||
|
: 0;
|
||||||
|
tw = m->window_area_geometry.sizes.w - mw;
|
||||||
|
|
||||||
if (n - m->nmaster > 1) {
|
if (n - m->nmaster > 1) {
|
||||||
/* only one client */
|
/* only one client */
|
||||||
mx = (m->window_area_geometry.w - mw) / 2;
|
mx = (m->window_area_geometry.sizes.w - mw) / 2;
|
||||||
tw = (m->window_area_geometry.w - mw) / 2;
|
tw = (m->window_area_geometry.sizes.w - mw) / 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -40,7 +42,9 @@ void centeredmaster(Monitor *m)
|
||||||
// nmaster clients are stacked vertically,
|
// nmaster clients are stacked vertically,
|
||||||
// in the center of the screen
|
// in the center of the screen
|
||||||
const unsigned int h =
|
const unsigned int h =
|
||||||
(m->window_area_geometry.h - my) / (MIN(n, m->nmaster) - i);
|
(m->window_area_geometry.sizes.h - my)
|
||||||
|
/
|
||||||
|
(MIN(n, m->nmaster) - i);
|
||||||
|
|
||||||
const int left_gap = (n <= m->nmaster + 1) ? gap_size : top_left_half_gap;
|
const int left_gap = (n <= m->nmaster + 1) ? gap_size : top_left_half_gap;
|
||||||
const int top_gap = i == 0 ? gap_size : top_left_half_gap;
|
const int top_gap = i == 0 ? gap_size : top_left_half_gap;
|
||||||
|
@ -65,7 +69,7 @@ void centeredmaster(Monitor *m)
|
||||||
// stack clients are stacked vertically
|
// stack clients are stacked vertically
|
||||||
if ((i - m->nmaster) % 2) {
|
if ((i - m->nmaster) % 2) {
|
||||||
const unsigned int h =
|
const unsigned int h =
|
||||||
(m->window_area_geometry.h - ety) / ((1 + n - i) / 2);
|
(m->window_area_geometry.sizes.h - ety) / ((1 + n - i) / 2);
|
||||||
|
|
||||||
const int left_gap = gap_size;
|
const int left_gap = gap_size;
|
||||||
const int top_gap = (i == m->nmaster + 1) ? gap_size : top_left_half_gap;
|
const int top_gap = (i == m->nmaster + 1) ? gap_size : top_left_half_gap;
|
||||||
|
@ -88,7 +92,7 @@ void centeredmaster(Monitor *m)
|
||||||
ety += total_height + top_gap + bottom_gap;
|
ety += total_height + top_gap + bottom_gap;
|
||||||
} else {
|
} else {
|
||||||
const unsigned int h =
|
const unsigned int h =
|
||||||
(m->window_area_geometry.h - oty) / ((1 + n - i) / 2);
|
(m->window_area_geometry.sizes.h - oty) / ((1 + n - i) / 2);
|
||||||
|
|
||||||
const int left_gap = (m->nmaster == 0 && n == 1) ? gap_size : top_left_half_gap;
|
const int left_gap = (m->nmaster == 0 && n == 1) ? gap_size : top_left_half_gap;
|
||||||
const int top_gap = i == m->nmaster ? gap_size : top_left_half_gap;
|
const int top_gap = i == m->nmaster ? gap_size : top_left_half_gap;
|
||||||
|
@ -124,8 +128,8 @@ void floating(Monitor *m)
|
||||||
c,
|
c,
|
||||||
c->state.geometry.basic.position.x,
|
c->state.geometry.basic.position.x,
|
||||||
c->state.geometry.basic.position.y,
|
c->state.geometry.basic.position.y,
|
||||||
c->state.geometry.basic.w - 2 * border_width,
|
c->state.geometry.basic.sizes.w - 2 * border_width,
|
||||||
c->state.geometry.basic.h - 2 * border_width,
|
c->state.geometry.basic.sizes.h - 2 * border_width,
|
||||||
border_width,
|
border_width,
|
||||||
0
|
0
|
||||||
);
|
);
|
||||||
|
@ -152,16 +156,18 @@ void horizontile(Monitor *m)
|
||||||
const unsigned int mh =
|
const unsigned int mh =
|
||||||
n > m->nmaster
|
n > m->nmaster
|
||||||
?
|
?
|
||||||
(m->nmaster ? m->window_area_geometry.h * master_area_factor : 0)
|
(m->nmaster ? m->window_area_geometry.sizes.h * master_area_factor : 0)
|
||||||
:
|
:
|
||||||
m->window_area_geometry.h;
|
m->window_area_geometry.sizes.h;
|
||||||
|
|
||||||
Client *c = nexttiled(m->clients);
|
Client *c = nexttiled(m->clients);
|
||||||
|
|
||||||
for (unsigned int i = 0, mx = 0, tx = 0; c; c = nexttiled(c->next), ++i) {
|
for (unsigned int i = 0, mx = 0, tx = 0; c; c = nexttiled(c->next), ++i) {
|
||||||
if (i < m->nmaster) {
|
if (i < m->nmaster) {
|
||||||
const unsigned int w =
|
const unsigned int w =
|
||||||
(m->window_area_geometry.w - mx) / (MIN(n, m->nmaster) - i);
|
(m->window_area_geometry.sizes.w - mx)
|
||||||
|
/
|
||||||
|
(MIN(n, m->nmaster) - i);
|
||||||
|
|
||||||
const unsigned int left_gap = i == 0 ? gap_size : top_left_half_gap;
|
const unsigned int left_gap = i == 0 ? gap_size : top_left_half_gap;
|
||||||
const unsigned int top_gap = gap_size;
|
const unsigned int top_gap = gap_size;
|
||||||
|
@ -182,11 +188,11 @@ void horizontile(Monitor *m)
|
||||||
client_geometry_total_width(&c->state.geometry);
|
client_geometry_total_width(&c->state.geometry);
|
||||||
|
|
||||||
// FIXME: maybe need + left_gap + right_gap
|
// FIXME: maybe need + left_gap + right_gap
|
||||||
if (mx + total_width < m->window_area_geometry.w) {
|
if (mx + total_width < m->window_area_geometry.sizes.w) {
|
||||||
mx += total_width + left_gap + right_gap;
|
mx += total_width + left_gap + right_gap;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
const unsigned int w = (m->window_area_geometry.w - tx) / (n - i);
|
const unsigned int w = (m->window_area_geometry.sizes.w - tx) / (n - i);
|
||||||
|
|
||||||
const unsigned int left_gap = i == m->nmaster ? gap_size : top_left_half_gap;
|
const unsigned int left_gap = i == m->nmaster ? gap_size : top_left_half_gap;
|
||||||
const unsigned int top_gap = m->nmaster == 0 ? gap_size : top_left_half_gap;
|
const unsigned int top_gap = m->nmaster == 0 ? gap_size : top_left_half_gap;
|
||||||
|
@ -198,7 +204,7 @@ void horizontile(Monitor *m)
|
||||||
m->window_area_geometry.position.x + tx + left_gap,
|
m->window_area_geometry.position.x + tx + left_gap,
|
||||||
m->window_area_geometry.position.y + mh + top_gap,
|
m->window_area_geometry.position.y + mh + top_gap,
|
||||||
w - 2 * border_width - left_gap - right_gap,
|
w - 2 * border_width - left_gap - right_gap,
|
||||||
m->window_area_geometry.h - mh - 2 * border_width - top_gap - bottom_gap,
|
m->window_area_geometry.sizes.h - mh - 2 * border_width - top_gap - bottom_gap,
|
||||||
border_width,
|
border_width,
|
||||||
0
|
0
|
||||||
);
|
);
|
||||||
|
@ -207,7 +213,7 @@ void horizontile(Monitor *m)
|
||||||
client_geometry_total_width(&c->state.geometry);
|
client_geometry_total_width(&c->state.geometry);
|
||||||
|
|
||||||
// FIXME: maybe need + left_gap + right_gap
|
// FIXME: maybe need + left_gap + right_gap
|
||||||
if (tx + total_width < m->window_area_geometry.w) {
|
if (tx + total_width < m->window_area_geometry.sizes.w) {
|
||||||
tx += total_width + left_gap + right_gap;
|
tx += total_width + left_gap + right_gap;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -231,8 +237,8 @@ void monocle(Monitor *m)
|
||||||
c,
|
c,
|
||||||
m->window_area_geometry.position.x + gap_size,
|
m->window_area_geometry.position.x + gap_size,
|
||||||
m->window_area_geometry.position.y + gap_size,
|
m->window_area_geometry.position.y + gap_size,
|
||||||
m->window_area_geometry.w - 2 * border_width - 2 * gap_size,
|
m->window_area_geometry.sizes.w - 2 * border_width - 2 * gap_size,
|
||||||
m->window_area_geometry.h - 2 * border_width - 2 * gap_size,
|
m->window_area_geometry.sizes.h - 2 * border_width - 2 * gap_size,
|
||||||
border_width,
|
border_width,
|
||||||
0
|
0
|
||||||
);
|
);
|
||||||
|
@ -258,16 +264,16 @@ void tile(Monitor *m)
|
||||||
const unsigned int mw =
|
const unsigned int mw =
|
||||||
n > m->nmaster
|
n > m->nmaster
|
||||||
?
|
?
|
||||||
(m->nmaster ? m->window_area_geometry.w * master_area_factor : 0)
|
(m->nmaster ? m->window_area_geometry.sizes.w * master_area_factor : 0)
|
||||||
:
|
:
|
||||||
m->window_area_geometry.w;
|
m->window_area_geometry.sizes.w;
|
||||||
|
|
||||||
Client *c = nexttiled(m->clients);
|
Client *c = nexttiled(m->clients);
|
||||||
|
|
||||||
for (unsigned int i = 0, my = 0, ty = 0; c; c = nexttiled(c->next), ++i) {
|
for (unsigned int i = 0, my = 0, ty = 0; c; c = nexttiled(c->next), ++i) {
|
||||||
if (i < m->nmaster) {
|
if (i < m->nmaster) {
|
||||||
const unsigned int h =
|
const unsigned int h =
|
||||||
(m->window_area_geometry.h - my) / (MIN(n, m->nmaster) - i);
|
(m->window_area_geometry.sizes.h - my) / (MIN(n, m->nmaster) - i);
|
||||||
|
|
||||||
const unsigned int left_gap = gap_size;
|
const unsigned int left_gap = gap_size;
|
||||||
const unsigned int top_gap = i == 0 ? gap_size : top_left_half_gap;
|
const unsigned int top_gap = i == 0 ? gap_size : top_left_half_gap;
|
||||||
|
@ -288,11 +294,12 @@ void tile(Monitor *m)
|
||||||
client_geometry_total_height(&c->state.geometry);
|
client_geometry_total_height(&c->state.geometry);
|
||||||
|
|
||||||
// FIXME: maybe need + top_gap + bottom_gap
|
// FIXME: maybe need + top_gap + bottom_gap
|
||||||
if (my + total_height < m->window_area_geometry.h) {
|
if (my + total_height < m->window_area_geometry.sizes.h) {
|
||||||
my += total_height + top_gap + bottom_gap;
|
my += total_height + top_gap + bottom_gap;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
const unsigned int h = (m->window_area_geometry.h - ty) / (n - i);
|
const unsigned int h =
|
||||||
|
(m->window_area_geometry.sizes.h - ty) / (n - i);
|
||||||
|
|
||||||
const unsigned int left_gap = m->nmaster == 0 ? gap_size : top_left_half_gap;
|
const unsigned int left_gap = m->nmaster == 0 ? gap_size : top_left_half_gap;
|
||||||
const unsigned int top_gap = i == m->nmaster ? gap_size : top_left_half_gap;
|
const unsigned int top_gap = i == m->nmaster ? gap_size : top_left_half_gap;
|
||||||
|
@ -303,7 +310,7 @@ void tile(Monitor *m)
|
||||||
c,
|
c,
|
||||||
m->window_area_geometry.position.x + mw + left_gap,
|
m->window_area_geometry.position.x + mw + left_gap,
|
||||||
m->window_area_geometry.position.y + ty + top_gap,
|
m->window_area_geometry.position.y + ty + top_gap,
|
||||||
m->window_area_geometry.w - mw - 2 * border_width - left_gap - right_gap,
|
m->window_area_geometry.sizes.w - mw - 2 * border_width - left_gap - right_gap,
|
||||||
h - 2 * border_width - top_gap - bottom_gap,
|
h - 2 * border_width - top_gap - bottom_gap,
|
||||||
border_width,
|
border_width,
|
||||||
0
|
0
|
||||||
|
@ -313,7 +320,7 @@ void tile(Monitor *m)
|
||||||
client_geometry_total_height(&c->state.geometry);
|
client_geometry_total_height(&c->state.geometry);
|
||||||
|
|
||||||
// FIXME: maybe need + top_gap + bottom_gap
|
// FIXME: maybe need + top_gap + bottom_gap
|
||||||
if (ty + total_height < m->window_area_geometry.h) {
|
if (ty + total_height < m->window_area_geometry.sizes.h) {
|
||||||
ty += total_height + top_gap + bottom_gap;
|
ty += total_height + top_gap + bottom_gap;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
13
src/state.c
13
src/state.c
|
@ -8,11 +8,16 @@ void position_init(const Position position)
|
||||||
position->y = 0;
|
position->y = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void sizes_init(const Sizes sizes)
|
||||||
|
{
|
||||||
|
sizes->w = 0;
|
||||||
|
sizes->h = 0;
|
||||||
|
}
|
||||||
|
|
||||||
void basic_geometry_init(const BasicGeometry basic_geometry)
|
void basic_geometry_init(const BasicGeometry basic_geometry)
|
||||||
{
|
{
|
||||||
position_init(&basic_geometry->position);
|
position_init(&basic_geometry->position);
|
||||||
basic_geometry->w = 0;
|
sizes_init(&basic_geometry->sizes);
|
||||||
basic_geometry->h = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void client_geometry_init(const ClientGeometry client_geometry)
|
void client_geometry_init(const ClientGeometry client_geometry)
|
||||||
|
@ -49,13 +54,13 @@ void client_state_init(const ClientState client_state)
|
||||||
int client_geometry_total_width(
|
int client_geometry_total_width(
|
||||||
const struct ClientGeometry *const client_geometry
|
const struct ClientGeometry *const client_geometry
|
||||||
) {
|
) {
|
||||||
return client_geometry->basic.w + 2 * client_geometry->border_width;
|
return client_geometry->basic.sizes.w + 2 * client_geometry->border_width;
|
||||||
}
|
}
|
||||||
|
|
||||||
int client_geometry_total_height(
|
int client_geometry_total_height(
|
||||||
const struct ClientGeometry *const client_geometry
|
const struct ClientGeometry *const client_geometry
|
||||||
) {
|
) {
|
||||||
return client_geometry->basic.h + 2 * client_geometry->border_width;
|
return client_geometry->basic.sizes.h + 2 * client_geometry->border_width;
|
||||||
}
|
}
|
||||||
|
|
||||||
void client_size_hints_update(
|
void client_size_hints_update(
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
*****************/
|
*****************/
|
||||||
|
|
||||||
typedef struct Position *Position;
|
typedef struct Position *Position;
|
||||||
|
typedef struct Sizes *Sizes;
|
||||||
typedef struct BasicGeometry *BasicGeometry;
|
typedef struct BasicGeometry *BasicGeometry;
|
||||||
typedef struct ClientGeometry *ClientGeometry;
|
typedef struct ClientGeometry *ClientGeometry;
|
||||||
typedef struct ClientSizeHints *ClientSizeHints;
|
typedef struct ClientSizeHints *ClientSizeHints;
|
||||||
|
@ -22,9 +23,13 @@ struct Position {
|
||||||
int x, y;
|
int x, y;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct Sizes {
|
||||||
|
int w, h;
|
||||||
|
};
|
||||||
|
|
||||||
struct BasicGeometry {
|
struct BasicGeometry {
|
||||||
struct Position position;
|
struct Position position;
|
||||||
int w, h;
|
struct Sizes sizes;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ClientGeometry {
|
struct ClientGeometry {
|
||||||
|
@ -48,6 +53,7 @@ struct ClientState {
|
||||||
*************/
|
*************/
|
||||||
|
|
||||||
void position_init(Position position);
|
void position_init(Position position);
|
||||||
|
void sizes_init(Sizes sizes);
|
||||||
void basic_geometry_init(BasicGeometry basic_geometry);
|
void basic_geometry_init(BasicGeometry basic_geometry);
|
||||||
void client_geometry_init(ClientGeometry client_geometry);
|
void client_geometry_init(ClientGeometry client_geometry);
|
||||||
void client_size_hints_init(ClientSizeHints client_size_hints);
|
void client_size_hints_init(ClientSizeHints client_size_hints);
|
||||||
|
|
Loading…
Reference in New Issue