]> git.sesse.net Git - vlc/blobdiff - plugins/gtk/gtk_menu.c
* Fixed a total breakage of decoder plugins introduced by fast_memcpy.
[vlc] / plugins / gtk / gtk_menu.c
index 138cd6c90ecea58f8610207e76abc65d1c52b2ca..a4cf5463f4ebaabace5e14b3a67e9c5757e3ca03 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.3 2001/05/19 00:39:30 stef Exp $
+ * $Id: gtk_menu.c,v 1.16 2001/12/07 18:33:07 sam Exp $
  *
  * Authors: Samuel Hocevar <sam@zoy.org>
  *          Stéphane Borel <stef@via.ecp.fr>
@@ -22,9 +22,6 @@
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
  *****************************************************************************/
 
-#define MODULE_NAME gtk
-#include "modules_inner.h"
-
 /*****************************************************************************
  * Preamble
  *****************************************************************************/
 #include <sys/types.h>                                              /* off_t */
 #include <stdlib.h>
 
-#include <gtk/gtk.h>
+#define gtk 12
+#define gnome 42
+#if ( MODULE_NAME == gtk )
+#   include <gtk/gtk.h>
+#elif ( MODULE_NAME == gnome )
+#   include <gnome.h>
+#endif
+#undef gtk
+#undef gnome
 
 #include <string.h>
 
-#include "config.h"
 #include "common.h"
+#include "intf_msg.h"
 #include "threads.h"
 #include "mtime.h"
 
@@ -46,7 +51,6 @@
 
 #include "interface.h"
 #include "intf_playlist.h"
-#include "intf_msg.h"
 
 #include "video.h"
 #include "video_output.h"
@@ -58,7 +62,7 @@
 #include "gtk_playlist.h"
 #include "intf_gtk.h"
 
-#include "main.h"
+#include "modules_export.h"
 
 /*
  * Local Prototypes
@@ -87,7 +91,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;                                       \
@@ -97,7 +101,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 );      \
@@ -118,13 +122,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 );
 }
 
@@ -134,17 +138,17 @@ 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 );
 }
 
-#undef GtkLangToggle
+#undef GTKLANGTOGGLE
 
 /*
  * Navigation
@@ -177,7 +181,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 );
     }
@@ -193,12 +199,14 @@ void GtkMenubarTitleToggle( GtkCheckMenuItem * menuitem, gpointer user_data )
 
     if( menuitem->active && !p_intf->p_sys->b_title_update )
     {
-        gint i_title = (gint)user_data;
+        gint i_title = (gint)((long)user_data);
         input_ChangeArea( p_intf->p_input,
                           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 );
@@ -220,7 +228,7 @@ void GtkMenubarChapterToggle( GtkCheckMenuItem * menuitem, gpointer user_data )
 
     p_intf    = GetIntf( GTK_WIDGET(menuitem), "intf_window" );
     p_area    = p_intf->p_input->stream.p_selected_area;
-    i_chapter = (gint)user_data;
+    i_chapter = (gint)((long)user_data);
 
     if( menuitem->active && !p_intf->p_sys->b_chapter_update )
     {
@@ -250,7 +258,7 @@ void GtkMenubarChapterToggle( GtkCheckMenuItem * menuitem, gpointer user_data )
  * Angle
  */
 
-#define GtkAngleToggle( intf, window, menu, callback )                      \
+#define GTKANGLETOGGLE( intf, window, menu, callback )                      \
     intf_thread_t * p_intf;                                                 \
     GtkWidget *     p_menu;                                                 \
     input_area_t *  p_area;                                                 \
@@ -262,7 +270,7 @@ void GtkMenubarChapterToggle( GtkCheckMenuItem * menuitem, gpointer user_data )
         p_menu    = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT(            \
                                 p_intf->p_sys->window ), (menu) ) );        \
         p_area    = p_intf->p_input->stream.p_selected_area;                \
-        p_area->i_angle = (gint)user_data;                                  \
+        p_area->i_angle = (gint)((long)user_data);                          \
                                                                             \
         input_ChangeArea( p_intf->p_input, (input_area_t*)p_area );         \
                                                                             \
@@ -276,17 +284,17 @@ void GtkMenubarChapterToggle( GtkCheckMenuItem * menuitem, gpointer user_data )
 
 void GtkMenubarAngleToggle( GtkCheckMenuItem * menuitem, gpointer user_data )
 {
-    GtkAngleToggle( "intf_window", p_popup, "popup_angle",
+    GTKANGLETOGGLE( "intf_window", p_popup, "popup_angle",
                     GtkPopupAngleToggle );
 }
 
 void GtkPopupAngleToggle( GtkCheckMenuItem * menuitem, gpointer user_data )
 {
-    GtkAngleToggle( "intf_popup", p_window, "menubar_angle",
+    GTKANGLETOGGLE( "intf_popup", p_window, "menubar_angle",
                     GtkMenubarAngleToggle );
 }
 
-#undef GtkAngleToggle
+#undef GTKANGLETOGGLE
 
 /****************************************************************************
  * Functions to generate menus
@@ -368,7 +376,7 @@ static gint GtkRadioMenu( intf_thread_t * p_intf,
         gtk_signal_connect( GTK_OBJECT( p_item ),
                             "toggled",
                             GTK_SIGNAL_FUNC( pf_toggle ),
-                            (gpointer)(i_item + 1) );
+                            (gpointer)((long)(i_item + 1)) );
 
         if( i_nb > 20 )
         {
@@ -792,7 +800,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 )
     { 
@@ -829,6 +837,7 @@ gint GtkSetupMenus( intf_thread_t * p_intf )
 
         p_menubar_menu = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT( 
                              p_intf->p_sys->p_window ), "menubar_chapter" ) );
+
         GtkRadioMenu( p_intf, p_menubar_menu, NULL, "Chapter",
                         p_intf->p_input->stream.p_selected_area->i_part_nb,
                         p_intf->p_input->stream.p_selected_area->i_part,
@@ -924,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;
 }