[vlc-commits] window: use dedicated state callback
Rémi Denis-Courmont
git at videolan.org
Sun Dec 2 19:15:25 CET 2018
vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Sun Dec 2 12:13:56 2018 +0200| [deaab8d825de931695e08453f3c8e3b5b19ad6ab] | committer: Rémi Denis-Courmont
window: use dedicated state callback
This removes the vararg control callback.
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=deaab8d825de931695e08453f3c8e3b5b19ad6ab
---
include/vlc_vout_window.h | 48 +++--------------------------
modules/gui/macosx/VLCVideoOutputProvider.m | 28 +++++++++++++++--
modules/gui/minimal_macosx/intf.m | 33 +++++---------------
modules/gui/qt/main_interface.cpp | 21 +++----------
modules/gui/qt/main_interface.hpp | 2 +-
modules/gui/skins2/src/skin_main.cpp | 41 ++++++++----------------
modules/video_output/drawable.c | 18 -----------
modules/video_output/wayland/xdg-shell.c | 16 ----------
modules/video_output/wdummy.c | 15 ---------
modules/video_output/win32/glwin32.c | 7 -----
modules/video_output/xcb/window.c | 32 +++++--------------
11 files changed, 64 insertions(+), 197 deletions(-)
diff --git a/include/vlc_vout_window.h b/include/vlc_vout_window.h
index 7137631dbd..a3857c80fa 100644
--- a/include/vlc_vout_window.h
+++ b/include/vlc_vout_window.h
@@ -55,13 +55,6 @@ enum vout_window_type {
};
/**
- * Control query for vout_window_t
- */
-enum vout_window_control {
- VOUT_WINDOW_SET_STATE, /* unsigned state */
-};
-
-/**
* Window management state.
*/
enum vout_window_state {
@@ -144,23 +137,13 @@ struct vout_window_operations {
void (*resize)(vout_window_t *, unsigned width, unsigned height);
/**
- * Control callback (mandatory)
- *
- * This callback handles some control request regarding the window.
- * See \ref vout_window_control.
- *
- * This field should not be used directly when manipulating a window.
- * vout_window_Control() should be used instead.
- */
- int (*control)(vout_window_t *, int, va_list);
-
- /**
* Destroy the window.
*
* Destroys the window and releases all associated resources.
*/
void (*destroy)(vout_window_t *);
+ void (*set_state)(vout_window_t *, unsigned state);
void (*unset_fullscreen)(vout_window_t *);
void (*set_fullscreen)(vout_window_t *, const char *id);
};
@@ -259,36 +242,13 @@ VLC_API void vout_window_Delete(vout_window_t *);
void vout_window_SetInhibition(vout_window_t *window, bool enabled);
-static inline int vout_window_vaControl(vout_window_t *window, int query,
- va_list ap)
-{
- return window->ops->control(window, query, ap);
-}
-
-/**
- * Reconfigures a window.
- *
- * @note The vout_window_* wrappers should be used instead of this function.
- *
- * @warning The caller must own the window, as vout_window_t is not thread safe.
- */
-static inline int vout_window_Control(vout_window_t *window, int query, ...)
-{
- va_list ap;
- int ret;
-
- va_start(ap, query);
- ret = vout_window_vaControl(window, query, ap);
- va_end(ap);
- return ret;
-}
-
/**
* Configures the window manager state for this window.
*/
-static inline int vout_window_SetState(vout_window_t *window, unsigned state)
+static inline void vout_window_SetState(vout_window_t *window, unsigned state)
{
- return vout_window_Control(window, VOUT_WINDOW_SET_STATE, state);
+ if (window->ops->set_state != NULL)
+ window->ops->set_state(window, state);
}
/**
diff --git a/modules/gui/macosx/VLCVideoOutputProvider.m b/modules/gui/macosx/VLCVideoOutputProvider.m
index 8253c0b035..f949bb3bd8 100644
--- a/modules/gui/macosx/VLCVideoOutputProvider.m
+++ b/modules/gui/macosx/VLCVideoOutputProvider.m
@@ -55,6 +55,31 @@ static void WindowResize(vout_window_t *p_wnd,
}
}
+static void WindowSetState(vout_window_t *p_wnd, unsigned state)
+{
+ if (i_state & VOUT_WINDOW_STATE_BELOW)
+ {
+ msg_Dbg(p_wnd, "Ignore change to VOUT_WINDOW_STATE_BELOW");
+ return;
+ }
+
+ @autoreleasepool {
+ VLCVideoOutputProvider *voutProvider = [[VLCMain sharedInstance] voutProvider];
+ if (!voutProvider) {
+ return;
+ }
+
+ NSInteger i_cooca_level = NSNormalWindowLevel;
+
+ if (i_state & VOUT_WINDOW_STATE_ABOVE)
+ i_cooca_level = NSStatusWindowLevel;
+
+ dispatch_async(dispatch_get_main_queue(), ^{
+ [voutProvider setWindowLevel:i_cooca_level forWindow:p_wnd];
+ });
+ }
+}
+
static const char windowed;
static void WindowSetFullscreen(vout_window_t *p_wnd, const char *psz_id)
@@ -88,13 +113,12 @@ static void WindowUnsetFullscreen(vout_window_t *wnd)
static atomic_bool b_intf_starting = ATOMIC_VAR_INIT(false);
-static int WindowControl(vout_window_t *, int i_query, va_list);
static void WindowClose(vout_window_t *);
static const struct vout_window_operations ops = {
WindowResize,
- WindowControl,
WindowClose,
+ WindowSetState,
WindowUnsetFullscreen,
WindowSetFullscreen,
};
diff --git a/modules/gui/minimal_macosx/intf.m b/modules/gui/minimal_macosx/intf.m
index 7dce791264..3778313f56 100644
--- a/modules/gui/minimal_macosx/intf.m
+++ b/modules/gui/minimal_macosx/intf.m
@@ -116,6 +116,13 @@ static void WindowResize(vout_window_t *p_wnd,
}
}
+static void WindowSetState(vout_window_t *p_wnd, unsigned state)
+{
+ NSWindow* o_window = [(__bridge id)p_wnd->handle.nsobject window];
+
+ [o_window setLevel:i_state];
+}
+
static void WindowUnsetFullscreen(vout_window_t *p_wnd)
{
NSWindow* o_window = [(__bridge id)p_wnd->handle.nsobject window];
@@ -138,13 +145,12 @@ static void WindowSetFullscreen(vout_window_t *p_wnd, const char *psz_id)
}
}
-static int WindowControl(vout_window_t *, int i_query, va_list);
static void WindowClose(vout_window_t *);
static const struct vout_window_operations ops = {
WindowResize,
- WindowControl,
WindowClose,
+ WindowSetState,
WindowUnsetFullscreen,
WindowSetFullscreen,
};
@@ -177,29 +183,6 @@ int WindowOpen(vout_window_t *p_wnd, const vout_window_cfg_t *cfg)
return VLC_SUCCESS;
}
-static int WindowControl(vout_window_t *p_wnd, int i_query, va_list args)
-{
- NSWindow* o_window = [(__bridge id)p_wnd->handle.nsobject window];
- if (!o_window) {
- msg_Err(p_wnd, "failed to recover cocoa window");
- return VLC_EGENERIC;
- }
-
- switch (i_query) {
- case VOUT_WINDOW_SET_STATE:
- {
- unsigned i_state = va_arg(args, unsigned);
-
- [o_window setLevel:i_state];
-
- return VLC_SUCCESS;
- }
- default:
- msg_Warn(p_wnd, "unsupported control query");
- return VLC_EGENERIC;
- }
-}
-
static void WindowClose(vout_window_t *p_wnd)
{
@autoreleasepool {
diff --git a/modules/gui/qt/main_interface.cpp b/modules/gui/qt/main_interface.cpp
index 7365d7d3cb..0b737622d4 100644
--- a/modules/gui/qt/main_interface.cpp
+++ b/modules/gui/qt/main_interface.cpp
@@ -731,8 +731,8 @@ bool MainInterface::getVideo( struct vout_window_t *p_wnd,
{
static const struct vout_window_operations ops = {
MainInterface::resizeVideo,
- MainInterface::controlVideo,
MainInterface::releaseVideo,
+ MainInterface::requestVideoState,
MainInterface::requestVideoWindowed,
MainInterface::requestVideoFullScreen,
};
@@ -1006,25 +1006,12 @@ void MainInterface::requestVideoFullScreen( vout_window_t *wnd, const char * )
emit p_mi->askVideoSetFullScreen( true );
}
-int MainInterface::controlVideo( vout_window_t *p_wnd, int i_query,
- va_list args )
+void MainInterface::requestVideoState( vout_window_t *p_wnd, unsigned i_arg )
{
MainInterface *p_mi = (MainInterface *)p_wnd->sys;
+ bool on_top = (i_arg & VOUT_WINDOW_STATE_ABOVE) != 0;
- switch( i_query )
- {
- case VOUT_WINDOW_SET_STATE:
- {
- unsigned i_arg = va_arg( args, unsigned );
- unsigned on_top = i_arg & VOUT_WINDOW_STATE_ABOVE;
-
- emit p_mi->askVideoOnTop( on_top != 0 );
- return VLC_SUCCESS;
- }
- default:
- msg_Warn( p_wnd, "unsupported control query" );
- return VLC_EGENERIC;
- }
+ emit p_mi->askVideoOnTop( on_top );
}
void MainInterface::releaseVideo( vout_window_t *p_wnd )
diff --git a/modules/gui/qt/main_interface.hpp b/modules/gui/qt/main_interface.hpp
index 855133c724..0c64d192a3 100644
--- a/modules/gui/qt/main_interface.hpp
+++ b/modules/gui/qt/main_interface.hpp
@@ -75,7 +75,7 @@ public:
private:
static void releaseVideo( struct vout_window_t * );
static void resizeVideo( struct vout_window_t *, unsigned, unsigned );
- static int controlVideo( struct vout_window_t *, int, va_list );
+ static void requestVideoState( struct vout_window_t *, unsigned );
static void requestVideoWindowed( struct vout_window_t * );
static void requestVideoFullScreen( struct vout_window_t *, const char * );
diff --git a/modules/gui/skins2/src/skin_main.cpp b/modules/gui/skins2/src/skin_main.cpp
index 777af9e3cc..8af14b4471 100644
--- a/modules/gui/skins2/src/skin_main.cpp
+++ b/modules/gui/skins2/src/skin_main.cpp
@@ -320,7 +320,6 @@ end:
static int WindowOpen( vout_window_t *, const vout_window_cfg_t * );
static void WindowClose( vout_window_t * );
-static int WindowControl( vout_window_t *, int, va_list );
typedef struct
{
@@ -360,6 +359,18 @@ static void WindowResize( vout_window_t *pWnd,
pQueue->push( CmdGenericPtr( pCmd ) );
}
+static void WindowSetState( vout_window_t *pWnd, unsigned i_arg )
+{
+ vout_window_skins_t* sys = (vout_window_skins_t *)pWnd->sys;
+ intf_thread_t *pIntf = sys->pIntf;
+ AsyncQueue *pQueue = AsyncQueue::instance( pIntf );
+ bool on_top = i_arg & VOUT_WINDOW_STATE_ABOVE;
+
+ // Post a SetOnTop command
+ CmdSetOnTop* pCmd = new CmdSetOnTop( pIntf, on_top );
+ pQueue->push( CmdGenericPtr( pCmd ) );
+}
+
static void WindowUnsetFullscreen( vout_window_t *pWnd )
{
vout_window_skins_t* sys = (vout_window_skins_t *)pWnd->sys;
@@ -383,8 +394,8 @@ static void WindowSetFullscreen( vout_window_t *pWnd, const char * )
static const struct vout_window_operations window_ops = {
WindowResize,
- WindowControl,
WindowClose,
+ WindowSetState,
WindowUnsetFullscreen,
WindowSetFullscreen,
};
@@ -448,32 +459,6 @@ static void WindowClose( vout_window_t *pWnd )
delete sys;
}
-static int WindowControl( vout_window_t *pWnd, int query, va_list args )
-{
- vout_window_skins_t* sys = (vout_window_skins_t *)pWnd->sys;
- intf_thread_t *pIntf = sys->pIntf;
- AsyncQueue *pQueue = AsyncQueue::instance( pIntf );
-
- switch( query )
- {
- case VOUT_WINDOW_SET_STATE:
- {
- unsigned i_arg = va_arg( args, unsigned );
- unsigned on_top = i_arg & VOUT_WINDOW_STATE_ABOVE;
-
- // Post a SetOnTop command
- CmdSetOnTop* pCmd =
- new CmdSetOnTop( pIntf, on_top );
- pQueue->push( CmdGenericPtr( pCmd ) );
- return VLC_SUCCESS;
- }
-
- default:
- msg_Dbg( pIntf, "control query not supported" );
- return VLC_EGENERIC;
- }
-}
-
//---------------------------------------------------------------------------
// Module descriptor
//---------------------------------------------------------------------------
diff --git a/modules/video_output/drawable.c b/modules/video_output/drawable.c
index 303e44b592..b5ca715f50 100644
--- a/modules/video_output/drawable.c
+++ b/modules/video_output/drawable.c
@@ -55,15 +55,12 @@ vlc_module_begin ()
change_volatile ()
vlc_module_end ()
-static int Control (vout_window_t *, int, va_list);
-
/* Keep a list of busy drawables, so we don't overlap videos if there are
* more than one video track in the stream. */
static vlc_mutex_t serializer = VLC_STATIC_MUTEX;
static uintptr_t *used = NULL;
static const struct vout_window_operations ops = {
- .control = Control,
.destroy = Close,
};
@@ -138,18 +135,3 @@ static void Close (vout_window_t *wnd)
}
vlc_mutex_unlock (&serializer);
}
-
-
-static int Control (vout_window_t *wnd, int query, va_list ap)
-{
- VLC_UNUSED( ap );
-
- switch (query)
- {
- case VOUT_WINDOW_SET_STATE: /* not allowed either, would be ugly */
- return VLC_EGENERIC;
- default:
- msg_Warn (wnd, "unsupported control query %d", query);
- return VLC_EGENERIC;
- }
-}
diff --git a/modules/video_output/wayland/xdg-shell.c b/modules/video_output/wayland/xdg-shell.c
index 89d1eed700..dd4e7305f0 100644
--- a/modules/video_output/wayland/xdg-shell.c
+++ b/modules/video_output/wayland/xdg-shell.c
@@ -186,21 +186,6 @@ static void Resize(vout_window_t *wnd, unsigned width, unsigned height)
wl_display_flush(wnd->display.wl);
}
-static int Control(vout_window_t *wnd, int cmd, va_list ap)
-{
- switch (cmd)
- {
- case VOUT_WINDOW_SET_STATE:
- return VLC_EGENERIC;
-
- default:
- msg_Err(wnd, "request %d not implemented", cmd);
- return VLC_EGENERIC;
- }
-
- return VLC_SUCCESS;
-}
-
static void Close(vout_window_t *);
static void UnsetFullscreen(vout_window_t *wnd)
@@ -240,7 +225,6 @@ static void SetFullscreen(vout_window_t *wnd, const char *idstr)
static const struct vout_window_operations ops = {
.resize = Resize,
- .control = Control,
.destroy = Close,
.unset_fullscreen = UnsetFullscreen,
.set_fullscreen = SetFullscreen,
diff --git a/modules/video_output/wdummy.c b/modules/video_output/wdummy.c
index 5979504790..104d70b991 100644
--- a/modules/video_output/wdummy.c
+++ b/modules/video_output/wdummy.c
@@ -30,23 +30,8 @@
#include <vlc_plugin.h>
#include <vlc_vout_window.h>
-static int Control(vout_window_t *wnd, int query, va_list ap)
-{
- switch (query)
- {
- case VOUT_WINDOW_SET_STATE:
- /* These controls deserve a proper window provider. Move along. */
- return VLC_EGENERIC;
-
- default:
- msg_Warn(wnd, "unsupported control query %d", query);
- return VLC_EGENERIC;
- }
-}
-
static const struct vout_window_operations ops = {
.resize = vout_window_ReportSize,
- .control = Control,
};
static int Open(vout_window_t *wnd, const vout_window_cfg_t *cfg)
diff --git a/modules/video_output/win32/glwin32.c b/modules/video_output/win32/glwin32.c
index e1fc112cf2..c3b82a410b 100644
--- a/modules/video_output/win32/glwin32.c
+++ b/modules/video_output/win32/glwin32.c
@@ -84,15 +84,8 @@ static int Control(vout_display_t *vd, int query, va_list args)
return CommonControl(vd, query, args);
}
-static int EmbedVideoWindow_Control(vout_window_t *wnd, int query, va_list ap)
-{
- VLC_UNUSED( ap ); VLC_UNUSED( query );
- return VLC_EGENERIC;
-}
-
static const struct vout_window_operations embedVideoWindow_Ops =
{
- .control = EmbedVideoWindow_Control,
};
static vout_window_t *EmbedVideoWindow_Create(vout_display_t *vd)
diff --git a/modules/video_output/xcb/window.c b/modules/video_output/xcb/window.c
index f808926eea..791d1fbc09 100644
--- a/modules/video_output/xcb/window.c
+++ b/modules/video_output/xcb/window.c
@@ -423,30 +423,15 @@ static void Resize(vout_window_t *wnd, unsigned width, unsigned height)
xcb_flush(conn);
}
-static int Control (vout_window_t *wnd, int cmd, va_list ap)
+static void SetState(vout_window_t *wnd, unsigned state)
{
- vout_window_sys_t *p_sys = wnd->sys;
- xcb_connection_t *conn = p_sys->conn;
-
- switch (cmd)
- {
- case VOUT_WINDOW_SET_STATE:
- {
- unsigned state = va_arg (ap, unsigned);
- bool above = (state & VOUT_WINDOW_STATE_ABOVE) != 0;
- bool below = (state & VOUT_WINDOW_STATE_BELOW) != 0;
-
- change_wm_state (wnd, above, p_sys->wm_state_above);
- change_wm_state (wnd, below, p_sys->wm_state_below);
- break;
- }
+ vout_window_sys_t *sys = wnd->sys;
+ bool above = (state & VOUT_WINDOW_STATE_ABOVE) != 0;
+ bool below = (state & VOUT_WINDOW_STATE_BELOW) != 0;
- default:
- msg_Err (wnd, "request %d not implemented", cmd);
- return VLC_EGENERIC;
- }
- xcb_flush (p_sys->conn);
- return VLC_SUCCESS;
+ change_wm_state(wnd, above, sys->wm_state_above);
+ change_wm_state(wnd, below, sys->wm_state_below);
+ xcb_flush(sys->conn);
}
static void UnsetFullscreen(vout_window_t *wnd)
@@ -573,8 +558,8 @@ static const struct vout_window_operations ops = {
.resize = Resize,
.set_fullscreen = SetFullscreen,
.unset_fullscreen = UnsetFullscreen,
- .control = Control,
.destroy = Close,
+ .set_state = SetState,
};
/**
@@ -835,7 +820,6 @@ static void ReleaseDrawable (vlc_object_t *obj, xcb_window_t window)
static void EmClose(vout_window_t *);
static const struct vout_window_operations em_ops = {
- .control = Control,
.destroy = EmClose,
};
More information about the vlc-commits
mailing list