[vlc-devel] [3.0 PATCH] input: display OSD from NAV controls

Thomas Guillem thomas at gllm.fr
Thu Apr 5 08:19:05 CEST 2018


Sorry in advance for this ugly hack. I didn't had the time to merge the code of
the hotkeys module as planned for 3.0. This will be done in 4.0 into the new
input manager.

In the meantime, it's quite important to have UI feedback when seeking/jumping
from the arrow keys. Indeed, users won't understand why the OSD is showing when
pressing Ctrl + arrow keys and not when pressing arrow keys alone.

This hacks use the vlc_object_find_name() (that should be removed for 4.0) to
detect if the "hotkeys" module is running and forward the commands to this
module that will show the OSD.

Why not calling OSD functions directly from input.c ? Because we need to use
the same SPU chan for sliders (otherwise, you can end up showing 2 overlapping
sliders).
---
 src/input/input.c  | 18 ++++++++++++++++++
 src/misc/objects.c |  4 ++--
 2 files changed, 20 insertions(+), 2 deletions(-)

diff --git a/src/input/input.c b/src/input/input.c
index f4d49b809f..ddf62746ff 100644
--- a/src/input/input.c
+++ b/src/input/input.c
@@ -45,6 +45,7 @@
 #include "stream.h"
 
 #include <vlc_aout.h>
+#include <vlc_actions.h>
 #include <vlc_sout.h>
 #include <vlc_dialog.h>
 #include <vlc_url.h>
@@ -1774,6 +1775,23 @@ static void ControlNav( input_thread_t *p_input, int i_type )
         return;
     }
 
+    /* HACK: use hotkeys module directly  since it can handle OSD.
+     * TODO: merge hotkeys module in future input manager. */
+    vlc_object_t *p_obj = vlc_object_find_name( p_input->obj.libvlc, "hotkeys" );
+    if( p_obj )
+    {
+        if( seek_direction != 0 )
+            var_SetInteger( p_input->obj.libvlc, "key-action",
+                            seek_direction == 1 ? ACTIONID_JUMP_FORWARD_SHORT
+                                                : ACTIONID_JUMP_BACKWARD_SHORT );
+        else
+            var_SetInteger( p_input->obj.libvlc, "key-action",
+                            vol_direction == 1 ? ACTIONID_VOL_UP
+                                               : ACTIONID_VOL_DOWN );
+        vlc_object_release( p_obj );
+        return;
+    } /* else, no hotkeys module: send command directly */
+
     /* Seek or change volume if the input doesn't have navigation or viewpoint */
     if( seek_direction != 0 )
     {
diff --git a/src/misc/objects.c b/src/misc/objects.c
index d1ea869410..aee3356454 100644
--- a/src/misc/objects.c
+++ b/src/misc/objects.c
@@ -388,8 +388,8 @@ vlc_object_t *vlc_object_find_name( vlc_object_t *p_this, const char *psz_name )
     /* This was officially deprecated on August 19 2009. For the convenience of
      * wannabe code janitors, this is the list of names that remain used
      * and unfixed since then. */
-    static const char bad[][5] = { "v4l2", "zvbi" };
-    if( bsearch( psz_name, bad, 2, 5, (void *)strcmp ) == NULL )
+    static const char bad[][8] = { "hotkeys", "v4l2", "zvbi" };
+    if( bsearch( psz_name, bad, 3, 8, (void *)strcmp ) == NULL )
         return NULL;
     msg_Err( p_this, "looking for object \"%s\"... FIXME XXX", psz_name );
 #endif
-- 
2.11.0



More information about the vlc-devel mailing list