static void eventproc(EventRecord *event) { int keycode; keycode = (event->message & keyCodeMask) >> 8; switch(event->what) { case mouseDown: HandleMouseDown(event); break; case updateEvt: HandleUpdateEvent(event); break; case keyDown: case autoKey: if (!np2running) { break; } #if !TARGET_API_MAC_CARBON if ((keycode == 0x6f) && (np2oscfg.F12KEY == 0)) { HandleMenuChoice(IDM_MOUSE); break; } #endif if (event->modifiers & cmdKey) { #if !TARGET_API_MAC_CARBON if (mackbd_keydown(keycode, TRUE)) { break; } #endif soundmng_stop(); mousemng_disable(MOUSEPROC_MACUI); #if TARGET_API_MAC_CARBON HandleMenuChoice(MenuEvent(event)); #else HandleMenuChoice(MenuKey(event->message & charCodeMask)); #endif mousemng_enable(MOUSEPROC_MACUI); soundmng_play(); } else { mackbd_keydown(keycode, FALSE); } break; case keyUp: mackbd_keyup(keycode); break; case mouseUp: mousemng_buttonevent(MOUSEMNG_LEFTUP); mousemng_buttonevent(MOUSEMNG_RIGHTUP); break; case activateEvt: mackbd_activate((event->modifiers & activeFlag)?TRUE:FALSE); break; } }
static void HandleMouseDown(EventRecord *pevent) { WindowPtr hWnd; Rect rDrag; switch(FindWindow(pevent->where, &hWnd)) { case inMenuBar: if (np2running) { soundmng_stop(); mousemng_disable(MOUSEPROC_MACUI); HandleMenuChoice(MenuSelect(pevent->where)); mousemng_enable(MOUSEPROC_MACUI); soundmng_play(); } break; case inDrag: #if TARGET_API_MAC_CARBON { BitMap gscreenBits; GetQDGlobalsScreenBits(&gscreenBits); rDrag = gscreenBits.bounds; InsetRect(&rDrag, DRAG_THRESHOLD, DRAG_THRESHOLD); DragWindow(hWnd, pevent->where, &rDrag); } #else rDrag = qd.screenBits.bounds; InsetRect(&rDrag, DRAG_THRESHOLD, DRAG_THRESHOLD); DragWindow(hWnd, pevent->where, &rDrag); #endif break; case inContent: mousemng_buttonevent((pevent->modifiers & (1 << 12)) ?MOUSEMNG_RIGHTDOWN:MOUSEMNG_LEFTDOWN); break; case inGoAway: if (TrackGoAway(hWnd, pevent->where)) { } np2running = FALSE; break; } }
// -------------------------------------------------------------------------------------- static Boolean dialogFilter(EventRecord *event, DialogRef *theDialog, DialogItemIndex *itemHit) { /* See the comments for HandleKeyDown in PrefsWindow.c about why we're using virtual key codes instead of character codes. */ Boolean eventHandled = false; char charCode, keyCode; switch (event->what) { case keyDown: // handle key presses not handled by DialogSelect case autoKey: *theDialog = GetDialogFromWindow(FrontNonFloatingWindow()); SetPortDialogPort(*theDialog); charCode = event->message & charCodeMask; keyCode = (event->message & keyCodeMask) >> 8; if ((event->modifiers & cmdKey) != 0) // check to see if any menu commands { // were selected - this isn't necessarily handling the event UInt32 menuChoice; OSErr error; MenuCommand commandID; menuChoice = MenuEvent(event); error = GetMenuItemCommandID(GetMenuRef(HiWord(menuChoice)), LoWord(menuChoice), &commandID); if (error == noErr) { if (commandID == 0) // if the menu item chosen does not have a commandID = (MenuCommand)menuChoice; // command ID HandleMenuChoice(commandID); // (but they all should) } } if ( (keyCode == kEnterKeyCode) || (keyCode == kReturnKeyCode) || (keyCode == kEscapeKeyCode) || ( ((event->modifiers & cmdKey) != 0) && (charCode == '.') ) ) { ControlRef button; unsigned long finalTicks; if ( (keyCode == kEnterKeyCode) || (keyCode == kReturnKeyCode) ) { GetDialogItemAsControl(*theDialog, kStdOkItemIndex, &button); *itemHit = kStdOkItemIndex; } else { GetDialogItemAsControl(*theDialog, kStdCancelItemIndex, &button); *itemHit = kStdCancelItemIndex; } HiliteControl(button, kControlButtonPart); Delay(8, &finalTicks); HiliteControl(button, kControlNoPart); eventHandled = true; } } return eventHandled; }
// -------------------------------------------------------------------------------------- static void handleEvents(EventRecord *event) { WindowRef window; Boolean activate; WindowPartCode partCode; OSErr error; Rect tempRect, newSize; long menuChoice; MenuCommand commandID; RgnHandle grayRegion; switch (event->what) // handle events according to the priority { // determined by the system case activateEvt: window = (WindowRef)event->message; activate = (event->modifiers & activeFlag) != 0; HandleActivate(window, activate); break; case mouseDown: partCode = FindWindow(event->where, &window); switch(partCode) { case inMenuBar: menuChoice = MenuSelect(event->where); error = GetMenuItemCommandID(GetMenuRef(HiWord(menuChoice)), LoWord(menuChoice), &commandID); if (error == noErr) { if (commandID == 0) // if the menu item clicked on does not have commandID = (MenuCommand)menuChoice; // a command ID HandleMenuChoice(commandID); } break; case inSysWindow: if (window != NULL) SystemClick(event, window); break; case inContent: // the following window part codes will only be returned if (window != FrontWindow()) // for the preferences window SelectWindow(window); else HandleContentClick(window, event->where, event->modifiers); break; case inDrag: grayRegion = GetGrayRgn(); DragWindow(window, event->where, &((*grayRegion)->rgnBBox)); break; case inGrow: SetRect(&tempRect, kPrefsWindowPlatinumWidth, kPrefsWindowPlatinumHeight, SHRT_MAX, SHRT_MAX); ResizeWindow(window, event->where, &tempRect, &newSize); AdjustControls(window); break; case inGoAway: ClosePrefsWindow(window); break; } break; case keyDown: case autoKey: // a separate auto key handler would go after disk events if ((event->modifiers & cmdKey) != 0) { UInt32 keyMenuChoice; keyMenuChoice = MenuEvent(event); error = GetMenuItemCommandID(GetMenuRef(HiWord(keyMenuChoice)), LoWord(keyMenuChoice), &commandID); if (error == noErr) { if (commandID == 0) // if the menu item chosen does not have a commandID = (MenuCommand)keyMenuChoice; // command ID HandleMenuChoice(commandID); // (but they all should) } } else { window = FrontNonFloatingWindow(); if (window != NULL) { char keyCode = (event->message & keyCodeMask) >> 8; HandleKeyDown(keyCode, window); } } break; case diskEvt: if (HiWord(event->message) != noErr) { Point where; SetPt(&where, 70, 50); ShowCursor(); DIBadMount(where, event->message); } break; case updateEvt: window = (WindowRef)event->message; SetPortWindowPort(window); BeginUpdate(window); HandleDrawContent(window); EndUpdate(window); break; case kHighLevelEvent: // an OS Event handler would go before high level events AEProcessAppleEvent(event); break; }