Bugfix: Perform some bounds checking for snapped containers in fix_colrowspan (Thanks jchome)
This fixes ticket #22
This commit is contained in:
parent
bcbe800720
commit
bb8727cf27
|
@ -635,6 +635,8 @@ int handle_unmap_notify_event(void *data, xcb_connection_t *conn, xcb_unmap_noti
|
||||||
if (client->container != NULL)
|
if (client->container != NULL)
|
||||||
cleanup_table(conn, client->container->workspace);
|
cleanup_table(conn, client->container->workspace);
|
||||||
|
|
||||||
|
fix_colrowspan(conn, client->container->workspace);
|
||||||
|
|
||||||
/* Let’s see how many clients there are left on the workspace to delete it if it’s empty */
|
/* Let’s see how many clients there are left on the workspace to delete it if it’s empty */
|
||||||
bool workspace_empty = true;
|
bool workspace_empty = true;
|
||||||
FOR_TABLE(client->workspace)
|
FOR_TABLE(client->workspace)
|
||||||
|
|
12
src/table.c
12
src/table.c
|
@ -296,7 +296,7 @@ void cleanup_table(xcb_connection_t *conn, Workspace *workspace) {
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Fixes col/rowspan (makes sure there are no overlapping windows)
|
* Fixes col/rowspan (makes sure there are no overlapping windows, obeys borders).
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
void fix_colrowspan(xcb_connection_t *conn, Workspace *workspace) {
|
void fix_colrowspan(xcb_connection_t *conn, Workspace *workspace) {
|
||||||
|
@ -305,16 +305,18 @@ void fix_colrowspan(xcb_connection_t *conn, Workspace *workspace) {
|
||||||
FOR_TABLE(workspace) {
|
FOR_TABLE(workspace) {
|
||||||
Container *con = workspace->table[cols][rows];
|
Container *con = workspace->table[cols][rows];
|
||||||
if (con->colspan > 1) {
|
if (con->colspan > 1) {
|
||||||
LOG("gots one with colspan %d\n", con->colspan);
|
LOG("gots one with colspan %d (at %d c, %d r)\n", con->colspan, cols, rows);
|
||||||
while (con->colspan > 1 &&
|
while (con->colspan > 1 &&
|
||||||
workspace->table[cols + (con->colspan - 1)][rows]->currently_focused != NULL)
|
(!cell_exists(cols + (con->colspan-1), rows) ||
|
||||||
|
workspace->table[cols + (con->colspan - 1)][rows]->currently_focused != NULL))
|
||||||
con->colspan--;
|
con->colspan--;
|
||||||
LOG("fixed it to %d\n", con->colspan);
|
LOG("fixed it to %d\n", con->colspan);
|
||||||
}
|
}
|
||||||
if (con->rowspan > 1) {
|
if (con->rowspan > 1) {
|
||||||
LOG("gots one with rowspan %d\n", con->rowspan);
|
LOG("gots one with rowspan %d (at %d c, %d r)\n", con->rowspan, cols, rows);
|
||||||
while (con->rowspan > 1 &&
|
while (con->rowspan > 1 &&
|
||||||
workspace->table[cols][rows + (con->rowspan - 1)]->currently_focused != NULL)
|
(!cell_exists(cols, rows + (con->rowspan - 1)) ||
|
||||||
|
workspace->table[cols][rows + (con->rowspan - 1)]->currently_focused != NULL))
|
||||||
con->rowspan--;
|
con->rowspan--;
|
||||||
LOG("fixed it to %d\n", con->rowspan);
|
LOG("fixed it to %d\n", con->rowspan);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue