diff --git a/i3lock.c b/i3lock.c index 9c55db2..7a2812d 100644 --- a/i3lock.c +++ b/i3lock.c @@ -431,6 +431,9 @@ void handle_screen_resize(void) { uint32_t mask = XCB_CONFIG_WINDOW_WIDTH | XCB_CONFIG_WINDOW_HEIGHT; xcb_configure_window(conn, win, mask, last_resolution); xcb_flush(conn); + + xinerama_query_screens(); + redraw_screen(); } /* @@ -683,6 +686,8 @@ int main(int argc, char *argv[]) { last_resolution[0] = screen->width_in_pixels; last_resolution[1] = screen->height_in_pixels; + xcb_change_window_attributes(conn, screen->root, XCB_CW_EVENT_MASK, + (uint32_t[]){ XCB_EVENT_MASK_STRUCTURE_NOTIFY }); #ifndef NOLIBCAIRO if (image_path) { diff --git a/unlock_indicator.c b/unlock_indicator.c index 3a33ca9..a0decb4 100644 --- a/unlock_indicator.c +++ b/unlock_indicator.c @@ -277,7 +277,7 @@ void redraw_screen(void) { xcb_change_window_attributes(conn, win, XCB_CW_BACK_PIXMAP, (uint32_t[1]){ bg_pixmap }); /* XXX: Possible optimization: Only update the area in the middle of the * screen instead of the whole screen. */ - xcb_clear_area(conn, 0, win, 0, 0, screen->width_in_pixels, screen->height_in_pixels); + xcb_clear_area(conn, 0, win, 0, 0, last_resolution[0], last_resolution[1]); xcb_free_pixmap(conn, bg_pixmap); xcb_flush(conn); }