]> git.sesse.net Git - vlc/commitdiff
Forward port of revision 12566: Ignore menu select|right|left|up|down when OSD Menu...
authorJean-Paul Saman <jpsaman@videolan.org>
Sun, 18 Sep 2005 10:03:10 +0000 (10:03 +0000)
committerJean-Paul Saman <jpsaman@videolan.org>
Sun, 18 Sep 2005 10:03:10 +0000 (10:03 +0000)
include/vlc_osd.h
src/osd/osd.c

index bf47c87f2f4ea2ebc371dd920215ae83c84152b2..5f8bb0274109377d73ca1beb39a75a26923eb524 100644 (file)
@@ -402,7 +402,7 @@ static inline void osd_SetMenuVisible( osd_menu_t *p_osd, vlc_bool_t b_value )
 static inline void osd_SetMenuUpdate( osd_menu_t *p_osd, vlc_bool_t b_value )\r
 {\r
     vlc_value_t val;\r
-    \r
+\r
     val.b_bool = p_osd->p_state->b_update = b_value;\r
     var_Set( p_osd, "osd-menu-update", val );\r
 } \r
index 36a7f4cfc8f1ef481036c6b15dd1e761595ced06..df475e0634582c8b15da9413224bc5bd676241cd 100644 (file)
 static void osd_UpdateState( osd_menu_state_t *, int, int, int, int, picture_t * );\r
 static inline osd_state_t *osd_VolumeStateChange( osd_state_t *, int );\r
 static int osd_VolumeStep( vlc_object_t *, int, int );\r
+static vlc_bool_t osd_isVisible( osd_menu_t *p_osd );\r
+\r
+static vlc_bool_t osd_isVisible( osd_menu_t *p_osd )\r
+{\r
+    vlc_value_t val;\r
+\r
+    var_Get( p_osd, "osd-menu-visible", &val );\r
+    return val.b_bool;\r
+}\r
 \r
 /*****************************************************************************\r
  * OSD menu Funtions\r
@@ -256,16 +265,22 @@ void __osd_MenuActivate( vlc_object_t *p_this )
     osd_menu_t *p_osd = NULL;\r
     osd_button_t *p_button = NULL;\r
     vlc_value_t lockval;\r
-    \r
+\r
     if( ( p_osd = vlc_object_find( p_this, VLC_OBJECT_OSDMENU, FIND_ANYWHERE ) ) == NULL )\r
     {\r
         msg_Err( p_this, "osd_MenuNext failed" );\r
         return;\r
     }\r
-    \r
+\r
+    if( osd_isVisible( p_osd ) == VLC_FALSE )\r
+    {\r
+        vlc_object_release( (vlc_object_t*) p_osd );\r
+        return;\r
+    }\r
+\r
     var_Get( p_this->p_libvlc, "osd_mutex", &lockval );\r
     vlc_mutex_lock( lockval.p_address );\r
-    \r
+\r
 #if defined(OSD_MENU_DEBUG)\r
     msg_Dbg( p_osd, "select" );\r
 #endif\r
@@ -279,9 +294,9 @@ void __osd_MenuActivate( vlc_object_t *p_this )
         vlc_mutex_unlock( lockval.p_address );\r
         __osd_MenuUp( p_this );   /* "menu select" means go to menu item above. */\r
         return;\r
-    }    \r
+    }\r
     if( p_button && p_button->p_down)\r
-    {    \r
+    {\r
         vlc_object_release( (vlc_object_t*) p_osd );\r
         vlc_mutex_unlock( lockval.p_address );\r
         __osd_MenuDown( p_this ); /* "menu select" means go to menu item below. */\r
@@ -304,24 +319,30 @@ void __osd_MenuActivate( vlc_object_t *p_this )
 #endif\r
     }\r
     vlc_object_release( (vlc_object_t*) p_osd );\r
-    vlc_mutex_unlock( lockval.p_address );            \r
-}           \r
+    vlc_mutex_unlock( lockval.p_address );\r
+}\r
 \r
 void __osd_MenuNext( vlc_object_t *p_this )\r
 {\r
     osd_menu_t *p_osd = NULL;\r
     osd_button_t *p_button = NULL;\r
     vlc_value_t lockval;\r
-    \r
+\r
     if( ( p_osd = vlc_object_find( p_this, VLC_OBJECT_OSDMENU, FIND_ANYWHERE ) ) == NULL )\r
     {\r
         msg_Err( p_this, "osd_MenuNext failed" );\r
         return;\r
     }\r
-            \r
+\r
+    if( osd_isVisible( p_osd ) == VLC_FALSE )\r
+    {\r
+        vlc_object_release( (vlc_object_t*) p_osd );\r
+        return;\r
+    }\r
+\r
     var_Get( p_this->p_libvlc, "osd_mutex", &lockval );\r
     vlc_mutex_lock( lockval.p_address );\r
-    \r
+\r
     p_button = p_osd->p_state->p_visible;\r
     if( p_button )\r
     {\r
@@ -331,11 +352,11 @@ void __osd_MenuNext( vlc_object_t *p_this )
             p_osd->p_state->p_visible = p_button->p_next;\r
         else\r
             p_osd->p_state->p_visible = p_osd->p_button;\r
-            \r
+\r
         if( !p_osd->p_state->p_visible->b_range ) \r
             p_osd->p_state->p_visible->p_current_state =\r
                 osd_StateChange( p_osd->p_state->p_visible->p_states, OSD_BUTTON_SELECT );\r
-        \r
+\r
         osd_UpdateState( p_osd->p_state, \r
                 p_osd->p_state->p_visible->i_x, p_osd->p_state->p_visible->i_y,\r
                 p_osd->p_state->p_visible->p_current_state->p_pic->p[Y_PLANE].i_visible_pitch,\r
@@ -344,9 +365,9 @@ void __osd_MenuNext( vlc_object_t *p_this )
         osd_SetMenuUpdate( p_osd, VLC_TRUE );\r
     }\r
 #if defined(OSD_MENU_DEBUG)\r
-    msg_Dbg( p_osd, "direction right [button %s]", p_osd->p_state->p_visible->psz_action );            \r
+    msg_Dbg( p_osd, "direction right [button %s]", p_osd->p_state->p_visible->psz_action );\r
 #endif\r
-    \r
+\r
     vlc_object_release( (vlc_object_t*) p_osd );\r
     vlc_mutex_unlock( lockval.p_address );\r
 }\r
@@ -356,30 +377,36 @@ void __osd_MenuPrev( vlc_object_t *p_this )
     osd_menu_t *p_osd = NULL;\r
     osd_button_t *p_button = NULL;\r
     vlc_value_t lockval;\r
-    \r
+\r
     if( ( p_osd = vlc_object_find( p_this, VLC_OBJECT_OSDMENU, FIND_ANYWHERE ) ) == NULL )\r
     {\r
         msg_Err( p_this, "osd_MenuPrev failed" );\r
         return;\r
     }\r
 \r
+    if( osd_isVisible( p_osd ) == VLC_FALSE )\r
+    {\r
+        vlc_object_release( (vlc_object_t*) p_osd );\r
+        return;\r
+    }\r
+\r
     var_Get( p_this->p_libvlc, "osd_mutex", &lockval );\r
     vlc_mutex_lock( lockval.p_address );\r
-    \r
+\r
     p_button = p_osd->p_state->p_visible;\r
     if( p_button )\r
-    {                    \r
+    {\r
         if( !p_button->b_range ) \r
             p_button->p_current_state = osd_StateChange( p_button->p_states, OSD_BUTTON_UNSELECT );\r
         if( p_button->p_prev )\r
             p_osd->p_state->p_visible = p_button->p_prev;\r
         else\r
-            p_osd->p_state->p_visible = p_osd->p_last_button;                \r
-        \r
+            p_osd->p_state->p_visible = p_osd->p_last_button;\r
+\r
         if( !p_osd->p_state->p_visible->b_range ) \r
             p_osd->p_state->p_visible->p_current_state =\r
                 osd_StateChange( p_osd->p_state->p_visible->p_states, OSD_BUTTON_SELECT );\r
-        \r
+\r
         osd_UpdateState( p_osd->p_state, \r
                 p_osd->p_state->p_visible->i_x, p_osd->p_state->p_visible->i_y,\r
                 p_osd->p_state->p_visible->p_current_state->p_pic->p[Y_PLANE].i_visible_pitch,\r
@@ -388,9 +415,9 @@ void __osd_MenuPrev( vlc_object_t *p_this )
         osd_SetMenuUpdate( p_osd, VLC_TRUE );\r
     }\r
 #if defined(OSD_MENU_DEBUG)\r
-    msg_Dbg( p_osd, "direction left [button %s]", p_osd->p_state->p_visible->psz_action );            \r
+    msg_Dbg( p_osd, "direction left [button %s]", p_osd->p_state->p_visible->psz_action );\r
 #endif\r
-            \r
+\r
     vlc_object_release( (vlc_object_t*) p_osd );\r
     vlc_mutex_unlock( lockval.p_address );\r
 }\r
@@ -400,16 +427,22 @@ void __osd_MenuUp( vlc_object_t *p_this )
     osd_menu_t *p_osd = NULL;\r
     osd_button_t *p_button = NULL;\r
     vlc_value_t lockval;\r
-#if defined(OSD_MENU_DEBUG)    \r
+#if defined(OSD_MENU_DEBUG)\r
     vlc_value_t val;\r
 #endif\r
-        \r
+\r
     if( ( p_osd = vlc_object_find( p_this, VLC_OBJECT_OSDMENU, FIND_ANYWHERE ) ) == NULL )\r
     {\r
         msg_Err( p_this, "osd_MenuDown failed" );\r
         return;\r
     }\r
-            \r
+\r
+    if( osd_isVisible( p_osd ) == VLC_FALSE )\r
+    {\r
+        vlc_object_release( (vlc_object_t*) p_osd );\r
+        return;\r
+    }\r
+\r
     var_Get( p_this->p_libvlc, "osd_mutex", &lockval );\r
     vlc_mutex_lock( lockval.p_address );\r
 \r
@@ -420,21 +453,21 @@ void __osd_MenuUp( vlc_object_t *p_this )
         {\r
             p_button->p_current_state = osd_StateChange( p_button->p_states, OSD_BUTTON_SELECT );\r
             if( p_button->p_up )\r
-                p_osd->p_state->p_visible = p_button->p_up;                    \r
+                p_osd->p_state->p_visible = p_button->p_up;\r
         }\r
-        \r
+\r
         if( p_button->b_range && p_osd->p_state->p_visible->b_range ) \r
-        {                    \r
+        {\r
             osd_state_t *p_temp = p_osd->p_state->p_visible->p_current_state;\r
             if( p_temp && p_temp->p_next )\r
                 p_osd->p_state->p_visible->p_current_state = p_temp->p_next;\r
         }\r
         else if( !p_osd->p_state->p_visible->b_range )\r
-        {    \r
+        {\r
             p_osd->p_state->p_visible->p_current_state =\r
                 osd_StateChange( p_osd->p_state->p_visible->p_states, OSD_BUTTON_SELECT );\r
-        } \r
-        \r
+        }\r
+\r
         osd_UpdateState( p_osd->p_state, \r
                 p_osd->p_state->p_visible->i_x, p_osd->p_state->p_visible->i_y,\r
                 p_osd->p_state->p_visible->p_current_state->p_pic->p[Y_PLANE].i_visible_pitch,\r
@@ -453,9 +486,9 @@ void __osd_MenuUp( vlc_object_t *p_this )
         }\r
     }\r
 #if defined(OSD_MENU_DEBUG)\r
-    msg_Dbg( p_osd, "direction up [button %s]", p_osd->p_state->p_visible->psz_action );            \r
-#endif            \r
-    \r
+    msg_Dbg( p_osd, "direction up [button %s]", p_osd->p_state->p_visible->psz_action );\r
+#endif\r
+\r
     vlc_object_release( (vlc_object_t*) p_osd );\r
     vlc_mutex_unlock( lockval.p_address );\r
 }\r
@@ -474,7 +507,13 @@ void __osd_MenuDown( vlc_object_t *p_this )
         msg_Err( p_this, "osd_MenuDown failed" );\r
         return;\r
     }\r
-    \r
+\r
+    if( osd_isVisible( p_osd ) == VLC_FALSE )\r
+    {\r
+        vlc_object_release( (vlc_object_t*) p_osd );\r
+        return;\r
+    }\r
+\r
     var_Get( p_this->p_libvlc, "osd_mutex", &lockval );\r
     vlc_mutex_lock( lockval.p_address );\r
     \r