summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonas Ådahl <jadahl@gmail.com>2019-06-28 20:54:16 +0200
committerJonas Ådahl <jadahl@gmail.com>2019-07-03 11:42:28 +0200
commita7ee1b4e855433ca62c23e3cc82c785845b6093d (patch)
tree84a16b1244ed5afb33ea9f2847e2b919f1e355d0
parent5db079b052fcb934566f69ea49dd7fc3f6314813 (diff)
downloadgtk+-a7ee1b4e855433ca62c23e3cc82c785845b6093d.tar.gz
gdksurface: Make all surfaces listen to the frame clock signals
Instead of the toplevel driving popups, have the popups listen to the frame clock themselves. Otherwise, if the toplevel for some reason isn't drawn by the compositor and stops drawing new frames, popups wouldn't get painted either.
-rw-r--r--gdk/gdksurface.c59
1 files changed, 25 insertions, 34 deletions
diff --git a/gdk/gdksurface.c b/gdk/gdksurface.c
index 70c2c409a0..07bd67d57f 100644
--- a/gdk/gdksurface.c
+++ b/gdk/gdksurface.c
@@ -1404,7 +1404,6 @@ gdk_surface_paint_on_clock (GdkFrameClock *clock,
void *data)
{
GdkSurface *surface = GDK_SURFACE (data);
- GList *l;
g_return_if_fail (GDK_IS_SURFACE (surface));
@@ -1425,9 +1424,6 @@ gdk_surface_paint_on_clock (GdkFrameClock *clock,
gdk_surface_remove_update_surface (surface);
}
- for (l = surface->children; l; l = l->next)
- gdk_surface_paint_on_clock (clock, l->data);
-
g_object_unref (surface);
}
@@ -3719,21 +3715,19 @@ gdk_surface_set_frame_clock (GdkSurface *surface,
if (clock)
{
g_object_ref (clock);
- if (surface->parent == NULL)
- {
- g_signal_connect (G_OBJECT (clock),
- "flush-events",
- G_CALLBACK (gdk_surface_flush_events),
- surface);
- g_signal_connect (G_OBJECT (clock),
- "resume-events",
- G_CALLBACK (gdk_surface_resume_events),
- surface);
- g_signal_connect (G_OBJECT (clock),
- "paint",
- G_CALLBACK (gdk_surface_paint_on_clock),
- surface);
- }
+
+ g_signal_connect (G_OBJECT (clock),
+ "flush-events",
+ G_CALLBACK (gdk_surface_flush_events),
+ surface);
+ g_signal_connect (G_OBJECT (clock),
+ "resume-events",
+ G_CALLBACK (gdk_surface_resume_events),
+ surface);
+ g_signal_connect (G_OBJECT (clock),
+ "paint",
+ G_CALLBACK (gdk_surface_paint_on_clock),
+ surface);
if (surface->update_freeze_count == 0)
_gdk_frame_clock_inhibit_freeze (clock);
@@ -3741,21 +3735,18 @@ gdk_surface_set_frame_clock (GdkSurface *surface,
if (surface->frame_clock)
{
- if (surface->parent == NULL)
- {
- if (surface->frame_clock_events_paused)
- gdk_surface_resume_events (surface->frame_clock, G_OBJECT (surface));
-
- g_signal_handlers_disconnect_by_func (G_OBJECT (surface->frame_clock),
- G_CALLBACK (gdk_surface_flush_events),
- surface);
- g_signal_handlers_disconnect_by_func (G_OBJECT (surface->frame_clock),
- G_CALLBACK (gdk_surface_resume_events),
- surface);
- g_signal_handlers_disconnect_by_func (G_OBJECT (surface->frame_clock),
- G_CALLBACK (gdk_surface_paint_on_clock),
- surface);
- }
+ if (surface->frame_clock_events_paused)
+ gdk_surface_resume_events (surface->frame_clock, G_OBJECT (surface));
+
+ g_signal_handlers_disconnect_by_func (G_OBJECT (surface->frame_clock),
+ G_CALLBACK (gdk_surface_flush_events),
+ surface);
+ g_signal_handlers_disconnect_by_func (G_OBJECT (surface->frame_clock),
+ G_CALLBACK (gdk_surface_resume_events),
+ surface);
+ g_signal_handlers_disconnect_by_func (G_OBJECT (surface->frame_clock),
+ G_CALLBACK (gdk_surface_paint_on_clock),
+ surface);
if (surface->update_freeze_count == 0)
_gdk_frame_clock_uninhibit_freeze (surface->frame_clock);