From 796258abd0be40aa23941593673e0e6599c3e0cb Mon Sep 17 00:00:00 2001 From: =?utf8?q?R=C3=A9mi=20Denis-Courmont?= Date: Thu, 29 Oct 2009 23:14:31 +0200 Subject: [PATCH] LibVLC: add functions to control mouse and keyboard events --- include/vlc/libvlc_media_player.h | 33 +++++++++++++++++++++++++++++ src/control/media_player.c | 6 ++++++ src/control/media_player_internal.h | 2 ++ src/control/video.c | 10 +++++++++ src/libvlc.sym | 2 ++ 5 files changed, 53 insertions(+) diff --git a/include/vlc/libvlc_media_player.h b/include/vlc/libvlc_media_player.h index 3727ac8ce4..07a18afbb0 100644 --- a/include/vlc/libvlc_media_player.h +++ b/include/vlc/libvlc_media_player.h @@ -536,6 +536,39 @@ VLC_PUBLIC_API void libvlc_set_fullscreen( libvlc_media_player_t *, int, libvlc_ */ VLC_PUBLIC_API int libvlc_get_fullscreen( libvlc_media_player_t *, libvlc_exception_t * ); +/** + * Enable or disable key press events handling, according to the LibVLC hotkeys + * configuration. By default and for historical reasons, keyboard events are + * handled by the LibVLC video widget. + * + * \note On X11, there can be only one subscriber for key press and mouse + * click events per window. If your application has subscribed to those events + * for the X window ID of the video widget, then LibVLC will not be able to + * handle key presses and mouse clicks in any case. + * + * \warning This function is only implemented for X11 at the moment. + * + * \param mp the media player + * \param on true to handle key press events, false to ignore them. + */ +VLC_PUBLIC_API +void libvlc_video_set_key_input( libvlc_media_player_t *mp, unsigned on ); + +/** + * Enable or disable mouse click events handling. By default, those events are + * handled. This is needed for DVD menus to work, as well as a few video + * filters such as "puzzle". + * + * \note See also \func libvlc_video_set_key_input(). + * + * \warning This function is only implemented for X11 at the moment. + * + * \param mp the media player + * \param on true to handle mouse click events, false to ignore them. + */ +VLC_PUBLIC_API +void libvlc_video_set_mouse_input( libvlc_media_player_t *mp, unsigned on ); + /** * Get current video height. * diff --git a/src/control/media_player.c b/src/control/media_player.c index 6a14377609..2fd1164ebd 100644 --- a/src/control/media_player.c +++ b/src/control/media_player.c @@ -336,6 +336,7 @@ libvlc_media_player_new( libvlc_instance_t *instance, libvlc_exception_t *e ) mp->drawable.xid = 0; mp->drawable.hwnd = NULL; mp->drawable.nsobject = NULL; + mp->keyboard_events = mp->mouse_events = 1; mp->p_libvlc_instance = instance; mp->p_input_thread = NULL; mp->p_input_resource = NULL; @@ -596,6 +597,11 @@ void libvlc_media_player_play( libvlc_media_player_t *p_mi, if( p_mi->drawable.nsobject != NULL ) var_SetAddress( p_input_thread, "drawable-nsobject", p_mi->drawable.nsobject ); + var_Create( p_input_thread, "keyboard-events", VLC_VAR_BOOL ); + var_SetBool( p_input_thread, "keyboard-events", p_mi->keyboard_events ); + var_Create( p_input_thread, "mouse-events", VLC_VAR_BOOL ); + var_SetBool( p_input_thread, "mouse-events", p_mi->mouse_events ); + var_AddCallback( p_input_thread, "can-seek", input_seekable_changed, p_mi ); var_AddCallback( p_input_thread, "can-pause", input_pausable_changed, p_mi ); var_AddCallback( p_input_thread, "intf-event", input_event_changed, p_mi ); diff --git a/src/control/media_player_internal.h b/src/control/media_player_internal.h index 4bc73fda32..efdd95c282 100644 --- a/src/control/media_player_internal.h +++ b/src/control/media_player_internal.h @@ -50,6 +50,8 @@ struct libvlc_media_player_t uint32_t xid; uint32_t agl; } drawable; + unsigned keyboard_events:1; + unsigned mouse_events:1; }; /* Media player - audio, video */ diff --git a/src/control/video.c b/src/control/video.c index 11b3fdf968..8fd03c7a87 100644 --- a/src/control/video.c +++ b/src/control/video.c @@ -112,6 +112,16 @@ void libvlc_toggle_fullscreen( libvlc_media_player_t *p_mi, vlc_object_release( p_vout ); } +void libvlc_video_set_key_input( libvlc_media_player_t *p_mi, unsigned on ) +{ + p_mi->keyboard_events = !!on; +} + +void libvlc_video_set_mouse_input( libvlc_media_player_t *p_mi, unsigned on ) +{ + p_mi->mouse_events = !!on; +} + void libvlc_video_take_snapshot( libvlc_media_player_t *p_mi, const char *psz_filepath, unsigned int i_width, unsigned int i_height, libvlc_exception_t *p_e ) diff --git a/src/libvlc.sym b/src/libvlc.sym index d59a02ba7a..fa316d007f 100644 --- a/src/libvlc.sym +++ b/src/libvlc.sym @@ -200,6 +200,8 @@ libvlc_video_set_crop_geometry libvlc_video_set_deinterlace libvlc_video_set_marquee_option_as_int libvlc_video_set_marquee_option_as_string +libvlc_video_set_key_input +libvlc_video_set_mouse_input libvlc_video_set_scale libvlc_video_set_spu libvlc_video_set_subtitle_file -- 2.39.2