Back to index

lightning-sunbird  0.9+nobinonly
Public Member Functions | Static Public Member Functions | Static Public Attributes | Protected Attributes | Static Protected Attributes | Private Types | Private Member Functions | Static Private Member Functions | Private Attributes | Static Private Attributes
nsAppShell Class Reference

Native BeOS Application shell wrapper. More...

#include <nsAppShell.h>

Inheritance diagram for nsAppShell:
Inheritance graph
[legend]
Collaboration diagram for nsAppShell:
Collaboration graph
[legend]

List of all members.

Public Member Functions

 nsAppShell ()
virtual ~nsAppShell ()
NS_DECL_ISUPPORTS virtual
NS_DECL_NSIAPPSHELL void
GetNativeData (PRUint32 aDataType)
 nsAppShell ()
virtual ~nsAppShell ()
 nsAppShell ()
virtual ~nsAppShell ()
 nsAppShell ()
virtual ~nsAppShell ()
 nsAppShell ()
virtual ~nsAppShell ()
 nsAppShell ()
virtual ~nsAppShell ()
NS_DECL_ISUPPORTS NS_IMETHOD Create (int *argc, char **argv)
NS_IMETHOD Run (void)
 Enter an event loop.
NS_IMETHOD Spinup (void)
 Prepare to process events.
NS_IMETHOD Spindown (void)
 Prepare to stop processing events.
NS_IMETHOD ListenToEventQueue (nsIEventQueue *aQueue, PRBool aListen)
NS_IMETHOD GetNativeEvent (PRBool &aRealEvent, void *&aEvent)
NS_IMETHOD DispatchNativeEvent (PRBool aRealEvent, void *aEvent)
NS_IMETHOD Exit (void)
 Exit the handle event loop.
 nsAppShell ()
 ~nsAppShell ()
 nsAppShell ()
virtual ~nsAppShell ()
 nsAppShell ()
virtual ~nsAppShell ()
NS_DECL_ISUPPORTS NS_IMETHOD Create (int *argc, char **argv)
virtual nsresult Run ()
 Enter an event loop.
NS_IMETHOD Spinup ()
 Prepare to process events.
NS_IMETHOD Spindown ()
 Prepare to stop processing events.
NS_IMETHOD ListenToEventQueue (nsIEventQueue *aQueue, PRBool aListen)
NS_IMETHOD GetNativeEvent (PRBool &aRealEvent, void *&aEvent)
NS_IMETHOD DispatchNativeEvent (PRBool aRealEvent, void *aEvent)
NS_IMETHOD Exit ()
 Exit the handle event loop.
virtual voidGetNativeData (PRUint32 aDataType)
void Create (inout int argc, inout string argv)
 Creates an application shell.
void ListenToEventQueue (in nsIEventQueue aQueue, in PRBool aListen)
 An event queue has been created or destroyed.
void GetNativeEvent (in PRBoolRef aRealEvent, in voidPtrRef aEvent)
 After event dispatch execute app specific code.
void DispatchNativeEvent (in PRBool aRealEvent, in voidPtr aEvent)
 After event dispatch execute app specific code.

Static Public Member Functions

static void ReleaseGlobals ()
NS_DECL_ISUPPORTS static
NS_DECL_NSIAPPSHELL void 
ProcessBeforeID (unsigned long aID)
static void ReleaseGlobals ()
static void DispatchXEvent (XEvent *event)
static XlibRgbHandle * GetXlibRgbHandle ()

Static Public Attributes

static PRBool gExitMainLoop = PR_FALSE
static XtAppContext mAppContext
static DisplaymDisplay = nsnull

Protected Attributes

nsCOMPtr< nsIToolkitmToolkit

Static Protected Attributes

static nsMacMessagePumpsMacPump
static nsAppShellsMacPumpOwner

Private Types

enum  {
  PRIORITY_TOP = 0, PRIORITY_SECOND, PRIORITY_THIRD, PRIORITY_NORMAL,
  PRIORITY_LOW, PRIORITY_LEVELS = 5
}

Private Member Functions

void ConsumeRedundantMouseMoveEvent (MethodInfo *pNewEventMInfo)
void RetrieveAllEvents (bool blockable)
int CountStoredEvents ()
voidGetNextEvent ()
void AddEventQueue (nsIEventQueue *equeue)
void RemoveEventQueue (nsIEventQueue *equeue)

Static Private Member Functions

static void HandleButtonEvent (XEvent *event, nsWidget *aWidget)
static void HandleMotionNotifyEvent (XEvent *event, nsWidget *aWidget)
static void HandleExposeEvent (XEvent *event, nsWidget *aWidget)
static void HandleConfigureNotifyEvent (XEvent *event, nsWidget *aWidget)
static void HandleKeyPressEvent (XEvent *event, nsWidget *aWidget)
static void HandleKeyReleaseEvent (XEvent *event, nsWidget *aWidget)
static void HandleFocusInEvent (XEvent *event, nsWidget *aWidget)
static void HandleFocusOutEvent (XEvent *event, nsWidget *aWidget)
static void HandleVisibilityNotifyEvent (XEvent *event, nsWidget *aWidget)
static void HandleMapNotifyEvent (XEvent *event, nsWidget *aWidget)
static void HandleUnmapNotifyEvent (XEvent *event, nsWidget *aWidget)
static void HandleEnterEvent (XEvent *event, nsWidget *aWidget)
static void HandleLeaveEvent (XEvent *event, nsWidget *aWidget)
static void HandleClientMessageEvent (XEvent *event, nsWidget *aWidget)
static void HandleSelectionRequestEvent (XEvent *event, nsWidget *aWidget)
static void HandleDragMotionEvent (XEvent *event, nsWidget *aWidget)
static void HandleDragEnterEvent (XEvent *event, nsWidget *aWidget)
static void HandleDragLeaveEvent (XEvent *event, nsWidget *aWidget)
static void HandleDragDropEvent (XEvent *event, nsWidget *aWidget)
static void ForwardEvent (XEvent *event, nsWidget *aWidget)

Private Attributes

nsCOMPtr< nsIEventQueuemEventQueue
port_id eventport
sem_id syncsem
BList events [PRIORITY_LEVELS]
bool is_port_error
int mFD
PRInt32 mID
QIntDict< nsEventQueueWatchermQueueDict

Static Private Attributes

static PRBool mPtInited = PR_FALSE
static XlibRgbHandle * mXlib_rgb_handle = nsnull
static PRInt16 mClicks = 1
static PRUint16 mClickedButton = 0
static PRTime mClickTime = 0
static PRPackedBool mClicked = PR_FALSE
static PRPackedBool mDragging = PR_FALSE
static PRPackedBool mAltDown = PR_FALSE
static PRPackedBool mShiftDown = PR_FALSE
static PRPackedBool mCtrlDown = PR_FALSE
static PRPackedBool mMetaDown = PR_FALSE
static PRPackedBool DieAppShellDie = PR_FALSE

Detailed Description

Native BeOS Application shell wrapper.

Native Win32 Application shell wrapper.

Gecko Qt application.

Native Photon Application shell wrapper.

Native OS/2 Application shell wrapper.

Native GTK+ Application shell wrapper.

Please note that the Create method on it has to be called after QApplication has been instantiated if we want to embed it.

Definition at line 54 of file nsAppShell.h.


Member Enumeration Documentation

anonymous enum [private]
Enumerator:
PRIORITY_TOP 
PRIORITY_SECOND 
PRIORITY_THIRD 
PRIORITY_NORMAL 
PRIORITY_LOW 
PRIORITY_LEVELS 

Definition at line 69 of file nsAppShell.h.


Constructor & Destructor Documentation

Definition at line 102 of file nsAppShell.cpp.

       : is_port_error(false)
{ 
  gBAppCount++;
}
nsAppShell::~nsAppShell ( void  ) [virtual]

Definition at line 257 of file nsAppShell.cpp.

{
  if(--gBAppCount == 0)
  {
    if(be_app->Lock())
    {
      be_app->Quit();
    }
  }
}
virtual nsAppShell::~nsAppShell ( ) [virtual]
virtual nsAppShell::~nsAppShell ( ) [virtual]
virtual nsAppShell::~nsAppShell ( ) [virtual]
virtual nsAppShell::~nsAppShell ( ) [virtual]
virtual nsAppShell::~nsAppShell ( ) [virtual]
virtual nsAppShell::~nsAppShell ( ) [virtual]
virtual nsAppShell::~nsAppShell ( ) [virtual]

Member Function Documentation

void nsAppShell::AddEventQueue ( nsIEventQueue equeue) [private]

Definition at line 157 of file nsAppShell.cpp.

{
    nsEventQueueWatcher *que = 0;

    if ((que = mQueueDict.find(aQueue->GetEventQueueSelectFD()))) {
        que->ref();
    }
    else {
        mQueueDict.insert(aQueue->GetEventQueueSelectFD(),
                          new nsEventQueueWatcher(aQueue, qApp));
    }
}

Definition at line 512 of file nsAppShell.cpp.

{
  if (pNewEventMInfo->args[0] != NS_MOUSE_MOVE) return;

  nsISupports *widget0 = pNewEventMInfo->widget;
  nsSwitchToUIThread *target0 = pNewEventMInfo->target;
  
  int count = events[PRIORITY_THIRD].CountItems();
  for (int i=count-1 ; i >= 0 ; i --) {
    EventItem *previtem = (EventItem *)events[PRIORITY_THIRD].ItemAt(i);
    if (!previtem) continue;
    MethodInfo *mInfoPrev = (MethodInfo *)previtem->ifdata.data;
    if (!mInfoPrev
      || mInfoPrev->widget != widget0
      || mInfoPrev->target != target0) continue;
    // if other mouse event was found, then no sequential.
    if (mInfoPrev->args[0] != NS_MOUSE_MOVE) break;
    // check if other conditions are the same
    if (mInfoPrev->args[3] == pNewEventMInfo->args[3]
      && mInfoPrev->args[4] == pNewEventMInfo->args[4]) {
      // sequential mouse move found!
      events[PRIORITY_THIRD].RemoveItem(previtem);
      delete mInfoPrev;
      //if it's a synchronized call also wake up thread.
      if(previtem->ifdata.waitingThread != 0)
        resume_thread(previtem->ifdata.waitingThread);
      delete previtem;
      break;
    }
  }
  return;
}

Here is the call graph for this function:

Here is the caller graph for this function:

Definition at line 420 of file nsAppShell.cpp.

{
  int count = 0;
  for (int i=0 ; i < PRIORITY_LEVELS ; i++)
    count += events[i].CountItems();
  
  return count;
}

Here is the caller graph for this function:

PR_END_EXTERN_C NS_METHOD nsAppShell::Create ( int argc,
char **  argv 
)

Definition at line 115 of file nsAppShell.cpp.

{
  // system wide unique names
  // NOTE: this needs to be run from within the main application thread
  char        portname[64];
  char        semname[64];
  PR_snprintf(portname, sizeof(portname), "event%lx", 
              (long unsigned) PR_GetCurrentThread());
  PR_snprintf(semname, sizeof(semname), "sync%lx", 
              (long unsigned) PR_GetCurrentThread());
              
#ifdef DEBUG              
  printf("nsAppShell::Create portname: %s, semname: %s\n", portname, semname);
#endif
  /* 
   * Set up the port for communicating. As restarts thru execv may occur
   * and ports survive those (with faulty events as result). Combined with the fact
   * that plevent.c can setup the port ahead of us we need to take extra
   * care that the port is created for this launch, otherwise we need to reopen it
   * so that faulty messages gets lost.
   *
   * We do this by checking if the sem has been created. If it is we can reuse the port (if it exists).
   * Otherwise we need to create the sem and the port, deleting any open ports before.
   * TODO: The semaphore is no longer needed for syncing, so it's only use is for detecting if the
   * port needs to be reopened. This should be replaced, but I'm not sure how -tqh
   */
  syncsem = my_find_sem(semname);
  eventport = find_port(portname);
  if(B_ERROR != syncsem) 
  {
    if(eventport < 0)
    {
      eventport = create_port(200, portname);
    }
    return NS_OK;
  } 
  if(eventport >= 0)
  {
    delete_port(eventport);
  }
  eventport = create_port(200, portname);
  syncsem = create_sem(0, semname);

  return NS_OK;
}

Here is the call graph for this function:

NS_DECL_ISUPPORTS NS_IMETHOD nsAppShell::Create ( int argc,
char **  argv 
)
void nsIAppShell::Create ( inout int  argc,
inout string  argv 
) [inherited]

Creates an application shell.

Here is the caller graph for this function:

NS_IMETHOD nsAppShell::DispatchNativeEvent ( PRBool  aRealEvent,
void aEvent 
)
nsresult nsAppShell::DispatchNativeEvent ( PRBool  aRealEvent,
void aEvent 
) [inline]

Definition at line 69 of file nsAppShell.h.

              {
              PtProcessEvent();
//            PtFlush();
              return NS_OK;
              }
void nsIAppShell::DispatchNativeEvent ( in PRBool  aRealEvent,
in voidPtr  aEvent 
) [inherited]

After event dispatch execute app specific code.

void nsAppShell::DispatchXEvent ( XEvent *  event) [static]

Definition at line 504 of file nsAppShell.cpp.

{
  nsWidget *widget;
  widget = nsWidget::GetWidgetForWindow(event->xany.window);

  // did someone pass us an x event for a window we don't own?
  // bad! bad!
  if (widget == nsnull)
    return;

  // switch on the type of event
  switch (event->type) 
  {
  case Expose:
    HandleExposeEvent(event, widget);
    break;

  case ConfigureNotify:
    // we need to make sure that this is the LAST of the
    // config events.
    PR_LOG(XlibWidgetsLM, PR_LOG_DEBUG, ("DispatchEvent: ConfigureNotify event for window 0x%lx %d %d %d %d\n",
                                         event->xconfigure.window,
                                         event->xconfigure.x, 
                                         event->xconfigure.y,
                                         event->xconfigure.width, 
                                         event->xconfigure.height));

    HandleConfigureNotifyEvent(event, widget);

    break;

  case ButtonPress:
  case ButtonRelease:
    HandleFocusInEvent(event, widget);
    HandleButtonEvent(event, widget);
    break;

  case MotionNotify:
    HandleMotionNotifyEvent(event, widget);
    break;

  case KeyPress:
    HandleKeyPressEvent(event, widget);
    break;
  case KeyRelease:
    HandleKeyReleaseEvent(event, widget);
    break;

  case FocusIn:
    HandleFocusInEvent(event, widget);
    break;

  case FocusOut:
    HandleFocusOutEvent(event, widget);
    break;

  case EnterNotify:
    HandleEnterEvent(event, widget);
    break;

  case LeaveNotify:
    HandleLeaveEvent(event, widget);
    break;

  case NoExpose:
    // these annoy me.
    break;
  case VisibilityNotify:
    HandleVisibilityNotifyEvent(event, widget);
    break;
  case ClientMessage:
    HandleClientMessageEvent(event, widget);
    break;
  case SelectionRequest:
    HandleSelectionRequestEvent(event, widget);
    break;
  default:
    PR_LOG(XlibWidgetsLM, PR_LOG_DEBUG, ("Unhandled window event: Window 0x%lx Got a %s event\n",
                                         event->xany.window, event_names[event->type]));

    break;
  }
}

Here is the call graph for this function:

Exit the handle event loop.

Implements nsIAppShell.

Exit the handle event loop.

Implements nsIAppShell.

Definition at line 240 of file nsAppShell.cpp.

{
#ifdef DEBUG
  fprintf(stderr, "nsAppShell::Exit() called\n");
#endif
  // interrupt message flow
  close_port(eventport);
  delete_sem(syncsem);

  return NS_OK;
}

Here is the call graph for this function:

void nsAppShell::ForwardEvent ( XEvent *  event,
nsWidget aWidget 
) [static, private]

Definition at line 1240 of file nsAppShell.cpp.

{
  nsGUIEvent ev(PR_TRUE, 0, aWidget);
  ev.nativeMsg = (void *)event;

  aWidget->DispatchWindowEvent(ev);
}

Here is the call graph for this function:

void * nsAppShell::GetNativeData ( PRUint32  aDataType) [virtual]

Definition at line 273 of file nsAppShell.cpp.

{
  // To be implemented.
  return nsnull;
}
virtual void* nsAppShell::GetNativeData ( PRUint32  aDataType) [virtual]
NS_METHOD nsAppShell::GetNativeEvent ( PRBool aRealEvent,
void *&  aEvent 
) [inline]

Definition at line 62 of file nsAppShell.h.

              {
              aRealEvent = PR_FALSE;
              aEvent = 0;
              return NS_OK;
              }
NS_IMETHOD nsAppShell::GetNativeEvent ( PRBool aRealEvent,
void *&  aEvent 
)
void nsIAppShell::GetNativeEvent ( in PRBoolRef  aRealEvent,
in voidPtrRef  aEvent 
) [inherited]

After event dispatch execute app specific code.

void * nsAppShell::GetNextEvent ( ) [private]

Definition at line 430 of file nsAppShell.cpp.

{
  void *newitem = nsnull;
  for (int i=0 ; i < PRIORITY_LEVELS ; i++) {
    if (!events[i].IsEmpty()) {
      newitem = events[i].RemoveItem((long int)0);
      break;
    }
  }
  return newitem;
}

Here is the caller graph for this function:

static XlibRgbHandle* nsAppShell::GetXlibRgbHandle ( ) [inline, static]

Definition at line 74 of file nsAppShell.h.

{ return mXlib_rgb_handle; }
void nsAppShell::HandleButtonEvent ( XEvent *  event,
nsWidget aWidget 
) [static, private]

Definition at line 622 of file nsAppShell.cpp.

{
  PRUint32 eventType = 0;
  PRBool currentlyDragging = mDragging;
  nsMouseScrollEvent scrollEvent(PR_TRUE, NS_MOUSE_SCROLL, aWidget);

  PR_LOG(XlibWidgetsLM, PR_LOG_DEBUG, ("Button event for window 0x%lx button %d type %s\n",
                                       event->xany.window,
                                       event->xbutton.button,
                                       (event->type == ButtonPress ? "ButtonPress" : "ButtonRelease")));
  switch(event->type) {
  case ButtonPress:
    switch(event->xbutton.button) {
    case 1:
      eventType = NS_MOUSE_LEFT_BUTTON_DOWN;
      mDragging = PR_TRUE;
      break;
    case 2:
      eventType = NS_MOUSE_MIDDLE_BUTTON_DOWN;
      break;
    case 3:
      /* look back into this in case anything actually needs a
       * NS_MOUSE_RIGHT_BUTTON_DOWN */
      eventType = NS_CONTEXTMENU;
      break;
    case 4:
    case 5:
      scrollEvent.delta = (event->xbutton.button == 4) ? -3 : 3;
      scrollEvent.scrollFlags = nsMouseScrollEvent::kIsVertical;

      scrollEvent.point.x = event->xbutton.x;
      scrollEvent.point.y = event->xbutton.y;

      scrollEvent.isShift = mShiftDown;
      scrollEvent.isControl = mCtrlDown;
      scrollEvent.isAlt = mAltDown;
      scrollEvent.isMeta = mMetaDown;
      scrollEvent.time = PR_Now();
      NS_IF_ADDREF(aWidget);
      aWidget->DispatchWindowEvent(scrollEvent);
      NS_IF_RELEASE(aWidget);
      return;
    }
    break;
  case ButtonRelease:
    switch(event->xbutton.button) {
    case 1:
      eventType = NS_MOUSE_LEFT_BUTTON_UP;
      mDragging = PR_FALSE;
      break;
    case 2:
      eventType = NS_MOUSE_MIDDLE_BUTTON_UP;
      break;
    case 3:
      eventType = NS_MOUSE_RIGHT_BUTTON_UP;
      break;
    case 4:
    case 5:
      return;
    }
    break;
  }

  nsMouseEvent mevent(PR_TRUE, eventType, aWidget, nsMouseEvent::eReal);
  mevent.isShift = mShiftDown;
  mevent.isControl = mCtrlDown;
  mevent.isAlt = mAltDown;
  mevent.isMeta = mMetaDown;
  mevent.point.x = event->xbutton.x;
  mevent.point.y = event->xbutton.y;
  mevent.time = PR_Now();
  
  // If we are waiting longer than 1 sec for the second click, this is not a
  // double click.
  if (PR_Now() - mClickTime > 1000000)
    mClicked = PR_FALSE;               

  if (event->type == ButtonPress) {
    if (!mClicked) {
      mClicked = PR_TRUE;
      mClickTime = PR_Now();
      mClicks = 1;
      mClickedButton = event->xbutton.button;
    } else {
      mClickTime = PR_Now() - mClickTime;
      if ((mClickTime < 500000) && (mClickedButton == event->xbutton.button))
        mClicks = 2;
      else
        mClicks = 1;
      mClicked = PR_FALSE;
    }
  }

  if (currentlyDragging && !mDragging)
    HandleDragDropEvent(event, aWidget);

  mevent.clickCount = mClicks;
  NS_IF_ADDREF(aWidget);
  aWidget->DispatchMouseEvent(mevent);
  NS_IF_RELEASE(aWidget);
}

Here is the call graph for this function:

Here is the caller graph for this function:

void nsAppShell::HandleClientMessageEvent ( XEvent *  event,
nsWidget aWidget 
) [static, private]

Definition at line 1105 of file nsAppShell.cpp.

{
  // check to see if it's a WM_DELETE message
#if defined(DEBUG_warren) || defined(DEBUG_quy)
  printf("handling client message\n");
#endif
  if (nsWidget::WMProtocolsInitialized) {
    if ((Atom)event->xclient.data.l[0] == nsWidget::WMDeleteWindow) {
#ifdef DEBUG
      printf("got a delete window event\n");
#endif /* DEBUG */      
      aWidget->OnDeleteWindow();
    }
  }
}

Here is the call graph for this function:

Here is the caller graph for this function:

void nsAppShell::HandleConfigureNotifyEvent ( XEvent *  event,
nsWidget aWidget 
) [static, private]

Definition at line 748 of file nsAppShell.cpp.

{
  PR_LOG(XlibWidgetsLM, PR_LOG_DEBUG, ("ConfigureNotify event for window 0x%lx %d %d %d %d\n",
                                       event->xconfigure.window,
                                       event->xconfigure.x, event->xconfigure.y,
                                       event->xconfigure.width, event->xconfigure.height));

  XEvent    config_event;
  while (XCheckTypedWindowEvent(event->xany.display, 
                                event->xany.window, 
                                ConfigureNotify,
                                &config_event) == True) {
    // make sure that we don't get other types of events.  
    // StructureNotifyMask includes other kinds of events, too.
    if (config_event.type == ConfigureNotify) 
      {
        *event = config_event;
        
        PR_LOG(XlibWidgetsLM, PR_LOG_DEBUG, ("DispatchEvent: Extra ConfigureNotify event for window 0x%lx %d %d %d %d\n",
                                             event->xconfigure.window,
                                             event->xconfigure.x, 
                                             event->xconfigure.y,
                                             event->xconfigure.width, 
                                             event->xconfigure.height));
      }
    else {
      PR_LOG(XlibWidgetsLM, PR_LOG_DEBUG, ("EVENT LOSSAGE\n"));
    }
  }

  nsSizeEvent sevent(PR_TRUE, NS_SIZE, aWidget);
  sevent.windowSize = new nsRect (event->xconfigure.x, event->xconfigure.y,
                                  event->xconfigure.width, event->xconfigure.height);
  sevent.point.x = event->xconfigure.x;
  sevent.point.y = event->xconfigure.y;
  sevent.mWinWidth = event->xconfigure.width;
  sevent.mWinHeight = event->xconfigure.height;
  // XXX fix sevent.time
  NS_ADDREF(aWidget);
  aWidget->OnResize(sevent);
  NS_RELEASE(aWidget);
  delete sevent.windowSize;
}

Here is the call graph for this function:

Here is the caller graph for this function:

void nsAppShell::HandleDragDropEvent ( XEvent *  event,
nsWidget aWidget 
) [static, private]

Definition at line 1211 of file nsAppShell.cpp.

                                                                     {
  PRBool currentlyDragging = PR_FALSE;

  nsresult rv;
  nsCOMPtr<nsIDragService> dragService( do_GetService(kCDragServiceCID, &rv) );

  // FIXME: Dont think the currentlyDragging check is required. KenF
  if (NS_SUCCEEDED(rv)) {
    nsCOMPtr<nsIDragSessionXlib> dragServiceXlib;
    dragServiceXlib = do_QueryInterface(dragService);
    if (dragServiceXlib) {
      dragServiceXlib->IsDragging(&currentlyDragging);
    }
  }

  if (currentlyDragging) {
    nsMouseEvent mevent(PR_TRUE, NS_DRAGDROP_DROP, aWidget,
                        nsMouseEvent::eReal);
    mevent.point.x = event->xbutton.x;
    mevent.point.y = event->xbutton.y;
  
    NS_IF_ADDREF(aWidget);
    aWidget->DispatchMouseEvent(mevent);
    NS_IF_RELEASE(aWidget);

    dragService->EndDragSession();
  }
}

Here is the call graph for this function:

Here is the caller graph for this function:

void nsAppShell::HandleDragEnterEvent ( XEvent *  event,
nsWidget aWidget 
) [static, private]

Definition at line 1157 of file nsAppShell.cpp.

                                                                      {
  PRBool currentlyDragging = PR_FALSE;

  nsresult rv;
  nsCOMPtr<nsIDragService> dragService( do_GetService(kCDragServiceCID, &rv) );
  if (NS_SUCCEEDED(rv)) {
    nsCOMPtr<nsIDragSessionXlib> dragServiceXlib;
    dragServiceXlib = do_QueryInterface(dragService);
    if (dragServiceXlib) {
      dragServiceXlib->IsDragging(&currentlyDragging);
    }
  }

  if (currentlyDragging) {
    nsMouseEvent enterEvent(PR_TRUE, NS_DRAGDROP_ENTER, aWidget,
                            nsMouseEvent::eReal);
  
    enterEvent.point.x = event->xcrossing.x;
    enterEvent.point.y = event->xcrossing.y;
  
    NS_ADDREF(aWidget);
    aWidget->DispatchWindowEvent(enterEvent);
    NS_RELEASE(aWidget);
  }
}

Here is the call graph for this function:

Here is the caller graph for this function:

void nsAppShell::HandleDragLeaveEvent ( XEvent *  event,
nsWidget aWidget 
) [static, private]

Definition at line 1183 of file nsAppShell.cpp.

                                                                      {
  PRBool currentlyDragging = PR_FALSE;
  
  nsresult rv;
  nsCOMPtr<nsIDragService> dragService( do_GetService(kCDragServiceCID, &rv) );

  // FIXME: Not sure if currentlyDragging is required. KenF
  if (NS_SUCCEEDED(rv)) {
    nsCOMPtr<nsIDragSessionXlib> dragServiceXlib;
    dragServiceXlib = do_QueryInterface(dragService);
    if (dragServiceXlib) {
      dragServiceXlib->IsDragging(&currentlyDragging);
    }
  }

  if (currentlyDragging) {
    nsMouseEvent leaveEvent(PR_TRUE, NS_DRAGDROP_EXIT, aWidget,
                            nsMouseEvent::eReal);
  
    leaveEvent.point.x = event->xcrossing.x;
    leaveEvent.point.y = event->xcrossing.y;
  
    NS_ADDREF(aWidget);
    aWidget->DispatchWindowEvent(leaveEvent);
    NS_RELEASE(aWidget);
  }
}

Here is the call graph for this function:

Here is the caller graph for this function:

void nsAppShell::HandleDragMotionEvent ( XEvent *  event,
nsWidget aWidget 
) [static, private]

Definition at line 1130 of file nsAppShell.cpp.

                                                                       {
  PRBool currentlyDragging = PR_FALSE;

  nsresult rv;
  nsCOMPtr<nsIDragService> dragService( do_GetService(kCDragServiceCID, &rv) );
  nsCOMPtr<nsIDragSessionXlib> dragServiceXlib;
  if (NS_SUCCEEDED(rv)) {
    dragServiceXlib = do_QueryInterface(dragService);
    if (dragServiceXlib) {
      dragServiceXlib->IsDragging(&currentlyDragging);
    }
  }

  if (currentlyDragging) {
    dragServiceXlib->UpdatePosition(event->xmotion.x, event->xmotion.y);

    nsMouseEvent mevent(PR_TRUE, NS_DRAGDROP_OVER, aWidget,
                        nsMouseEvent::eReal);
    mevent.point.x = event->xmotion.x;
    mevent.point.y = event->xmotion.y;

    NS_ADDREF(aWidget);
    aWidget->DispatchMouseEvent(mevent);
    NS_RELEASE(aWidget);
  }
}

Here is the call graph for this function:

Here is the caller graph for this function:

void nsAppShell::HandleEnterEvent ( XEvent *  event,
nsWidget aWidget 
) [static, private]

Definition at line 1011 of file nsAppShell.cpp.

{
  PR_LOG(XlibWidgetsLM, PR_LOG_DEBUG, ("Enter event for window 0x%lx\n",
                                       event->xcrossing.window));

  if (event->xcrossing.subwindow != None)
    return;

  if(is_wm_ungrab_enter(&event->xcrossing))
    return;

  if (mDragging) {
    HandleDragEnterEvent(event, aWidget);
  }

  nsMouseEvent enterEvent(PR_TRUE, NS_MOUSE_ENTER, aWidget,
                          nsMouseEvent::eReal);

  enterEvent.time = event->xcrossing.time;
  enterEvent.point.x = nscoord(event->xcrossing.x);
  enterEvent.point.y = nscoord(event->xcrossing.y);
  
  // make sure this is in focus. This will do until I rewrite all the 
  // focus routines. KenF
  aWidget->SetFocus();

  NS_ADDREF(aWidget);
  aWidget->DispatchWindowEvent(enterEvent);
  NS_RELEASE(aWidget);
}

Here is the call graph for this function:

Here is the caller graph for this function:

void nsAppShell::HandleExposeEvent ( XEvent *  event,
nsWidget aWidget 
) [static, private]

Definition at line 725 of file nsAppShell.cpp.

{
  PR_LOG(XlibWidgetsLM, PR_LOG_DEBUG, ("Expose event for window 0x%lx %d %d %d %d\n", event->xany.window,
                                       event->xexpose.x, event->xexpose.y, event->xexpose.width, event->xexpose.height));

  nsRect dirtyRect(event->xexpose.x, event->xexpose.y, 
                   event->xexpose.width, event->xexpose.height);

  /* compress expose events...
   */
  if (event->xexpose.count!=0) {
     XEvent txe;
     do {
        XWindowEvent(event->xany.display, event->xany.window, ExposureMask, (XEvent *)&txe);
        dirtyRect.UnionRect(dirtyRect, nsRect(txe.xexpose.x, txe.xexpose.y, 
                                              txe.xexpose.width, txe.xexpose.height));
     } while (txe.xexpose.count>0);
  }

  aWidget->Invalidate(dirtyRect, PR_FALSE);
}

Here is the call graph for this function:

Here is the caller graph for this function:

void nsAppShell::HandleFocusInEvent ( XEvent *  event,
nsWidget aWidget 
) [static, private]

Definition at line 970 of file nsAppShell.cpp.

{
  PR_LOG(XlibWidgetsLM, PR_LOG_DEBUG, ("FocusIn event for window 0x%lx\n",
                                       event->xfocus.window));
  nsFocusEvent focusEvent(PR_TRUE, NS_GOTFOCUS, aWidget);
  
  NS_ADDREF(aWidget);
  aWidget->DispatchWindowEvent(focusEvent);
  NS_RELEASE(aWidget);
}

Here is the call graph for this function:

Here is the caller graph for this function:

void nsAppShell::HandleFocusOutEvent ( XEvent *  event,
nsWidget aWidget 
) [static, private]

Definition at line 982 of file nsAppShell.cpp.

{
  PR_LOG(XlibWidgetsLM, PR_LOG_DEBUG, ("FocusOut event for window 0x%lx\n",
                                       event->xfocus.window));
  nsFocusEvent focusEvent(PR_TRUE, NS_LOSTFOCUS, aWidget);

  NS_ADDREF(aWidget);
  aWidget->DispatchWindowEvent(focusEvent);
  NS_RELEASE(aWidget);
}

Here is the call graph for this function:

Here is the caller graph for this function:

void nsAppShell::HandleKeyPressEvent ( XEvent *  event,
nsWidget aWidget 
) [static, private]

Definition at line 826 of file nsAppShell.cpp.

{
  char      string_buf[CHAR_BUF_SIZE];
  int       len = 0;
  Window    focusWindow = None;
  nsWidget *focusWidget = 0;

  // figure out where the real focus should go...
  focusWindow = nsWidget::GetFocusWindow();
  if (focusWindow != None) {
    focusWidget = nsWidget::GetWidgetForWindow(focusWindow);
  }

  PR_LOG(XlibWidgetsLM, PR_LOG_DEBUG, ("KeyPress event for window 0x%lx ( 0x%lx focus window )\n",
                                       event->xkey.window,
                                       focusWindow));

  // don't even bother...
  if (focusWidget == 0) {
    return;
  }

  KeySym     keysym = nsKeyCode::ConvertKeyCodeToKeySym(event->xkey.display,
                                                        event->xkey.keycode);

  switch (keysym) {
    case XK_Alt_L:
    case XK_Alt_R:
      mAltDown = PR_TRUE;
      break;
    case XK_Control_L:
    case XK_Control_R:
      mCtrlDown = PR_TRUE;
      break;
    case XK_Shift_L:
    case XK_Shift_R:
      mShiftDown = PR_TRUE;
      break;
    case XK_Meta_L:
    case XK_Meta_R:
      mMetaDown = PR_TRUE;
      break;
    default:
      break;
  }

  // Dont dispatch events for modifier keys pressed ALONE
  if (nsKeyCode::KeyCodeIsModifier(event->xkey.keycode))
  {
    return;
  }

  nsKeyEvent keyEvent(PR_TRUE, NS_KEY_DOWN, focusWidget);

  XComposeStatus compose;

  len = XLookupString(&event->xkey, string_buf, CHAR_BUF_SIZE-1, &keysym, &compose);
  string_buf[len] = '\0';

  keyEvent.keyCode = nsKeyCode::ConvertKeySymToVirtualKey(keysym);
  keyEvent.time = event->xkey.time;
  keyEvent.isShift = (event->xkey.state & ShiftMask) ? PR_TRUE : PR_FALSE;
  keyEvent.isControl = (event->xkey.state & ControlMask) ? 1 : 0;
  keyEvent.isAlt = (event->xkey.state & Mod1Mask) ? 1 : 0;
  // I think 'meta' is the same as 'alt' in X11. Is this OK for other systems?
  keyEvent.isMeta = (event->xkey.state & Mod1Mask) ? 1 : 0;

  //  printf("keysym = %x, keycode = %x, vk = %x\n",
  //         keysym,
  //         event->xkey.keycode,
  //         keyEvent.keyCode);

  PRBool noDefault = focusWidget->DispatchKeyEvent(keyEvent);

  nsKeyEvent pressEvent(PR_TRUE, NS_KEY_PRESS, focusWidget);
  pressEvent.keyCode = nsKeyCode::ConvertKeySymToVirtualKey(keysym);
  pressEvent.charCode = nsConvertCharCodeToUnicode(&event->xkey);
  pressEvent.time = event->xkey.time;
  pressEvent.isShift = (event->xkey.state & ShiftMask) ? PR_TRUE : PR_FALSE;
  pressEvent.isControl = (event->xkey.state & ControlMask) ? 1 : 0;
  pressEvent.isAlt = (event->xkey.state & Mod1Mask) ? 1 : 0;
  pressEvent.isMeta = (event->xkey.state & Mod1Mask) ? 1 : 0;
  if (noDefault) {   // If default prevented on keydown, do same for keypress
    pressEvent.flags |= NS_EVENT_FLAG_NO_DEFAULT;
  }

  focusWidget->DispatchKeyEvent(pressEvent);
}

Here is the call graph for this function:

Here is the caller graph for this function:

void nsAppShell::HandleKeyReleaseEvent ( XEvent *  event,
nsWidget aWidget 
) [static, private]

Definition at line 916 of file nsAppShell.cpp.

{
  PR_LOG(XlibWidgetsLM, PR_LOG_DEBUG, ("KeyRelease event for window 0x%lx\n",
                                       event->xkey.window));

  KeySym     keysym = nsKeyCode::ConvertKeyCodeToKeySym(event->xkey.display,
                                                        event->xkey.keycode);

  switch (keysym) {
    case XK_Alt_L:
    case XK_Alt_R:
      mAltDown = PR_FALSE;
      break;
    case XK_Control_L:
    case XK_Control_R:
      mCtrlDown = PR_FALSE;
      break;
    case XK_Shift_L:
    case XK_Shift_R:
      mShiftDown = PR_FALSE;
      break;
    case XK_Meta_L:
    case XK_Meta_R:
      mMetaDown = PR_FALSE;
      break;
    default:
      break;
  }

  // Dont dispatch events for modifier keys pressed ALONE
  if (nsKeyCode::KeyCodeIsModifier(event->xkey.keycode))
  {
    return;
  }

  nsKeyEvent keyEvent(PR_TRUE, NS_KEY_UP, aWidget);

  keyEvent.keyCode = nsKeyCode::ConvertKeySymToVirtualKey(keysym);
  keyEvent.time = event->xkey.time;
  keyEvent.isShift = event->xkey.state & ShiftMask;
  keyEvent.isControl = (event->xkey.state & ControlMask) ? 1 : 0;
  keyEvent.isAlt = (event->xkey.state & Mod1Mask) ? 1 : 0;
  keyEvent.isMeta = (event->xkey.state & Mod1Mask) ? 1 : 0;
  keyEvent.point.x = event->xkey.x;
  keyEvent.point.y = event->xkey.y;

  NS_ADDREF(aWidget);

  aWidget->DispatchKeyEvent(keyEvent);

  NS_RELEASE(aWidget);
}

Here is the call graph for this function:

Here is the caller graph for this function:

void nsAppShell::HandleLeaveEvent ( XEvent *  event,
nsWidget aWidget 
) [static, private]

Definition at line 1043 of file nsAppShell.cpp.

{
  PR_LOG(XlibWidgetsLM, PR_LOG_DEBUG, ("Leave event for window 0x%lx\n",
                                       event->xcrossing.window));

  if (event->xcrossing.subwindow != None)
    return;

  if(is_wm_grab_leave(&event->xcrossing))
    return;

  if (mDragging) {
    HandleDragLeaveEvent(event, aWidget);
  }

  nsMouseEvent leaveEvent(PR_TRUE, NS_MOUSE_EXIT, aWidget,
                          nsMouseEvent::eReal);

  leaveEvent.time = event->xcrossing.time;
  leaveEvent.point.x = nscoord(event->xcrossing.x);
  leaveEvent.point.y = nscoord(event->xcrossing.y);
  
  NS_ADDREF(aWidget);
  aWidget->DispatchWindowEvent(leaveEvent);
  NS_RELEASE(aWidget);
}

Here is the call graph for this function:

Here is the caller graph for this function:

void nsAppShell::HandleMapNotifyEvent ( XEvent *  event,
nsWidget aWidget 
) [static, private]

Definition at line 1089 of file nsAppShell.cpp.

{
  PR_LOG(XlibWidgetsLM, PR_LOG_DEBUG, ("MapNotify event for window 0x%lx\n",
                                       event->xmap.window));
  // XXX set map status is gone now..
  //  aWidget->SetMapStatus(PR_TRUE);
}
void nsAppShell::HandleMotionNotifyEvent ( XEvent *  event,
nsWidget aWidget 
) [static, private]

Definition at line 589 of file nsAppShell.cpp.

{
  if (mDragging) {
    HandleDragMotionEvent(event, aWidget);
  }

  nsMouseEvent mevent(PR_TRUE, NS_MOUSE_MOVE, aWidget, nsMouseEvent::eReal);
  XEvent aEvent;

  mevent.point.x = event->xmotion.x;
  mevent.point.y = event->xmotion.y;

  mevent.isShift = mShiftDown;
  mevent.isControl = mCtrlDown;
  mevent.isAlt = mAltDown;
  mevent.isMeta = mMetaDown;
  
  Display * dpy = (Display *)aWidget->GetNativeData(NS_NATIVE_DISPLAY);
  Window win = (Window)aWidget->GetNativeData(NS_NATIVE_WINDOW);
  // We are only interested in the LAST (newest) location of the pointer
  while(XCheckWindowEvent(dpy,
                          win,
                          ButtonMotionMask,
                          &aEvent)) {
    mevent.point.x = aEvent.xmotion.x;
    mevent.point.y = aEvent.xmotion.y;
  }
  NS_ADDREF(aWidget);
  aWidget->DispatchMouseEvent(mevent);
  NS_RELEASE(aWidget);
}

Here is the call graph for this function:

Here is the caller graph for this function:

void nsAppShell::HandleSelectionRequestEvent ( XEvent *  event,
nsWidget aWidget 
) [static, private]

Definition at line 1121 of file nsAppShell.cpp.

{
  nsGUIEvent ev(PR_TRUE, 0, aWidget);

  ev.nativeMsg = (void *)event;

  aWidget->DispatchWindowEvent(ev);
}

Here is the call graph for this function:

Here is the caller graph for this function:

void nsAppShell::HandleUnmapNotifyEvent ( XEvent *  event,
nsWidget aWidget 
) [static, private]

Definition at line 1097 of file nsAppShell.cpp.

{
  PR_LOG(XlibWidgetsLM, PR_LOG_DEBUG, ("UnmapNotifyEvent for window 0x%lx\n",
                                       event->xunmap.window));
  // XXX set map status is gone now..
  //aWidget->SetMapStatus(PR_FALSE);
}
void nsAppShell::HandleVisibilityNotifyEvent ( XEvent *  event,
nsWidget aWidget 
) [static, private]

Definition at line 1070 of file nsAppShell.cpp.

{
#ifdef DEBUG
  PR_LOG(XlibWidgetsLM, PR_LOG_DEBUG, ("VisibilityNotify event for window 0x%lx ",
                                       event->xfocus.window));
  switch(event->xvisibility.state) {
  case VisibilityFullyObscured:
    PR_LOG(XlibWidgetsLM, PR_LOG_DEBUG, ("Fully Obscured\n"));
    break;
  case VisibilityPartiallyObscured:
    PR_LOG(XlibWidgetsLM, PR_LOG_DEBUG, ("Partially Obscured\n"));
    break;
  case VisibilityUnobscured:
    PR_LOG(XlibWidgetsLM, PR_LOG_DEBUG, ("Unobscured\n"));
  }
#endif
  aWidget->SetVisibility(event->xvisibility.state);
}

Here is the call graph for this function:

Here is the caller graph for this function:

Definition at line 413 of file nsAppShell.cpp.

{
  // do nothing
  return NS_OK;
}

Here is the caller graph for this function:

void nsIAppShell::ListenToEventQueue ( in nsIEventQueue  aQueue,
in PRBool  aListen 
) [inherited]

An event queue has been created or destroyed.

Hook or unhook it from your system, as necessary.

Parameters:
aQueuethe queue in question
aListenPR_TRUE for a new queue wanting hooking up. PR_FALSE for a queue wanting to be unhooked.
void nsAppShell::ProcessBeforeID ( unsigned long  aID) [static]

Definition at line 413 of file nsAppShell.cpp.

{
  if (sEventQueueList)
    sEventQueueList->EnumerateForwards(processQueue, (void *)aID);
}

Here is the call graph for this function:

Here is the caller graph for this function:

static void nsAppShell::ReleaseGlobals ( ) [static]

Definition at line 156 of file nsAppShell.cpp.

Here is the call graph for this function:

Here is the caller graph for this function:

Definition at line 171 of file nsAppShell.cpp.

{
    nsEventQueueWatcher *qtQueue = 0;

    if ((qtQueue = mQueueDict.find(aQueue->GetEventQueueSelectFD()))) {
        qtQueue->DataReceived();
        qtQueue->deref();
        if (qtQueue->count <= 0) {
            mQueueDict.take(aQueue->GetEventQueueSelectFD());
            delete qtQueue;
        }
    }
}

Here is the call graph for this function:

void nsAppShell::RetrieveAllEvents ( bool  blockable) [private]

Definition at line 444 of file nsAppShell.cpp.

{
  if (is_port_error) return;
  
  bool is_first_loop = true;
  while(true)
  {
    EventItem *newitem = new EventItem;
    if ( !newitem ) break;

    newitem->code = 0;
    newitem->ifdata.data = nsnull;
    newitem->ifdata.waitingThread = 0;

    // only block on read_port when 
    //   blockable == true
    //   and
    //   this is the first loop
    // otherwise, return immediately.
    if ( (!is_first_loop || !blockable) && port_count(eventport) <= 0 ) {
      delete newitem;
      break;
    }
    is_first_loop = false;
    if ( read_port(eventport, &newitem->code, &newitem->ifdata, sizeof(newitem->ifdata)) < 0 ) {
      delete newitem;
      is_port_error = true;
      return;
    }
    // synchronous events should be processed quickly (?)
    if (newitem->ifdata.waitingThread != 0) {
      events[PRIORITY_TOP].AddItem(newitem);
    } else {
      switch(newitem->code)
      {
      case WM_CALLMETHOD :
        {
          MethodInfo *mInfo = (MethodInfo *)newitem->ifdata.data;
          switch( mInfo->methodId ) {
          case nsSwitchToUIThread::ONKEY :
            events[PRIORITY_SECOND].AddItem(newitem);
            break;
          case nsSwitchToUIThread::ONMOUSE:
            ConsumeRedundantMouseMoveEvent(mInfo);
            events[PRIORITY_THIRD].AddItem(newitem);
            break;
          case nsSwitchToUIThread::ONWHEEL :
          case nsSwitchToUIThread::BTNCLICK :
            events[PRIORITY_THIRD].AddItem(newitem);
            break;
          default:
            events[PRIORITY_NORMAL].AddItem(newitem);
            break;
          }
        }
        break;
            
      case 'natv' :  // native queue PLEvent
        events[PRIORITY_LOW].AddItem(newitem);
        break;
      }
    }
  }
  return;
}

Here is the call graph for this function:

Here is the caller graph for this function:

Enter an event loop.

Don't leave until application exits.

Implements nsIAppShell.

Definition at line 167 of file nsAppShell.cpp.

{
  int32               code;
  ThreadInterfaceData id;

  NS_ADDREF_THIS();

  set_thread_priority( find_thread(NULL), B_DISPLAY_PRIORITY);

  if (!mEventQueue)
    Spinup();

  if (!mEventQueue)
    return NS_ERROR_NOT_INITIALIZED;

  while (!is_port_error)
  {
    RetrieveAllEvents(true);
    
    while (CountStoredEvents() > 0) {
      // get an event of the best priority
      EventItem *newitem = (EventItem *) GetNextEvent();
      if (!newitem) break;
      
      code = newitem->code;
      id = newitem->ifdata;
      
      switch(code)
      {
      case WM_CALLMETHOD :
        {
          MethodInfo *mInfo = (MethodInfo *)id.data;
          mInfo->Invoke();
          if(id.waitingThread != 0)
          {
            resume_thread(id.waitingThread);
          }
          delete mInfo;
        }
        break;

      case 'natv' :  // native queue PLEvent
        if (mEventQueue)
          mEventQueue->ProcessPendingEvents();
        break;

      default :
#ifdef DEBUG
        printf("nsAppShell::Run - UNKNOWN EVENT\n");
#endif
        break;
      }

      delete newitem;
      newitem = nsnull;
      
      RetrieveAllEvents(false); // get newer messages (non-block)
    }
  }

  Spindown();

  Release();

  return NS_OK;
}

Here is the call graph for this function:

virtual nsresult nsAppShell::Run ( ) [virtual]

Enter an event loop.

Don't leave until application exits.

Implements nsIAppShell.

Prepare to stop processing events.

Implements nsIAppShell.

Definition at line 323 of file nsAppShell.cpp.

{
  if (mEventQueue) {
    ListenToEventQueue(mEventQueue, PR_FALSE);
    mEventQueue->ProcessPendingEvents();
    mEventQueue = nsnull;
  }
  return NS_OK;
}

Here is the call graph for this function:

Here is the caller graph for this function:

Prepare to stop processing events.

Implements nsIAppShell.

Prepare to process events.

Implements nsIAppShell.

Definition at line 284 of file nsAppShell.cpp.

{
  nsresult   rv = NS_OK;

  // Get the event queue service
  nsCOMPtr<nsIEventQueueService> eventQService = do_GetService(kEventQueueServiceCID, &rv);

  if (NS_FAILED(rv)) {
    NS_ASSERTION("Could not obtain event queue service", PR_FALSE);
    return rv;
  }

  //Get the event queue for the thread.
  rv = eventQService->GetThreadEventQueue(NS_CURRENT_THREAD, getter_AddRefs(mEventQueue));
  
  // If we got an event queue, use it.
  if (mEventQueue)
    goto done;

  // otherwise create a new event queue for the thread
  rv = eventQService->CreateThreadEventQueue();
  if (NS_FAILED(rv)) {
    NS_ASSERTION("Could not create the thread event queue", PR_FALSE);
    return rv;
  }

  // Ask again nicely for the event queue now that we have created one.
  rv = eventQService->GetThreadEventQueue(NS_CURRENT_THREAD, getter_AddRefs(mEventQueue));

done:
  ListenToEventQueue(mEventQueue, PR_TRUE);
  return rv;
}

Here is the call graph for this function:

Here is the caller graph for this function:

Prepare to process events.

Implements nsIAppShell.


Member Data Documentation

Definition at line 108 of file nsAppShell.h.

port_id nsAppShell::eventport [private]

Definition at line 83 of file nsAppShell.h.

Definition at line 85 of file nsAppShell.h.

Definition at line 79 of file nsAppShell.h.

Definition at line 87 of file nsAppShell.h.

Definition at line 104 of file nsAppShell.h.

XtAppContext nsAppShell::mAppContext [static]

Definition at line 73 of file nsAppShell.h.

Definition at line 102 of file nsAppShell.h.

PRUint16 nsAppShell::mClickedButton = 0 [static, private]

Definition at line 100 of file nsAppShell.h.

PRInt16 nsAppShell::mClicks = 1 [static, private]

Definition at line 99 of file nsAppShell.h.

PRTime nsAppShell::mClickTime = 0 [static, private]

Definition at line 101 of file nsAppShell.h.

Definition at line 106 of file nsAppShell.h.

Definition at line 75 of file nsAppShell.h.

Definition at line 103 of file nsAppShell.h.

Definition at line 66 of file nsAppShell.h.

int nsAppShell::mFD [private]

Definition at line 83 of file nsAppShell.h.

Definition at line 74 of file nsAppShell.h.

Definition at line 107 of file nsAppShell.h.

PRBool nsAppShell::mPtInited = PR_FALSE [static, private]

Definition at line 84 of file nsAppShell.h.

Definition at line 75 of file nsAppShell.h.

Definition at line 105 of file nsAppShell.h.

Definition at line 62 of file nsAppShell.h.

XlibRgbHandle * nsAppShell::mXlib_rgb_handle = nsnull [static, private]

Definition at line 77 of file nsAppShell.h.

nsMacMessagePump * nsAppShell::sMacPump [static, protected]

Definition at line 63 of file nsAppShell.h.

nsAppShell * nsAppShell::sMacPumpOwner [static, protected]

Definition at line 64 of file nsAppShell.h.

sem_id nsAppShell::syncsem [private]

Definition at line 84 of file nsAppShell.h.


The documentation for this class was generated from the following files: