X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/6ccb9cab43613632ece4f62d9ee28d694bc1d666..0a2aedfe6d650e825a50f25f972bac20d669f5cb:/src/w32xfns.c
diff --git a/src/w32xfns.c b/src/w32xfns.c
index 03611e1976..b5b22c9aa5 100644
--- a/src/w32xfns.c
+++ b/src/w32xfns.c
@@ -1,13 +1,13 @@
/* Functions taken directly from X sources for use with the Microsoft Windows API.
- Copyright (C) 1989, 1992-1995, 1999, 2001-2013 Free Software
+ Copyright (C) 1989, 1992-1995, 1999, 2001-2016 Free Software
Foundation, Inc.
This file is part of GNU Emacs.
GNU Emacs is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
+the Free Software Foundation, either version 3 of the License, or (at
+your option) any later version.
GNU Emacs is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -20,15 +20,12 @@ along with GNU Emacs. If not, see . */
#include
#include
#include
+#include
+#include
#include "lisp.h"
-#include "keyboard.h"
#include "frame.h"
-#include "charset.h"
-#include "fontset.h"
-#include "blockinput.h"
#include "w32term.h"
-#include "windowsx.h"
#define myalloc(cb) GlobalAllocPtr (GPTR, cb)
#define myfree(lp) GlobalFreePtr (lp)
@@ -51,6 +48,21 @@ init_crit (void)
when the input queue is empty, so make it a manual reset event. */
input_available = CreateEvent (NULL, TRUE, FALSE, NULL);
+#if HAVE_W32NOTIFY
+ /* Initialize the linked list of notifications sets that will be
+ used to communicate between the watching worker threads and the
+ main thread. */
+ notifications_set_head = malloc (sizeof(struct notifications_set));
+ if (notifications_set_head)
+ {
+ memset (notifications_set_head, 0, sizeof(struct notifications_set));
+ notifications_set_head->next
+ = notifications_set_head->prev = notifications_set_head;
+ }
+ else
+ DebPrint(("Out of memory: can't initialize notifications sets."));
+#endif
+
#ifdef WINDOWSNT
keyboard_handle = input_available;
#endif /* WINDOWSNT */
@@ -79,6 +91,23 @@ delete_crit (void)
CloseHandle (interrupt_handle);
interrupt_handle = NULL;
}
+
+#if HAVE_W32NOTIFY
+ if (notifications_set_head)
+ {
+ /* Free any remaining notifications set that could be left over. */
+ while (notifications_set_head->next != notifications_set_head)
+ {
+ struct notifications_set *ns = notifications_set_head->next;
+ notifications_set_head->next = ns->next;
+ ns->next->prev = notifications_set_head;
+ if (ns->notifications)
+ free (ns->notifications);
+ free (ns);
+ }
+ }
+ free (notifications_set_head);
+#endif
}
void
@@ -90,9 +119,9 @@ signal_quit (void)
}
void
-select_palette (FRAME_PTR f, HDC hdc)
+select_palette (struct frame *f, HDC hdc)
{
- struct w32_display_info *display_info = FRAME_W32_DISPLAY_INFO (f);
+ struct w32_display_info *display_info = FRAME_DISPLAY_INFO (f);
if (!display_info->has_palette)
return;
@@ -117,7 +146,7 @@ select_palette (FRAME_PTR f, HDC hdc)
}
void
-deselect_palette (FRAME_PTR f, HDC hdc)
+deselect_palette (struct frame *f, HDC hdc)
{
if (f->output_data.w32->old_palette)
SelectPalette (hdc, f->output_data.w32->old_palette, FALSE);
@@ -126,7 +155,7 @@ deselect_palette (FRAME_PTR f, HDC hdc)
/* Get a DC for frame and select palette for drawing; force an update of
all frames if palette's mapping changes. */
HDC
-get_frame_dc (FRAME_PTR f)
+get_frame_dc (struct frame *f)
{
HDC hdc;
@@ -146,7 +175,7 @@ get_frame_dc (FRAME_PTR f)
}
int
-release_frame_dc (FRAME_PTR f, HDC hdc)
+release_frame_dc (struct frame *f, HDC hdc)
{
int ret;
@@ -333,9 +362,3 @@ drain_message_queue (void)
}
return retval;
}
-
-/* x_sync is a no-op on W32. */
-void
-x_sync (struct frame *f)
-{
-}