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 );
}