[vlc-commits] window: add event for fullscreen output devices

Rémi Denis-Courmont git at videolan.org
Sun May 20 19:52:33 CEST 2018


vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Sun May 20 17:59:10 2018 +0300| [a8c143b55341895d3d53705f9b2885f33818f2e8] | committer: Rémi Denis-Courmont

window: add event for fullscreen output devices

This supports adding/changing/removing outputs. The callback semantics
are similar to audio output hot-plug.

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=a8c143b55341895d3d53705f9b2885f33818f2e8
---

 include/vlc_vout_window.h | 24 ++++++++++++++++++++++++
 src/video_output/window.c | 10 ++++++++++
 2 files changed, 34 insertions(+)

diff --git a/include/vlc_vout_window.h b/include/vlc_vout_window.h
index bc0431d047..7e9866699b 100644
--- a/include/vlc_vout_window.h
+++ b/include/vlc_vout_window.h
@@ -120,9 +120,12 @@ struct vout_window_callbacks {
     void (*state_changed)(vout_window_t *, unsigned state);
     void (*windowed)(vout_window_t *);
     void (*fullscreened)(vout_window_t *, const char *id);
+
     void (*mouse_event)(vout_window_t *,
                         const vout_window_mouse_event_t *mouse);
     void (*keyboard_event)(vout_window_t *, unsigned key);
+
+    void (*output_event)(vout_window_t *, const char *id, const char *desc);
 };
 
 typedef struct vout_window_owner {
@@ -421,5 +424,26 @@ static inline void vout_window_ReportKeyPress(vout_window_t *window, int key)
         window->owner.cbs->keyboard_event(window, key);
 }
 
+/**
+ * Adds/removes a fullscreen output.
+ *
+ * This notifies the owner of the window that a usable fullscreen output has
+ * been added, changed or removed.
+ *
+ * If an output with the same identifier is already known, its name will be
+ * updated. Otherwise it will be added.
+ * If the name parameter is NULL, the output will be removed.
+ *
+ * \param id unique nul-terminated identifier for the output
+ * \param name human-readable name
+ */
+static inline void vout_window_ReportOutputDevice(vout_window_t *window,
+                                                  const char *id,
+                                                  const char *name)
+{
+    if (window->owner.cbs->output_event != NULL)
+        window->owner.cbs->output_event(window, id, name);
+}
+
 /** @} */
 #endif /* VLC_VOUT_WINDOW_H */
diff --git a/src/video_output/window.c b/src/video_output/window.c
index 13f5ca89a7..4362ef72b5 100644
--- a/src/video_output/window.c
+++ b/src/video_output/window.c
@@ -240,6 +240,15 @@ static void vout_display_window_KeyboardEvent(vout_window_t *window,
     vout_SendEventKey(vout, key);
 }
 
+static void vout_display_window_OutputEvent(vout_window_t *window,
+                                            const char *name, const char *desc)
+{
+    if (desc != NULL)
+        msg_Dbg(window, "fullscreen output %s (%s) added", name, desc);
+    else
+        msg_Dbg(window, "fullscreen output %s removed", name);
+}
+
 static const struct vout_window_callbacks vout_display_window_cbs = {
     .resized = vout_display_window_ResizeNotify,
     .closed = vout_display_window_CloseNotify,
@@ -248,6 +257,7 @@ static const struct vout_window_callbacks vout_display_window_cbs = {
     .windowed = vout_display_window_WindowingNotify,
     .mouse_event = vout_display_window_MouseEvent,
     .keyboard_event = vout_display_window_KeyboardEvent,
+    .output_event = vout_display_window_OutputEvent,
 };
 
 /**



More information about the vlc-commits mailing list