diff options
Diffstat (limited to 'maccaml/events.c')
-rw-r--r-- | maccaml/events.c | 319 |
1 files changed, 0 insertions, 319 deletions
diff --git a/maccaml/events.c b/maccaml/events.c deleted file mode 100644 index 7411482094..0000000000 --- a/maccaml/events.c +++ /dev/null @@ -1,319 +0,0 @@ -/***********************************************************************/ -/* */ -/* Objective Caml */ -/* */ -/* Damien Doligez, projet Para, INRIA Rocquencourt */ -/* */ -/* Copyright 1997 Institut National de Recherche en Informatique et */ -/* en Automatique. All rights reserved. This file is distributed */ -/* under the terms of the GNU Library General Public License, with */ -/* the special exception on linking described in file ../LICENSE. */ -/* */ -/***********************************************************************/ - -/* $Id$ */ - -#include "main.h" - -/* [intr_requested] is true if the user typed command-period and the - SIGINT signal was not yet delivered. -*/ -int intr_requested = 0; - -UInt32 last_event_date = 0; - -UInt32 evtSleep = 0; -static RgnHandle mouseRegion = NULL; -static RgnHandle pointRegion = NULL; - -static void AdjustCursor (Point mouse, RgnHandle mouseRegion) -{ - WindowPtr w = FrontWindow (); - WEHandle we = WinGetWE (w); - int k = WinGetKind (w); - Boolean res; - - SetRectRgn (mouseRegion, -SHRT_MAX, -SHRT_MAX, SHRT_MAX, SHRT_MAX); - if (we != NULL && k != kWinAbout){ - if (w == winToplevel){ - res = AdjustRotatingCursor (); - if (res) return; - } - res = WEAdjustCursor (mouse, mouseRegion, we); - if (res) return; - } - SetCursor (&qd.arrow); -} - -static void DoActivate (EventRecord *evt) -{ - WindowPtr w = (WindowPtr) evt->message; - - if (GetWindowKind (w) != userKind) return; /*XXX*/ - WinActivateDeactivate (evt->modifiers & activeFlag, w); -} - -static void DoDiskEvent (EventRecord *evt) -{ - OSErr err; - Point pt; - - if (evt->message >> 16 != noErr){ - DILoad (); - err = DIBadMount (pt, evt->message); /* [pt] is ignored */ - if (err != noErr && err != 1 && err != 2){ - ErrorAlertGeneric (err); /* XXX or nothing ? */ - } - DIUnload (); - } -} - -static void DoKeyDown (EventRecord *evt) -{ - short chr = evt->message & charCodeMask; - Boolean isCmdKey = (evt->modifiers & cmdKey) != 0; - - if (chr == 0x10){ - switch ((evt->message & keyCodeMask) >> 8){ - case keyF1: - isCmdKey = 1; - chr = 'z'; - break; - case keyF2: - isCmdKey = 1; - chr = 'x'; - break; - case keyF3: - isCmdKey = 1; - chr = 'c'; - break; - case keyF4: - isCmdKey = 1; - chr = 'v'; - break; - default: - chr = -1; - } - } - if (isCmdKey && chr == '.' - && FrontWindow () == winToplevel - && evt->what != autoKey){ - FlushUnreadInput (); - raise (SIGINT); - } - if (isCmdKey && chr >= 0x20){ - UpdateMenus (); - DoMenuChoice (MenuKey (chr), evt->modifiers); - }else{ - WindowPtr w = FrontWindow (); - if (chr != -1 && w != NULL){ - WinDoKey (w, chr, evt); - } - } -} - -static void DoMouseDown (EventRecord *event) -{ - WindowPtr w; - short partCode; - - partCode = FindWindow (event->where, &w); - switch (partCode){ - case inMenuBar: - UpdateMenus (); - DoMenuChoice (MenuSelect (event->where), event->modifiers); - break; - case inSysWindow: - SystemClick (event, w); - break; - case inContent: - WinDoContentClick (event, w); - break; - case inDrag: - WinDoDrag (event->where, w); - break; - case inGrow: - WinDoGrow (event->where, w); - break; - case inGoAway: - if (TrackGoAway (w, event->where)) WinDoClose (closingWindow, w); - break; - case inZoomIn: - case inZoomOut: - if (TrackBox (w, event->where, partCode)) WinDoZoom (w, partCode); - break; - } -} - -/* XXX recuperer les mouse-up pour matcher les mouse-down ? */ -static void DoMouseUp (EventRecord *e) -{ - short partCode; - WindowPtr w; - Point hitpt; - GrafPtr saveport; - Rect r; - - if (FrontWindow () != winGraphics) return; - partCode = FindWindow (e->where, &w); - if (partCode != inContent) return; - PushWindowPort (winGraphics); - hitpt = e->where; - GlobalToLocal (&hitpt); - ScrollCalcGraph (winGraphics, &r); - if (PtInRect (hitpt, &r)) GraphGotEvent (e); - PopPort; - return; -} - -static void DoNullEvent (EventRecord *event) -{ -#pragma unused (event) - WindowPtr w = FrontWindow (); - - if (w != NULL) WinDoIdle (w); -} - -static void DoOSEvent (EventRecord *event) -{ - int msg = (event->message & osEvtMessageMask) >> 24; - WindowPtr w; - - switch (msg){ - case suspendResumeMessage: - w = FrontWindow (); - if (w != NULL){ - Boolean state = !! (event->message & resumeFlag); - WinActivateDeactivate (state, w); - } - if (event->message & convertClipboardFlag) ClipChanged (); - case mouseMovedMessage: ; - } -} - -static void DoUpdate (EventRecord *evt) -{ - WindowPtr w = (WindowPtr) evt->message; - - if (GetWindowKind (w) != userKind) return; /*XXX*/ - WinUpdate (w); -} - -static void DoDialogEvent (EventRecord *evt) -{ - DialogPtr dlg; - short itm; - - if (evt->what == diskEvt){ - DoDiskEvent (evt); - return; - }else if (evt->what == keyDown || evt->what == autoKey){ - if (evt->modifiers & cmdKey){ - DoKeyDown (evt); - return; - }else{ - switch ((evt->message & charCodeMask) >> 8){ - case '\n': - XXX (); /*XXX return key*/ - return; - case '\033': - XXX (); /*XXX escape key */ - return; - default: break; - } - } - } - if (DialogSelect (evt, &dlg, &itm)){ - switch (WinGetKind (dlg)){ - case kWinAbout: - Assert (0); /* No item is enabled. */ - break; - case kWinPrefs: - XXX (); - break; - default: - Assert (0); /* Other windows are not dialogs. */ - break; - } - } -} - -static pascal Boolean ProcessEvent (EventRecord *evt, long *sleep, - RgnHandle *rgn) -{ - if (evt->what <= osEvt) AdjustCursor (evt->where, mouseRegion); - if (IsDialogEvent (evt)){ - DoDialogEvent (evt); - }else{ - switch (evt->what){ - case nullEvent: - DoNullEvent (evt); - break; - case mouseDown: - DoMouseDown (evt); - break; - case mouseUp: /* Needed for the graphics window. */ - DoMouseUp (evt); - break; - case keyDown: - case autoKey: - DoKeyDown (evt); - break; - case updateEvt: - DoUpdate (evt); - break; - case activateEvt: - DoActivate (evt); - break; - case diskEvt: - DoDiskEvent (evt); - break; - case osEvt: - DoOSEvent (evt); - break; - case kHighLevelEvent: - AEProcessAppleEvent (evt); - break; - } - } - *sleep = evt->what == nullEvent ? evtSleep : 0; - *rgn = mouseRegion; - return false; -} - -void GetAndProcessEvents (WaitEventOption wait, short oldx, short oldy) -{ - EventRecord evt; - long dummysleep; - RgnHandle dummyregion; - UInt32 cursleep = (wait == noWait) ? 0 : evtSleep; - RgnHandle currgn; - - if (wait == waitMove){ - currgn = pointRegion; - SetRectRgn (pointRegion, oldx, oldy, oldx+1, oldy+1); - }else{ - currgn = mouseRegion; - } - - WaitNextEvent (everyEvent, &evt, cursleep, currgn); - ProcessEvent (&evt, &dummysleep, &dummyregion); - - while (evt.what != nullEvent){ - WaitNextEvent (everyEvent, &evt, 0, NULL); - ProcessEvent (&evt, &dummysleep, &dummyregion); - } -} - -AEIdleUPP ProcessEventUPP; - -OSErr InitialiseEvents (void) -{ - OSErr err; - - mouseRegion = NewRgn (); /* XXX out of memory ? */ - pointRegion = NewRgn (); /* XXX out of memory ? */ - ProcessEventUPP = NewAEIdleProc (ProcessEvent); - err = InstallAEHandlers (); - return err; -} |