[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