]> git.sesse.net Git - vlc/blobdiff - plugins/gtk/gtk_menu.c
* DirectX plugin by Gildas Bazin <gbazin@netcourrier.com>.
[vlc] / plugins / gtk / gtk_menu.c
index 18a3271e348efd3598363b87bbb41ef8923848b6..cefa5e44860d54e594cd1869e9263e5bf8150622 100644 (file)
@@ -2,7 +2,7 @@
  * gtk_menu.c : functions to handle menu items.
  *****************************************************************************
  * Copyright (C) 2000, 2001 VideoLAN
- * $Id: gtk_menu.c,v 1.4 2001/05/23 23:08:20 stef Exp $
+ * $Id: gtk_menu.c,v 1.9 2001/06/02 01:09:03 sam Exp $
  *
  * Authors: Samuel Hocevar <sam@zoy.org>
  *          Stéphane Borel <stef@via.ecp.fr>
 
 #include "main.h"
 
+#include "modules_export.h"
+
+#ifdef WIN32
+#ifndef snprintf
+#define snprintf _snprintf
+#endif
+#endif
+
 /*
  * Local Prototypes
  */
@@ -84,7 +92,7 @@ gint GtkSetupMenus( intf_thread_t * p_intf );
  * user_data to transmit intf_* and we need to refresh the other menu.
  ****************************************************************************/
 
-#define GtkLangToggle( intf, menu, type, callback, b_update )           \
+#define GtkLangToggle( intf, window, menu, type, callback, b_update )   \
     intf_thread_t *         p_intf;                                     \
     GtkWidget *             p_menu;                                     \
     es_descriptor_t *       p_es;                                       \
@@ -94,7 +102,7 @@ gint GtkSetupMenus( intf_thread_t * p_intf );
     if( !p_intf->p_sys->b_update )                                      \
     {                                                                   \
         p_menu = GTK_WIDGET( gtk_object_get_data(                       \
-                   GTK_OBJECT( p_intf->p_sys->p_popup ), (menu) ) );    \
+                   GTK_OBJECT( p_intf->p_sys->window ), (menu) ) );     \
         p_es = (es_descriptor_t*)user_data;                             \
                                                                         \
         input_ToggleES( p_intf->p_input, p_es, menuitem->active );      \
@@ -115,13 +123,13 @@ gint GtkSetupMenus( intf_thread_t * p_intf );
 
 void GtkMenubarAudioToggle( GtkCheckMenuItem * menuitem, gpointer user_data )
 {
-    GtkLangToggle( "intf_window", "popup_audio", AUDIO_ES,
+    GtkLangToggle( "intf_window", p_popup, "popup_audio", AUDIO_ES,
                    GtkPopupAudioToggle, b_audio_update );
 }
 
 void GtkPopupAudioToggle( GtkCheckMenuItem * menuitem, gpointer user_data )
 {
-    GtkLangToggle( "intf_popup", "menubar_audio", AUDIO_ES,
+    GtkLangToggle( "intf_popup", p_window, "menubar_audio", AUDIO_ES,
                    GtkMenubarAudioToggle, b_audio_update );
 }
 
@@ -131,13 +139,13 @@ void GtkPopupAudioToggle( GtkCheckMenuItem * menuitem, gpointer user_data )
 
 void GtkMenubarSubtitleToggle( GtkCheckMenuItem * menuitem, gpointer user_data )
 {
-    GtkLangToggle( "intf_window", "popup_subpictures", SPU_ES,
+    GtkLangToggle( "intf_window", p_popup, "popup_subpictures", SPU_ES,
                    GtkPopupSubtitleToggle, b_spu_update );
 }
 
 void GtkPopupSubtitleToggle( GtkCheckMenuItem * menuitem, gpointer user_data )
 {
-    GtkLangToggle( "intf_popup", "menubar_subpictures", SPU_ES,
+    GtkLangToggle( "intf_popup", p_window, "menubar_subpictures", SPU_ES,
                    GtkMenubarSubtitleToggle, b_spu_update );
 }
 
@@ -174,7 +182,9 @@ void GtkPopupNavigationToggle( GtkCheckMenuItem * menuitem,
         input_ChangeArea( p_intf->p_input, (input_area_t*)p_area );
 
         p_intf->p_sys->b_chapter_update = 1;
+        vlc_mutex_lock( &p_intf->p_input->stream.stream_lock );
         GtkSetupMenus( p_intf );
+        vlc_mutex_unlock( &p_intf->p_input->stream.stream_lock );
 
         input_SetStatus( p_intf->p_input, INPUT_STATUS_PLAY );
     }
@@ -195,7 +205,9 @@ void GtkMenubarTitleToggle( GtkCheckMenuItem * menuitem, gpointer user_data )
                           p_intf->p_input->stream.pp_areas[i_title] );
 
         p_intf->p_sys->b_title_update = 1;
+        vlc_mutex_lock( &p_intf->p_input->stream.stream_lock );
         GtkSetupMenus( p_intf );
+        vlc_mutex_unlock( &p_intf->p_input->stream.stream_lock );
         p_intf->p_sys->b_title_update = 0;
 
         input_SetStatus( p_intf->p_input, INPUT_STATUS_PLAY );
@@ -789,7 +801,7 @@ gint GtkSetupMenus( intf_thread_t * p_intf )
     p_intf->p_sys->b_audio_update |= p_intf->p_sys->b_title_update;
     p_intf->p_sys->b_spu_update |= p_intf->p_sys->b_title_update;
 
-    vlc_mutex_lock( &p_intf->p_input->stream.stream_lock );
+//    vlc_mutex_lock( &p_intf->p_input->stream.stream_lock );
 
     if( p_intf->p_sys->b_title_update )
     { 
@@ -921,6 +933,8 @@ gint GtkSetupMenus( intf_thread_t * p_intf )
         p_intf->p_sys->b_spu_update = 0;
     }
 
+    vlc_mutex_lock( &p_intf->p_input->stream.stream_lock );
+
     return TRUE;
 }