Commit 796258ab authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont

LibVLC: add functions to control mouse and keyboard events

parent 15dd4e11
......@@ -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.
*
......
......@@ -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 );
......
......@@ -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 */
......
......@@ -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 )
......
......@@ -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
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment