From d8a6f41e3959dddfb456b971b874210b2045c400 Mon Sep 17 00:00:00 2001 From: Michael Stapelberg Date: Sat, 28 Feb 2009 01:12:05 +0100 Subject: [PATCH] Bugfix: Set focus when table was shrinked and CUR_CELL might have been shrinked --- include/table.h | 4 +++- src/commands.c | 2 +- src/handlers.c | 2 +- src/table.c | 6 +++++- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/include/table.h b/include/table.h index 24605b72..884e2c8c 100644 --- a/include/table.h +++ b/include/table.h @@ -10,6 +10,8 @@ */ #include +#include + #include "data.h" #ifndef _TABLE_H @@ -27,6 +29,6 @@ void init_table(); void expand_table_rows(Workspace *workspace); void expand_table_cols(Workspace *workspace); bool cell_exists(int col, int row); -void cleanup_table(Workspace *workspace); +void cleanup_table(xcb_connection_t *conn, Workspace *workspace); #endif diff --git a/src/commands.c b/src/commands.c index 0871baf8..e583b0ab 100644 --- a/src/commands.c +++ b/src/commands.c @@ -176,7 +176,7 @@ static void move_current_window(xcb_connection_t *connection, direction_t direct new->currently_focused = current_client; /* delete all empty columns/rows */ - cleanup_table(container->workspace); + cleanup_table(connection, container->workspace); render_layout(connection); set_focus(connection, current_client); diff --git a/src/handlers.c b/src/handlers.c index 6303bb91..2a390c05 100644 --- a/src/handlers.c +++ b/src/handlers.c @@ -359,7 +359,7 @@ int handle_unmap_notify_event(void *data, xcb_connection_t *c, xcb_unmap_notify_ xcb_flush(c); table_remove(byParent, client->frame); - cleanup_table(client->container->workspace); + cleanup_table(c, client->container->workspace); free(client); diff --git a/src/table.c b/src/table.c index 0c4a1be1..2844574a 100644 --- a/src/table.c +++ b/src/table.c @@ -22,6 +22,7 @@ #include "data.h" #include "table.h" +#include "util.h" int current_workspace = 0; Workspace workspaces[10]; @@ -128,7 +129,7 @@ static void move_rows_from(Workspace *workspace, int rows) { * Shrinks the table by "compacting" it, that is, removing completely empty rows/columns * */ -void cleanup_table(Workspace *workspace) { +void cleanup_table(xcb_connection_t *conn, Workspace *workspace) { /* Check for empty columns */ for (int cols = 0; cols < workspace->cols;) { bool completely_empty = true; @@ -167,4 +168,7 @@ void cleanup_table(Workspace *workspace) { if (current_row >= c_ws->rows) current_row = c_ws->rows-1; + + if (CUR_CELL->currently_focused != NULL) + set_focus(conn, CUR_CELL->currently_focused); } -- 2.39.5