From 33bb199fd798131dd1bfd5e3fa4b7563881014b6 Mon Sep 17 00:00:00 2001 From: dec05eba Date: Fri, 12 Jan 2024 00:00:17 +0100 Subject: Track windows even if we cant render them, which fixes window stacking order when having unmapped windows --- src/compositor.c | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) (limited to 'src/compositor.c') diff --git a/src/compositor.c b/src/compositor.c index 994404e..c6b2059 100644 --- a/src/compositor.c +++ b/src/compositor.c @@ -93,7 +93,7 @@ void ngxc_compositor_add_window(ngxc_compositor *self, Window window) { ngxc_window *window_obj = &self->windows[self->num_windows]; if(window_texture_init(&window_obj->texture, self->dpy, window) != 0) { fprintf(stderr, "error: failed to create window texture, ignoring window with id %ld\n", window); - return; + //return; } window_obj->x = xattr.x; @@ -189,7 +189,8 @@ void ngxc_compositor_render(ngxc_compositor *self) { for(int i = 0; i < self->num_windows; ++i) { const ngxc_window *window_obj = &self->windows[i]; - render_texture(window_obj->texture.texture_id, window_obj->x, window_obj->y, window_obj->texture.width, window_obj->texture.height); + if(window_obj->texture.texture_id > 0) + render_texture(window_obj->texture.texture_id, window_obj->x, window_obj->y, window_obj->texture.width, window_obj->texture.height); } const double now = clock_get_monotonic_seconds(); @@ -200,7 +201,7 @@ void ngxc_compositor_render(ngxc_compositor *self) { glFinish(); const double time_limit = 1.0f / 60.0f; // TODO: Get from randr. This might not be a good way to do this when using multiple monitors with different refresh rate and opengl is synced to one monitor - const double delayed_update = time_limit - frame_duration - 0.002; + const double delayed_update = time_limit - frame_duration - 0.003; //fprintf(stderr, "delayed update: %f\n", delayed_update); if(delayed_update > 0.0) usleep(delayed_update * 1000000.0); @@ -217,17 +218,12 @@ static void ngxc_compositor_move_window_after(ngxc_compositor *self, int window_ return; } - int above_window_index = -1; - for(int i = 0; i < self->num_windows; ++i) { - if(self->windows[i].texture.window == above_window) { - above_window_index = i; - break; - } - } - - if(above_window_index == -1) { + int above_window_index; + if(!ngxc_compositor_get_window_by_id(self, above_window, &above_window_index)) { fprintf(stderr, "error: unable to find above window %ld in compositor list\n", above_window); return; + //ngxc_compositor_move_window_after(self, window_index, None); + //return; } const ngxc_window window_obj_copy = self->windows[window_index]; -- cgit v1.2.3