((value) + DIALOG_BUTTON_COMMAND_ID_OFFSET)
extern EMACS_TIME timer_check P_ ((int));
+static int quit_dialog_event_loop;
static pascal OSStatus
mac_handle_dialog_event (next_handler, event, data)
{
OSStatus err, result = eventNotHandledErr;
WindowRef window = (WindowRef) data;
- int quit_event_loop_p = 0;
switch (GetEventClass (event))
{
if (DIALOG_BUTTON_COMMAND_ID_P (command.commandID))
{
SetWRefCon (window, command.commandID);
- quit_event_loop_p = 1;
+ quit_dialog_event_loop = 1;
break;
}
switch (char_code)
{
case kEscapeCharCode:
- quit_event_loop_p = 1;
+ quit_dialog_event_loop = 1;
break;
default:
NULL, &key_code);
if (err == noErr)
if (mac_quit_char_key_p (modifiers, key_code))
- quit_event_loop_p = 1;
+ quit_dialog_event_loop = 1;
}
break;
}
abort ();
}
- if (quit_event_loop_p)
+ if (quit_dialog_event_loop)
{
err = QuitEventLoop (GetCurrentEventLoop ());
if (err == noErr)
{
EventTargetRef toolbox_dispatcher = GetEventDispatcherTarget ();
+ quit_dialog_event_loop = 0;
while (1)
{
EMACS_TIME next_time = timer_check (1);
SendEventToEventTarget (event, toolbox_dispatcher);
ReleaseEvent (event);
}
+#ifdef MAC_OSX
else if (err != eventLoopTimedOutErr)
{
if (err == eventLoopQuitErr)
err = noErr;
break;
}
+#else
+ /* The return value of ReceiveNextEvent seems to be
+ unreliable. Use our own global variable instead. */
+ if (quit_dialog_event_loop)
+ {
+ err = noErr;
+ break;
+ }
+#endif
}
}
if (err == noErr)