1
0
Fork 0

cogl/renderer: Move output list to CoglXlibRenderer

It's the only place where it's used.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3792>
This commit is contained in:
Georges Basile Stavracas Neto 2024-05-31 19:10:06 +02:00 committed by Marge Bot
parent 94d69c3252
commit 653ba4a7a7
3 changed files with 19 additions and 13 deletions

View file

@ -57,8 +57,6 @@ struct _CoglRenderer
CoglList idle_closures; CoglList idle_closures;
GList *outputs;
#ifdef HAVE_X11 #ifdef HAVE_X11
Display *foreign_xdpy; Display *foreign_xdpy;
gboolean xlib_enable_event_retrieval; gboolean xlib_enable_event_retrieval;

View file

@ -42,6 +42,8 @@ typedef struct _CoglXlibRenderer
Display *xdpy; Display *xdpy;
GList *outputs;
unsigned long outputs_update_serial; unsigned long outputs_update_serial;
} CoglXlibRenderer; } CoglXlibRenderer;

View file

@ -264,7 +264,7 @@ update_outputs (CoglRenderer *renderer,
new_outputs = g_list_sort (new_outputs, (GCompareFunc)compare_outputs); new_outputs = g_list_sort (new_outputs, (GCompareFunc)compare_outputs);
l = new_outputs; l = new_outputs;
m = renderer->outputs; m = xlib_renderer->outputs;
while (l || m) while (l || m)
{ {
@ -285,9 +285,13 @@ update_outputs (CoglRenderer *renderer,
if (!_cogl_output_values_equal (output_l, output_m)) if (!_cogl_output_values_equal (output_l, output_m))
{ {
renderer->outputs = g_list_remove_link (renderer->outputs, m); xlib_renderer->outputs =
renderer->outputs = g_list_insert_before (renderer->outputs, g_list_remove_link (xlib_renderer->outputs, m);
m_next, output_l);
xlib_renderer->outputs =
g_list_insert_before (xlib_renderer->outputs,
m_next,
output_l);
g_object_ref (output_l); g_object_ref (output_l);
changed = TRUE; changed = TRUE;
@ -298,8 +302,8 @@ update_outputs (CoglRenderer *renderer,
} }
else if (cmp < 0) else if (cmp < 0)
{ {
renderer->outputs = xlib_renderer->outputs =
g_list_insert_before (renderer->outputs, m, output_l); g_list_insert_before (xlib_renderer->outputs, m, output_l);
g_object_ref (output_l); g_object_ref (output_l);
changed = TRUE; changed = TRUE;
l = l->next; l = l->next;
@ -307,7 +311,8 @@ update_outputs (CoglRenderer *renderer,
else else
{ {
GList *m_next = m->next; GList *m_next = m->next;
renderer->outputs = g_list_remove_link (renderer->outputs, m); xlib_renderer->outputs =
g_list_remove_link (xlib_renderer->outputs, m);
changed = TRUE; changed = TRUE;
m = m_next; m = m_next;
} }
@ -326,7 +331,7 @@ update_outputs (CoglRenderer *renderer,
else else
COGL_NOTE (WINSYS, "Outputs:"); COGL_NOTE (WINSYS, "Outputs:");
for (l = renderer->outputs; l; l = l->next) for (l = xlib_renderer->outputs; l; l = l->next)
{ {
CoglOutput *output = l->data; CoglOutput *output = l->data;
const char *subpixel_string; const char *subpixel_string;
@ -476,8 +481,8 @@ _cogl_xlib_renderer_disconnect (CoglRenderer *renderer)
CoglXlibRenderer *xlib_renderer = CoglXlibRenderer *xlib_renderer =
_cogl_xlib_renderer_get_data (renderer); _cogl_xlib_renderer_get_data (renderer);
g_list_free_full (renderer->outputs, (GDestroyNotify)g_object_unref); g_list_free_full (xlib_renderer->outputs, (GDestroyNotify)g_object_unref);
renderer->outputs = NULL; xlib_renderer->outputs = NULL;
if (!renderer->foreign_xdpy && xlib_renderer->xdpy) if (!renderer->foreign_xdpy && xlib_renderer->xdpy)
XCloseDisplay (xlib_renderer->xdpy); XCloseDisplay (xlib_renderer->xdpy);
@ -531,13 +536,14 @@ _cogl_xlib_renderer_output_for_rectangle (CoglRenderer *renderer,
int width, int width,
int height) int height)
{ {
CoglXlibRenderer *xlib_renderer = _cogl_xlib_renderer_get_data (renderer);
int max_overlap = 0; int max_overlap = 0;
CoglOutput *max_overlapped = NULL; CoglOutput *max_overlapped = NULL;
GList *l; GList *l;
int xa1 = x, xa2 = x + width; int xa1 = x, xa2 = x + width;
int ya1 = y, ya2 = y + height; int ya1 = y, ya2 = y + height;
for (l = renderer->outputs; l; l = l->next) for (l = xlib_renderer->outputs; l; l = l->next)
{ {
CoglOutput *output = l->data; CoglOutput *output = l->data;
int xb1 = output->x, xb2 = output->x + output->width; int xb1 = output->x, xb2 = output->x + output->width;