[vlc-devel] commit: LibVLC: add functions to control mouse and keyboard events ( Rémi Denis-Courmont )
git version control
git at videolan.org
Thu Oct 29 22:14:54 CET 2009
vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Thu Oct 29 23:14:31 2009 +0200| [796258abd0be40aa23941593673e0e6599c3e0cb] | committer: Rémi Denis-Courmont
LibVLC: add functions to control mouse and keyboard events
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=796258abd0be40aa23941593673e0e6599c3e0cb
---
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(+), 0 deletions(-)
diff --git a/include/vlc/libvlc_media_player.h b/include/vlc/libvlc_media_player.h
index 3727ac8..07a18af 100644
--- a/include/vlc/libvlc_media_player.h
+++ b/include/vlc/libvlc_media_player.h
@@ -537,6 +537,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.
*
* \param p_mediaplayer the media player
diff --git a/src/control/media_player.c b/src/control/media_player.c
index 6a14377..2fd1164 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 4bc73fd..efdd95c 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 11b3fdf..8fd03c7 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 d59a02b..fa316d0 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
More information about the vlc-devel
mailing list