Fix: Calculation of unoccupied space has to depend on current row/col
This commit is contained in:
parent
fe0485f9e5
commit
695494606d
|
@ -337,10 +337,10 @@ int handle_windowname_change(void *data, xcb_connection_t *conn, uint8_t state,
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
int handle_expose_event(void *data, xcb_connection_t *conn, xcb_expose_event_t *e) {
|
int handle_expose_event(void *data, xcb_connection_t *conn, xcb_expose_event_t *e) {
|
||||||
printf("handle_expose_event()\n");
|
|
||||||
Client *client = table_get(byParent, e->window);
|
Client *client = table_get(byParent, e->window);
|
||||||
if(!client || e->count != 0)
|
if(!client || e->count != 0)
|
||||||
return 1;
|
return 1;
|
||||||
|
printf("handle_expose_event()\n");
|
||||||
decorate_window(conn, client);
|
decorate_window(conn, client);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
23
src/layout.c
23
src/layout.c
|
@ -22,13 +22,29 @@
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
#include "xinerama.h"
|
#include "xinerama.h"
|
||||||
|
|
||||||
|
int get_unoccupied_x(Workspace *workspace, int row) {
|
||||||
|
int unoccupied = workspace->rect.width;
|
||||||
|
float default_factor_w = ((float)workspace->rect.width / (float)workspace->cols) / (float)workspace->rect.width;
|
||||||
|
|
||||||
|
printf("get_unoccupied_x(), starting with %d\n", unoccupied);
|
||||||
|
|
||||||
|
for (int cols = 0; cols < workspace->cols; cols++) {
|
||||||
|
printf("oh hai. wf[%d][%d] = %f\n", cols, row, workspace->table[cols][row]->width_factor);
|
||||||
|
if (workspace->table[cols][row]->width_factor == 0)
|
||||||
|
unoccupied -= workspace->rect.width * default_factor_w;
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("gots %d\n", unoccupied);
|
||||||
|
return unoccupied;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* For resizing containers (= cells), we need to know the space which is unoccupied by "default"
|
* For resizing containers (= cells), we need to know the space which is unoccupied by "default"
|
||||||
* windows. The resized containers will be rendered relatively to this space, meaning that newly
|
* windows. The resized containers will be rendered relatively to this space, meaning that newly
|
||||||
* created columns/rows after a container was resized will start with their normal size.
|
* created columns/rows after a container was resized will start with their normal size.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
Rect get_unoccupied_space(Workspace *workspace) {
|
Rect get_unoccupied_space(Workspace *workspace, int col, int row) {
|
||||||
printf("getting unoccupied space\n");
|
printf("getting unoccupied space\n");
|
||||||
float default_factor_w = ((float)workspace->rect.width / (float)workspace->cols) / (float)workspace->rect.width;
|
float default_factor_w = ((float)workspace->rect.width / (float)workspace->cols) / (float)workspace->rect.width;
|
||||||
float default_factor_h = (workspace->rect.height / workspace->rows) / workspace->rect.height;
|
float default_factor_h = (workspace->rect.height / workspace->rows) / workspace->rect.height;
|
||||||
|
@ -272,9 +288,6 @@ void render_layout(xcb_connection_t *connection) {
|
||||||
printf("each of them therefore is %d px width and %d px height\n",
|
printf("each of them therefore is %d px width and %d px height\n",
|
||||||
width / r_ws->cols, height / r_ws->rows);
|
width / r_ws->cols, height / r_ws->rows);
|
||||||
|
|
||||||
Rect space = get_unoccupied_space(r_ws);
|
|
||||||
printf("got %d / %d unoc space\n", space.width, space.height);
|
|
||||||
|
|
||||||
int xoffset[r_ws->rows];
|
int xoffset[r_ws->rows];
|
||||||
int yoffset[r_ws->cols];
|
int yoffset[r_ws->cols];
|
||||||
/* Initialize offsets */
|
/* Initialize offsets */
|
||||||
|
@ -297,7 +310,7 @@ void render_layout(xcb_connection_t *connection) {
|
||||||
container->y = yoffset[cols];
|
container->y = yoffset[cols];
|
||||||
if (container->width_factor == 0)
|
if (container->width_factor == 0)
|
||||||
container->width = (width / r_ws->cols) * container->colspan;
|
container->width = (width / r_ws->cols) * container->colspan;
|
||||||
else container->width = space.width * container->width_factor;
|
else container->width = get_unoccupied_x(r_ws, rows) * container->width_factor;
|
||||||
container->height = (height / r_ws->rows) * container->rowspan;
|
container->height = (height / r_ws->rows) * container->rowspan;
|
||||||
|
|
||||||
/* Render it */
|
/* Render it */
|
||||||
|
|
Loading…
Reference in New Issue