* src/misc/threads.c, src/misc/win32_specific.c, include/interface.h: fixed typos.
authorGildas Bazin <gbazin@videolan.org>
Fri, 4 Oct 2002 12:01:40 +0000 (12:01 +0000)
committerGildas Bazin <gbazin@videolan.org>
Fri, 4 Oct 2002 12:01:40 +0000 (12:01 +0000)
* configure.ac.in, modules/gui/gtk/gtk.c: Added a NEED_GTK_MAIN macro to the compiler
   flags for the gtk module. When this macro isn't defined, then the gtk module
   doesn't make use of the gtk_main module. I had to do this change because the
   gtk_main trick can't work on win32 and render the whole gtk interface unusable.

configure.ac.in
include/interface.h
modules/gui/gtk/gtk.c
src/misc/threads.c
src/misc/win32_specific.c

index fba00d7..727975e 100644 (file)
@@ -1724,7 +1724,9 @@ then
     if test "x${ac_cv_gtk_headers}" = "xyes"
     then
       PLUGINS="${PLUGINS} gtk"
-      NEED_GTK_MAIN=yes
+      if test "x${SYS}" != "xmingw32"; then
+        NEED_GTK_MAIN=yes
+      fi
       ALIASES="${ALIASES} gvlc"
     fi
     CPPFLAGS="${CPPFLAGS_save}"
@@ -2095,6 +2097,7 @@ dnl
 if test "x${NEED_GTK_MAIN}" != "xno"
 then
     PLUGINS="${PLUGINS} gtk_main"
+    CFLAGS_gtk = "${CFLAGS_gtk} -DNEED_GTK_MAIN"
     CFLAGS_gtk_main="${CFLAGS_gtk_main} ${CFLAGS_gtk} ${CFLAGS_familiar}"
     LDFLAGS_gtk_main="${LDFLAGS_gtk_main} ${LDFLAGS_gtk} ${LDFLAGS_familiar}"
 fi
index 64bfb90..ac2147b 100644 (file)
@@ -4,7 +4,7 @@
  * interface, such as message output.
  *****************************************************************************
  * Copyright (C) 1999, 2000 VideoLAN
- * $Id: interface.h,v 1.34 2002/10/03 17:01:59 gbazin Exp $
+ * $Id: interface.h,v 1.35 2002/10/04 12:01:40 gbazin Exp $
  *
  * Authors: Vincent Seguin <seguin@via.ecp.fr>
  *
@@ -64,15 +64,15 @@ VLC_EXPORT( void,              intf_Destroy,    ( intf_thread_t * ) );
  *****************************************************************************/
 #ifdef WIN32
 #    define CONSOLE_INTRO_MSG \
-                AllocConsole(); \
-                freopen( "CONOUT$", "w", stdout ); \
-                freopen( "CONOUT$", "w", stderr ); \
-                freopen( "CONIN$", "r", stdin ); \
-                intf_Msg( VERSION_MESSAGE ); \
-                intf_Msg( _("\nWarning: if you can't access the GUI anymore, "\
-                            "open a dos command box, go to the directory " \
-                            "where you installed VLC and run " \
-                            "\"vlc -I win32\"\n") )
+         AllocConsole(); \
+         freopen( "CONOUT$", "w", stdout ); \
+         freopen( "CONOUT$", "w", stderr ); \
+         freopen( "CONIN$", "r", stdin ); \
+         msg_Info( p_intf, VERSION_MESSAGE ); \
+         msg_Info( p_intf, _("\nWarning: if you can't access the GUI " \
+                             "anymore, open a dos command box, go to the " \
+                             "directory where you installed VLC and run " \
+                             "\"vlc -I win32\"\n") )
 #else
 #    define CONSOLE_INTRO_MSG
 #endif
index 8c8a27e..6104b2b 100644 (file)
@@ -2,7 +2,7 @@
  * gtk.c : Gtk+ plugin for vlc
  *****************************************************************************
  * Copyright (C) 2000-2001 VideoLAN
- * $Id: gtk.c,v 1.3 2002/09/30 11:05:39 sam Exp $
+ * $Id: gtk.c,v 1.4 2002/10/04 12:01:40 gbazin Exp $
  *
  * Authors: Samuel Hocevar <sam@zoy.org>
  *
@@ -49,7 +49,7 @@ static int  Open         ( vlc_object_t * );
 static void Close        ( vlc_object_t * );
 
 static void Run          ( intf_thread_t * );
-static void Manage       ( intf_thread_t * );
+static int  Manage       ( intf_thread_t * );
 
 /*****************************************************************************
  * Module descriptor
@@ -95,12 +95,14 @@ static int Open( vlc_object_t *p_this )
         return VLC_ENOMEM;
     }
 
+#ifdef NEED_GTK_MAIN
     p_intf->p_sys->p_gtk_main = module_Need( p_this, "gtk_main", "gtk" );
     if( p_intf->p_sys->p_gtk_main == NULL )
     {
         free( p_intf->p_sys );
         return VLC_EMODULE;
     }
+#endif
 
     p_intf->pf_run = Run;
 
@@ -135,7 +137,9 @@ static void Close( vlc_object_t *p_this )
 
     msg_Unsubscribe( p_intf, p_intf->p_sys->p_sub );
 
+#ifdef NEED_GTK_MAIN
     module_Unneed( p_intf, p_intf->p_sys->p_gtk_main );
+#endif
 
     /* Destroy structure */
     free( p_intf->p_sys );
@@ -157,7 +161,22 @@ static void Run( intf_thread_t *p_intf )
         { "text/plain", 0, DROP_ACCEPT_TEXT_PLAIN }
     };
 
+#ifdef NEED_GTK_MAIN
     gdk_threads_enter();
+#else
+    /* gtk_init needs to know the command line. We don't care, so we
+     * give it an empty one */
+    char  *p_args[] = { "" };
+    char **pp_args  = p_args;
+    int    i_args   = 1;
+    int    i_dummy;
+
+    /* gtk_init will register stuff with g_atexit, so we need to take
+     * the global lock if we want to be able to intercept the calls */
+    vlc_mutex_lock( &p_intf->p_libvlc->global_lock );
+    gtk_init( &i_args, &pp_args );
+    vlc_mutex_unlock( &p_intf->p_libvlc->global_lock );
+#endif
 
     /* Create some useful widgets that will certainly be used */
     p_intf->p_sys->p_window = create_intf_window();
@@ -239,6 +258,7 @@ static void Run( intf_thread_t *p_intf )
     /* Show the control window */
     gtk_widget_show( p_intf->p_sys->p_window );
 
+#ifdef NEED_GTK_MAIN
     while( !p_intf->b_die )
     {
         Manage( p_intf );
@@ -249,6 +269,16 @@ static void Run( intf_thread_t *p_intf )
         msleep( INTF_IDLE_SLEEP );
         gdk_threads_enter();
     }
+#else
+    /* Sleep to avoid using all CPU - since some interfaces needs to access
+     * keyboard events, a 100ms delay is a good compromise */
+    i_dummy = gtk_timeout_add( INTF_IDLE_SLEEP / 1000, (GtkFunction)Manage,
+                               p_intf );
+    /* Enter Gtk mode */
+    gtk_main();
+    /* Remove the timeout */
+    gtk_timeout_remove( i_dummy );
+#endif
 
     /* Destroy the Tooltips structure */
     gtk_object_destroy( GTK_OBJECT(p_intf->p_sys->p_tooltips) );
@@ -257,7 +287,9 @@ static void Run( intf_thread_t *p_intf )
     gtk_object_destroy( GTK_OBJECT(p_intf->p_sys->p_popup) );
     gtk_object_destroy( GTK_OBJECT(p_intf->p_sys->p_window) );
 
+#ifdef NEED_GTK_MAIN
     gdk_threads_leave();
+#endif
 }
 
 /* following functions are local */
@@ -268,7 +300,7 @@ static void Run( intf_thread_t *p_intf )
  * In this function, called approx. 10 times a second, we check what the
  * main program wanted to tell us.
  *****************************************************************************/
-static void Manage( intf_thread_t *p_intf )
+static int Manage( intf_thread_t *p_intf )
 {
     int i_start, i_stop;
 
@@ -414,5 +446,19 @@ static void Manage( intf_thread_t *p_intf )
         p_intf->p_sys->b_playing = 0;
     }
 
+#ifndef NEED_GTK_MAIN
+    if( p_intf->b_die )
+    {
+        vlc_mutex_unlock( &p_intf->change_lock );
+
+        /* Prepare to die, young Skywalker */
+        gtk_main_quit();
+
+        return FALSE;
+    }
+#endif
+
     vlc_mutex_unlock( &p_intf->change_lock );
+
+    return TRUE;
 }
index 3b4b5f5..019d5c2 100644 (file)
@@ -2,7 +2,7 @@
  * threads.c : threads implementation for the VideoLAN client
  *****************************************************************************
  * Copyright (C) 1999, 2000, 2001, 2002 VideoLAN
- * $Id: threads.c,v 1.19 2002/10/03 17:01:58 gbazin Exp $
+ * $Id: threads.c,v 1.20 2002/10/04 12:01:40 gbazin Exp $
  *
  * Authors: Jean-Marc Dressler <polux@via.ecp.fr>
  *          Samuel Hocevar <sam@zoy.org>
@@ -245,7 +245,8 @@ int __vlc_mutex_init( vlc_object_t *p_this, vlc_mutex_t *p_mutex )
      * function and have a 100% correct vlc_cond_wait() implementation.
      * As this function is not available on Win9x, we can use the faster
      * CriticalSections */
-    if( p_this->p_vlc->SignalObjectAndWait && !p_this->p_vlc->b_fast_mutex )
+    if( p_this->p_libvlc->SignalObjectAndWait &&
+        !p_this->p_libvlc->b_fast_mutex )
     {
         /* We are running on NT/2K/XP, we can use SignalObjectAndWait */
         p_mutex->mutex = CreateMutex( 0, FALSE, 0 );
@@ -378,10 +379,10 @@ int __vlc_cond_init( vlc_object_t *p_this, vlc_cond_t *p_condvar )
     p_condvar->i_waiting_threads = 0;
 
     /* Misc init */
-    p_condvar->i_win9x_cv = p_this->p_vlc->i_win9x_cv;
-    p_condvar->SignalObjectAndWait = p_this->p_vlc->SignalObjectAndWait;
+    p_condvar->i_win9x_cv = p_this->p_libvlc->i_win9x_cv;
+    p_condvar->SignalObjectAndWait = p_this->p_libvlc->SignalObjectAndWait;
 
-    if( (p_condvar->SignalObjectAndWait && !p_this->p_vlc->b_fast_mutex)
+    if( (p_condvar->SignalObjectAndWait && !p_this->p_libvlc->b_fast_mutex)
         || p_condvar->i_win9x_cv == 0 )
     {
         /* Create an auto-reset event. */
@@ -400,7 +401,7 @@ int __vlc_cond_init( vlc_object_t *p_this, vlc_cond_t *p_condvar )
                                                 0x7fffffff, /* max count */
                                                 NULL );     /* unnamed */
 
-        if( p_this->p_vlc->i_win9x_cv == 1 )
+        if( p_condvar->i_win9x_cv == 1 )
             /* Create a manual-reset event initially signaled. */
             p_condvar->event = CreateEvent( NULL, TRUE, TRUE, NULL );
         else
index 1026b00..98d88d3 100644 (file)
@@ -2,7 +2,7 @@
  * win32_specific.c: Win32 specific features 
  *****************************************************************************
  * Copyright (C) 2001 VideoLAN
- * $Id: win32_specific.c,v 1.15 2002/09/17 14:56:13 sam Exp $
+ * $Id: win32_specific.c,v 1.16 2002/10/04 12:01:40 gbazin Exp $
  *
  * Authors: Samuel Hocevar <sam@zoy.org>
  *          Gildas Bazin <gbazin@netcourrier.com>
@@ -55,8 +55,8 @@ void system_Init( vlc_t *p_this, int *pi_argc, char *ppsz_argv[] )
  *****************************************************************************/
 void system_Configure( vlc_t *p_this )
 {
-    p_this->p_vlc->b_fast_mutex = config_GetInt( p_this, "fast-mutex" );
-    p_this->p_vlc->i_win9x_cv = config_GetInt( p_this, "win9x-cv-method" );
+    p_this->p_libvlc->b_fast_mutex = config_GetInt( p_this, "fast-mutex" );
+    p_this->p_libvlc->i_win9x_cv = config_GetInt( p_this, "win9x-cv-method" );
 }
 
 /*****************************************************************************