home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Club Amiga de Montreal - CAM
/
CAM_CD_1.iso
/
files
/
372.lha
/
PopUpMenu_3.2
/
Source
/
InputHandler.c
< prev
next >
Wrap
C/C++ Source or Header
|
1990-05-06
|
3KB
|
89 lines
#include "PopUpMenu.h"
#define QUALIFIERS (IEQUALIFIER_LSHIFT | IEQUALIFIER_RSHIFT | \
IEQUALIFIER_CONTROL | IEQUALIFIER_LALT | \
IEQUALIFIER_RALT | IEQUALIFIER_LCOMMAND | \
IEQUALIFIER_RCOMMAND | IEQUALIFIER_MIDBUTTON | \
IEQUALIFIER_LEFTBUTTON)
IMPORT struct IntuitionBase *IntuitionBase;
/*++++++++++++++++++++++++++++++++++++++++++++++++
+ MyHandler(Events, MySignals)
+ Look for MenuDown & MenuUp events and signal our task
+
+ INPUTS
+ Events - List of events (from input.device)
+ MySignals - PopUpMenuTask & MenuUp, MenuDown Signals
+
+ OUTPUT
+ Eventlist without MenuDown messgaes
+++++++++++++++++++++++++++++++++++++++++++++++++++*/
struct InputEvent *PopUpHandler(Events, MySignals)
struct InputEvent *Events;
struct SignalData *MySignals;
{
struct InputEvent *Event;
struct InputEvent *LastEvent;
if (MySignals->Down)
/* tell the task we are living */
Signal(MySignals->PopUpMenuTask, MySignals->MouseMovedSig);
for (Event = Events, LastEvent = NULL; Event != NULL; Event = Event->ie_NextEvent) {
if (Event->ie_Class == IECLASS_RAWMOUSE) {
if (NOT(MySignals->Down)) {
union {
struct Window *ActiveWindow;
struct Screen *ActiveScreen;
} Temp;
/* Do not signal my task if
1) Any qualifierkey is pressed.
2) Mouse in menubar
3) No window is active.
4) A requester is blocking the window.
5) Window has no menues
6) Window has RMBTRAP set */
if ((Event->ie_Code == MENUDOWN) AND
!(Event->ie_Qualifier & QUALIFIERS) AND
(Temp.ActiveScreen = IntuitionBase->ActiveScreen) AND
(Temp.ActiveScreen->MouseY >= Temp.ActiveScreen->BarHeight) AND
(Temp.ActiveWindow = IntuitionBase->ActiveWindow) AND
(Temp.ActiveWindow->ReqCount == 0) AND
(Temp.ActiveWindow->MenuStrip) AND
!(Temp.ActiveWindow->Flags & RMBTRAP)) {
Signal (MySignals->PopUpMenuTask, MySignals->MenuDownSig);
MySignals->Down = TRUE;
}
else
goto GetOutOfHere; /* oops! */
} /* if NOT Down */
else /* Down */
switch (Event->ie_Code) {
case SELECTDOWN:
Signal(MySignals->PopUpMenuTask, MySignals->SelectDownSig);
case SELECTUP:
break;
case MENUUP:
Signal (MySignals->PopUpMenuTask, MySignals->MenuUpSig);
MySignals->Down = FALSE;
break;
default:
goto GetOutOfHere; /* oops! */
} /* case */
/* Take event from chain */
if (LastEvent == NULL)
Events = Event->ie_NextEvent;
else
LastEvent->ie_NextEvent = Event->ie_NextEvent;
continue;
} /* if RAWMOUSE */
GetOutOfHere:
LastEvent = Event;
}
return(Events);
}