summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Ralls <jralls@ceridwen.us>2023-03-23 11:32:15 -0700
committerJohn Ralls <jralls@ceridwen.us>2023-03-23 11:44:33 -0700
commit33fd9eb472212014d42df5b8ec633184002c0dda (patch)
tree01840aea42e6686499f119e9679299bcd4bb4a73
parentf1b6556aac226614e0b2f5dcffc3e86c55869fc3 (diff)
downloadgtk+-33fd9eb472212014d42df5b8ec633184002c0dda.tar.gz
[quartz] Convert frame_link, windows_awaiting_frame to GSList.
We were't using GList's prev member; worse, we weren't setting it and that broke g_list_remove_link so that the link wasn't removed in _gdk_quartz_display_remove_frame_callback. Closes #5593
-rw-r--r--gdk/quartz/gdkdisplay-quartz.c15
-rw-r--r--gdk/quartz/gdkdisplay-quartz.h2
-rw-r--r--gdk/quartz/gdkwindow-quartz.h2
3 files changed, 12 insertions, 7 deletions
diff --git a/gdk/quartz/gdkdisplay-quartz.c b/gdk/quartz/gdkdisplay-quartz.c
index 53726e38b6..3ace0170be 100644
--- a/gdk/quartz/gdkdisplay-quartz.c
+++ b/gdk/quartz/gdkdisplay-quartz.c
@@ -96,7 +96,6 @@ _gdk_quartz_display_add_frame_callback (GdkDisplay *display,
display_quartz = GDK_QUARTZ_DISPLAY (display);
impl->frame_link.data = window;
- impl->frame_link.prev = NULL;
impl->frame_link.next = display_quartz->windows_awaiting_frame;
display_quartz->windows_awaiting_frame = &impl->frame_link;
@@ -110,14 +109,14 @@ _gdk_quartz_display_remove_frame_callback (GdkDisplay *display,
GdkWindow *window)
{
GdkQuartzDisplay *display_quartz = GDK_QUARTZ_DISPLAY (display);
- GList *link;
+ GSList *link;
- link = g_list_find (display_quartz->windows_awaiting_frame, window);
+ link = g_slist_find (display_quartz->windows_awaiting_frame, window);
if (link != NULL)
{
display_quartz->windows_awaiting_frame =
- g_list_remove_link (display_quartz->windows_awaiting_frame, link);
+ g_slist_remove_link (display_quartz->windows_awaiting_frame, link);
}
if (display_quartz->windows_awaiting_frame == NULL)
@@ -129,7 +128,7 @@ gdk_quartz_display_frame_cb (gpointer data)
{
GdkDisplayLinkSource *source;
GdkQuartzDisplay *display_quartz = data;
- GList *iter;
+ GSList *iter, **last_next = NULL;
gint64 presentation_time;
gint64 now;
@@ -154,6 +153,12 @@ gdk_quartz_display_frame_cb (gpointer data)
GdkFrameClock *frame_clock = gdk_window_get_frame_clock (window);
GdkFrameTimings *timings;
+ /* Clear the frame_link */
+ iter->data = NULL;
+ if (last_next && *last_next)
+ *last_next = NULL;
+ last_next = &iter->next;
+
if (frame_clock == NULL)
continue;
diff --git a/gdk/quartz/gdkdisplay-quartz.h b/gdk/quartz/gdkdisplay-quartz.h
index 59245da7ca..dbe8f67e97 100644
--- a/gdk/quartz/gdkdisplay-quartz.h
+++ b/gdk/quartz/gdkdisplay-quartz.h
@@ -39,7 +39,7 @@ struct _GdkQuartzDisplay
GPtrArray *monitors;
/* This structure is not allocated. It points to an embedded
* GList in the GdkWindow. */
- GList *windows_awaiting_frame;
+ GSList *windows_awaiting_frame;
GSource *frame_source;
};
diff --git a/gdk/quartz/gdkwindow-quartz.h b/gdk/quartz/gdkwindow-quartz.h
index de9a5ebccf..7551e9be67 100644
--- a/gdk/quartz/gdkwindow-quartz.h
+++ b/gdk/quartz/gdkwindow-quartz.h
@@ -66,7 +66,7 @@ struct _GdkWindowImplQuartz
gint shadow_max;
gboolean use_cg_context;
- GList frame_link;
+ GSList frame_link;
gint pending_frame_counter;
};