[mutter] screen-cast: Add 'is-recording' option to record methods



commit 153357cd3634e8e5bae217f93c140e794ced1ad3
Author: Jonas Ådahl <jadahl gmail com>
Date:   Tue Apr 21 16:56:39 2020 +0200

    screen-cast: Add 'is-recording' option to record methods
    
    This can be used by the Shell to change the UI to be the same as the
    current built in screen recording.
    
    https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1377

 src/backends/meta-screen-cast-session.c | 18 ++++++++++++++++++
 src/backends/meta-screen-cast.c         |  2 +-
 src/backends/meta-screen-cast.h         |  1 +
 src/org.gnome.Mutter.ScreenCast.xml     |  9 +++++++++
 4 files changed, 29 insertions(+), 1 deletion(-)
---
diff --git a/src/backends/meta-screen-cast-session.c b/src/backends/meta-screen-cast-session.c
index a97254d7fa..d89ef4690b 100644
--- a/src/backends/meta-screen-cast-session.c
+++ b/src/backends/meta-screen-cast-session.c
@@ -310,6 +310,7 @@ handle_record_monitor (MetaDBusScreenCastSession *skeleton,
     meta_backend_get_monitor_manager (backend);
   MetaMonitor *monitor;
   MetaScreenCastCursorMode cursor_mode;
+  gboolean is_recording;
   MetaScreenCastFlag flags;
   ClutterStage *stage;
   GError *error = NULL;
@@ -357,9 +358,14 @@ handle_record_monitor (MetaDBusScreenCastSession *skeleton,
         }
     }
 
+  if (!g_variant_lookup (properties_variant, "is-recording", "b", &is_recording))
+    is_recording = FALSE;
+
   stage = CLUTTER_STAGE (meta_backend_get_stage (backend));
 
   flags = META_SCREEN_CAST_FLAG_NONE;
+  if (is_recording)
+    flags |= META_SCREEN_CAST_FLAG_IS_RECORDING;
 
   monitor_stream = meta_screen_cast_monitor_stream_new (session,
                                                         connection,
@@ -402,6 +408,7 @@ handle_record_window (MetaDBusScreenCastSession *skeleton,
   GDBusConnection *connection;
   MetaWindow *window;
   MetaScreenCastCursorMode cursor_mode;
+  gboolean is_recording;
   MetaScreenCastFlag flags;
   GError *error = NULL;
   MetaDisplay *display;
@@ -459,10 +466,15 @@ handle_record_window (MetaDBusScreenCastSession *skeleton,
         }
     }
 
+  if (!g_variant_lookup (properties_variant, "is-recording", "b", &is_recording))
+    is_recording = FALSE;
+
   interface_skeleton = G_DBUS_INTERFACE_SKELETON (skeleton);
   connection = g_dbus_interface_skeleton_get_connection (interface_skeleton);
 
   flags = META_SCREEN_CAST_FLAG_NONE;
+  if (is_recording)
+    flags |= META_SCREEN_CAST_FLAG_IS_RECORDING;
 
   window_stream = meta_screen_cast_window_stream_new (session,
                                                       connection,
@@ -509,6 +521,7 @@ handle_record_area (MetaDBusScreenCastSession *skeleton,
   MetaBackend *backend;
   ClutterStage *stage;
   MetaScreenCastCursorMode cursor_mode;
+  gboolean is_recording;
   MetaScreenCastFlag flags;
   g_autoptr (GError) error = NULL;
   MetaRectangle rect;
@@ -539,12 +552,17 @@ handle_record_area (MetaDBusScreenCastSession *skeleton,
         }
     }
 
+  if (!g_variant_lookup (properties_variant, "is-recording", "b", &is_recording))
+    is_recording = FALSE;
+
   interface_skeleton = G_DBUS_INTERFACE_SKELETON (skeleton);
   connection = g_dbus_interface_skeleton_get_connection (interface_skeleton);
   backend = meta_screen_cast_get_backend (session->screen_cast);
   stage = CLUTTER_STAGE (meta_backend_get_stage (backend));
 
   flags = META_SCREEN_CAST_FLAG_NONE;
+  if (is_recording)
+    flags |= META_SCREEN_CAST_FLAG_IS_RECORDING;
 
   rect = (MetaRectangle) {
     .x = x,
diff --git a/src/backends/meta-screen-cast.c b/src/backends/meta-screen-cast.c
index fddaf4fca6..6422f4f19e 100644
--- a/src/backends/meta-screen-cast.c
+++ b/src/backends/meta-screen-cast.c
@@ -32,7 +32,7 @@
 
 #define META_SCREEN_CAST_DBUS_SERVICE "org.gnome.Mutter.ScreenCast"
 #define META_SCREEN_CAST_DBUS_PATH "/org/gnome/Mutter/ScreenCast"
-#define META_SCREEN_CAST_API_VERSION 3
+#define META_SCREEN_CAST_API_VERSION 4
 
 struct _MetaScreenCast
 {
diff --git a/src/backends/meta-screen-cast.h b/src/backends/meta-screen-cast.h
index ac1f9fed5a..af265e213e 100644
--- a/src/backends/meta-screen-cast.h
+++ b/src/backends/meta-screen-cast.h
@@ -40,6 +40,7 @@ typedef enum _MetaScreenCastCursorMode
 typedef enum _MetaScreenCastFlag
 {
   META_SCREEN_CAST_FLAG_NONE = 0,
+  META_SCREEN_CAST_FLAG_IS_RECORDING = 1 << 0,
 } MetaScreenCastFlag;
 
 #define META_TYPE_SCREEN_CAST (meta_screen_cast_get_type ())
diff --git a/src/org.gnome.Mutter.ScreenCast.xml b/src/org.gnome.Mutter.ScreenCast.xml
index e20f5e5c61..07ab402eb4 100644
--- a/src/org.gnome.Mutter.ScreenCast.xml
+++ b/src/org.gnome.Mutter.ScreenCast.xml
@@ -79,6 +79,9 @@
 
        * "cursor-mode" (u): Cursor mode. Default: 'hidden' (see below)
                             Available since API version 2.
+       * "is-recording" (b): Whether this is a screen recording. May be
+                             be used for choosing appropriate visual feedback.
+                             Default: false. Available since API version 4.
 
        Available cursor mode values:
 
@@ -105,6 +108,9 @@
 
        * "window-id" (t): Id of the window to record.
        * "cursor-mode" (u): Cursor mode. Default: 'hidden' (see RecordMonitor).
+       * "is-recording" (b): Whether this is a screen recording. May be
+                             be used for choosing panel icon.
+                             Default: false. Available since API version 4.
 
     -->
     <method name="RecordWindow">
@@ -129,6 +135,9 @@
 
        * "cursor-mode" (u): Cursor mode. Default: 'hidden' (see below)
                             Available since API version 2.
+       * "is-recording" (b): Whether this is a screen recording. May be
+                             be used for choosing panel icon.
+                             Default: false. Available since API version 4.
 
        Available cursor mode values:
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]