Commit 1c99dc85 authored by Sam Hocevar's avatar Sam Hocevar

* updated version information to 0.2.60 -- today's release

 * started porting the X11 vout (still disabled)
 * a few unnoticeable changes in the Gnome intf
parent 8a1ec969
### THIS CHANGELOG HASN'T BEEN UPDATED FOR UNSTABLE ###
0.1.99j:
* Added hardware YUV overlay support (SDL). Huge performance
......
......@@ -332,7 +332,6 @@ PLUGIN_MGA = plugins/mga/mga.o \
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 \
......
......@@ -213,7 +213,7 @@ Status: Done 27 Aug 2000 (Meuuh)
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.
......
......@@ -602,7 +602,7 @@ host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
echo "$ac_t""$host" 1>&6
VLC_VERSION=0.2.50
VLC_VERSION=0.2.60
VLC_CODENAME=Urumov
......@@ -1018,7 +1018,7 @@ else
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;
......@@ -1975,15 +1975,12 @@ else
#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
......@@ -2038,7 +2035,7 @@ main()
/*
* 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)
......@@ -2059,7 +2056,7 @@ main()
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);
......@@ -2077,7 +2074,7 @@ main()
*/
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)
......@@ -2091,7 +2088,7 @@ main()
}
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
......@@ -2114,12 +2111,12 @@ EOF
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>
......@@ -2136,7 +2133,7 @@ int main() {
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
......@@ -2155,7 +2152,7 @@ EOF
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
......@@ -2163,7 +2160,7 @@ else
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
......@@ -2174,7 +2171,7 @@ int main() {
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
......@@ -2202,7 +2199,7 @@ 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
......@@ -2210,7 +2207,7 @@ else
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
......@@ -2221,7 +2218,7 @@ int main() {
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
......@@ -2249,7 +2246,7 @@ 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
......@@ -2257,7 +2254,7 @@ else
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
......@@ -2268,7 +2265,7 @@ int main() {
_()
; 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
......@@ -2296,7 +2293,7 @@ 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
......@@ -2304,7 +2301,7 @@ else
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
......@@ -2315,7 +2312,7 @@ int main() {
_()
; 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
......@@ -2343,7 +2340,7 @@ 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
......@@ -2351,7 +2348,7 @@ else
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
......@@ -2362,7 +2359,7 @@ int main() {
_()
; 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
......@@ -2390,7 +2387,7 @@ 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
......@@ -2398,7 +2395,7 @@ else
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
......@@ -2409,7 +2406,7 @@ int main() {
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
......@@ -2437,7 +2434,7 @@ 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
......@@ -2445,7 +2442,7 @@ else
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
......@@ -2456,7 +2453,7 @@ int main() {
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
......@@ -2484,7 +2481,7 @@ 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
......@@ -2492,7 +2489,7 @@ else
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
......@@ -2503,7 +2500,7 @@ int main() {
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
......@@ -2532,12 +2529,12 @@ fi
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. */
......@@ -2560,7 +2557,7 @@ getopt_long();
; 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
......@@ -2587,17 +2584,17 @@ for ac_hdr in stddef.h
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*
......@@ -2627,17 +2624,17 @@ for ac_hdr in getopt.h
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*
......@@ -2667,17 +2664,17 @@ for ac_hdr in sys/sockio.h
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*
......@@ -2707,17 +2704,17 @@ for ac_hdr in fcntl.h sys/ioctl.h sys/time.h unistd.h
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*
......@@ -2747,17 +2744,17 @@ for ac_hdr in sys/soundcard.h machine/soundcard.h
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*
......@@ -2787,17 +2784,17 @@ for ac_hdr in dlfcn.h image.h
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*
......@@ -2827,17 +2824,17 @@ for ac_hdr in arpa/inet.h net/if.h netinet/in.h sys/socket.h
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*
......@@ -2867,17 +2864,17 @@ for ac_hdr in machine/param.h
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*
......@@ -2908,17 +2905,17 @@ for ac_hdr in cthreads.h pthread.h kernel/scheduler.h kernel/OS.h
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*
......@@ -2949,9 +2946,9 @@ save_CFLAGS=$CFLAGS
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); }
......@@ -2959,7 +2956,7 @@ int main() {
; 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
......@@ -2976,16 +2973,16 @@ rm -f conftest*
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
......@@ -3000,9 +2997,9 @@ rm -f conftest*
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; }
......@@ -3010,7 +3007,7 @@ int main() {
; 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
......@@ -3026,18 +3023,18 @@ fi
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;
......@@ -3080,7 +3077,7 @@ ccp = (char const *const *) 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
......@@ -3101,12 +3098,12 @@ EOF
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>
......@@ -3114,7 +3111,7 @@ else
#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*
......@@ -3131,7 +3128,7 @@ rm -f 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
......@@ -3149,7 +3146,7 @@ fi
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
......@@ -3170,7 +3167,7 @@ if test "$cross_compiling" = yes; then
:
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')
......@@ -3181,7 +3178,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
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
......@@ -3205,12 +3202,12 @@ EOF
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
......@@ -3238,12 +3235,12 @@ EOF
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>
......@@ -3252,7 +3249,7 @@ int main() {
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
......@@ -3277,17 +3274,17 @@ for ac_hdr in sys/ioctl.h
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*
......@@ -3311,17 +3308,17 @@ EOF
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*
......@@ -3348,7 +3345,7 @@ fi
done
cat > conftest.$ac_ext <<EOF
#line 3352 "configure"
#line 3349 "configure"
#include "confdefs.h"
#include <linux/cdrom.h>
EOF
......@@ -3509,17 +3506,17 @@ if test "${enable_alsa+set}" = set; then
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*
......@@ -3536,7 +3533,7 @@ fi
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
......@@ -3544,14 +3541,14 @@ else
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
......
......@@ -4,7 +4,7 @@ AC_CONFIG_HEADER(include/defs.h)
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).
......
......@@ -33,14 +33,6 @@
#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"
......
......@@ -33,11 +33,6 @@
#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"
......
......@@ -99,14 +99,7 @@ on_menubar_playlist_activate (GtkMenuItem *menuitem,
"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 );
}
......@@ -131,6 +124,7 @@ on_menubar_about_activate (GtkMenuItem *menuitem,
"p_intf", p_intf );
}
gtk_widget_show( p_intf->p_sys->p_about );
gdk_window_raise( p_intf->p_sys->p_about->window );
}
......@@ -208,6 +202,7 @@ on_toolbar_playlist_clicked (GtkButton *button,
"p_intf", p_intf );
}
gtk_widget_show( p_intf->p_sys->p_playlist );
gdk_window_raise( p_intf->p_sys->p_playlist->window );
}
......@@ -354,6 +349,7 @@ on_popup_about_activate (GtkMenuItem *menuitem,
"p_intf", p_intf );
}
gtk_widget_show( p_intf->p_sys->p_about );
gdk_window_raise( p_intf->p_sys->p_about->window );
}
......@@ -466,3 +462,67 @@ on_hscale_button_press_event (GtkWidget *widget,
}
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 );
}
......@@ -159,3 +159,31 @@ gboolean
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);
......@@ -35,9 +35,9 @@ static GnomeUIInfo menubar_view_menu_uiinfo[] =
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
},
......@@ -130,7 +130,7 @@ create_intf_window (void)
(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);
......@@ -319,7 +319,7 @@ create_intf_window (void)
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);
......@@ -543,112 +543,164 @@ create_intf_fileopen (void)
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;
......
......@@ -6,4 +6,5 @@ GtkWidget* create_intf_window (void);
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);
......@@ -2,7 +2,7 @@
* 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:
*
......@@ -41,6 +41,7 @@ typedef struct intf_sys_s
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 */
......
......@@ -2,7 +2,7 @@
* 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:
*
......@@ -179,6 +179,7 @@ static void intf_Run( intf_thread_t *p_intf )
/* 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 */
......@@ -265,7 +266,7 @@ static gint GnomeManage( gpointer p_data )
vlc_mutex_unlock( &p_intf->p_sys->change_lock );
/* prepare to die, young man */
/* Prepare to die, young Skywalker */
gtk_main_quit();
return( FALSE );
}
......
......@@ -132,14 +132,14 @@
<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>
......@@ -429,8 +429,8 @@
<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>
......@@ -631,12 +631,118 @@ Henri Fallon &lt;henri@via.ecp.fr&gt;
</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>
......@@ -645,16 +751,72 @@ Henri Fallon &lt;henri@via.ecp.fr&gt;
<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>
......@@ -667,18 +829,18 @@ Henri Fallon &lt;henri@via.ecp.fr&gt;
<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>
......@@ -691,7 +853,7 @@ Henri Fallon &lt;henri@via.ecp.fr&gt;
<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>
......@@ -704,7 +866,7 @@ Henri Fallon &lt;henri@via.ecp.fr&gt;
<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>
......@@ -715,72 +877,6 @@ Henri Fallon &lt;henri@via.ecp.fr&gt;
</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>
......
......@@ -35,7 +35,6 @@
#include "common.h" /* boolean_t, byte_t */
#include "threads.h"
#include "mtime.h"
#include "tests.h"
#include "audio_output.h"
......
/*****************************************************************************
* 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 );
}
}
......@@ -2,9 +2,10 @@
* 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
......@@ -40,17 +41,20 @@
#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"
/*****************************************************************************
......@@ -78,12 +82,39 @@ typedef struct vout_sys_s
/* 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 );
......@@ -95,14 +126,45 @@ static void X11DestroyShmImage ( vout_thread_t *p_vout, XImage *p_ximage,
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 ) );
......@@ -116,7 +178,7 @@ int vout_X11Create( vout_thread_t *p_vout, char *psz_display,
* 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 );
......@@ -127,12 +189,12 @@ int vout_X11Create( vout_thread_t *p_vout, char *psz_display,
}
/*****************************************************************************
* 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;
......@@ -189,12 +251,12 @@ int vout_X11Init( vout_thread_t *p_vout )
}
/*****************************************************************************
* 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... */
{
......@@ -211,24 +273,24 @@ void vout_X11End( vout_thread_t *p_vout )
}
/*****************************************************************************
* 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
......@@ -252,10 +314,10 @@ int vout_X11Manage( vout_thread_t *p_vout )
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 );
......@@ -272,12 +334,12 @@ int vout_X11Manage( vout_thread_t *p_vout )
}
/*****************************************************************************
* 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 */
{
......@@ -305,14 +367,14 @@ void vout_X11Display( vout_thread_t *p_vout )
}
/*****************************************************************************
* 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];
......@@ -343,7 +405,7 @@ void vout_X11SetPalette( p_vout_thread_t p_vout,
* 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 */
......@@ -698,4 +760,474 @@ static void X11DestroyShmImage( vout_thread_t *p_vout, XImage *p_ximage,
}
}
/*****************************************************************************
* 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
......@@ -20,6 +20,8 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
*****************************************************************************/
#define MODULE_NAME x11
/*****************************************************************************
* Preamble
*****************************************************************************/
......@@ -27,109 +29,84 @@
#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
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment