VirtualBox

Changeset 8733

Show
Ignore:
Timestamp:
05/09/08 10:39:56 (2 months ago)
Author:
vboxsync
Message:

FE/Qt4-OSX: Backported r30301 (FE/Qt-OSX: Added several debug functions for event tracking. Added detection for apple+space (spotlight).)

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/src/VBox/Frontends/VirtualBox4/include/VBoxUtils.h

    r8155 r8733  
    277277OSStatus darwinRegionHandler (EventHandlerCallRef aInHandlerCallRef, EventRef aInEvent, void *aInUserData); 
    278278 
     279# ifdef DEBUG 
     280void darwinDebugPrintEvent (const char *aPrefix, EventRef aEvent); 
     281# endif 
    279282#endif /* Q_WS_MAC */ 
    280283 
  • trunk/src/VBox/Frontends/VirtualBox4/src/VBoxConsoleView.cpp

    r8717 r8733  
    115115                                                         EventRef inEvent, void *inUserData) 
    116116{ 
    117     VBoxConsoleView *view = (VBoxConsoleView *)inUserData; 
    118     UInt32 EventClass = ::GetEventClass (inEvent); 
    119     if (EventClass == kEventClassKeyboard) 
     117    VBoxConsoleView *view = static_cast<VBoxConsoleView *> (inUserData); 
     118    UInt32 eventClass = ::GetEventClass (inEvent); 
     119    UInt32 eventKind = ::GetEventKind (inEvent); 
     120    /* For debugging events */ 
     121    /*  
     122    if (!(eventClass == 'cute')) 
     123        ::darwinDebugPrintEvent ("view: ", inEvent); 
     124    */ 
     125 
     126    /* Not sure but this seems an triggered event if the spotlight searchbar is 
     127     * displayed. So flag that the host key isn't pressed alone. */ 
     128    if (eventClass == 'cgs ' && eventKind == 0x15 && 
     129        view->mIsHostkeyPressed) 
     130        view->mIsHostkeyAlone = false; 
     131 
     132    if (eventClass == kEventClassKeyboard) 
    120133    { 
    121134        if (view->darwinKeyboardEvent (inEvent)) 
     
    129142     * get any key down/up events, so these combinations are dead to the guest... 
    130143     */ 
    131     else if (EventClass == kEventClassCommand) 
     144    else if (eventClass == kEventClassCommand) 
    132145    { 
    133146        if (view->mKbdCaptured) 
     
    145158bool VBoxConsoleView::macEventFilter (EventRef inEvent, void *inUserData) 
    146159{ 
    147     VBoxConsoleView *view = (VBoxConsoleView *)inUserData; 
    148     UInt32 EventClass = ::GetEventClass (inEvent); 
    149     if (EventClass == kEventClassKeyboard) 
     160    VBoxConsoleView *view = static_cast<VBoxConsoleView *> (inUserData); 
     161    UInt32 eventClass = ::GetEventClass (inEvent); 
     162    UInt32 eventKind = ::GetEventKind (inEvent); 
     163 
     164    /* For debugging events */ 
     165    /*  
     166    if (!(eventClass == 'cute')) 
     167        ::darwinDebugPrintEvent ("view: ", inEvent); 
     168    */ 
     169 
     170    /* Not sure but this seems an triggered event if the spotlight searchbar is 
     171     * displayed. So flag that the host key isn't pressed alone. */ 
     172    if (eventClass == 'cgs ' && eventKind == 0x15 && 
     173        view->mIsHostkeyPressed) 
     174        view->mIsHostkeyAlone = false; 
     175 
     176    if (eventClass == kEventClassKeyboard) 
    150177    { 
    151178        if (view->darwinKeyboardEvent (inEvent)) 
  • trunk/src/VBox/Frontends/VirtualBox4/src/darwin/VBoxUtils-darwin.cpp

    r8155 r8733  
    293293} 
    294294 
     295/* Event debugging stuff. Borrowed from the Knuts Qt patch. */ 
     296#ifdef DEBUG 
     297 
     298# define MY_CASE(a) case a: return #a 
     299const char * DarwinDebugEventName (UInt32 ekind) 
     300{ 
     301    switch (ekind) 
     302    { 
     303        MY_CASE(kEventWindowUpdate                ); 
     304        MY_CASE(kEventWindowDrawContent           ); 
     305        MY_CASE(kEventWindowActivated             ); 
     306        MY_CASE(kEventWindowDeactivated           ); 
     307        MY_CASE(kEventWindowHandleActivate        ); 
     308        MY_CASE(kEventWindowHandleDeactivate      ); 
     309        MY_CASE(kEventWindowGetClickActivation    ); 
     310        MY_CASE(kEventWindowGetClickModality      ); 
     311        MY_CASE(kEventWindowShowing               ); 
     312        MY_CASE(kEventWindowHiding                ); 
     313        MY_CASE(kEventWindowShown                 ); 
     314        MY_CASE(kEventWindowHidden                ); 
     315        MY_CASE(kEventWindowCollapsing            ); 
     316        MY_CASE(kEventWindowCollapsed             ); 
     317        MY_CASE(kEventWindowExpanding             ); 
     318        MY_CASE(kEventWindowExpanded              ); 
     319        MY_CASE(kEventWindowZoomed                ); 
     320        MY_CASE(kEventWindowBoundsChanging        ); 
     321        MY_CASE(kEventWindowBoundsChanged         ); 
     322        MY_CASE(kEventWindowResizeStarted         ); 
     323        MY_CASE(kEventWindowResizeCompleted       ); 
     324        MY_CASE(kEventWindowDragStarted           ); 
     325        MY_CASE(kEventWindowDragCompleted         ); 
     326        MY_CASE(kEventWindowClosed                ); 
     327        MY_CASE(kEventWindowTransitionStarted     ); 
     328        MY_CASE(kEventWindowTransitionCompleted   ); 
     329        MY_CASE(kEventWindowClickDragRgn          ); 
     330        MY_CASE(kEventWindowClickResizeRgn        ); 
     331        MY_CASE(kEventWindowClickCollapseRgn      ); 
     332        MY_CASE(kEventWindowClickCloseRgn         ); 
     333        MY_CASE(kEventWindowClickZoomRgn          ); 
     334        MY_CASE(kEventWindowClickContentRgn       ); 
     335        MY_CASE(kEventWindowClickProxyIconRgn     ); 
     336        MY_CASE(kEventWindowClickToolbarButtonRgn ); 
     337        MY_CASE(kEventWindowClickStructureRgn     ); 
     338        MY_CASE(kEventWindowCursorChange          ); 
     339        MY_CASE(kEventWindowCollapse              ); 
     340        MY_CASE(kEventWindowCollapseAll           ); 
     341        MY_CASE(kEventWindowExpand                ); 
     342        MY_CASE(kEventWindowExpandAll             ); 
     343        MY_CASE(kEventWindowClose                 ); 
     344        MY_CASE(kEventWindowCloseAll              ); 
     345        MY_CASE(kEventWindowZoom                  ); 
     346        MY_CASE(kEventWindowZoomAll               ); 
     347        MY_CASE(kEventWindowContextualMenuSelect  ); 
     348        MY_CASE(kEventWindowPathSelect            ); 
     349        MY_CASE(kEventWindowGetIdealSize          ); 
     350        MY_CASE(kEventWindowGetMinimumSize        ); 
     351        MY_CASE(kEventWindowGetMaximumSize        ); 
     352        MY_CASE(kEventWindowConstrain             ); 
     353        MY_CASE(kEventWindowHandleContentClick    ); 
     354        MY_CASE(kEventWindowGetDockTileMenu       ); 
     355        MY_CASE(kEventWindowProxyBeginDrag        ); 
     356        MY_CASE(kEventWindowProxyEndDrag          ); 
     357        MY_CASE(kEventWindowToolbarSwitchMode     ); 
     358        MY_CASE(kEventWindowFocusAcquired         ); 
     359        MY_CASE(kEventWindowFocusRelinquish       ); 
     360        MY_CASE(kEventWindowFocusContent          ); 
     361        MY_CASE(kEventWindowFocusToolbar          ); 
     362        MY_CASE(kEventWindowFocusDrawer           ); 
     363        MY_CASE(kEventWindowSheetOpening          ); 
     364        MY_CASE(kEventWindowSheetOpened           ); 
     365        MY_CASE(kEventWindowSheetClosing          ); 
     366        MY_CASE(kEventWindowSheetClosed           ); 
     367        MY_CASE(kEventWindowDrawerOpening         ); 
     368        MY_CASE(kEventWindowDrawerOpened          ); 
     369        MY_CASE(kEventWindowDrawerClosing         ); 
     370        MY_CASE(kEventWindowDrawerClosed          ); 
     371        MY_CASE(kEventWindowDrawFrame             ); 
     372        MY_CASE(kEventWindowDrawPart              ); 
     373        MY_CASE(kEventWindowGetRegion             ); 
     374        MY_CASE(kEventWindowHitTest               ); 
     375        MY_CASE(kEventWindowInit                  ); 
     376        MY_CASE(kEventWindowDispose               ); 
     377        MY_CASE(kEventWindowDragHilite            ); 
     378        MY_CASE(kEventWindowModified              ); 
     379        MY_CASE(kEventWindowSetupProxyDragImage   ); 
     380        MY_CASE(kEventWindowStateChanged          ); 
     381        MY_CASE(kEventWindowMeasureTitle          ); 
     382        MY_CASE(kEventWindowDrawGrowBox           ); 
     383        MY_CASE(kEventWindowGetGrowImageRegion    ); 
     384        MY_CASE(kEventWindowPaint                 ); 
     385    } 
     386    static char s_sz[64]; 
     387    sprintf(s_sz, "kind=%u", (uint)ekind); 
     388    return s_sz; 
     389} 
     390# undef MY_CASE 
     391 
     392/* Convert a class into the 4 char code defined in 
     393 * 'Developer/Headers/CFMCarbon/CarbonEvents.h' to  
     394 * identify the event. */ 
     395const char * darwinDebugClassName (UInt32 eclass) 
     396{ 
     397    char *pclass = (char*)&eclass; 
     398    static char s_sz[11]; 
     399    sprintf(s_sz, "class=%c%c%c%c", pclass[3],  
     400                                    pclass[2],  
     401                                    pclass[1],  
     402                                    pclass[0]); 
     403    return s_sz; 
     404} 
     405 
     406void darwinDebugPrintEvent (const char *psz, EventRef event) 
     407{ 
     408  if (!event) 
     409      return; 
     410  UInt32 ekind = GetEventKind (event), eclass = GetEventClass (event); 
     411  if (eclass == kEventClassWindow) 
     412  { 
     413      switch (ekind) 
     414      { 
     415          case kEventWindowDrawContent: 
     416          case kEventWindowUpdate: 
     417          case kEventWindowBoundsChanged: 
     418              break; 
     419          default: 
     420          { 
     421              WindowRef wid = NULL; 
     422              GetEventParameter(event, kEventParamDirectObject, typeWindowRef, NULL, sizeof(WindowRef), NULL, &wid); 
     423              QWidget *widget = QWidget::find((WId)wid); 
     424              printf("%d %s: (%s) %#x win=%p wid=%p (%s)\n", (int)time(NULL), psz, darwinDebugClassName (eclass), (uint)ekind, wid, widget, DarwinDebugEventName (ekind)); 
     425              break; 
     426          } 
     427      } 
     428  } 
     429  else if (eclass == kEventClassCommand) 
     430  { 
     431      WindowRef wid = NULL; 
     432      GetEventParameter(event, kEventParamDirectObject, typeWindowRef, NULL, sizeof(WindowRef), NULL, &wid); 
     433      QWidget *widget = QWidget::find((WId)wid); 
     434      const char *name = "Unknown"; 
     435      switch (ekind) 
     436      { 
     437          case kEventCommandProcess: 
     438              name = "kEventCommandProcess"; 
     439              break; 
     440          case kEventCommandUpdateStatus: 
     441              name = "kEventCommandUpdateStatus"; 
     442              break; 
     443      } 
     444      printf("%d %s: (%s) %#x win=%p wid=%p (%s)\n", (int)time(NULL), psz, darwinDebugClassName (eclass), (uint)ekind, wid, widget, name); 
     445  } 
     446  else if (eclass == kEventClassKeyboard) 
     447      printf("%d %s: %#x(%s) %#x (kEventClassKeyboard)\n", (int)time(NULL), psz, (uint)eclass, darwinDebugClassName (eclass), (uint)ekind); 
     448 
     449  else 
     450      printf("%d %s: %#x(%s) %#x\n", (int)time(NULL), psz, (uint)eclass, darwinDebugClassName (eclass), (uint)ekind); 
     451} 
     452 
     453#endif /* DEBUG */ 

© 2008 Sun Microsystems, Inc.
ContactPrivacy policy