CRioMMBrowser Class Reference

#include <RioMMBrowser.h>

Inherits CRioMMSlideShow.

Public Member Functions

 CRioMMBrowser (char *, unsigned int, RioBlock, struct timeval RTT_average)
 ~CRioMMBrowser (void)
int init (void)
int Cleanup (void)
void Stop (void)
bool ChangeContext (const char *, int)
void SyncSpecific (void)
int ProcessSignal (int, void *)
bool readSettings ()
void writeDefaultSettings ()

Private Member Functions

void SendCommandToNetscape (const char *)
int OpenNetscapeWindow (void)
void StartBrowser (void)
Window mozilla_remote_find_window (void)
bool mozilla_remote_check_window (void)
int mozilla_remote_command (bool, const char *)
void mozilla_remote_obtain_lock (void)
void mozilla_remote_free_lock (void)
int isMozillaWindow (Display *, Window)

Private Attributes

pid_t browser_pid
char NetscapeID [11]
Display * dpy
Window NetscapeWindow
Atom XA_MOZILLA_VERSION
Atom XA_MOZILLA_LOCK
Atom XA_MOZILLA_COMMAND
Atom XA_MOZILLA_RESPONSE
char * lock_data
QStringList * browserCmdLine
pthread_t tid

Detailed Description

Definition at line 46 of file RioMMBrowser.h.


Constructor & Destructor Documentation

CRioMMBrowser::CRioMMBrowser ( char *  VideoName,
unsigned int  blocksize,
RioBlock  numBuffers,
struct timeval  RTT_average 
)

Definition at line 41 of file RioMMBrowser.cpp.

00044                : CRioMMSlideShow( VideoName, blocksize, numBuffers , RTT_average )
00045 {
00046     /* Media Synchronization Language Version */
00047     Major     = 1;
00048     Minor     = 0;
00049 
00050     /* There are no Netscape specific commands */
00051     CommandsList     = NULL;
00052     NumberOfCommands = 0;
00053 
00054     /* Initialize X-Windows data */
00055     dpy            = 0x0;
00056     NetscapeWindow = 0x0;
00057     lock_data      = NULL;
00058     tid            = 0;
00059     browser_pid    = 0;
00060     browserCmdLine = NULL;
00061 }

CRioMMBrowser::~CRioMMBrowser ( void   ) 

Definition at line 64 of file RioMMBrowser.cpp.

00065 {
00066     Cleanup();
00067 }


Member Function Documentation

bool CRioMMBrowser::ChangeContext ( const char *  file_name,
int  slide_number 
) [virtual]

Reimplemented from CRioMMSlideShow.

Definition at line 119 of file RioMMBrowser.cpp.

00120 {
00121     TString NextFileName;
00122 
00123     if( !NetscapeWindow )
00124         NetscapeWindow = mozilla_remote_find_window();
00125 
00126     if( !NetscapeWindow || !dpy )
00127         return false;
00128 
00129     NextFileName = file_name;
00130     if( NextFileName != CurrentFileName )
00131     {
00132         if( NextFileName.BeginsWith( "LOCAL:" ) )
00133         {
00134             Command = "openFile(" + TempDirectory + "/" +
00135                       NextFileName.Substring( strlen( "LOCAL:" ) ) + ")";
00136         }
00137         else
00138         {
00139             Command = "openURL(" + NextFileName + ")";
00140         }
00141 
00142         SendCommandToNetscape( Command );
00143     }
00144 
00145     CRioMMSlideShow::ChangeContext( file_name, slide_number );
00146 
00147     return true;
00148 }

int CRioMMBrowser::Cleanup ( void   )  [virtual]

Implements CRioMMSlideShow.

Definition at line 90 of file RioMMBrowser.cpp.

00091 {
00092     if( NetscapeWindow )
00093     {
00094         if( mozilla_remote_check_window() )
00095             SendCommandToNetscape( "close()" );
00096         /* Close seems to not work if it is the last window */
00097         if( mozilla_remote_check_window() )
00098             SendCommandToNetscape( "exit()" );
00099 
00100         NetscapeWindow = 0;
00101     }
00102 
00103     if( dpy )
00104     {
00105         XCloseDisplay( dpy );
00106         dpy = NULL;
00107     }
00108 
00109     return 1;
00110 }

int CRioMMBrowser::init ( void   )  [virtual]

Reimplemented from CRioMMSlideShow.

Definition at line 70 of file RioMMBrowser.cpp.

00071 {
00072     dpy = XOpenDisplay( NULL );
00073     if( dpy == NULL )
00074         return 0;
00075 
00076     XA_MOZILLA_VERSION  = XInternAtom( dpy, MOZILLA_VERSION_PROP,  False );
00077     XA_MOZILLA_LOCK     = XInternAtom( dpy, MOZILLA_LOCK_PROP,     False );
00078     XA_MOZILLA_COMMAND  = XInternAtom( dpy, MOZILLA_COMMAND_PROP,  False );
00079     XA_MOZILLA_RESPONSE = XInternAtom( dpy, MOZILLA_RESPONSE_PROP, False );
00080 
00081     if( !readSettings() )
00082         writeDefaultSettings();
00083 
00084     OpenNetscapeWindow();
00085 
00086     return( 1 );
00087 }

int CRioMMBrowser::isMozillaWindow ( Display *  dpy,
Window  w 
) [private]

Definition at line 329 of file RioMMBrowser.cpp.

00330 {
00331     int           status;
00332     XTextProperty titleName;
00333 
00334     status = 0;
00335     if( XGetWMName( dpy, w, &titleName ) != 0 )
00336     {
00337         if( titleName.encoding == XA_STRING )
00338         {
00339             const char *t_dir = (const char *)TempDirectory;
00340             if( strncmp( t_dir, (char *)titleName.value, strlen(t_dir) ) == 0 )
00341                 status = 1;
00342         }
00343     }
00344 
00345     return( status );
00346 }

bool CRioMMBrowser::mozilla_remote_check_window ( void   )  [private]

Definition at line 388 of file RioMMBrowser.cpp.

00389 {
00390     Atom type;
00391     int format;
00392     bool retCode;
00393     unsigned long nitems, bytesafter;
00394     unsigned char *version = 0;
00395     int status = XGetWindowProperty( dpy, NetscapeWindow, XA_MOZILLA_VERSION,
00396                                      0, (65536 / sizeof( int )),
00397                                      False, XA_STRING,
00398                                      &type, &format, &nitems, &bytesafter,
00399                                      &version );
00400 
00401     retCode = false;
00402     if(status != Success || !version)
00403     {
00404         #ifdef RIO_DEBUG2
00405         RioErr << "RioNetscape: window " << showbase << hex 
00406                << (unsigned int) NetscapeWindow << noshowbase << dec 
00407                << " is not a Netscape window." << endl;
00408         #endif
00409     }
00410     else
00411     {
00412         retCode = true;
00413     }
00414     XFree( version );
00415 
00416     return( retCode );
00417 }

int CRioMMBrowser::mozilla_remote_command ( bool  raise_p,
const char *  command 
) [private]

Definition at line 421 of file RioMMBrowser.cpp.

00422 {
00423     int result;
00424     Bool done = False;
00425     char new_command[ 255 ];
00426 
00427     result = False;
00428     /* The -noraise option is implemented by passing a "noraise" argument
00429        to each command to which it should apply.
00430     */
00431     if( !raise_p )
00432     {
00433         char *close;
00434         strcpy (new_command, command);
00435         close = strrchr (new_command, ')');
00436         if( close )
00437             strcpy (close, ", noraise)");
00438         else
00439             strcat (new_command, "(noraise)");
00440         command = new_command;
00441     }
00442 
00443     XChangeProperty( dpy, NetscapeWindow, XA_MOZILLA_COMMAND, XA_STRING, 8,
00444                      PropModeReplace, (unsigned char *)command,
00445                      strlen( command ) );
00446 
00447     while( !done )
00448     {
00449         XEvent event;
00450         XNextEvent( dpy, &event );
00451         if( event.xany.type             == DestroyNotify &&
00452             event.xdestroywindow.window == NetscapeWindow )
00453         {
00454             /* Print to warn user...*/
00455             #ifdef RIO_DEBUG2
00456             RioErr << "RioNetscape: window " << showbase << hex 
00457                    << (unsigned int) NetscapeWindow << noshowbase << dec 
00458                    << " was destroyed." << endl;
00459             #endif
00460             
00461             result = 6;
00462             goto DONE;
00463         }
00464         else if( event.xany.type        == PropertyNotify   &&
00465                  event.xproperty.state  == PropertyNewValue &&
00466                  event.xproperty.window == NetscapeWindow   &&
00467                  event.xproperty.atom   == XA_MOZILLA_RESPONSE )
00468         {
00469             Atom actual_type;
00470             int actual_format;
00471             unsigned long nitems, bytes_after;
00472             unsigned char *data = 0;
00473 
00474             result = XGetWindowProperty( dpy, NetscapeWindow,
00475                                          XA_MOZILLA_RESPONSE,
00476                                          0, (65536 / sizeof (int)),
00477                                          True, /* atomic delete after */
00478                                          XA_STRING,
00479                                          &actual_type, &actual_format,
00480                                          &nitems, &bytes_after,
00481                                          &data );
00482             
00483             #ifdef RIO_DEBUG2
00484             if( result == Success && data && *data )
00485             {
00486                 RioErr << "RioNetscape: (server sent " << MOZILLA_RESPONSE_PROP 
00487                        << " \"" << data << "\" to " << showbase << hex 
00488                        << (unsigned int) NetscapeWindow << noshowbase << dec 
00489                        << ".)" << endl;
00490                          
00491             }
00492             #endif
00493 
00494             if(result != Success)
00495             {
00496                 #ifdef RIO_DEBUG2
00497                 RioErr << "RioNetscape: failed reading " 
00498                        << MOZILLA_RESPONSE_PROP << " from window " << showbase 
00499                        << hex << (unsigned int) NetscapeWindow << noshowbase 
00500                        << dec << "." << endl;
00501                 #endif
00502                 
00503                 result = 6;
00504                 done = True;
00505             }
00506             else if(!data || strlen((char *) data) < 5)
00507             {
00508                 #ifdef RIO_DEBUG2
00509                 RioErr << "RioNetscape: invalid data on " 
00510                        << MOZILLA_RESPONSE_PROP << " property of window " 
00511                        << showbase << hex << (unsigned int) NetscapeWindow 
00512                        << noshowbase << dec << "." << endl;
00513                 #endif
00514                 
00515                 result = 6;
00516                 done   = True;
00517             }
00518             else if(*data == '1') /* positive preliminary reply */
00519             {
00520                 #ifdef RIO_DEBUG2
00521                 RioErr << "RioNetscape: " << data + 4 << endl; 
00522                 #endif
00523                 
00524                 /* keep going */
00525                 done = False;
00526             }
00527             else if( !strncmp( (char *)data, "200", 3 ) ) /* positive completion */
00528             {
00529                 result = 0;
00530                 done   = True;
00531             }
00532             else if( *data == '2' ) /* positive completion */
00533             {
00534                 #ifdef RIO_DEBUG2
00535                 RioErr << "RioNetscape: " << data + 4 << endl; 
00536                 #endif
00537                 
00538                 result = 0;
00539                 done = True;
00540             }
00541             else if( *data == '3' ) /* positive intermediate reply */
00542             {
00543                 #ifdef RIO_DEBUG2
00544                 RioErr << "RioNetscape: internal error: server wants more "
00545                        << "information? (" << data << ")" << endl;
00546                 #endif
00547           
00548                 result = 3;
00549                 done = True;
00550             }
00551             else if( *data == '4' ||  /* transient negative completion */
00552                      *data == '5')    /* permanent negative completion */
00553             {
00554                 result = (*data - '0');
00555                 done = True;
00556             }
00557             else
00558             {
00559                 #ifdef RIO_DEBUG2
00560                 RioErr << "RioNetscape: unrecognised " 
00561                        << MOZILLA_RESPONSE_PROP << " from window " << showbase 
00562                        << hex << (unsigned int) NetscapeWindow << noshowbase 
00563                        << dec << ": " << data << endl;
00564                 #endif
00565                 
00566                 result = 6;
00567                 done = True;
00568             }
00569 
00570             if( data )
00571                 XFree( data );
00572         }
00573         #ifdef DEBUG_PROPS
00574         else if( event.xany.type == PropertyNotify &&
00575                  event.xproperty.window == window &&
00576                  event.xproperty.state == PropertyDelete &&
00577                  event.xproperty.atom == XA_MOZILLA_COMMAND)
00578         {
00579             RioErr << "RioNetscape: (server " << showbase << hex 
00580                    << (unsigned int) NetscapeWindow << noshowbase << dec
00581                    << " has accepted " << MOZILLA_RESPONSE_PROP << ".)"  
00582                    << endl;
00583         }
00584         #endif /* DEBUG_PROPS */
00585     } //fim do while( !done )
00586 
00587 DONE:
00588 
00589     return result;
00590 }

Window CRioMMBrowser::mozilla_remote_find_window ( void   )  [private]

Definition at line 348 of file RioMMBrowser.cpp.

00349 {
00350     int           i;
00351     unsigned int  nkids;
00352     Window        rw;
00353     Window        root;
00354     Window        parent;
00355     Window       *kids;
00356     Window        curWindow;
00357 
00358     i         = -1;
00359     curWindow =  0;
00360     
00361     if( dpy == 0 )
00362         return 0;
00363     
00364     rw = RootWindowOfScreen( DefaultScreenOfDisplay( dpy ) );
00365     /* List all windows in the current root window */
00366     if( XQueryTree( dpy, rw, &root, &parent, &kids, &nkids ) )
00367     {
00368         if( nkids > 0 && kids != NULL )
00369         {
00370             /* We search backwards since the newest windows are at the end */
00371             for( i = nkids - 1; i >= 0; i-- )
00372             {
00373                 /* Get the wid of the current window */
00374                 curWindow = XmuClientWindow( dpy, kids[ i ] );
00375                 if( isMozillaWindow( dpy, curWindow ) )
00376                     break;
00377             }
00378         }
00379         XFree( kids );
00380     }
00381 
00382     if( i < 0 )
00383         curWindow = 0;
00384 
00385     return( curWindow );
00386 }

void CRioMMBrowser::mozilla_remote_free_lock ( void   )  [private]

Definition at line 693 of file RioMMBrowser.cpp.

00694 {
00695     int result;
00696     Atom actual_type;
00697     int actual_format;
00698     unsigned long nitems, bytes_after;
00699     unsigned char *data = 0;
00700 
00701     result = XGetWindowProperty( dpy, NetscapeWindow, XA_MOZILLA_LOCK,
00702                                  0, (65536 / sizeof (int)),
00703                                  True, /* atomic delete after */
00704                                  XA_STRING,
00705                                  &actual_type, &actual_format,
00706                                  &nitems, &bytes_after,
00707                                  &data );
00708     if( result != Success )
00709     {
00710         #ifdef RIO_DEBUG2
00711         RioErr << ": unable to read and delete " << MOZILLA_LOCK_PROP 
00712                << " property" << endl;
00713         #endif
00714         
00715         return;
00716     }
00717     else if( !data || !*data )
00718     {
00719         #ifdef RIO_DEBUG2
00720         RioErr << ": invalid data on " << MOZILLA_LOCK_PROP << " of window "
00721                << showbase << hex << (unsigned int) NetscapeWindow 
00722                << noshowbase << dec << "." << endl;
00723         #endif
00724         
00725         return;
00726     }
00727     else if( strcmp( (char *) data, lock_data) )
00728     {
00729         #ifdef RIO_DEBUG2
00730         RioErr << ": " << MOZILLA_LOCK_PROP << " was stolen! Expected \"" 
00731                << lock_data << "\", saw \"" << data << "\"!" << endl;
00732         #endif
00733         
00734         return;
00735     }
00736 
00737     if( data )
00738         XFree( data );
00739 }

void CRioMMBrowser::mozilla_remote_obtain_lock ( void   )  [private]

Definition at line 592 of file RioMMBrowser.cpp.

00593 {
00594     bool locked = false;
00595     bool waited = false;
00596 
00597     if( !lock_data )
00598     {
00599         lock_data = (char *) malloc(255);
00600         sprintf( lock_data, "pid%d@", getpid() );
00601         if( gethostname( lock_data + strlen( lock_data ), 100) )
00602         {
00603             Rioperror("gethostname");
00604             exit (-1);
00605         }
00606     }
00607 
00608     do
00609     {
00610         int result;
00611         Atom actual_type;
00612         int actual_format;
00613         unsigned long nitems, bytes_after;
00614         unsigned char *data = 0;
00615 
00616         XGrabServer( dpy );   /* ################################# DANGER! */
00617 
00618         result = XGetWindowProperty( dpy, NetscapeWindow, XA_MOZILLA_LOCK,
00619                                      0, (65536 / sizeof( int )),
00620                                      False, /* don't delete */
00621                                      XA_STRING,
00622                                      &actual_type, &actual_format,
00623                                      &nitems, &bytes_after,
00624                                      &data );
00625         if( result != Success || actual_type == None )
00626         {
00627              // It's not now locked - lock it.
00628              XChangeProperty( dpy, NetscapeWindow, XA_MOZILLA_LOCK, XA_STRING,
00629                               8, PropModeReplace, (unsigned char *) lock_data,
00630                               strlen( lock_data ) );
00631              locked = true;
00632         }
00633 
00634         XUngrabServer( dpy ); /* ################################# danger over */
00635         XSync( dpy, 0 );
00636         
00637         if( !locked )
00638         {
00639             /* We tried to grab the lock this time, and failed because someone
00640                else is holding it already.  So, wait for a PropertyDelete event
00641                to come in, and try again. */
00642         
00643             #ifdef RIO_DEBUG2
00644             RioErr << ": window " << showbase << hex 
00645                    << (unsigned int) NetscapeWindow << noshowbase << dec
00646                    << " is locked by " << data << "; waiting..." << endl;
00647             #endif
00648             
00649             waited = true;
00650         
00651             while( 1 )
00652             {
00653                 XEvent event;
00654                 XNextEvent( dpy, &event );
00655                 if( event.xany.type             == DestroyNotify &&
00656                     event.xdestroywindow.window == NetscapeWindow )
00657                 {
00658                     RioErr << ": window " << showbase << hex 
00659                            << (unsigned int) NetscapeWindow << noshowbase << dec
00660                            << " unexpectedly destroyed." << endl;
00661                     exit (6);
00662                 }
00663                 else if( event.xany.type        == PropertyNotify &&
00664                          event.xproperty.state  == PropertyDelete &&
00665                          event.xproperty.window == NetscapeWindow &&
00666                          event.xproperty.atom   == XA_MOZILLA_LOCK )
00667                 {
00668                     /* Ok!  Someone deleted their lock, so now we can try
00669                        again. */
00670                     #ifdef DEBUG_PROPS
00671                     RioErr << ": (" << showbase << hex 
00672                            << (unsigned int) NetscapeWindow << noshowbase << dec
00673                            << " unlocked, trying again...)" << endl;
00674                     #endif
00675                     
00676                     break;
00677                 }
00678             } //fim do while( 1 )
00679         } // fim do if( !locked )
00680         
00681         if( data )
00682             XFree( data );
00683     }
00684 
00685     //FIXME: Busy wait aqui! Usar algo mais inteligente!
00686     while(!locked );
00687 
00688     if( waited )
00689         RioErr << ": obtained lock." << endl;
00690 }

int CRioMMBrowser::OpenNetscapeWindow ( void   )  [private]

Definition at line 201 of file RioMMBrowser.cpp.

00202 {
00203     int status;
00204 
00205     status = 0;
00206     if( !NetscapeWindow )
00207     {
00208         if( !(NetscapeWindow = mozilla_remote_find_window()) )
00209             StartBrowser();
00210     }
00211     else
00212     {
00213         if( !mozilla_remote_check_window() )
00214             StartBrowser();
00215     }
00216 
00217     if( (NetscapeWindow = mozilla_remote_find_window()) )
00218         status = 1;
00219     
00220     return( status );
00221 }

int CRioMMBrowser::ProcessSignal ( int  sig,
void *  data 
) [virtual]

Reimplemented from CRioMMObject.

Definition at line 243 of file RioMMBrowser.cpp.

00244 {
00245     int status;
00246 
00247     status = 0;
00248     switch( sig )
00249     {
00250         case SIGHUP:
00251             readSettings();
00252             break;
00253 
00254         case SIGCHLD:
00255             if( (long)data == browser_pid )
00256                 dpy = 0x0;
00257             break;
00258     }
00259 
00260     /* if it is not fatal, forward signal to the slave medias */
00261     if( status != 2 )
00262         CRioMMObject::ProcessSignal( sig, data );
00263 
00264     return( status );
00265 }

bool CRioMMBrowser::readSettings ( void   ) 

Definition at line 290 of file RioMMBrowser.cpp.

00291 {
00292     ConfigData  config;
00293     bool        ok1 = false,
00294                 ok2 = false;
00295     QString     browserPath, opt_value, temp;
00296     QStringList args;
00297 
00298     config.readRioMMClientSettings();
00299     opt_value = config.getRioMMBVersion();
00300     if( opt_value != QString::null )
00301     {
00302         //Se a versao do arquivo riorc for diferente de RIORC_RIOMMBROWSER_VERSION, seus dados
00303         //ser�o ignorados e os valores defaults ser�o escritos no mesmo atrav�s da
00304         //fun��o writeDefaultSettings assim que esta fun��o retornar false.
00305         if( opt_value == RIORC_RIOMMBROWSER_VERSION )
00306         {
00307             ok1 = true;
00308 
00309             opt_value = QString::null;
00310             opt_value = config.getRioMMBBrowser();
00311 
00312             if( opt_value != QString::null )
00313             {
00314                 ok2 = true;
00315                 if( browserCmdLine )
00316                     delete browserCmdLine;
00317                 browserCmdLine = new QStringList();
00318                 browserCmdLine->append( config.getRioMMBBinary() );
00319                 args = QStringList::split( " ", config.getRioMMBArguments() );
00320                 *browserCmdLine += args;
00321 
00322             }
00323         }
00324     }
00325 
00326     return( ok1 && ok2 );
00327 }

void CRioMMBrowser::SendCommandToNetscape ( const char *  command  )  [private]

Definition at line 223 of file RioMMBrowser.cpp.

00224 {
00225     int status;
00226 
00227     XSelectInput( dpy, NetscapeWindow, (PropertyChangeMask|StructureNotifyMask) );
00228 
00229     mozilla_remote_obtain_lock();
00230 
00231     status = mozilla_remote_command( false, command );
00232 
00233     if( status != 6 )
00234         mozilla_remote_free_lock();
00235 }

void CRioMMBrowser::StartBrowser ( void   )  [private]

Definition at line 156 of file RioMMBrowser.cpp.

00157 {
00158     TString url( "file://" );
00159 
00160     if( (browser_pid = fork()) != 0 )
00161     {
00162         if( browser_pid < 0 )
00163         {
00164             #ifdef RIO_DEBUG2
00165             RioErr << "fork(). Failed to fork process." << endl;
00166             #endif
00167             
00168             return;
00169         }
00170         sleep( 2 );
00171     }
00172     else
00173     {
00174         int    argc;
00175         char **argv;
00176         QString aux("");
00177 
00178         argc = 0;
00179         argv = (char **)malloc(sizeof( char * )* (browserCmdLine->count() + 1));
00180         CreateFakeSlide();
00181         url += TempDirectory + "/init.html";
00182 
00183         for( QStringList::Iterator it = browserCmdLine->begin(); it != browserCmdLine->end(); it++ )
00184         {
00185             (*it).replace( "%u", QString( (const char *)url ) );
00186             argv[ argc++ ] = strdup( (*it).latin1() );
00187             aux += " " + (*it);
00188         }
00189         argv[ argc++ ] = NULL;
00190 
00191         //run browser
00192         if( execvp( argv[ 0 ], argv ) == -1 )
00193         {
00194             RioErr << "execlp(): Failed to execute browser command:" << endl;
00195             RioErr << "  " << aux.latin1() << endl;
00196             return;
00197         }
00198     }
00199 }

void CRioMMBrowser::Stop ( void   )  [virtual]

Reimplemented from CRioMMSlideShow.

Definition at line 113 of file RioMMBrowser.cpp.

00114 {
00115     CRioMMSlideShow::Stop();
00116 }

void CRioMMBrowser::SyncSpecific ( void   )  [virtual]

Implements CRioMMSlideShow.

Definition at line 150 of file RioMMBrowser.cpp.

00151 {
00152     if( dpy )
00153         XSync( dpy, 0 );
00154 }

void CRioMMBrowser::writeDefaultSettings ( void   ) 

Definition at line 273 of file RioMMBrowser.cpp.

00274 {
00275     ConfigData config;
00276     QStringList args;
00277     config.writeDefaultRioMMBrowserSettings();
00278     config.readRioMMClientSettings();
00279 
00280     browserCmdLine = new QStringList( DEFAULT_BROWSER );
00281     args = QStringList::split( " ", config.getRioMMBArguments() );
00282     *browserCmdLine += args;
00283 }


Field Documentation

pid_t CRioMMBrowser::browser_pid [private]

Definition at line 49 of file RioMMBrowser.h.

QStringList* CRioMMBrowser::browserCmdLine [private]

Definition at line 59 of file RioMMBrowser.h.

Display* CRioMMBrowser::dpy [private]

Definition at line 52 of file RioMMBrowser.h.

char* CRioMMBrowser::lock_data [private]

Definition at line 58 of file RioMMBrowser.h.

char CRioMMBrowser::NetscapeID[11] [private]

Definition at line 50 of file RioMMBrowser.h.

Definition at line 53 of file RioMMBrowser.h.

pthread_t CRioMMBrowser::tid [private]

Definition at line 61 of file RioMMBrowser.h.

Definition at line 56 of file RioMMBrowser.h.

Definition at line 55 of file RioMMBrowser.h.

Definition at line 57 of file RioMMBrowser.h.

Definition at line 54 of file RioMMBrowser.h.


The documentation for this class was generated from the following files:
Generated on Wed Jul 4 16:03:32 2012 for RIO by  doxygen 1.6.3