-/* Functions taken directly from X sources
+/* Functions taken directly from X sources for use with the Microsoft W32 API.
Copyright (C) 1989, 1992, 1993, 1994, 1995 Free Software Foundation.
This file is part of GNU Emacs.
CRITICAL_SECTION critsect;
extern HANDLE keyboard_handle;
HANDLE input_available = NULL;
+HANDLE interrupt_handle = NULL;
void
init_crit ()
/* For safety, input_available should only be reset by get_next_msg
when the input queue is empty, so make it a manual reset event. */
keyboard_handle = input_available = CreateEvent (NULL, TRUE, FALSE, NULL);
+
+ /* interrupt_handle is signalled when quit (C-g) is detected, so that
+ blocking system calls can be interrupted. We make it a manual
+ reset event, so that if we should ever have multiple threads
+ performing system calls, they will all be interrupted (I'm guessing
+ that would the right response). Note that we use PulseEvent to
+ signal this event, so that it never remains signalled. */
+ interrupt_handle = CreateEvent (NULL, TRUE, FALSE, NULL);
}
void
CloseHandle (input_available);
input_available = NULL;
}
+ if (interrupt_handle)
+ {
+ CloseHandle (interrupt_handle);
+ interrupt_handle = NULL;
+ }
+}
+
+void
+signal_quit ()
+{
+ /* Make sure this event never remains signalled; if the main thread
+ isn't in a blocking call, then this should do nothing. */
+ PulseEvent (interrupt_handle);
}
void
select_palette (FRAME_PTR f, HDC hdc)
{
- if (!NILP (Vwin32_enable_palette))
- f->output_data.win32->old_palette =
- SelectPalette (hdc, one_win32_display_info.palette, FALSE);
+ if (!NILP (Vw32_enable_palette))
+ f->output_data.w32->old_palette =
+ SelectPalette (hdc, one_w32_display_info.palette, FALSE);
else
- f->output_data.win32->old_palette = NULL;
+ f->output_data.w32->old_palette = NULL;
if (RealizePalette (hdc))
{
void
deselect_palette (FRAME_PTR f, HDC hdc)
{
- if (f->output_data.win32->old_palette)
- SelectPalette (hdc, f->output_data.win32->old_palette, FALSE);
+ if (f->output_data.w32->old_palette)
+ SelectPalette (hdc, f->output_data.w32->old_palette, FALSE);
}
/* Get a DC for frame and select palette for drawing; force an update of
enter_crit ();
- hdc = GetDC (f->output_data.win32->window_desc);
+ hdc = GetDC (f->output_data.w32->window_desc);
select_palette (f, hdc);
return hdc;
int ret;
deselect_palette (f, hdc);
- ret = ReleaseDC (f->output_data.win32->window_desc, hdc);
+ ret = ReleaseDC (f->output_data.w32->window_desc, hdc);
leave_crit ();
typedef struct int_msg
{
- Win32Msg w32msg;
+ W32Msg w32msg;
struct int_msg *lpNext;
} int_msg;
BOOL
get_next_msg (lpmsg, bWait)
- Win32Msg * lpmsg;
+ W32Msg * lpmsg;
BOOL bWait;
{
BOOL bRet = FALSE;
if (nQueue)
{
- bcopy (&(lpHead->w32msg), lpmsg, sizeof (Win32Msg));
+ bcopy (&(lpHead->w32msg), lpmsg, sizeof (W32Msg));
{
int_msg * lpCur = lpHead;
BOOL
post_msg (lpmsg)
- Win32Msg * lpmsg;
+ W32Msg * lpmsg;
{
int_msg * lpNew = (int_msg *) myalloc (sizeof (int_msg));
if (!lpNew)
return (FALSE);
- bcopy (lpmsg, &(lpNew->w32msg), sizeof (Win32Msg));
+ bcopy (lpmsg, &(lpNew->w32msg), sizeof (W32Msg));
lpNew->lpNext = NULL;
enter_crit ();
}
BOOL
-prepend_msg (Win32Msg *lpmsg)
+prepend_msg (W32Msg *lpmsg)
{
int_msg * lpNew = (int_msg *) myalloc (sizeof (int_msg));
if (!lpNew)
return (FALSE);
- bcopy (lpmsg, &(lpNew->w32msg), sizeof (Win32Msg));
+ bcopy (lpmsg, &(lpNew->w32msg), sizeof (W32Msg));
enter_crit ();
return (mask);
}
-/* We can use mouse menus when we wish. */
-int
-have_menus_p (void)
-{
- return 1;
-}
-
-/* x_sync is a no-op on Win32. */
+/* x_sync is a no-op on W32. */
void
x_sync (f)
void *f;