aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordec05eba <dec05eba@protonmail.com>2024-01-12 00:00:17 +0100
committerdec05eba <dec05eba@protonmail.com>2024-01-12 00:00:17 +0100
commit33bb199fd798131dd1bfd5e3fa4b7563881014b6 (patch)
treeb22f28d5cc58a61aecde9e47622251907e6fb121
parent705ad3bee5de67725311d4085f0481fa7107ba41 (diff)
Track windows even if we cant render them, which fixes window stacking order when having unmapped windows
-rw-r--r--src/compositor.c20
1 files changed, 8 insertions, 12 deletions
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];