summaryrefslogtreecommitdiff
path: root/gdk
diff options
context:
space:
mode:
authorPaolo Borelli <pborelli@gnome.org>2016-03-05 19:02:15 +0100
committerPaolo Borelli <pborelli@gnome.org>2016-03-05 20:31:10 +0100
commit8f254814064cd23ae1467c75538cd78c38cba11c (patch)
tree083a77cf760d02a0f3cf110e0ef23728e864157a /gdk
parent58a49c1a4bfaf36dc52dc8ff4ad1c91c85277967 (diff)
downloadgtk+-8f254814064cd23ae1467c75538cd78c38cba11c.tar.gz
win32: use a struct for the event source
This removes the event_poll_fd global variable and the (ab)use of get_default_display. It is also more consistent with other backends. Also store display
Diffstat (limited to 'gdk')
-rw-r--r--gdk/win32/gdkdisplay-win32.c2
-rw-r--r--gdk/win32/gdkevents-win32.c71
-rw-r--r--gdk/win32/gdkprivate-win32.h2
3 files changed, 39 insertions, 36 deletions
diff --git a/gdk/win32/gdkdisplay-win32.c b/gdk/win32/gdkdisplay-win32.c
index 25273b5b38..c739e73812 100644
--- a/gdk/win32/gdkdisplay-win32.c
+++ b/gdk/win32/gdkdisplay-win32.c
@@ -232,7 +232,7 @@ _gdk_win32_display_open (const gchar *display_name)
win32_display->screen = g_object_new (GDK_TYPE_WIN32_SCREEN, NULL);
- _gdk_events_init ();
+ _gdk_events_init (_gdk_display);
_gdk_input_ignore_core = FALSE;
diff --git a/gdk/win32/gdkevents-win32.c b/gdk/win32/gdkevents-win32.c
index b326b901b2..1f802af1a8 100644
--- a/gdk/win32/gdkevents-win32.c
+++ b/gdk/win32/gdkevents-win32.c
@@ -108,6 +108,14 @@ extern gint _gdk_input_ignore_core;
GdkCursor *_gdk_win32_grab_cursor;
+typedef struct
+{
+ GSource source;
+
+ GdkDisplay *display;
+ GPollFD event_poll_fd;
+} GdkWin32EventSource;
+
static GSourceFuncs event_funcs = {
gdk_event_prepare,
gdk_event_check,
@@ -115,8 +123,6 @@ static GSourceFuncs event_funcs = {
NULL
};
-GPollFD event_poll_fd;
-
static GdkWindow *mouse_window = NULL;
static GdkWindow *mouse_window_ignored_leave = NULL;
static gint current_x, current_y;
@@ -286,9 +292,10 @@ _gdk_win32_window_procedure (HWND hwnd,
}
void
-_gdk_events_init (void)
+_gdk_events_init (GdkDisplay *display)
{
GSource *source;
+ GdkWin32EventSource *event_source;
#if 0
int i, j, n;
@@ -376,20 +383,22 @@ _gdk_events_init (void)
GDK_NOTE (EVENTS, g_print ("latin_locale = %08x\n", (guint) latin_locale));
#endif
- source = g_source_new (&event_funcs, sizeof (GSource));
+ source = g_source_new (&event_funcs, sizeof (GdkWin32EventSource));
g_source_set_name (source, "GDK Win32 event source");
g_source_set_priority (source, GDK_PRIORITY_EVENTS);
+ event_source = (GdkWin32EventSource *)source;
+ event_source->display = display;
#ifdef G_WITH_CYGWIN
- event_poll_fd.fd = open ("/dev/windows", O_RDONLY);
- if (event_poll_fd.fd == -1)
+ event_source->event_poll_fd.fd = open ("/dev/windows", O_RDONLY);
+ if (event_source->event_poll_fd.fd == -1)
g_error ("can't open \"/dev/windows\": %s", g_strerror (errno));
#else
- event_poll_fd.fd = G_WIN32_MSG_HANDLE;
+ event_source->event_poll_fd.fd = G_WIN32_MSG_HANDLE;
#endif
- event_poll_fd.events = G_IO_IN;
+ event_source->event_poll_fd.events = G_IO_IN;
- g_source_add_poll (source, &event_poll_fd);
+ g_source_add_poll (source, &event_source->event_poll_fd);
g_source_set_can_recurse (source, TRUE);
g_source_attach (source, NULL);
}
@@ -3501,19 +3510,17 @@ static gboolean
gdk_event_prepare (GSource *source,
gint *timeout)
{
- GdkDisplay *display;
+ GdkWin32EventSource *event_source = (GdkWin32EventSource *)source;
gboolean retval;
- display = gdk_display_get_default ();
-
gdk_threads_enter ();
*timeout = -1;
- if (display->event_pause_count > 0)
- retval =_gdk_event_queue_find_first (display) != NULL;
+ if (event_source->display->event_pause_count > 0)
+ retval =_gdk_event_queue_find_first (event_source->display) != NULL;
else
- retval = (_gdk_event_queue_find_first (display) != NULL ||
+ retval = (_gdk_event_queue_find_first (event_source->display) != NULL ||
(modal_win32_dialog == NULL &&
GetQueueStatus (QS_ALLINPUT) != 0));
@@ -3525,17 +3532,15 @@ gdk_event_prepare (GSource *source,
static gboolean
gdk_event_check (GSource *source)
{
- GdkDisplay *display;
+ GdkWin32EventSource *event_source = (GdkWin32EventSource *)source;
gboolean retval;
- display = gdk_display_get_default ();
-
gdk_threads_enter ();
- if (display->event_pause_count > 0)
- retval = _gdk_event_queue_find_first (display) != NULL;
- else if (event_poll_fd.revents & G_IO_IN)
- retval = (_gdk_event_queue_find_first (display) != NULL ||
+ if (event_source->display->event_pause_count > 0)
+ retval = _gdk_event_queue_find_first (event_source->display) != NULL;
+ else if (event_source->event_poll_fd.revents & G_IO_IN)
+ retval = (_gdk_event_queue_find_first (event_source->display) != NULL ||
(modal_win32_dialog == NULL &&
GetQueueStatus (QS_ALLINPUT) != 0));
else
@@ -3548,18 +3553,16 @@ gdk_event_check (GSource *source)
static gboolean
gdk_event_dispatch (GSource *source,
- GSourceFunc callback,
- gpointer user_data)
+ GSourceFunc callback,
+ gpointer user_data)
{
- GdkDisplay *display;
+ GdkWin32EventSource *event_source = (GdkWin32EventSource *)source;
GdkEvent *event;
- display = gdk_display_get_default ();
-
gdk_threads_enter ();
- _gdk_win32_display_queue_events (display);
- event = _gdk_event_unqueue (display);
+ _gdk_win32_display_queue_events (event_source->display);
+ event = _gdk_event_unqueue (event_source->display);
if (event)
{
@@ -3569,11 +3572,11 @@ gdk_event_dispatch (GSource *source,
/* Do drag & drop if it is still pending */
if (_dnd_source_state == GDK_WIN32_DND_PENDING)
- {
- _dnd_source_state = GDK_WIN32_DND_DRAGGING;
- _gdk_win32_dnd_do_dragdrop ();
- _dnd_source_state = GDK_WIN32_DND_NONE;
- }
+ {
+ _dnd_source_state = GDK_WIN32_DND_DRAGGING;
+ _gdk_win32_dnd_do_dragdrop ();
+ _dnd_source_state = GDK_WIN32_DND_NONE;
+ }
}
gdk_threads_leave ();
diff --git a/gdk/win32/gdkprivate-win32.h b/gdk/win32/gdkprivate-win32.h
index b604df6262..b3f89d3ff9 100644
--- a/gdk/win32/gdkprivate-win32.h
+++ b/gdk/win32/gdkprivate-win32.h
@@ -540,6 +540,6 @@ gboolean _gdk_win32_window_lacks_wm_decorations (GdkWindow *window);
/* Initialization */
void _gdk_win32_windowing_init (void);
void _gdk_dnd_init (void);
-void _gdk_events_init (void);
+void _gdk_events_init (GdkDisplay *display);
#endif /* __GDK_PRIVATE_WIN32_H__ */