re-enable sending fake configure notifies

This commit is contained in:
Michael Stapelberg 2010-05-31 23:00:36 +02:00
parent 71e0e49c0e
commit 246d4627be
3 changed files with 17 additions and 11 deletions

View File

@ -127,14 +127,12 @@ void xcb_draw_rect(xcb_connection_t *conn, xcb_drawable_t drawable,
*/ */
void fake_configure_notify(xcb_connection_t *conn, Rect r, xcb_window_t window); void fake_configure_notify(xcb_connection_t *conn, Rect r, xcb_window_t window);
#if 0
/** /**
* Generates a configure_notify_event with absolute coordinates (relative to * Generates a configure_notify_event with absolute coordinates (relative to
* the X root window, not to the clients frame) for the given client. * the X root window, not to the clients frame) for the given client.
* *
*/ */
void fake_absolute_configure_notify(xcb_connection_t *conn, Client *client); void fake_absolute_configure_notify(Con *con);
#endif
/** /**
* Finds out which modifier mask is the one for numlock, as the user may * Finds out which modifier mask is the one for numlock, as the user may

View File

@ -239,11 +239,13 @@ static void x_push_node(Con *con) {
state->mapped = con->mapped; state->mapped = con->mapped;
} }
bool fake_notify = false;
/* set new position if rect changed */ /* set new position if rect changed */
if (memcmp(&(state->rect), &(con->rect), sizeof(Rect)) != 0) { if (memcmp(&(state->rect), &(con->rect), sizeof(Rect)) != 0) {
LOG("setting rect (%d, %d, %d, %d)\n", con->rect.x, con->rect.y, con->rect.width, con->rect.height); LOG("setting rect (%d, %d, %d, %d)\n", con->rect.x, con->rect.y, con->rect.width, con->rect.height);
xcb_set_window_rect(conn, con->frame, con->rect); xcb_set_window_rect(conn, con->frame, con->rect);
memcpy(&(state->rect), &(con->rect), sizeof(Rect)); memcpy(&(state->rect), &(con->rect), sizeof(Rect));
fake_notify = true;
} }
/* dito, but for child windows */ /* dito, but for child windows */
@ -252,6 +254,12 @@ static void x_push_node(Con *con) {
con->window_rect.x, con->window_rect.y, con->window_rect.width, con->window_rect.height); con->window_rect.x, con->window_rect.y, con->window_rect.width, con->window_rect.height);
xcb_set_window_rect(conn, con->window->id, con->window_rect); xcb_set_window_rect(conn, con->window->id, con->window_rect);
memcpy(&(state->rect), &(con->rect), sizeof(Rect)); memcpy(&(state->rect), &(con->rect), sizeof(Rect));
fake_notify = true;
}
if (fake_notify) {
LOG("Sending fake configure notify\n");
fake_absolute_configure_notify(con);
} }
/* handle all children and floating windows of this node */ /* handle all children and floating windows of this node */

View File

@ -172,23 +172,23 @@ void fake_configure_notify(xcb_connection_t *conn, Rect r, xcb_window_t window)
xcb_flush(conn); xcb_flush(conn);
} }
#if 0
/* /*
* Generates a configure_notify_event with absolute coordinates (relative to the X root * Generates a configure_notify_event with absolute coordinates (relative to the X root
* window, not to the clients frame) for the given client. * window, not to the clients frame) for the given client.
* *
*/ */
void fake_absolute_configure_notify(xcb_connection_t *conn, Client *client) { void fake_absolute_configure_notify(Con *con) {
Rect absolute; Rect absolute;
if (con->window == NULL)
return;
absolute.x = client->rect.x + client->child_rect.x; absolute.x = con->rect.x + con->window_rect.x;
absolute.y = client->rect.y + client->child_rect.y; absolute.y = con->rect.y + con->window_rect.y;
absolute.width = client->child_rect.width; absolute.width = con->window_rect.width;
absolute.height = client->child_rect.height; absolute.height = con->window_rect.height;
fake_configure_notify(conn, absolute, client->child); fake_configure_notify(conn, absolute, con->window->id);
} }
#endif
/* /*
* Finds out which modifier mask is the one for numlock, as the user may change this. * Finds out which modifier mask is the one for numlock, as the user may change this.