+
+### THIS CHANGELOG HASN'T BEEN UPDATED FOR UNSTABLE ###
+
0.1.99j:
* Added hardware YUV overlay support (SDL). Huge performance
plugins/mga/vout_mga.o
PLUGIN_X11= plugins/x11/x11.o \
- plugins/x11/intf_x11.o \
plugins/x11/vout_x11.o
PLUGIN_YUV = plugins/yuv/yuv.o \
Task: 0x36
Difficulty: Medium
Urgency: Normal
- Description:
+Description: Enhance the interface
. Finish the new keyboard input interface to support
interfaces that allow modifiers. This will allow the SDL to run
properly.
echo "$ac_t""$host" 1>&6
-VLC_VERSION=0.2.50
+VLC_VERSION=0.2.60
VLC_CODENAME=Urumov
int main() {
/* Ultrix mips cc rejects this. */
-typedef int charset[2]; const charset x = {0,0};
+typedef int charset[2]; const charset x;
/* SunOS 4.1.1 cc rejects this. */
char const *const *ccp;
char **p;
#include <sys/types.h>
#include <fcntl.h>
#include <sys/mman.h>
-#include <stdlib.h>
-#include <sys/stat.h>
-
-#ifdef HAVE_UNISTD_H
-# include <unistd.h>
-#endif
/* This mess was copied from the GNU getpagesize.h. */
#ifndef HAVE_GETPAGESIZE
+# ifdef HAVE_UNISTD_H
+# include <unistd.h>
+# endif
/* Assume that all systems that can run configure have sys/param.h. */
# ifndef HAVE_SYS_PARAM_H
/*
* First, make a file with some known garbage in it.
*/
- data = (char*)malloc(pagesize);
+ data = malloc(pagesize);
if (!data)
exit(1);
for (i = 0; i < pagesize; ++i)
fd = open("conftestmmap", O_RDWR);
if (fd < 0)
exit(1);
- data2 = (char*)malloc(2 * pagesize);
+ data2 = malloc(2 * pagesize);
if (!data2)
exit(1);
data2 += (pagesize - ((int) data2 & (pagesize - 1))) & (pagesize - 1);
*/
for (i = 0; i < pagesize; ++i)
*(data2 + i) = *(data2 + i) + 1;
- data3 = (char*)malloc(pagesize);
+ data3 = malloc(pagesize);
if (!data3)
exit(1);
if (read(fd, data3, pagesize) != pagesize)
}
EOF
-if { (eval echo configure:2095: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:2092: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
ac_cv_func_mmap_fixed_mapped=yes
else
fi
echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6
-echo "configure:2118: checking return type of signal handlers" >&5
+echo "configure:2115: checking return type of signal handlers" >&5
if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2123 "configure"
+#line 2120 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <signal.h>
int i;
; return 0; }
EOF
-if { (eval echo configure:2140: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2137: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_type_signal=void
else
echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6
-echo "configure:2159: checking for dlopen in -ldl" >&5
+echo "configure:2156: checking for dlopen in -ldl" >&5
ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
ac_save_LIBS="$LIBS"
LIBS="-ldl $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 2167 "configure"
+#line 2164 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
dlopen()
; return 0; }
EOF
-if { (eval echo configure:2178: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2175: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
fi
echo $ac_n "checking for optarg in -lgnugetopt""... $ac_c" 1>&6
-echo "configure:2206: checking for optarg in -lgnugetopt" >&5
+echo "configure:2203: checking for optarg in -lgnugetopt" >&5
ac_lib_var=`echo gnugetopt'_'optarg | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
ac_save_LIBS="$LIBS"
LIBS="-lgnugetopt $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 2214 "configure"
+#line 2211 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
optarg()
; return 0; }
EOF
-if { (eval echo configure:2225: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2222: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
fi
echo $ac_n "checking for _ in -lbe""... $ac_c" 1>&6
-echo "configure:2253: checking for _ in -lbe" >&5
+echo "configure:2250: checking for _ in -lbe" >&5
ac_lib_var=`echo be'_'_ | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
ac_save_LIBS="$LIBS"
LIBS="-lbe $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 2261 "configure"
+#line 2258 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
_()
; return 0; }
EOF
-if { (eval echo configure:2272: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2269: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
fi
echo $ac_n "checking for _ in -lgame""... $ac_c" 1>&6
-echo "configure:2300: checking for _ in -lgame" >&5
+echo "configure:2297: checking for _ in -lgame" >&5
ac_lib_var=`echo game'_'_ | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
ac_save_LIBS="$LIBS"
LIBS="-lgame $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 2308 "configure"
+#line 2305 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
_()
; return 0; }
EOF
-if { (eval echo configure:2319: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2316: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
fi
echo $ac_n "checking for _ in -lroot""... $ac_c" 1>&6
-echo "configure:2347: checking for _ in -lroot" >&5
+echo "configure:2344: checking for _ in -lroot" >&5
ac_lib_var=`echo root'_'_ | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
ac_save_LIBS="$LIBS"
LIBS="-lroot $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 2355 "configure"
+#line 2352 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
_()
; return 0; }
EOF
-if { (eval echo configure:2366: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2363: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
fi
echo $ac_n "checking for powl in -lm""... $ac_c" 1>&6
-echo "configure:2394: checking for powl in -lm" >&5
+echo "configure:2391: checking for powl in -lm" >&5
ac_lib_var=`echo m'_'powl | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
ac_save_LIBS="$LIBS"
LIBS="-lm $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 2402 "configure"
+#line 2399 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
powl()
; return 0; }
EOF
-if { (eval echo configure:2413: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2410: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
fi
echo $ac_n "checking for pthread_create in -lpthread""... $ac_c" 1>&6
-echo "configure:2441: checking for pthread_create in -lpthread" >&5
+echo "configure:2438: checking for pthread_create in -lpthread" >&5
ac_lib_var=`echo pthread'_'pthread_create | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
ac_save_LIBS="$LIBS"
LIBS="-lpthread $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 2449 "configure"
+#line 2446 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
pthread_create()
; return 0; }
EOF
-if { (eval echo configure:2460: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2457: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
fi
echo $ac_n "checking for thread_create in -lthreads""... $ac_c" 1>&6
-echo "configure:2488: checking for thread_create in -lthreads" >&5
+echo "configure:2485: checking for thread_create in -lthreads" >&5
ac_lib_var=`echo threads'_'thread_create | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
ac_save_LIBS="$LIBS"
LIBS="-lthreads $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 2496 "configure"
+#line 2493 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
thread_create()
; return 0; }
EOF
-if { (eval echo configure:2507: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2504: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
echo $ac_n "checking for getopt_long""... $ac_c" 1>&6
-echo "configure:2536: checking for getopt_long" >&5
+echo "configure:2533: checking for getopt_long" >&5
if eval "test \"`echo '$''{'ac_cv_func_getopt_long'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2541 "configure"
+#line 2538 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char getopt_long(); below. */
; return 0; }
EOF
-if { (eval echo configure:2564: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2561: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_getopt_long=yes"
else
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:2591: checking for $ac_hdr" >&5
+echo "configure:2588: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2596 "configure"
+#line 2593 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2601: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2598: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:2631: checking for $ac_hdr" >&5
+echo "configure:2628: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2636 "configure"
+#line 2633 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2641: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2638: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:2671: checking for $ac_hdr" >&5
+echo "configure:2668: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2676 "configure"
+#line 2673 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2681: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2678: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:2711: checking for $ac_hdr" >&5
+echo "configure:2708: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2716 "configure"
+#line 2713 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2721: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2718: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:2751: checking for $ac_hdr" >&5
+echo "configure:2748: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2756 "configure"
+#line 2753 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2761: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2758: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:2791: checking for $ac_hdr" >&5
+echo "configure:2788: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2796 "configure"
+#line 2793 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2801: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2798: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:2831: checking for $ac_hdr" >&5
+echo "configure:2828: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2836 "configure"
+#line 2833 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2841: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2838: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:2871: checking for $ac_hdr" >&5
+echo "configure:2868: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2876 "configure"
+#line 2873 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2881: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2878: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:2912: checking for $ac_hdr" >&5
+echo "configure:2909: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2917 "configure"
+#line 2914 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2922: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2919: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
CFLAGS="${CFLAGS} -Wall -Werror"
echo $ac_n "checking for ntohl in sys/param.h""... $ac_c" 1>&6
-echo "configure:2953: checking for ntohl in sys/param.h" >&5
+echo "configure:2950: checking for ntohl in sys/param.h" >&5
cat > conftest.$ac_ext <<EOF
-#line 2955 "configure"
+#line 2952 "configure"
#include "confdefs.h"
#include <sys/param.h>
void foo() { int meuh; ntohl(meuh); }
; return 0; }
EOF
-if { (eval echo configure:2963: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2960: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
cat >> confdefs.h <<\EOF
#define NTOHL_IN_SYS_PARAM_H 1
CFLAGS="${CFLAGS} -rdynamic"
echo $ac_n "checking if \$CC accepts -rdynamic""... $ac_c" 1>&6
-echo "configure:2980: checking if \$CC accepts -rdynamic" >&5
+echo "configure:2977: checking if \$CC accepts -rdynamic" >&5
cat > conftest.$ac_ext <<EOF
-#line 2982 "configure"
+#line 2979 "configure"
#include "confdefs.h"
int main() {
; return 0; }
EOF
-if { (eval echo configure:2989: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2986: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
DYNAMIC_FLAG="-rdynamic"
echo "$ac_t""yes" 1>&6
CFLAGS=$save_CFLAGS
echo $ac_n "checking for boolean_t in sys/types.h""... $ac_c" 1>&6
-echo "configure:3004: checking for boolean_t in sys/types.h" >&5
+echo "configure:3001: checking for boolean_t in sys/types.h" >&5
cat > conftest.$ac_ext <<EOF
-#line 3006 "configure"
+#line 3003 "configure"
#include "confdefs.h"
#include <sys/types.h>
void quux() { boolean_t foo; }
; return 0; }
EOF
-if { (eval echo configure:3014: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3011: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
cat >> confdefs.h <<\EOF
#define BOOLEAN_T_IN_SYS_TYPES_H 1
rm -f conftest*
echo $ac_n "checking for working const""... $ac_c" 1>&6
-echo "configure:3030: checking for working const" >&5
+echo "configure:3027: checking for working const" >&5
if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3035 "configure"
+#line 3032 "configure"
#include "confdefs.h"
int main() {
/* Ultrix mips cc rejects this. */
-typedef int charset[2]; const charset x = {0,0};
+typedef int charset[2]; const charset x;
/* SunOS 4.1.1 cc rejects this. */
char const *const *ccp;
char **p;
; return 0; }
EOF
-if { (eval echo configure:3084: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3081: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_c_const=yes
else
fi
echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
-echo "configure:3105: checking for ANSI C header files" >&5
+echo "configure:3102: checking for ANSI C header files" >&5
if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3110 "configure"
+#line 3107 "configure"
#include "confdefs.h"
#include <stdlib.h>
#include <stdarg.h>
#include <float.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3118: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3115: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
if test $ac_cv_header_stdc = yes; then
# SunOS 4.x string.h does not declare mem*, contrary to ANSI.
cat > conftest.$ac_ext <<EOF
-#line 3135 "configure"
+#line 3132 "configure"
#include "confdefs.h"
#include <string.h>
EOF
if test $ac_cv_header_stdc = yes; then
# ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
cat > conftest.$ac_ext <<EOF
-#line 3153 "configure"
+#line 3150 "configure"
#include "confdefs.h"
#include <stdlib.h>
EOF
:
else
cat > conftest.$ac_ext <<EOF
-#line 3174 "configure"
+#line 3171 "configure"
#include "confdefs.h"
#include <ctype.h>
#define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
exit (0); }
EOF
-if { (eval echo configure:3185: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:3182: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
:
else
fi
echo $ac_n "checking for size_t""... $ac_c" 1>&6
-echo "configure:3209: checking for size_t" >&5
+echo "configure:3206: checking for size_t" >&5
if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3214 "configure"
+#line 3211 "configure"
#include "confdefs.h"
#include <sys/types.h>
#if STDC_HEADERS
fi
echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6
-echo "configure:3242: checking whether time.h and sys/time.h may both be included" >&5
+echo "configure:3239: checking whether time.h and sys/time.h may both be included" >&5
if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3247 "configure"
+#line 3244 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <sys/time.h>
struct tm *tp;
; return 0; }
EOF
-if { (eval echo configure:3256: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3253: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_header_time=yes
else
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:3281: checking for $ac_hdr" >&5
+echo "configure:3278: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3286 "configure"
+#line 3283 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3291: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3288: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:3315: checking for $ac_hdr" >&5
+echo "configure:3312: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3320 "configure"
+#line 3317 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3325: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3322: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
done
cat > conftest.$ac_ext <<EOF
-#line 3352 "configure"
+#line 3349 "configure"
#include "confdefs.h"
#include <linux/cdrom.h>
EOF
enableval="$enable_alsa"
if test x$enable_alsa = xyes; then ac_safe=`echo "sys/asoundlib.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for sys/asoundlib.h""... $ac_c" 1>&6
-echo "configure:3513: checking for sys/asoundlib.h" >&5
+echo "configure:3510: checking for sys/asoundlib.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3518 "configure"
+#line 3515 "configure"
#include "confdefs.h"
#include <sys/asoundlib.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3523: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3520: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
echo "$ac_t""yes" 1>&6
echo $ac_n "checking for main in -lasound""... $ac_c" 1>&6
-echo "configure:3540: checking for main in -lasound" >&5
+echo "configure:3537: checking for main in -lasound" >&5
ac_lib_var=`echo asound'_'main | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
ac_save_LIBS="$LIBS"
LIBS="-lasound $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 3548 "configure"
+#line 3545 "configure"
#include "confdefs.h"
int main() {
main()
; return 0; }
EOF
-if { (eval echo configure:3555: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3552: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
AC_CANONICAL_HOST
-VLC_VERSION=0.2.50
+VLC_VERSION=0.2.60
AC_SUBST(VLC_VERSION)
VLC_CODENAME=Urumov
AC_SUBST(VLC_CODENAME)
+vlc (0.2.60-1) unstable; urgency=low
+
+ * New release. The package build is most presumably FUBAR.
+
+ -- Samuel Hocevar <sam@zoy.org> Wed, 14 Feb 2001 08:33:46 +0100
+
vlc (0.2.50-1) unstable; urgency=low
* Only build vlc-glide under x86 (Closes: #84046).
#include "common.h" /* boolean_t, byte_t */
#include "threads.h"
#include "mtime.h"
-#include "tests.h"
-
-#include "interface.h"
-
-#include "audio_output.h"
-
-#include "video.h"
-#include "video_output.h"
#include "modules.h"
#include "modules_inner.h"
#include "common.h" /* boolean_t, byte_t */
#include "threads.h"
#include "mtime.h"
-#include "tests.h"
-
-#include "interface.h"
-#include "video.h"
-#include "video_output.h"
#include "modules.h"
#include "modules_inner.h"
"p_intf", p_intf );
}
gtk_widget_show( p_intf->p_sys->p_playlist );
-}
-
-
-void
-on_menubar_plugins_activate (GtkMenuItem *menuitem,
- gpointer user_data)
-{
-
+ gdk_window_raise( p_intf->p_sys->p_playlist->window );
}
"p_intf", p_intf );
}
gtk_widget_show( p_intf->p_sys->p_about );
+ gdk_window_raise( p_intf->p_sys->p_about->window );
}
"p_intf", p_intf );
}
gtk_widget_show( p_intf->p_sys->p_playlist );
+ gdk_window_raise( p_intf->p_sys->p_playlist->window );
}
"p_intf", p_intf );
}
gtk_widget_show( p_intf->p_sys->p_about );
+ gdk_window_raise( p_intf->p_sys->p_about->window );
}
}
+
+void
+on_intf_modules_destroy (GtkObject *object,
+ gpointer user_data)
+{
+
+}
+
+
+void
+on_modules_ok_clicked (GtkButton *button,
+ gpointer user_data)
+{
+ intf_thread_t *p_intf = GetIntf( GTK_WIDGET(button), "intf_modules" );
+
+ gtk_widget_hide( p_intf->p_sys->p_modules );
+
+}
+
+
+void
+on_modules_apply_clicked (GtkButton *button,
+ gpointer user_data)
+{
+
+}
+
+
+void
+on_modules_cancel_clicked (GtkButton *button,
+ gpointer user_data)
+{
+ intf_thread_t *p_intf = GetIntf( GTK_WIDGET(button), "intf_modules" );
+
+ gtk_widget_hide( p_intf->p_sys->p_modules );
+}
+
+
+void
+on_playlist_ok_clicked (GtkButton *button,
+ gpointer user_data)
+{
+ intf_thread_t *p_intf = GetIntf( GTK_WIDGET(button), "intf_playlist" );
+
+ gtk_widget_hide( p_intf->p_sys->p_playlist );
+}
+
+
+void
+on_menubar_modules_activate (GtkMenuItem *menuitem,
+ gpointer user_data)
+{
+ intf_thread_t *p_intf = GetIntf( GTK_WIDGET(menuitem), "intf_window" );
+
+ if( !GTK_IS_WIDGET( p_intf->p_sys->p_modules ) )
+ {
+ p_intf->p_sys->p_modules = create_intf_modules();
+ gtk_object_set_data( GTK_OBJECT( p_intf->p_sys->p_modules ),
+ "p_intf", p_intf );
+ }
+ gtk_widget_show( p_intf->p_sys->p_modules );
+ gdk_window_raise( p_intf->p_sys->p_modules->window );
+}
+
on_hscale_button_press_event (GtkWidget *widget,
GdkEventButton *event,
gpointer user_data);
+
+void
+on_intf_modules_destroy (GtkObject *object,
+ gpointer user_data);
+
+void
+on_modules_ok_clicked (GtkButton *button,
+ gpointer user_data);
+
+void
+on_modules_apply_clicked (GtkButton *button,
+ gpointer user_data);
+
+void
+on_modules_cancel_clicked (GtkButton *button,
+ gpointer user_data);
+
+void
+on_intf_playlist_destroy (GtkObject *object,
+ gpointer user_data);
+
+void
+on_playlist_ok_clicked (GtkButton *button,
+ gpointer user_data);
+
+void
+on_menubar_modules_activate (GtkMenuItem *menuitem,
+ gpointer user_data);
0, (GdkModifierType) 0, NULL
},
{
- GNOME_APP_UI_ITEM, N_("_Plugins"),
+ GNOME_APP_UI_ITEM, N_("_Modules"),
N_("Open the plugin manager"),
- (gpointer) on_menubar_plugins_activate, NULL, NULL,
+ (gpointer) on_menubar_modules_activate, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_ATTACH,
0, (GdkModifierType) 0, NULL
},
(GtkDestroyNotify) gtk_widget_unref);
gtk_widget_ref (menubar_view_menu_uiinfo[1].widget);
- gtk_object_set_data_full (GTK_OBJECT (intf_window), "menubar_plugins",
+ gtk_object_set_data_full (GTK_OBJECT (intf_window), "menubar_modules",
menubar_view_menu_uiinfo[1].widget,
(GtkDestroyNotify) gtk_widget_unref);
gtk_misc_set_alignment (GTK_MISC (label7), 0, 0.5);
gtk_misc_set_padding (GTK_MISC (label7), 5, 0);
- hscale = gtk_hscale_new (GTK_ADJUSTMENT (gtk_adjustment_new (0, 0, 100, 1, 0, 0)));
+ hscale = gtk_hscale_new (GTK_ADJUSTMENT (gtk_adjustment_new (0, 0, 100, 1, 5, 1)));
gtk_widget_ref (hscale);
gtk_object_set_data_full (GTK_OBJECT (intf_window), "hscale", hscale,
(GtkDestroyNotify) gtk_widget_unref);
return intf_fileopen;
}
+GtkWidget*
+create_intf_modules (void)
+{
+ GtkWidget *intf_modules;
+ GtkWidget *dialog_vbox1;
+ GtkWidget *label12;
+ GtkWidget *dialog_action_area1;
+ GtkWidget *modules_ok;
+ GtkWidget *modules_apply;
+ GtkWidget *modules_cancel;
+
+ intf_modules = gnome_dialog_new (_("Modules"), NULL);
+ gtk_object_set_data (GTK_OBJECT (intf_modules), "intf_modules", intf_modules);
+ gtk_window_set_policy (GTK_WINDOW (intf_modules), FALSE, FALSE, FALSE);
+
+ dialog_vbox1 = GNOME_DIALOG (intf_modules)->vbox;
+ gtk_object_set_data (GTK_OBJECT (intf_modules), "dialog_vbox1", dialog_vbox1);
+ gtk_widget_show (dialog_vbox1);
+
+ label12 = gtk_label_new (_("Sorry, the module manager isn't functional yet. Please retry in a later version."));
+ gtk_widget_ref (label12);
+ gtk_object_set_data_full (GTK_OBJECT (intf_modules), "label12", label12,
+ (GtkDestroyNotify) gtk_widget_unref);
+ gtk_widget_show (label12);
+ gtk_box_pack_start (GTK_BOX (dialog_vbox1), label12, FALSE, FALSE, 0);
+
+ dialog_action_area1 = GNOME_DIALOG (intf_modules)->action_area;
+ gtk_object_set_data (GTK_OBJECT (intf_modules), "dialog_action_area1", dialog_action_area1);
+ gtk_widget_show (dialog_action_area1);
+ gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area1), GTK_BUTTONBOX_END);
+ gtk_button_box_set_spacing (GTK_BUTTON_BOX (dialog_action_area1), 8);
+
+ gnome_dialog_append_button (GNOME_DIALOG (intf_modules), GNOME_STOCK_BUTTON_OK);
+ modules_ok = GTK_WIDGET (g_list_last (GNOME_DIALOG (intf_modules)->buttons)->data);
+ gtk_widget_ref (modules_ok);
+ gtk_object_set_data_full (GTK_OBJECT (intf_modules), "modules_ok", modules_ok,
+ (GtkDestroyNotify) gtk_widget_unref);
+ gtk_widget_show (modules_ok);
+ GTK_WIDGET_SET_FLAGS (modules_ok, GTK_CAN_DEFAULT);
+
+ gnome_dialog_append_button (GNOME_DIALOG (intf_modules), GNOME_STOCK_BUTTON_APPLY);
+ modules_apply = GTK_WIDGET (g_list_last (GNOME_DIALOG (intf_modules)->buttons)->data);
+ gtk_widget_ref (modules_apply);
+ gtk_object_set_data_full (GTK_OBJECT (intf_modules), "modules_apply", modules_apply,
+ (GtkDestroyNotify) gtk_widget_unref);
+ gtk_widget_show (modules_apply);
+ GTK_WIDGET_SET_FLAGS (modules_apply, GTK_CAN_DEFAULT);
+
+ gnome_dialog_append_button (GNOME_DIALOG (intf_modules), GNOME_STOCK_BUTTON_CANCEL);
+ modules_cancel = GTK_WIDGET (g_list_last (GNOME_DIALOG (intf_modules)->buttons)->data);
+ gtk_widget_ref (modules_cancel);
+ gtk_object_set_data_full (GTK_OBJECT (intf_modules), "modules_cancel", modules_cancel,
+ (GtkDestroyNotify) gtk_widget_unref);
+ gtk_widget_show (modules_cancel);
+ GTK_WIDGET_SET_FLAGS (modules_cancel, GTK_CAN_DEFAULT);
+
+ gtk_signal_connect (GTK_OBJECT (intf_modules), "destroy",
+ GTK_SIGNAL_FUNC (on_intf_modules_destroy),
+ NULL);
+ gtk_signal_connect (GTK_OBJECT (modules_ok), "clicked",
+ GTK_SIGNAL_FUNC (on_modules_ok_clicked),
+ NULL);
+ gtk_signal_connect (GTK_OBJECT (modules_apply), "clicked",
+ GTK_SIGNAL_FUNC (on_modules_apply_clicked),
+ NULL);
+ gtk_signal_connect (GTK_OBJECT (modules_cancel), "clicked",
+ GTK_SIGNAL_FUNC (on_modules_cancel_clicked),
+ NULL);
+
+ return intf_modules;
+}
+
GtkWidget*
create_intf_playlist (void)
{
GtkWidget *intf_playlist;
- GtkWidget *vbox1;
- GtkWidget *scrolledwindow2;
- GtkWidget *clist1;
- GtkWidget *label3;
- GtkWidget *label4;
- GtkWidget *label5;
- GtkWidget *hseparator1;
- GtkWidget *hbox1;
- GtkWidget *button1;
- GtkWidget *playlist_close;
- GtkWidget *playlist_help;
-
- intf_playlist = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ GtkWidget *dialog_vbox2;
+ GtkWidget *label11;
+ GtkWidget *scrolledwindow3;
+ GtkWidget *clist2;
+ GtkWidget *label8;
+ GtkWidget *label9;
+ GtkWidget *label10;
+ GtkWidget *dialog_action_area2;
+ GtkWidget *playlist_ok;
+
+ intf_playlist = gnome_dialog_new (_("Playlist"), NULL);
gtk_object_set_data (GTK_OBJECT (intf_playlist), "intf_playlist", intf_playlist);
- gtk_window_set_title (GTK_WINDOW (intf_playlist), _("Playlist"));
-
- vbox1 = gtk_vbox_new (FALSE, 0);
- gtk_widget_ref (vbox1);
- gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "vbox1", vbox1,
- (GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_show (vbox1);
- gtk_container_add (GTK_CONTAINER (intf_playlist), vbox1);
- scrolledwindow2 = gtk_scrolled_window_new (NULL, NULL);
- gtk_widget_ref (scrolledwindow2);
- gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "scrolledwindow2", scrolledwindow2,
- (GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_show (scrolledwindow2);
- gtk_box_pack_start (GTK_BOX (vbox1), scrolledwindow2, TRUE, TRUE, 0);
+ dialog_vbox2 = GNOME_DIALOG (intf_playlist)->vbox;
+ gtk_object_set_data (GTK_OBJECT (intf_playlist), "dialog_vbox2", dialog_vbox2);
+ gtk_widget_show (dialog_vbox2);
- clist1 = gtk_clist_new (3);
- gtk_widget_ref (clist1);
- gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "clist1", clist1,
+ label11 = gtk_label_new (_("Sorry, the playlist isn't functional yet. Please retry in a later version."));
+ gtk_widget_ref (label11);
+ gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "label11", label11,
(GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_show (clist1);
- gtk_container_add (GTK_CONTAINER (scrolledwindow2), clist1);
- gtk_clist_set_column_width (GTK_CLIST (clist1), 0, 189);
- gtk_clist_set_column_width (GTK_CLIST (clist1), 1, 80);
- gtk_clist_set_column_width (GTK_CLIST (clist1), 2, 80);
- gtk_clist_column_titles_show (GTK_CLIST (clist1));
+ gtk_widget_show (label11);
+ gtk_box_pack_start (GTK_BOX (dialog_vbox2), label11, FALSE, FALSE, 0);
- label3 = gtk_label_new (_("Name"));
- gtk_widget_ref (label3);
- gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "label3", label3,
+ scrolledwindow3 = gtk_scrolled_window_new (NULL, NULL);
+ gtk_widget_ref (scrolledwindow3);
+ gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "scrolledwindow3", scrolledwindow3,
(GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_show (label3);
- gtk_clist_set_column_widget (GTK_CLIST (clist1), 0, label3);
+ gtk_widget_show (scrolledwindow3);
+ gtk_box_pack_start (GTK_BOX (dialog_vbox2), scrolledwindow3, TRUE, TRUE, 0);
- label4 = gtk_label_new (_("Type"));
- gtk_widget_ref (label4);
- gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "label4", label4,
+ clist2 = gtk_clist_new (3);
+ gtk_widget_ref (clist2);
+ gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "clist2", clist2,
(GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_show (label4);
- gtk_clist_set_column_widget (GTK_CLIST (clist1), 1, label4);
+ gtk_widget_show (clist2);
+ gtk_container_add (GTK_CONTAINER (scrolledwindow3), clist2);
+ gtk_clist_set_column_width (GTK_CLIST (clist2), 0, 211);
+ gtk_clist_set_column_width (GTK_CLIST (clist2), 1, 49);
+ gtk_clist_set_column_width (GTK_CLIST (clist2), 2, 35);
+ gtk_clist_column_titles_hide (GTK_CLIST (clist2));
- label5 = gtk_label_new (_("Length"));
- gtk_widget_ref (label5);
- gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "label5", label5,
+ label8 = gtk_label_new (_("Name"));
+ gtk_widget_ref (label8);
+ gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "label8", label8,
(GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_show (label5);
- gtk_clist_set_column_widget (GTK_CLIST (clist1), 2, label5);
+ gtk_widget_show (label8);
+ gtk_clist_set_column_widget (GTK_CLIST (clist2), 0, label8);
- hseparator1 = gtk_hseparator_new ();
- gtk_widget_ref (hseparator1);
- gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "hseparator1", hseparator1,
+ label9 = gtk_label_new (_("Type"));
+ gtk_widget_ref (label9);
+ gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "label9", label9,
(GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_show (hseparator1);
- gtk_box_pack_start (GTK_BOX (vbox1), hseparator1, FALSE, TRUE, 0);
+ gtk_widget_show (label9);
+ gtk_clist_set_column_widget (GTK_CLIST (clist2), 1, label9);
- hbox1 = gtk_hbox_new (TRUE, 0);
- gtk_widget_ref (hbox1);
- gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "hbox1", hbox1,
+ label10 = gtk_label_new (_("Length"));
+ gtk_widget_ref (label10);
+ gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "label10", label10,
(GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_show (hbox1);
- gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
+ gtk_widget_show (label10);
+ gtk_clist_set_column_widget (GTK_CLIST (clist2), 2, label10);
- button1 = gtk_button_new_with_label (_("Wazaaaa !"));
- gtk_widget_ref (button1);
- gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "button1", button1,
- (GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_show (button1);
- gtk_box_pack_start (GTK_BOX (hbox1), button1, FALSE, FALSE, 0);
-
- playlist_close = gnome_stock_button (GNOME_STOCK_BUTTON_CLOSE);
- gtk_widget_ref (playlist_close);
- gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "playlist_close", playlist_close,
- (GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_show (playlist_close);
- gtk_box_pack_start (GTK_BOX (hbox1), playlist_close, FALSE, FALSE, 0);
+ dialog_action_area2 = GNOME_DIALOG (intf_playlist)->action_area;
+ gtk_object_set_data (GTK_OBJECT (intf_playlist), "dialog_action_area2", dialog_action_area2);
+ gtk_widget_show (dialog_action_area2);
+ gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area2), GTK_BUTTONBOX_END);
+ gtk_button_box_set_spacing (GTK_BUTTON_BOX (dialog_action_area2), 8);
- playlist_help = gnome_stock_button (GNOME_STOCK_BUTTON_HELP);
- gtk_widget_ref (playlist_help);
- gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "playlist_help", playlist_help,
+ gnome_dialog_append_button (GNOME_DIALOG (intf_playlist), GNOME_STOCK_BUTTON_OK);
+ playlist_ok = GTK_WIDGET (g_list_last (GNOME_DIALOG (intf_playlist)->buttons)->data);
+ gtk_widget_ref (playlist_ok);
+ gtk_object_set_data_full (GTK_OBJECT (intf_playlist), "playlist_ok", playlist_ok,
(GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_show (playlist_help);
- gtk_box_pack_start (GTK_BOX (hbox1), playlist_help, FALSE, FALSE, 0);
+ gtk_widget_show (playlist_ok);
+ GTK_WIDGET_SET_FLAGS (playlist_ok, GTK_CAN_DEFAULT);
gtk_signal_connect (GTK_OBJECT (intf_playlist), "destroy",
GTK_SIGNAL_FUNC (on_intf_playlist_destroy),
NULL);
- gtk_signal_connect (GTK_OBJECT (playlist_close), "clicked",
- GTK_SIGNAL_FUNC (on_playlist_close_clicked),
+ gtk_signal_connect (GTK_OBJECT (playlist_ok), "clicked",
+ GTK_SIGNAL_FUNC (on_playlist_ok_clicked),
NULL);
return intf_playlist;
GtkWidget* create_intf_popup (void);
GtkWidget* create_intf_about (void);
GtkWidget* create_intf_fileopen (void);
+GtkWidget* create_intf_modules (void);
GtkWidget* create_intf_playlist (void);
* gnome_sys.h: private Gnome interface description
*****************************************************************************
* Copyright (C) 1999, 2000 VideoLAN
- * $Id: gnome_sys.h,v 1.3 2001/02/13 04:29:46 sam Exp $
+ * $Id: gnome_sys.h,v 1.4 2001/02/14 07:48:18 sam Exp $
*
* Authors:
*
GtkWidget * p_window; /* main window */
GtkWidget * p_popup; /* popup menu */
GtkWidget * p_playlist; /* playlist */
+ GtkWidget * p_modules; /* module manager */
GtkWidget * p_about; /* about window */
GtkWidget * p_fileopen; /* file open window */
* intf_gnome.c: Gnome interface
*****************************************************************************
* Copyright (C) 1999, 2000 VideoLAN
- * $Id: intf_gnome.c,v 1.10 2001/02/13 04:29:46 sam Exp $
+ * $Id: intf_gnome.c,v 1.11 2001/02/14 07:48:18 sam Exp $
*
* Authors:
*
/* we don't create these ones yet because we perhaps won't need them */
p_intf->p_sys->p_about = NULL;
p_intf->p_sys->p_playlist = NULL;
+ p_intf->p_sys->p_modules = NULL;
p_intf->p_sys->p_fileopen = NULL;
/* store p_sys to keep an eye on it */
vlc_mutex_unlock( &p_intf->p_sys->change_lock );
- /* prepare to die, young man */
+ /* Prepare to die, young Skywalker */
gtk_main_quit();
return( FALSE );
}
<widget>
<class>GtkPixmapMenuItem</class>
- <name>menubar_plugins</name>
+ <name>menubar_modules</name>
<tooltip>Open the plugin manager</tooltip>
<signal>
<name>activate</name>
- <handler>on_menubar_plugins_activate</handler>
- <last_modification_time>Sun, 11 Feb 2001 16:55:04 GMT</last_modification_time>
+ <handler>on_menubar_modules_activate</handler>
+ <last_modification_time>Tue, 13 Feb 2001 17:19:41 GMT</last_modification_time>
</signal>
- <label>_Plugins</label>
+ <label>_Modules</label>
<right_justify>False</right_justify>
<stock_icon>GNOME_STOCK_MENU_ATTACH</stock_icon>
</widget>
<lower>0</lower>
<upper>100</upper>
<step>1</step>
- <page>0</page>
- <page_size>0</page_size>
+ <page>5</page>
+ <page_size>1</page_size>
<child>
<padding>0</padding>
<expand>False</expand>
</widget>
<widget>
- <class>GtkWindow</class>
+ <class>GnomeDialog</class>
+ <name>intf_modules</name>
+ <signal>
+ <name>destroy</name>
+ <handler>on_intf_modules_destroy</handler>
+ <last_modification_time>Tue, 13 Feb 2001 09:19:08 GMT</last_modification_time>
+ </signal>
+ <title>Modules</title>
+ <type>GTK_WINDOW_TOPLEVEL</type>
+ <position>GTK_WIN_POS_NONE</position>
+ <modal>False</modal>
+ <allow_shrink>False</allow_shrink>
+ <allow_grow>False</allow_grow>
+ <auto_shrink>False</auto_shrink>
+ <auto_close>False</auto_close>
+ <hide_on_close>False</hide_on_close>
+
+ <widget>
+ <class>GtkVBox</class>
+ <child_name>GnomeDialog:vbox</child_name>
+ <name>dialog-vbox1</name>
+ <homogeneous>False</homogeneous>
+ <spacing>8</spacing>
+ <child>
+ <padding>4</padding>
+ <expand>True</expand>
+ <fill>True</fill>
+ </child>
+
+ <widget>
+ <class>GtkHButtonBox</class>
+ <child_name>GnomeDialog:action_area</child_name>
+ <name>dialog-action_area1</name>
+ <layout_style>GTK_BUTTONBOX_END</layout_style>
+ <spacing>8</spacing>
+ <child_min_width>85</child_min_width>
+ <child_min_height>27</child_min_height>
+ <child_ipad_x>7</child_ipad_x>
+ <child_ipad_y>0</child_ipad_y>
+ <child>
+ <padding>0</padding>
+ <expand>False</expand>
+ <fill>True</fill>
+ <pack>GTK_PACK_END</pack>
+ </child>
+
+ <widget>
+ <class>GtkButton</class>
+ <name>modules_ok</name>
+ <can_default>True</can_default>
+ <can_focus>True</can_focus>
+ <signal>
+ <name>clicked</name>
+ <handler>on_modules_ok_clicked</handler>
+ <last_modification_time>Tue, 13 Feb 2001 09:21:29 GMT</last_modification_time>
+ </signal>
+ <stock_button>GNOME_STOCK_BUTTON_OK</stock_button>
+ </widget>
+
+ <widget>
+ <class>GtkButton</class>
+ <name>modules_apply</name>
+ <can_default>True</can_default>
+ <can_focus>True</can_focus>
+ <signal>
+ <name>clicked</name>
+ <handler>on_modules_apply_clicked</handler>
+ <last_modification_time>Tue, 13 Feb 2001 09:21:25 GMT</last_modification_time>
+ </signal>
+ <stock_button>GNOME_STOCK_BUTTON_APPLY</stock_button>
+ </widget>
+
+ <widget>
+ <class>GtkButton</class>
+ <name>modules_cancel</name>
+ <can_default>True</can_default>
+ <can_focus>True</can_focus>
+ <signal>
+ <name>clicked</name>
+ <handler>on_modules_cancel_clicked</handler>
+ <last_modification_time>Tue, 13 Feb 2001 09:21:34 GMT</last_modification_time>
+ </signal>
+ <stock_button>GNOME_STOCK_BUTTON_CANCEL</stock_button>
+ </widget>
+ </widget>
+
+ <widget>
+ <class>GtkLabel</class>
+ <name>label12</name>
+ <label>Sorry, the module manager isn't functional yet. Please retry in a later version.</label>
+ <justify>GTK_JUSTIFY_CENTER</justify>
+ <wrap>False</wrap>
+ <xalign>0.5</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <child>
+ <padding>0</padding>
+ <expand>False</expand>
+ <fill>False</fill>
+ </child>
+ </widget>
+ </widget>
+</widget>
+
+<widget>
+ <class>GnomeDialog</class>
<name>intf_playlist</name>
<signal>
<name>destroy</name>
<handler>on_intf_playlist_destroy</handler>
- <last_modification_time>Mon, 12 Feb 2001 06:02:25 GMT</last_modification_time>
+ <last_modification_time>Tue, 13 Feb 2001 09:18:45 GMT</last_modification_time>
</signal>
<title>Playlist</title>
<type>GTK_WINDOW_TOPLEVEL</type>
<allow_shrink>False</allow_shrink>
<allow_grow>True</allow_grow>
<auto_shrink>False</auto_shrink>
+ <auto_close>False</auto_close>
+ <hide_on_close>False</hide_on_close>
<widget>
<class>GtkVBox</class>
- <name>vbox1</name>
+ <child_name>GnomeDialog:vbox</child_name>
+ <name>dialog-vbox2</name>
<homogeneous>False</homogeneous>
- <spacing>0</spacing>
+ <spacing>8</spacing>
+ <child>
+ <padding>4</padding>
+ <expand>True</expand>
+ <fill>True</fill>
+ </child>
+
+ <widget>
+ <class>GtkHButtonBox</class>
+ <child_name>GnomeDialog:action_area</child_name>
+ <name>dialog-action_area2</name>
+ <layout_style>GTK_BUTTONBOX_END</layout_style>
+ <spacing>8</spacing>
+ <child_min_width>85</child_min_width>
+ <child_min_height>27</child_min_height>
+ <child_ipad_x>7</child_ipad_x>
+ <child_ipad_y>0</child_ipad_y>
+ <child>
+ <padding>0</padding>
+ <expand>False</expand>
+ <fill>True</fill>
+ <pack>GTK_PACK_END</pack>
+ </child>
+
+ <widget>
+ <class>GtkButton</class>
+ <name>playlist_ok</name>
+ <can_default>True</can_default>
+ <can_focus>True</can_focus>
+ <signal>
+ <name>clicked</name>
+ <handler>on_playlist_ok_clicked</handler>
+ <last_modification_time>Tue, 13 Feb 2001 09:20:38 GMT</last_modification_time>
+ </signal>
+ <stock_button>GNOME_STOCK_BUTTON_OK</stock_button>
+ </widget>
+ </widget>
+
+ <widget>
+ <class>GtkLabel</class>
+ <name>label11</name>
+ <label>Sorry, the playlist isn't functional yet. Please retry in a later version.</label>
+ <justify>GTK_JUSTIFY_CENTER</justify>
+ <wrap>False</wrap>
+ <xalign>0.5</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <child>
+ <padding>0</padding>
+ <expand>False</expand>
+ <fill>False</fill>
+ </child>
+ </widget>
<widget>
<class>GtkScrolledWindow</class>
- <name>scrolledwindow2</name>
+ <name>scrolledwindow3</name>
<hscrollbar_policy>GTK_POLICY_ALWAYS</hscrollbar_policy>
<vscrollbar_policy>GTK_POLICY_ALWAYS</vscrollbar_policy>
<hupdate_policy>GTK_UPDATE_CONTINUOUS</hupdate_policy>
<widget>
<class>GtkCList</class>
- <name>clist1</name>
+ <name>clist2</name>
<can_focus>True</can_focus>
<columns>3</columns>
- <column_widths>189,80,80</column_widths>
+ <column_widths>211,49,35</column_widths>
<selection_mode>GTK_SELECTION_SINGLE</selection_mode>
- <show_titles>True</show_titles>
+ <show_titles>False</show_titles>
<shadow_type>GTK_SHADOW_IN</shadow_type>
<widget>
<class>GtkLabel</class>
<child_name>CList:title</child_name>
- <name>label3</name>
+ <name>label8</name>
<label>Name</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<widget>
<class>GtkLabel</class>
<child_name>CList:title</child_name>
- <name>label4</name>
+ <name>label9</name>
<label>Type</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<widget>
<class>GtkLabel</class>
<child_name>CList:title</child_name>
- <name>label5</name>
+ <name>label10</name>
<label>Length</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
</widget>
</widget>
</widget>
-
- <widget>
- <class>GtkHSeparator</class>
- <name>hseparator1</name>
- <child>
- <padding>0</padding>
- <expand>False</expand>
- <fill>True</fill>
- </child>
- </widget>
-
- <widget>
- <class>GtkHBox</class>
- <name>hbox1</name>
- <homogeneous>True</homogeneous>
- <spacing>0</spacing>
- <child>
- <padding>0</padding>
- <expand>False</expand>
- <fill>False</fill>
- </child>
-
- <widget>
- <class>GtkButton</class>
- <name>button1</name>
- <can_focus>True</can_focus>
- <label>Wazaaaa !</label>
- <relief>GTK_RELIEF_NORMAL</relief>
- <child>
- <padding>0</padding>
- <expand>False</expand>
- <fill>False</fill>
- </child>
- </widget>
-
- <widget>
- <class>GtkButton</class>
- <name>playlist_close</name>
- <can_focus>True</can_focus>
- <signal>
- <name>clicked</name>
- <handler>on_playlist_close_clicked</handler>
- <last_modification_time>Mon, 12 Feb 2001 06:19:17 GMT</last_modification_time>
- </signal>
- <stock_button>GNOME_STOCK_BUTTON_CLOSE</stock_button>
- <relief>GTK_RELIEF_NORMAL</relief>
- <child>
- <padding>0</padding>
- <expand>False</expand>
- <fill>False</fill>
- </child>
- </widget>
-
- <widget>
- <class>GtkButton</class>
- <name>playlist_help</name>
- <can_focus>True</can_focus>
- <stock_button>GNOME_STOCK_BUTTON_HELP</stock_button>
- <relief>GTK_RELIEF_NORMAL</relief>
- <child>
- <padding>0</padding>
- <expand>False</expand>
- <fill>False</fill>
- </child>
- </widget>
- </widget>
</widget>
</widget>
#include "common.h" /* boolean_t, byte_t */
#include "threads.h"
#include "mtime.h"
-#include "tests.h"
#include "audio_output.h"
+++ /dev/null
-/*****************************************************************************
- * intf_x11.c: X11 interface
- *****************************************************************************
- * Copyright (C) 1999, 2000 VideoLAN
- * $Id: intf_x11.c,v 1.7 2001/01/15 06:18:23 sam Exp $
- *
- * Authors:
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
- *****************************************************************************/
-
-/*****************************************************************************
- * Preamble
- *****************************************************************************/
-#include "defs.h"
-
-#include <errno.h> /* ENOMEM */
-#include <stdlib.h> /* free() */
-#include <string.h> /* strerror() */
-
-#include <X11/Xlib.h>
-#include <X11/Xutil.h>
-#include <X11/keysym.h>
-
-#include "config.h"
-#include "common.h"
-#include "threads.h"
-#include "mtime.h"
-#include "plugins.h"
-
-#include "stream_control.h"
-#include "input_ext-intf.h"
-
-#include "video.h"
-#include "video_output.h"
-
-#include "intf_msg.h"
-#include "interface.h"
-
-#include "main.h"
-
-/*****************************************************************************
- * intf_sys_t: description and status of X11 interface
- *****************************************************************************/
-typedef struct intf_sys_s
-{
- /* X11 generic properties */
- Display * p_display; /* X11 display pointer */
- int i_screen; /* X11 screen */
- Atom wm_protocols;
- Atom wm_delete_window;
-
- /* Main window properties */
- Window window; /* main window */
- GC gc; /* graphic context for main window */
- int i_width; /* width of main window */
- int i_height; /* height of main window */
- Colormap colormap; /* colormap used (8bpp only) */
-
- /* Screen saver properties */
- int i_ss_count; /* enabling/disabling count */
- int i_ss_timeout; /* timeout */
- int i_ss_interval; /* interval between changes */
- int i_ss_blanking; /* blanking mode */
- int i_ss_exposure; /* exposure mode */
-
- /* Mouse pointer properties */
- boolean_t b_mouse; /* is the mouse pointer displayed ? */
-
-} intf_sys_t;
-
-/*****************************************************************************
- * Local prototypes
- *****************************************************************************/
-static int X11CreateWindow ( intf_thread_t *p_intf );
-static void X11DestroyWindow ( intf_thread_t *p_intf );
-static void X11ManageWindow ( intf_thread_t *p_intf );
-static void X11EnableScreenSaver ( intf_thread_t *p_intf );
-static void X11DisableScreenSaver ( intf_thread_t *p_intf );
-static void X11TogglePointer ( intf_thread_t *p_intf );
-
-/*****************************************************************************
- * intf_X11Create: initialize and create window
- *****************************************************************************/
-int intf_X11Create( intf_thread_t *p_intf )
-{
- char *psz_display;
-
- /* Allocate instance and initialize some members */
- p_intf->p_sys = malloc( sizeof( intf_sys_t ) );
- if( p_intf->p_sys == NULL )
- {
- intf_ErrMsg("error: %s", strerror(ENOMEM));
- return( 1 );
- }
-
- /* Open display, unsing 'vlc_display' or DISPLAY environment variable */
- psz_display = XDisplayName( main_GetPszVariable( VOUT_DISPLAY_VAR, NULL ) );
- p_intf->p_sys->p_display = XOpenDisplay( psz_display );
- if( !p_intf->p_sys->p_display ) /* error */
- {
- intf_ErrMsg("error: can't open display %s", psz_display );
- free( p_intf->p_sys );
- return( 1 );
- }
- p_intf->p_sys->i_screen = DefaultScreen( p_intf->p_sys->p_display );
-
- /* Spawn base window - this window will include the video output window,
- * but also command buttons, subtitles and other indicators */
- if( X11CreateWindow( p_intf ) )
- {
- intf_ErrMsg("error: can't create interface window" );
- XCloseDisplay( p_intf->p_sys->p_display );
- free( p_intf->p_sys );
- return( 1 );
- }
-
- /* Spawn video output thread */
- if( p_main->b_video )
- {
- p_intf->p_vout = vout_CreateThread( psz_display, p_intf->p_sys->window,
- p_intf->p_sys->i_width,
- p_intf->p_sys->i_height, NULL, 0,
- (void *)&p_intf->p_sys->colormap );
-
- if( p_intf->p_vout == NULL ) /* error */
- {
- intf_ErrMsg("error: can't create video output thread" );
- X11DestroyWindow( p_intf );
- XCloseDisplay( p_intf->p_sys->p_display );
- free( p_intf->p_sys );
- return( 1 );
- }
- }
-
- p_intf->p_sys->b_mouse = 1;
-
- /* bind keys */
- intf_AssignNormalKeys( p_intf );
-
- /* Disable screen saver and return */
- p_intf->p_sys->i_ss_count = 1;
- X11DisableScreenSaver( p_intf );
- return( 0 );
-}
-
-/*****************************************************************************
- * intf_X11Destroy: destroy interface window
- *****************************************************************************/
-void intf_X11Destroy( intf_thread_t *p_intf )
-{
- /* Enable screen saver */
- X11EnableScreenSaver( p_intf );
-
- /* Close input thread, if any (blocking) */
- if( p_intf->p_input )
- {
- input_DestroyThread( p_intf->p_input, NULL );
- }
-
- /* Close video output thread, if any (blocking) */
- if( p_intf->p_vout )
- {
- vout_DestroyThread( p_intf->p_vout, NULL );
- }
-
- /* Close main window and display */
- X11DestroyWindow( p_intf );
- XCloseDisplay( p_intf->p_sys->p_display );
-
- /* Destroy structure */
- free( p_intf->p_sys );
-}
-
-
-/*****************************************************************************
- * intf_X11Manage: event loop
- *****************************************************************************/
-void intf_X11Manage( intf_thread_t *p_intf )
-{
- /* Manage main window */
- X11ManageWindow( p_intf );
-}
-
-/* following functions are local */
-
-/*****************************************************************************
- * X11CreateWindow: open and set-up X11 main window
- *****************************************************************************/
-static int X11CreateWindow( intf_thread_t *p_intf )
-{
- XSizeHints xsize_hints;
- XSetWindowAttributes xwindow_attributes;
- XGCValues xgcvalues;
- XEvent xevent;
- boolean_t b_expose;
- boolean_t b_configure_notify;
- boolean_t b_map_notify;
-
- /* Set main window's size */
- p_intf->p_sys->i_width = main_GetIntVariable( VOUT_WIDTH_VAR,
- VOUT_WIDTH_DEFAULT );
- p_intf->p_sys->i_height = main_GetIntVariable( VOUT_HEIGHT_VAR,
- VOUT_HEIGHT_DEFAULT );
-
- /* Prepare window manager hints and properties */
- xsize_hints.base_width = p_intf->p_sys->i_width;
- xsize_hints.base_height = p_intf->p_sys->i_height;
- xsize_hints.flags = PSize;
- p_intf->p_sys->wm_protocols = XInternAtom( p_intf->p_sys->p_display,
- "WM_PROTOCOLS", True );
- p_intf->p_sys->wm_delete_window = XInternAtom( p_intf->p_sys->p_display,
- "WM_DELETE_WINDOW", True );
-
- /* Prepare window attributes */
- xwindow_attributes.backing_store = Always; /* save the hidden part */
- xwindow_attributes.background_pixel = WhitePixel( p_intf->p_sys->p_display,
- p_intf->p_sys->i_screen );
-
- xwindow_attributes.event_mask = ExposureMask | StructureNotifyMask;
-
- /* Create the window and set hints - the window must receive ConfigureNotify
- * events, and, until it is displayed, Expose and MapNotify events. */
- p_intf->p_sys->window =
- XCreateWindow( p_intf->p_sys->p_display,
- DefaultRootWindow( p_intf->p_sys->p_display ),
- 0, 0,
- p_intf->p_sys->i_width, p_intf->p_sys->i_height, 1,
- 0, InputOutput, 0,
- CWBackingStore | CWBackPixel | CWEventMask,
- &xwindow_attributes );
-
- /* Set window manager hints and properties: size hints, command,
- * window's name, and accepted protocols */
- XSetWMNormalHints( p_intf->p_sys->p_display, p_intf->p_sys->window,
- &xsize_hints );
- XSetCommand( p_intf->p_sys->p_display, p_intf->p_sys->window,
- p_main->ppsz_argv, p_main->i_argc );
- XStoreName( p_intf->p_sys->p_display, p_intf->p_sys->window, VOUT_TITLE );
-
- if( (p_intf->p_sys->wm_protocols == None) /* use WM_DELETE_WINDOW */
- || (p_intf->p_sys->wm_delete_window == None)
- || !XSetWMProtocols( p_intf->p_sys->p_display, p_intf->p_sys->window,
- &p_intf->p_sys->wm_delete_window, 1 ) )
- {
- /* WM_DELETE_WINDOW is not supported by window manager */
- intf_Msg("intf error: missing or bad window manager - please exit program kindly.");
- }
-
- /* Creation of a graphic context that doesn't generate a GraphicsExpose
- * event when using functions like XCopyArea */
- xgcvalues.graphics_exposures = False;
- p_intf->p_sys->gc = XCreateGC( p_intf->p_sys->p_display, p_intf->p_sys->window,
- GCGraphicsExposures, &xgcvalues);
-
- /* Send orders to server, and wait until window is displayed - three
- * events must be received: a MapNotify event, an Expose event allowing
- * drawing in the window, and a ConfigureNotify to get the window
- * dimensions. Once those events have been received, only ConfigureNotify
- * events need to be received. */
- b_expose = 0;
- b_configure_notify = 0;
- b_map_notify = 0;
- XMapWindow( p_intf->p_sys->p_display, p_intf->p_sys->window);
- do
- {
- XNextEvent( p_intf->p_sys->p_display, &xevent);
- if( (xevent.type == Expose)
- && (xevent.xexpose.window == p_intf->p_sys->window) )
- {
- b_expose = 1;
- }
- else if( (xevent.type == MapNotify)
- && (xevent.xmap.window == p_intf->p_sys->window) )
- {
- b_map_notify = 1;
- }
- else if( (xevent.type == ConfigureNotify)
- && (xevent.xconfigure.window == p_intf->p_sys->window) )
- {
- b_configure_notify = 1;
- p_intf->p_sys->i_width = xevent.xconfigure.width;
- p_intf->p_sys->i_height = xevent.xconfigure.height;
- }
- } while( !( b_expose && b_configure_notify && b_map_notify ) );
-
- XSelectInput( p_intf->p_sys->p_display, p_intf->p_sys->window,
- StructureNotifyMask | KeyPressMask | ButtonPressMask );
-
- if( XDefaultDepth(p_intf->p_sys->p_display, p_intf->p_sys->i_screen) == 8 )
- {
- /* Allocate a new palette */
- p_intf->p_sys->colormap = XCreateColormap( p_intf->p_sys->p_display,
- DefaultRootWindow( p_intf->p_sys->p_display ),
- DefaultVisual( p_intf->p_sys->p_display,
- p_intf->p_sys->i_screen ),
- AllocAll );
-
- xwindow_attributes.colormap = p_intf->p_sys->colormap;
- XChangeWindowAttributes( p_intf->p_sys->p_display,
- p_intf->p_sys->window,
- CWColormap, &xwindow_attributes );
- }
-
- /* At this stage, the window is open, displayed, and ready to receive data */
- return( 0 );
-}
-
-/*****************************************************************************
- * X11DestroyWindow: destroy X11 main window
- *****************************************************************************/
-static void X11DestroyWindow( intf_thread_t *p_intf )
-{
- XUnmapWindow( p_intf->p_sys->p_display, p_intf->p_sys->window );
- XFreeGC( p_intf->p_sys->p_display, p_intf->p_sys->gc );
- XDestroyWindow( p_intf->p_sys->p_display, p_intf->p_sys->window );
-}
-
-/*****************************************************************************
- * X11ManageWindow: manage X11 main window
- *****************************************************************************/
-static void X11ManageWindow( intf_thread_t *p_intf )
-{
- XEvent xevent; /* X11 event */
- boolean_t b_resized; /* window has been resized */
- char i_key; /* ISO Latin-1 key */
-
- /* Handle X11 events: ConfigureNotify events are parsed to know if the
- * output window's size changed, MapNotify and UnmapNotify to know if the
- * window is mapped (and if the display is useful), and ClientMessages
- * to intercept window destruction requests */
- b_resized = 0;
- while( XCheckWindowEvent( p_intf->p_sys->p_display, p_intf->p_sys->window,
- StructureNotifyMask | KeyPressMask |
- ButtonPressMask, &xevent ) == True )
- {
- /* ConfigureNotify event: prepare */
- if( (xevent.type == ConfigureNotify)
- && ((xevent.xconfigure.width != p_intf->p_sys->i_width)
- || (xevent.xconfigure.height != p_intf->p_sys->i_height)) )
- {
- /* Update dimensions */
- b_resized = 1;
- p_intf->p_sys->i_width = xevent.xconfigure.width;
- p_intf->p_sys->i_height = xevent.xconfigure.height;
- }
- /* MapNotify event: change window status and disable screen saver */
- else if( xevent.type == MapNotify)
- {
- if( (p_intf->p_vout != NULL) && !p_intf->p_vout->b_active )
- {
- X11DisableScreenSaver( p_intf );
- p_intf->p_vout->b_active = 1;
- }
- }
- /* UnmapNotify event: change window status and enable screen saver */
- else if( xevent.type == UnmapNotify )
- {
- if( (p_intf->p_vout != NULL) && p_intf->p_vout->b_active )
- {
- X11EnableScreenSaver( p_intf );
- p_intf->p_vout->b_active = 0;
- }
- }
- /* Keyboard event */
- else if( xevent.type == KeyPress )
- {
- if( XLookupString( &xevent.xkey, &i_key, 1, NULL, NULL ) )
- {
- if( intf_ProcessKey( p_intf, i_key ) )
- {
- intf_DbgMsg("unhandled key '%c' (%i)", (char) i_key, i_key );
- }
- }
- }
- /* Mouse click */
- else if( xevent.type == ButtonPress )
- {
- switch( ((XButtonEvent *)&xevent)->button )
- {
- case Button1:
- /* in this part we will eventually manage
- * clicks for DVD navigation for instance */
- break;
-
- case Button2:
- X11TogglePointer( p_intf );
- break;
-
- case Button3:
- vlc_mutex_lock( &p_intf->p_vout->change_lock );
- p_intf->p_vout->b_interface = !p_intf->p_vout->b_interface;
- p_intf->p_vout->i_changes |= VOUT_INTF_CHANGE;
- vlc_mutex_unlock( &p_intf->p_vout->change_lock );
- break;
- }
- }
-#ifdef DEBUG
- /* Other event */
- else
- {
- intf_DbgMsg( "%p -> unhandled event type %d received",
- p_intf, xevent.type );
- }
-#endif
- }
-
- /* ClientMessage event - only WM_PROTOCOLS with WM_DELETE_WINDOW data
- * are handled - according to the man pages, the format is always 32
- * in this case */
- while( XCheckTypedEvent( p_intf->p_sys->p_display,
- ClientMessage, &xevent ) )
- {
- if( (xevent.xclient.message_type == p_intf->p_sys->wm_protocols)
- && (xevent.xclient.data.l[0] == p_intf->p_sys->wm_delete_window ) )
- {
- p_intf->b_die = 1;
- }
- else
- {
- intf_DbgMsg( "%p -> unhandled ClientMessage received", p_intf );
- }
- }
-
- /*
- * Handle vout or interface windows resizing
- */
- if( p_intf->p_vout != NULL )
- {
- if( b_resized )
- {
- /* If interface window has been resized, change vout size */
- intf_DbgMsg( "resizing output window" );
- vlc_mutex_lock( &p_intf->p_vout->change_lock );
- p_intf->p_vout->i_width = p_intf->p_sys->i_width;
- p_intf->p_vout->i_height = p_intf->p_sys->i_height;
- p_intf->p_vout->i_changes |= VOUT_SIZE_CHANGE;
- vlc_mutex_unlock( &p_intf->p_vout->change_lock );
- }
- else if( (p_intf->p_vout->i_width != p_intf->p_sys->i_width) ||
- (p_intf->p_vout->i_height != p_intf->p_sys->i_height) )
- {
- /* If video output size has changed, change interface window size */
- intf_DbgMsg( "resizing output window" );
- p_intf->p_sys->i_width = p_intf->p_vout->i_width;
- p_intf->p_sys->i_height = p_intf->p_vout->i_height;
- XResizeWindow( p_intf->p_sys->p_display, p_intf->p_sys->window,
- p_intf->p_sys->i_width, p_intf->p_sys->i_height );
- }
- }
-}
-
-/*****************************************************************************
- * X11EnableScreenSaver: enable screen saver
- *****************************************************************************
- * This function enable the screen saver on a display after it had been
- * disabled by XDisableScreenSaver. Both functions use a counter mechanism to
- * know wether the screen saver can be activated or not: if n successive calls
- * are made to XDisableScreenSaver, n successive calls to XEnableScreenSaver
- * will be required before the screen saver could effectively be activated.
- *****************************************************************************/
-void X11EnableScreenSaver( intf_thread_t *p_intf )
-{
- if( p_intf->p_sys->i_ss_count++ == 0 )
- {
- intf_DbgMsg( "intf: enabling screen saver" );
- XSetScreenSaver( p_intf->p_sys->p_display, p_intf->p_sys->i_ss_timeout,
- p_intf->p_sys->i_ss_interval, p_intf->p_sys->i_ss_blanking,
- p_intf->p_sys->i_ss_exposure );
- }
-}
-
-/*****************************************************************************
- * X11DisableScreenSaver: disable screen saver
- *****************************************************************************
- * See XEnableScreenSaver
- *****************************************************************************/
-void X11DisableScreenSaver( intf_thread_t *p_intf )
-{
- if( --p_intf->p_sys->i_ss_count == 0 )
- {
- /* Save screen saver informations */
- XGetScreenSaver( p_intf->p_sys->p_display, &p_intf->p_sys->i_ss_timeout,
- &p_intf->p_sys->i_ss_interval, &p_intf->p_sys->i_ss_blanking,
- &p_intf->p_sys->i_ss_exposure );
-
- /* Disable screen saver */
- intf_DbgMsg("intf: disabling screen saver");
- XSetScreenSaver( p_intf->p_sys->p_display, 0,
- p_intf->p_sys->i_ss_interval, p_intf->p_sys->i_ss_blanking,
- p_intf->p_sys->i_ss_exposure );
- }
-}
-
-/*****************************************************************************
- * X11TogglePointer: hide or show the mouse pointer
- *****************************************************************************
- * This function hides the X pointer if it is visible by putting it at
- * coordinates (32,32) and setting the pointer sprite to a blank one. To
- * show it again, we disable the sprite and restore the original coordinates.
- *****************************************************************************/
-void X11TogglePointer( intf_thread_t *p_intf )
-{
- static Cursor cursor;
- static boolean_t b_cursor = 0;
-
- if( p_intf->p_sys->b_mouse )
- {
- p_intf->p_sys->b_mouse = 0;
-
- if( !b_cursor )
- {
- XColor color;
- Pixmap blank = XCreatePixmap( p_intf->p_sys->p_display,
- DefaultRootWindow(p_intf->p_sys->p_display),
- 1, 1, 1 );
-
- XParseColor( p_intf->p_sys->p_display,
- XCreateColormap( p_intf->p_sys->p_display,
- DefaultRootWindow(
- p_intf->p_sys->p_display ),
- DefaultVisual(
- p_intf->p_sys->p_display,
- p_intf->p_sys->i_screen ),
- AllocNone ),
- "black", &color );
-
- cursor = XCreatePixmapCursor( p_intf->p_sys->p_display,
- blank, blank, &color, &color, 1, 1 );
-
- b_cursor = 1;
- }
- XDefineCursor( p_intf->p_sys->p_display,
- p_intf->p_sys->window, cursor );
- }
- else
- {
- p_intf->p_sys->b_mouse = 1;
-
- XUndefineCursor( p_intf->p_sys->p_display, p_intf->p_sys->window );
- }
-}
* vout_x11.c: X11 video output display method
*****************************************************************************
* Copyright (C) 1998, 1999, 2000 VideoLAN
- * $Id: vout_x11.c,v 1.9 2001/01/23 13:22:58 massiot Exp $
+ * $Id: vout_x11.c,v 1.10 2001/02/14 07:48:18 sam Exp $
*
- * Authors:
+ * Authors: Vincent Seguin <seguin@via.ecp.fr>
+ * Samuel Hocevar <sam@zoy.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
#include <sys/shm.h> /* shmget(), shmctl() */
#include <X11/Xlib.h>
#include <X11/Xutil.h>
+#include <X11/keysym.h>
#include <X11/extensions/XShm.h>
#include "config.h"
#include "common.h"
#include "threads.h"
#include "mtime.h"
-#include "plugins.h"
+#include "tests.h"
+#include "modules.h"
#include "video.h"
#include "video_output.h"
+#include "interface.h"
#include "intf_msg.h"
/*****************************************************************************
/* Display buffers and shared memory information */
XImage * p_ximage[2]; /* XImage pointer */
XShmSegmentInfo shm_info[2]; /* shared memory zone information */
+
+ /* X11 generic properties */
+ Atom wm_protocols;
+ Atom wm_delete_window;
+
+ int i_width; /* width of main window */
+ int i_height; /* height of main window */
+
+ /* Screen saver properties */
+ int i_ss_count; /* enabling/disabling count */
+ int i_ss_timeout; /* timeout */
+ int i_ss_interval; /* interval between changes */
+ int i_ss_blanking; /* blanking mode */
+ int i_ss_exposure; /* exposure mode */
+
+ /* Mouse pointer properties */
+ boolean_t b_mouse; /* is the mouse pointer displayed ? */
+
} vout_sys_t;
/*****************************************************************************
* Local prototypes
*****************************************************************************/
-static int X11OpenDisplay ( vout_thread_t *p_vout, char *psz_display, Window root_window, void *p_data );
+static int vout_Probe ( probedata_t *p_data );
+static int vout_Create ( struct vout_thread_s * );
+static int vout_Init ( struct vout_thread_s * );
+static void vout_End ( struct vout_thread_s * );
+static void vout_Destroy ( struct vout_thread_s * );
+static int vout_Manage ( struct vout_thread_s * );
+static void vout_Display ( struct vout_thread_s * );
+static void vout_SetPalette( struct vout_thread_s *, u16*, u16*, u16*, u16* );
+
+static int X11OpenDisplay ( vout_thread_t *p_vout );
static void X11CloseDisplay ( vout_thread_t *p_vout );
static int X11CreateWindow ( vout_thread_t *p_vout );
static void X11DestroyWindow ( vout_thread_t *p_vout );
XShmSegmentInfo *p_shm_info );
/*****************************************************************************
- * vout_X11Create: allocate X11 video thread output method
+ * Functions exported as capabilities. They are declared as static so that
+ * we don't pollute the namespace too much.
+ *****************************************************************************/
+void vout_getfunctions( function_list_t * p_function_list )
+{
+ p_function_list->pf_probe = vout_Probe;
+ p_function_list->functions.vout.pf_create = vout_Create;
+ p_function_list->functions.vout.pf_init = vout_Init;
+ p_function_list->functions.vout.pf_end = vout_End;
+ p_function_list->functions.vout.pf_destroy = vout_Destroy;
+ p_function_list->functions.vout.pf_manage = vout_Manage;
+ p_function_list->functions.vout.pf_display = vout_Display;
+ p_function_list->functions.vout.pf_setpalette = vout_SetPalette;
+}
+
+/*****************************************************************************
+ * vout_Probe: probe the video driver and return a score
+ *****************************************************************************
+ * This function tries to initialize SDL and returns a score to the
+ * plugin manager so that it can select the best plugin.
+ *****************************************************************************/
+static int vout_Probe( probedata_t *p_data )
+{
+ if( TestMethod( VOUT_METHOD_VAR, "x11" ) )
+ {
+ return( 999 );
+ }
+
+ return( 50 );
+}
+
+/*****************************************************************************
+ * vout_Create: allocate X11 video thread output method
*****************************************************************************
* This function allocate and initialize a X11 vout method. It uses some of the
* vout properties to choose the window size, and change them according to the
* actual properties of the display.
*****************************************************************************/
-int vout_X11Create( vout_thread_t *p_vout, char *psz_display,
- int i_root_window, void *p_data )
+static int vout_Create( vout_thread_t *p_vout )
{
/* Allocate structure */
p_vout->p_sys = malloc( sizeof( vout_sys_t ) );
* Since XLib is usually not thread-safe, we can't use the same display
* pointer than the interface or another thread. However, the root window
* id is still valid. */
- if( X11OpenDisplay( p_vout, psz_display, i_root_window, p_data ) )
+ if( X11OpenDisplay( p_vout ) )
{
intf_ErrMsg("error: can't initialize X11 display" );
free( p_vout->p_sys );
}
/*****************************************************************************
- * vout_X11Init: initialize X11 video thread output method
+ * vout_Init: initialize X11 video thread output method
*****************************************************************************
* This function create the XImages needed by the output thread. It is called
* at the beginning of the thread, but also each time the window is resized.
*****************************************************************************/
-int vout_X11Init( vout_thread_t *p_vout )
+static int vout_Init( vout_thread_t *p_vout )
{
int i_err;
}
/*****************************************************************************
- * vout_X11End: terminate X11 video thread output method
+ * vout_End: terminate X11 video thread output method
*****************************************************************************
- * Destroy the X11 XImages created by vout_X11Init. It is called at the end of
+ * Destroy the X11 XImages created by vout_Init. It is called at the end of
* the thread, but also each time the window is resized.
*****************************************************************************/
-void vout_X11End( vout_thread_t *p_vout )
+static void vout_End( vout_thread_t *p_vout )
{
if( p_vout->p_sys->b_shm ) /* Shm XImages... */
{
}
/*****************************************************************************
- * vout_X11Destroy: destroy X11 video thread output method
+ * vout_Destroy: destroy X11 video thread output method
*****************************************************************************
* Terminate an output method created by vout_CreateOutputMethod
*****************************************************************************/
-void vout_X11Destroy( vout_thread_t *p_vout )
+static void vout_Destroy( vout_thread_t *p_vout )
{
X11CloseDisplay( p_vout );
free( p_vout->p_sys );
}
/*****************************************************************************
- * vout_X11Manage: handle X11 events
+ * vout_Manage: handle X11 events
*****************************************************************************
* This function should be called regularly by video output thread. It manages
* X11 events and allows window resizing. It returns a non null value on
* error.
*****************************************************************************/
-int vout_X11Manage( vout_thread_t *p_vout )
+static int vout_Manage( vout_thread_t *p_vout )
{
/*
* Color/Grayscale or gamma change: in 8bpp, just change the colormap
p_vout->i_width, p_vout->i_height );
/* Destroy XImages to change their size */
- vout_X11End( p_vout );
+ vout_End( p_vout );
/* Recreate XImages. If SysInit failed, the thread can't go on. */
- if( vout_X11Init( p_vout ) )
+ if( vout_Init( p_vout ) )
{
intf_ErrMsg("error: can't resize display");
return( 1 );
}
/*****************************************************************************
- * vout_X11Display: displays previously rendered output
+ * vout_Display: displays previously rendered output
*****************************************************************************
* This function send the currently rendered image to X11 server, wait until
* it is displayed and switch the two rendering buffer, preparing next frame.
*****************************************************************************/
-void vout_X11Display( vout_thread_t *p_vout )
+static void vout_Display( vout_thread_t *p_vout )
{
if( p_vout->p_sys->b_shm) /* XShm is used */
{
}
/*****************************************************************************
- * vout_X11SetPalette: sets an 8 bpp palette
+ * vout_SetPalette: sets an 8 bpp palette
*****************************************************************************
* This function sets the palette given as an argument. It does not return
* anything, but could later send information on which colors it was unable
* to set.
*****************************************************************************/
-void vout_X11SetPalette( p_vout_thread_t p_vout,
- u16 *red, u16 *green, u16 *blue, u16 *transp )
+static void vout_SetPalette( p_vout_thread_t p_vout,
+ u16 *red, u16 *green, u16 *blue, u16 *transp )
{
int i;
XColor color[255];
* Create a window according to video output given size, and set other
* properties according to the display properties.
*****************************************************************************/
-static int X11OpenDisplay( vout_thread_t *p_vout, char *psz_display, Window root_window, void *p_data )
+static int X11OpenDisplay( vout_thread_t *p_vout )
{
XPixmapFormatValues * p_xpixmap_format; /* pixmap formats */
XVisualInfo * p_xvisual; /* visuals informations */
}
}
+/*****************************************************************************
+ * Local prototypes
+ *****************************************************************************/
+static int X11CreateWindow ( intf_thread_t *p_intf );
+static void X11DestroyWindow ( intf_thread_t *p_intf );
+static void X11ManageWindow ( intf_thread_t *p_intf );
+static void X11EnableScreenSaver ( intf_thread_t *p_intf );
+static void X11DisableScreenSaver ( intf_thread_t *p_intf );
+static void X11TogglePointer ( intf_thread_t *p_intf );
+
+/*****************************************************************************
+ * intf_X11Create: initialize and create window
+ *****************************************************************************/
+int intf_X11Create( intf_thread_t *p_intf )
+{
+ char *psz_display;
+
+ /* Allocate instance and initialize some members */
+ p_intf->p_sys = malloc( sizeof( intf_sys_t ) );
+ if( p_intf->p_sys == NULL )
+ {
+ intf_ErrMsg("error: %s", strerror(ENOMEM));
+ return( 1 );
+ }
+
+ /* Open display, unsing 'vlc_display' or DISPLAY environment variable */
+ psz_display = XDisplayName( main_GetPszVariable( VOUT_DISPLAY_VAR, NULL ) );
+ p_intf->p_sys->p_display = XOpenDisplay( psz_display );
+ if( !p_intf->p_sys->p_display ) /* error */
+ {
+ intf_ErrMsg("error: can't open display %s", psz_display );
+ free( p_intf->p_sys );
+ return( 1 );
+ }
+ p_intf->p_sys->i_screen = DefaultScreen( p_intf->p_sys->p_display );
+
+ /* Spawn base window - this window will include the video output window,
+ * but also command buttons, subtitles and other indicators */
+ if( X11CreateWindow( p_intf ) )
+ {
+ intf_ErrMsg("error: can't create interface window" );
+ XCloseDisplay( p_intf->p_sys->p_display );
+ free( p_intf->p_sys );
+ return( 1 );
+ }
+
+ /* Spawn video output thread */
+ if( p_main->b_video )
+ {
+ p_intf->p_vout = vout_CreateThread( psz_display, p_intf->p_sys->window,
+ p_intf->p_sys->i_width,
+ p_intf->p_sys->i_height, NULL, 0,
+ (void *)&p_intf->p_sys->colormap );
+
+ if( p_intf->p_vout == NULL ) /* error */
+ {
+ intf_ErrMsg("error: can't create video output thread" );
+ X11DestroyWindow( p_intf );
+ XCloseDisplay( p_intf->p_sys->p_display );
+ free( p_intf->p_sys );
+ return( 1 );
+ }
+ }
+
+ p_intf->p_sys->b_mouse = 1;
+
+ /* bind keys */
+ intf_AssignNormalKeys( p_intf );
+
+ /* Disable screen saver and return */
+ p_intf->p_sys->i_ss_count = 1;
+ X11DisableScreenSaver( p_intf );
+ return( 0 );
+}
+
+/*****************************************************************************
+ * intf_X11Destroy: destroy interface window
+ *****************************************************************************/
+void intf_X11Destroy( intf_thread_t *p_intf )
+{
+ /* Enable screen saver */
+ X11EnableScreenSaver( p_intf );
+
+ /* Close input thread, if any (blocking) */
+ if( p_intf->p_input )
+ {
+ input_DestroyThread( p_intf->p_input, NULL );
+ }
+
+ /* Close video output thread, if any (blocking) */
+ if( p_intf->p_vout )
+ {
+ vout_DestroyThread( p_intf->p_vout, NULL );
+ }
+
+ /* Close main window and display */
+ X11DestroyWindow( p_intf );
+ XCloseDisplay( p_intf->p_sys->p_display );
+
+ /* Destroy structure */
+ free( p_intf->p_sys );
+}
+
+
+/*****************************************************************************
+ * intf_X11Manage: event loop
+ *****************************************************************************/
+void intf_X11Manage( intf_thread_t *p_intf )
+{
+ /* Manage main window */
+ X11ManageWindow( p_intf );
+}
+
+/* following functions are local */
+
+/*****************************************************************************
+ * X11CreateWindow: open and set-up X11 main window
+ *****************************************************************************/
+static int X11CreateWindow( intf_thread_t *p_intf )
+{
+ XSizeHints xsize_hints;
+ XSetWindowAttributes xwindow_attributes;
+ XGCValues xgcvalues;
+ XEvent xevent;
+ boolean_t b_expose;
+ boolean_t b_configure_notify;
+ boolean_t b_map_notify;
+
+ /* Set main window's size */
+ p_intf->p_sys->i_width = main_GetIntVariable( VOUT_WIDTH_VAR,
+ VOUT_WIDTH_DEFAULT );
+ p_intf->p_sys->i_height = main_GetIntVariable( VOUT_HEIGHT_VAR,
+ VOUT_HEIGHT_DEFAULT );
+
+ /* Prepare window manager hints and properties */
+ xsize_hints.base_width = p_intf->p_sys->i_width;
+ xsize_hints.base_height = p_intf->p_sys->i_height;
+ xsize_hints.flags = PSize;
+ p_intf->p_sys->wm_protocols = XInternAtom( p_intf->p_sys->p_display,
+ "WM_PROTOCOLS", True );
+ p_intf->p_sys->wm_delete_window = XInternAtom( p_intf->p_sys->p_display,
+ "WM_DELETE_WINDOW", True );
+
+ /* Prepare window attributes */
+ xwindow_attributes.backing_store = Always; /* save the hidden part */
+ xwindow_attributes.background_pixel = WhitePixel( p_intf->p_sys->p_display,
+ p_intf->p_sys->i_screen );
+
+ xwindow_attributes.event_mask = ExposureMask | StructureNotifyMask;
+
+ /* Create the window and set hints - the window must receive ConfigureNotify
+ * events, and, until it is displayed, Expose and MapNotify events. */
+ p_intf->p_sys->window =
+ XCreateWindow( p_intf->p_sys->p_display,
+ DefaultRootWindow( p_intf->p_sys->p_display ),
+ 0, 0,
+ p_intf->p_sys->i_width, p_intf->p_sys->i_height, 1,
+ 0, InputOutput, 0,
+ CWBackingStore | CWBackPixel | CWEventMask,
+ &xwindow_attributes );
+
+ /* Set window manager hints and properties: size hints, command,
+ * window's name, and accepted protocols */
+ XSetWMNormalHints( p_intf->p_sys->p_display, p_intf->p_sys->window,
+ &xsize_hints );
+ XSetCommand( p_intf->p_sys->p_display, p_intf->p_sys->window,
+ p_main->ppsz_argv, p_main->i_argc );
+ XStoreName( p_intf->p_sys->p_display, p_intf->p_sys->window, VOUT_TITLE );
+
+ if( (p_intf->p_sys->wm_protocols == None) /* use WM_DELETE_WINDOW */
+ || (p_intf->p_sys->wm_delete_window == None)
+ || !XSetWMProtocols( p_intf->p_sys->p_display, p_intf->p_sys->window,
+ &p_intf->p_sys->wm_delete_window, 1 ) )
+ {
+ /* WM_DELETE_WINDOW is not supported by window manager */
+ intf_Msg("intf error: missing or bad window manager - please exit program kindly.");
+ }
+
+ /* Creation of a graphic context that doesn't generate a GraphicsExpose
+ * event when using functions like XCopyArea */
+ xgcvalues.graphics_exposures = False;
+ p_intf->p_sys->gc = XCreateGC( p_intf->p_sys->p_display, p_intf->p_sys->window,
+ GCGraphicsExposures, &xgcvalues);
+ /* Send orders to server, and wait until window is displayed - three
+ * events must be received: a MapNotify event, an Expose event allowing
+ * drawing in the window, and a ConfigureNotify to get the window
+ * dimensions. Once those events have been received, only ConfigureNotify
+ * events need to be received. */
+ b_expose = 0;
+ b_configure_notify = 0;
+ b_map_notify = 0;
+ XMapWindow( p_intf->p_sys->p_display, p_intf->p_sys->window);
+ do
+ {
+ XNextEvent( p_intf->p_sys->p_display, &xevent);
+ if( (xevent.type == Expose)
+ && (xevent.xexpose.window == p_intf->p_sys->window) )
+ {
+ b_expose = 1;
+ }
+ else if( (xevent.type == MapNotify)
+ && (xevent.xmap.window == p_intf->p_sys->window) )
+ {
+ b_map_notify = 1;
+ }
+ else if( (xevent.type == ConfigureNotify)
+ && (xevent.xconfigure.window == p_intf->p_sys->window) )
+ {
+ b_configure_notify = 1;
+ p_intf->p_sys->i_width = xevent.xconfigure.width;
+ p_intf->p_sys->i_height = xevent.xconfigure.height;
+ }
+ } while( !( b_expose && b_configure_notify && b_map_notify ) );
+
+ XSelectInput( p_intf->p_sys->p_display, p_intf->p_sys->window,
+ StructureNotifyMask | KeyPressMask | ButtonPressMask );
+
+ if( XDefaultDepth(p_intf->p_sys->p_display, p_intf->p_sys->i_screen) == 8 )
+ {
+ /* Allocate a new palette */
+ p_intf->p_sys->colormap = XCreateColormap( p_intf->p_sys->p_display,
+ DefaultRootWindow( p_intf->p_sys->p_display ),
+ DefaultVisual( p_intf->p_sys->p_display,
+ p_intf->p_sys->i_screen ),
+ AllocAll );
+
+ xwindow_attributes.colormap = p_intf->p_sys->colormap;
+ XChangeWindowAttributes( p_intf->p_sys->p_display,
+ p_intf->p_sys->window,
+ CWColormap, &xwindow_attributes );
+ }
+
+ /* At this stage, the window is open, displayed, and ready to receive data */
+ return( 0 );
+}
+
+/*****************************************************************************
+ * X11DestroyWindow: destroy X11 main window
+ *****************************************************************************/
+static void X11DestroyWindow( intf_thread_t *p_intf )
+{
+ XUnmapWindow( p_intf->p_sys->p_display, p_intf->p_sys->window );
+ XFreeGC( p_intf->p_sys->p_display, p_intf->p_sys->gc );
+ XDestroyWindow( p_intf->p_sys->p_display, p_intf->p_sys->window );
+}
+
+/*****************************************************************************
+ * X11ManageWindow: manage X11 main window
+ *****************************************************************************/
+static void X11ManageWindow( intf_thread_t *p_intf )
+{
+ XEvent xevent; /* X11 event */
+ boolean_t b_resized; /* window has been resized */
+ char i_key; /* ISO Latin-1 key */
+
+ /* Handle X11 events: ConfigureNotify events are parsed to know if the
+ * output window's size changed, MapNotify and UnmapNotify to know if the
+ * window is mapped (and if the display is useful), and ClientMessages
+ * to intercept window destruction requests */
+ b_resized = 0;
+ while( XCheckWindowEvent( p_intf->p_sys->p_display, p_intf->p_sys->window,
+ StructureNotifyMask | KeyPressMask |
+ ButtonPressMask, &xevent ) == True )
+ {
+ /* ConfigureNotify event: prepare */
+ if( (xevent.type == ConfigureNotify)
+ && ((xevent.xconfigure.width != p_intf->p_sys->i_width)
+ || (xevent.xconfigure.height != p_intf->p_sys->i_height)) )
+ {
+ /* Update dimensions */
+ b_resized = 1;
+ p_intf->p_sys->i_width = xevent.xconfigure.width;
+ p_intf->p_sys->i_height = xevent.xconfigure.height;
+ }
+ /* MapNotify event: change window status and disable screen saver */
+ else if( xevent.type == MapNotify)
+ {
+ if( (p_intf->p_vout != NULL) && !p_intf->p_vout->b_active )
+ {
+ X11DisableScreenSaver( p_intf );
+ p_intf->p_vout->b_active = 1;
+ }
+ }
+ /* UnmapNotify event: change window status and enable screen saver */
+ else if( xevent.type == UnmapNotify )
+ {
+ if( (p_intf->p_vout != NULL) && p_intf->p_vout->b_active )
+ {
+ X11EnableScreenSaver( p_intf );
+ p_intf->p_vout->b_active = 0;
+ }
+ }
+ /* Keyboard event */
+ else if( xevent.type == KeyPress )
+ {
+ if( XLookupString( &xevent.xkey, &i_key, 1, NULL, NULL ) )
+ {
+ if( intf_ProcessKey( p_intf, i_key ) )
+ {
+ intf_DbgMsg("unhandled key '%c' (%i)", (char) i_key, i_key );
+ }
+ }
+ }
+ /* Mouse click */
+ else if( xevent.type == ButtonPress )
+ {
+ switch( ((XButtonEvent *)&xevent)->button )
+ {
+ case Button1:
+ /* in this part we will eventually manage
+ * clicks for DVD navigation for instance */
+ break;
+
+ case Button2:
+ X11TogglePointer( p_intf );
+ break;
+
+ case Button3:
+ vlc_mutex_lock( &p_intf->p_vout->change_lock );
+ p_intf->p_vout->b_interface = !p_intf->p_vout->b_interface;
+ p_intf->p_vout->i_changes |= VOUT_INTF_CHANGE;
+ vlc_mutex_unlock( &p_intf->p_vout->change_lock );
+ break;
+ }
+ }
+#ifdef DEBUG
+ /* Other event */
+ else
+ {
+ intf_DbgMsg( "%p -> unhandled event type %d received",
+ p_intf, xevent.type );
+ }
+#endif
+ }
+
+ /* ClientMessage event - only WM_PROTOCOLS with WM_DELETE_WINDOW data
+ * are handled - according to the man pages, the format is always 32
+ * in this case */
+ while( XCheckTypedEvent( p_intf->p_sys->p_display,
+ ClientMessage, &xevent ) )
+ {
+ if( (xevent.xclient.message_type == p_intf->p_sys->wm_protocols)
+ && (xevent.xclient.data.l[0] == p_intf->p_sys->wm_delete_window ) )
+ {
+ p_intf->b_die = 1;
+ }
+ else
+ {
+ intf_DbgMsg( "%p -> unhandled ClientMessage received", p_intf );
+ }
+ }
+
+ /*
+ * Handle vout or interface windows resizing
+ */
+ if( p_intf->p_vout != NULL )
+ {
+ if( b_resized )
+ {
+ /* If interface window has been resized, change vout size */
+ intf_DbgMsg( "resizing output window" );
+ vlc_mutex_lock( &p_intf->p_vout->change_lock );
+ p_intf->p_vout->i_width = p_intf->p_sys->i_width;
+ p_intf->p_vout->i_height = p_intf->p_sys->i_height;
+ p_intf->p_vout->i_changes |= VOUT_SIZE_CHANGE;
+ vlc_mutex_unlock( &p_intf->p_vout->change_lock );
+ }
+ else if( (p_intf->p_vout->i_width != p_intf->p_sys->i_width) ||
+ (p_intf->p_vout->i_height != p_intf->p_sys->i_height) )
+ {
+ /* If video output size has changed, change interface window size */
+ intf_DbgMsg( "resizing output window" );
+ p_intf->p_sys->i_width = p_intf->p_vout->i_width;
+ p_intf->p_sys->i_height = p_intf->p_vout->i_height;
+ XResizeWindow( p_intf->p_sys->p_display, p_intf->p_sys->window,
+ p_intf->p_sys->i_width, p_intf->p_sys->i_height );
+ }
+ }
+}
+
+/*****************************************************************************
+ * X11EnableScreenSaver: enable screen saver
+ *****************************************************************************
+ * This function enable the screen saver on a display after it had been
+ * disabled by XDisableScreenSaver. Both functions use a counter mechanism to
+ * know wether the screen saver can be activated or not: if n successive calls
+ * are made to XDisableScreenSaver, n successive calls to XEnableScreenSaver
+ * will be required before the screen saver could effectively be activated.
+ *****************************************************************************/
+void X11EnableScreenSaver( intf_thread_t *p_intf )
+{
+ if( p_intf->p_sys->i_ss_count++ == 0 )
+ {
+ intf_DbgMsg( "intf: enabling screen saver" );
+ XSetScreenSaver( p_intf->p_sys->p_display, p_intf->p_sys->i_ss_timeout,
+ p_intf->p_sys->i_ss_interval, p_intf->p_sys->i_ss_blanking,
+ p_intf->p_sys->i_ss_exposure );
+ }
+}
+
+/*****************************************************************************
+ * X11DisableScreenSaver: disable screen saver
+ *****************************************************************************
+ * See XEnableScreenSaver
+ *****************************************************************************/
+void X11DisableScreenSaver( intf_thread_t *p_intf )
+{
+ if( --p_intf->p_sys->i_ss_count == 0 )
+ {
+ /* Save screen saver informations */
+ XGetScreenSaver( p_intf->p_sys->p_display, &p_intf->p_sys->i_ss_timeout,
+ &p_intf->p_sys->i_ss_interval, &p_intf->p_sys->i_ss_blanking,
+ &p_intf->p_sys->i_ss_exposure );
+
+ /* Disable screen saver */
+ intf_DbgMsg("intf: disabling screen saver");
+ XSetScreenSaver( p_intf->p_sys->p_display, 0,
+ p_intf->p_sys->i_ss_interval, p_intf->p_sys->i_ss_blanking,
+ p_intf->p_sys->i_ss_exposure );
+ }
+}
+
+/*****************************************************************************
+ * X11TogglePointer: hide or show the mouse pointer
+ *****************************************************************************
+ * This function hides the X pointer if it is visible by putting it at
+ * coordinates (32,32) and setting the pointer sprite to a blank one. To
+ * show it again, we disable the sprite and restore the original coordinates.
+ *****************************************************************************/
+void X11TogglePointer( intf_thread_t *p_intf )
+{
+ static Cursor cursor;
+ static boolean_t b_cursor = 0;
+
+ if( p_intf->p_sys->b_mouse )
+ {
+ p_intf->p_sys->b_mouse = 0;
+
+ if( !b_cursor )
+ {
+ XColor color;
+ Pixmap blank = XCreatePixmap( p_intf->p_sys->p_display,
+ DefaultRootWindow(p_intf->p_sys->p_display),
+ 1, 1, 1 );
+
+ XParseColor( p_intf->p_sys->p_display,
+ XCreateColormap( p_intf->p_sys->p_display,
+ DefaultRootWindow(
+ p_intf->p_sys->p_display ),
+ DefaultVisual(
+ p_intf->p_sys->p_display,
+ p_intf->p_sys->i_screen ),
+ AllocNone ),
+ "black", &color );
+
+ cursor = XCreatePixmapCursor( p_intf->p_sys->p_display,
+ blank, blank, &color, &color, 1, 1 );
+
+ b_cursor = 1;
+ }
+ XDefineCursor( p_intf->p_sys->p_display,
+ p_intf->p_sys->window, cursor );
+ }
+ else
+ {
+ p_intf->p_sys->b_mouse = 1;
+
+ XUndefineCursor( p_intf->p_sys->p_display, p_intf->p_sys->window );
+ }
+}
/*****************************************************************************
* x11.c : X11 plugin for vlc
*****************************************************************************
- * Copyright (C) 2000 VideoLAN
- *
- * Authors:
+ * Copyright (C) 2000, 2001 VideoLAN
*
+ * Authors: Samuel Hocevar <sam@zoy.org>
+ *
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
*****************************************************************************/
+#define MODULE_NAME x11
+
/*****************************************************************************
* Preamble
*****************************************************************************/
#include <stdlib.h> /* malloc(), free() */
-#include <X11/Xlib.h>
-
#include "config.h"
#include "common.h" /* boolean_t, byte_t */
#include "threads.h"
#include "mtime.h"
-#include "tests.h"
-#include "plugins.h"
-#include "interface.h"
-#include "audio_output.h"
#include "video.h"
#include "video_output.h"
-#include "main.h"
+#include "modules.h"
+#include "modules_inner.h"
/*****************************************************************************
- * Exported prototypes
+ * Building configuration tree
*****************************************************************************/
-static void vout_GetPlugin( p_vout_thread_t p_vout );
-static void intf_GetPlugin( p_intf_thread_t p_intf );
-
-/* Video output */
-int vout_X11Create ( vout_thread_t *p_vout, char *psz_display,
- int i_root_window, void *p_data );
-int vout_X11Init ( p_vout_thread_t p_vout );
-void vout_X11End ( p_vout_thread_t p_vout );
-void vout_X11Destroy ( p_vout_thread_t p_vout );
-int vout_X11Manage ( p_vout_thread_t p_vout );
-void vout_X11Display ( p_vout_thread_t p_vout );
-void vout_X11SetPalette ( p_vout_thread_t p_vout,
- u16 *red, u16 *green, u16 *blue, u16 *transp );
-
-/* Interface */
-int intf_X11Create ( p_intf_thread_t p_intf );
-void intf_X11Destroy ( p_intf_thread_t p_intf );
-void intf_X11Manage ( p_intf_thread_t p_intf );
+MODULE_CONFIG_START
+ADD_WINDOW( "Configuration for X11 module" )
+ ADD_COMMENT( "For now, the X11 module cannot be configured" )
+MODULE_CONFIG_END
/*****************************************************************************
- * GetConfig: get the plugin structure and configuration
+ * Capabilities defined in the other files.
+ ******************************************************************************/
+extern void vout_getfunctions( function_list_t * p_function_list );
+
+/*****************************************************************************
+ * InitModule: get the module structure and configuration.
+ *****************************************************************************
+ * We have to fill psz_name, psz_longname and psz_version. These variables
+ * will be strdup()ed later by the main application because the module can
+ * be unloaded later to save memory, and we want to be able to access this
+ * data even after the module has been unloaded.
*****************************************************************************/
-plugin_info_t * GetConfig( void )
+int InitModule( module_t * p_module )
{
- Display *p_display;
- plugin_info_t * p_info = (plugin_info_t *) malloc( sizeof(plugin_info_t) );
-
- p_info->psz_name = "X Window System";
- p_info->psz_version = VERSION;
- p_info->psz_author = "the VideoLAN team <vlc@videolan.org>";
-
- p_info->aout_GetPlugin = NULL;
- p_info->vout_GetPlugin = vout_GetPlugin;
- p_info->intf_GetPlugin = intf_GetPlugin;
- p_info->yuv_GetPlugin = NULL;
-
- /* check that we can open the X display */
- if( (p_display = XOpenDisplay( XDisplayName(
- main_GetPszVariable( VOUT_DISPLAY_VAR, NULL ) ) ))
- == NULL )
- {
- p_info->i_score = 0x0;
- }
- else
- {
- XCloseDisplay( p_display );
- p_info->i_score = 0x200;
- }
+ p_module->psz_name = MODULE_STRING;
+ p_module->psz_longname = "X11 module";
+ p_module->psz_version = VERSION;
- if( TestProgram( "xvlc" ) )
- {
- p_info->i_score += 0x180;
- }
+ p_module->i_capabilities = MODULE_CAPABILITY_NULL
+ | MODULE_CAPABILITY_VOUT;
- /* If this plugin was requested, score it higher */
- if( TestMethod( VOUT_METHOD_VAR, "x11" ) )
+ return( 0 );
+}
+
+/*****************************************************************************
+ * ActivateModule: set the module to an usable state.
+ *****************************************************************************
+ * This function fills the capability functions and the configuration
+ * structure. Once ActivateModule() has been called, the i_usage can
+ * be set to 0 and calls to NeedModule() be made to increment it. To unload
+ * the module, one has to wait until i_usage == 0 and call DeactivateModule().
+ *****************************************************************************/
+int ActivateModule( module_t * p_module )
+{
+ p_module->p_functions = malloc( sizeof( module_functions_t ) );
+ if( p_module->p_functions == NULL )
{
- p_info->i_score += 0x200;
+ return( -1 );
}
- return( p_info );
+ vout_getfunctions( &p_module->p_functions->vout );
+
+ p_module->p_config = p_config;
+
+ return( 0 );
}
/*****************************************************************************
- * Following functions are only called through the p_info structure
+ * DeactivateModule: make sure the module can be unloaded.
+ *****************************************************************************
+ * This function must only be called when i_usage == 0. If it successfully
+ * returns, i_usage can be set to -1 and the module unloaded. Be careful to
+ * lock usage_lock during the whole process.
*****************************************************************************/
-
-static void vout_GetPlugin( p_vout_thread_t p_vout )
+int DeactivateModule( module_t * p_module )
{
- p_vout->p_sys_create = vout_X11Create;
- p_vout->p_sys_init = vout_X11Init;
- p_vout->p_sys_end = vout_X11End;
- p_vout->p_sys_destroy = vout_X11Destroy;
- p_vout->p_sys_manage = vout_X11Manage;
- p_vout->p_sys_display = vout_X11Display;
-
- /* optional functions */
- p_vout->p_set_palette = vout_X11SetPalette;
-}
+ free( p_module->p_functions );
-static void intf_GetPlugin( p_intf_thread_t p_intf )
-{
- p_intf->p_sys_create = intf_X11Create;
- p_intf->p_sys_destroy = intf_X11Destroy;
- p_intf->p_sys_manage = intf_X11Manage;
+ return( 0 );
}
Name: vlc
-Version: 0.2.50
+Version: 0.2.60
Release: 1
Copyright: GPL
Url: http://www.videolan.org/
Group: X11/Applications/Graphics
-Source0: http://www.videolan.org/packages/0.2.50/vlc_0.2.50-1.tar.gz
+Source0: http://www.videolan.org/packages/0.2.60/vlc-0.2.60.tar.gz
Packager: Samuel Hocevar <sam@zoy.org>
Buildroot: /tmp/vlc-build