[mutter] screen-cast/area-src: Handle monitors changes here too
- From: Marge Bot <marge-bot src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] screen-cast/area-src: Handle monitors changes here too
- Date: Fri, 29 Jan 2021 08:57:11 +0000 (UTC)
commit 893c0cd2f93a0d10a211af32d26be167e9656cd7
Author: Jonas Ã…dahl <jadahl gmail com>
Date: Thu Jan 28 23:21:12 2021 +0100
screen-cast/area-src: Handle monitors changes here too
Like with the monitor source, we need to reattach to the new views after
monitor changes, otherwise the screen cast will get stuck.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1691>
src/backends/meta-screen-cast-area-stream-src.c | 21 +++++++++++++++++++++
1 file changed, 21 insertions(+)
---
diff --git a/src/backends/meta-screen-cast-area-stream-src.c b/src/backends/meta-screen-cast-area-stream-src.c
index 1b0da7be2e..7f88d80d11 100644
--- a/src/backends/meta-screen-cast-area-stream-src.c
+++ b/src/backends/meta-screen-cast-area-stream-src.c
@@ -303,12 +303,29 @@ add_view_painted_watches (MetaScreenCastAreaStreamSrc *area_src,
}
}
+static void
+on_monitors_changed (MetaMonitorManager *monitor_manager,
+ MetaScreenCastAreaStreamSrc *area_src)
+{
+ MetaStage *stage = META_STAGE (get_stage (area_src));
+ GList *l;
+
+ for (l = area_src->watches; l; l = l->next)
+ meta_stage_remove_watch (stage, l->data);
+ g_clear_pointer (&area_src->watches, g_list_free);
+
+ add_view_painted_watches (area_src,
+ META_STAGE_WATCH_AFTER_ACTOR_PAINT);
+}
+
static void
meta_screen_cast_area_stream_src_enable (MetaScreenCastStreamSrc *src)
{
MetaScreenCastAreaStreamSrc *area_src =
META_SCREEN_CAST_AREA_STREAM_SRC (src);
MetaBackend *backend = get_backend (area_src);
+ MetaMonitorManager *monitor_manager =
+ meta_backend_get_monitor_manager (backend);
MetaCursorTracker *cursor_tracker = meta_backend_get_cursor_tracker (backend);
ClutterStage *stage;
MetaScreenCastStream *stream;
@@ -341,6 +358,10 @@ meta_screen_cast_area_stream_src_enable (MetaScreenCastStreamSrc *src)
break;
}
+ g_signal_connect_object (monitor_manager, "monitors-changed-internal",
+ G_CALLBACK (on_monitors_changed),
+ area_src, 0);
+
clutter_actor_queue_redraw (CLUTTER_ACTOR (stage));
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]