Mercurial > mplayer.hg
view Gui/mplayer/widgets.c @ 4756:75fe20ca2386
Screenshot on the fly
author | nick |
---|---|
date | Mon, 18 Feb 2002 18:37:39 +0000 |
parents | 116abdd0aed1 |
children | 3473ca9ef158 |
line wrap: on
line source
#include <stdlib.h> #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <sys/wait.h> #include <unistd.h> #include <string.h> #include <signal.h> #include <gdk/gdkprivate.h> #include <gdk/gdkkeysyms.h> #include <gdk/gdk.h> #include <gtk/gtk.h> #include "widgets.h" #include "./mplayer.h" #include "psignal.h" #include "../events.h" #include "../../config.h" #include "../../help_mp.h" #include "../error.h" GtkWidget * SkinBrowser; GtkWidget * PlayList; GtkWidget * FileSelect; GtkWidget * AboutBox; GtkWidget * Options; GtkWidget * PopUpMenu; GtkWidget * MessageBox; GtkWidget * WarningPixmap; GtkWidget * ErrorPixmap; int gtkVisibleSkinBrowser = 0; int gtkVisiblePlayList = 0; int gtkVisibleFileSelect = 0; int gtkVisibleMessageBox = 0; int gtkVisibleAboutBox = 0; int gtkVisibleOptions = 0; gtkCommStruct * gtkShMem; #include "gtk/sb.h" #include "gtk/pl.h" #include "gtk/fs.h" #include "gtk/mb.h" #include "gtk/about.h" #include "gtk/opts.h" #include "gtk/menu.h" void widgetsCreate( void ) { AboutBox=create_About(); SkinBrowser=create_SkinBrowser(); PlayList=create_PlayList(); FileSelect=create_FileSelect(); MessageBox=create_MessageBox(0); Options=create_Options(); // PopUpMenu=create_PopUpMenu(); } // --- forked function extern char *mDisplayName; static void gtkThreadProc( int argc,char * argv[] ) { struct sigaction sa; #ifdef HAVE_RTC setuid( getuid() ); // strongly test, please check this. #endif gtk_set_locale(); { char tmp[128]; sprintf( tmp,"--display=%s",mDisplayName ); argv[argc++]=strdup( tmp ); gtk_init( &argc,&argv ); } gdk_set_use_xshm( TRUE ); printf( "[gtk] display: %s\n",gdk_get_display() ); widgetsCreate(); gtkPID=getppid(); memset(&sa, 0, sizeof(sa)); sa.sa_handler = gtkSigHandler; sigaction( SIGTYPE, &sa, NULL ); gtkIsOk=True; gtkSendMessage( evGtkIsOk ); gtk_main(); printf( "[gtk] exit.\n" ); exit( 0 ); } // --- init & close gtk void gtkInit( int argc,char* argv[], char *envp[] ) { gtkShMem=shmem_alloc( sizeof( gtkCommStruct ) ); if ( ( gtkPID = fork() ) == 0 ) gtkThreadProc( argc,argv ); } void gtkDone( void ){ gtkSendMessage(evExit); usleep(50000); // 50ms should be enough! printf("gtk killed...\n"); kill( gtkPID,SIGKILL ); } void gtkMessageBox( int type,gchar * str ) { if ( !gtkIsOk ) return; gtkShMem->mb.type=type; strcpy( gtkShMem->mb.str,str ); gtkSendMessage( evMessageBox ); } void gtkClearList( GtkWidget * list ) { gtk_clist_clear( GTK_CLIST( list ) ); } int gtkFindCList( GtkWidget * list,char * item ) { gint j,t; gchar * tmpstr; for( t=0,j=0;j<GTK_CLIST( list )->rows;j++ ) { gtk_clist_get_text( GTK_CLIST( list ),j,0,&tmpstr ); if ( !strcmp( tmpstr,item ) ) return j; } return -1; } void gtkSetDefaultToCList( GtkWidget * list,char * item ) { gint i; if ( ( i=gtkFindCList( list,item ) ) > -1 ) gtk_clist_select_row( GTK_CLIST( list ),i,0 ); }