]> git.sesse.net Git - vlc/commitdiff
LibVLC: add functions to control mouse and keyboard events
authorRémi Denis-Courmont <remi@remlab.net>
Thu, 29 Oct 2009 21:14:31 +0000 (23:14 +0200)
committerRémi Denis-Courmont <remi@remlab.net>
Thu, 29 Oct 2009 21:14:48 +0000 (23:14 +0200)
include/vlc/libvlc_media_player.h
src/control/media_player.c
src/control/media_player_internal.h
src/control/video.c
src/libvlc.sym

index 3727ac8ce4d473f240ceb6805c1e65c0ae1aaf4b..07a18afbb05d927b00f598d9a6402e38fd3b1ee9 100644 (file)
@@ -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.
  *
index 6a14377609a53ee9937ab07b5a71ba97ae56a8b4..2fd1164ebd0488dea1c208ac5b2ca659abb8c3f4 100644 (file)
@@ -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 );
index 4bc73fda322959adc90c9e752bf1b11d7441cf00..efdd95c282b373b15380c9f2737204c8958f79f0 100644 (file)
@@ -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 */
index 11b3fdf96818cdaa9ca2dd212cd17172093d6a1f..8fd03c7a876886e2274d42c49247bbf291734e59 100644 (file)
@@ -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 )
index d59a02ba7a1583610574e534ca7d2829692f9cf5..fa316d007f7385ea60abf19c4eb48d256c116f82 100644 (file)
@@ -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