summaryrefslogtreecommitdiff
path: root/gdk/linux-fb/gdkevents-fb.c
diff options
context:
space:
mode:
authorElliot Lee <sopwith@src.gnome.org>2000-06-20 20:20:38 +0000
committerElliot Lee <sopwith@src.gnome.org>2000-06-20 20:20:38 +0000
commitdd7510dccbf51df37e0d02d31f4daed4e52152e6 (patch)
tree96d9f438ed17642198ac2970af857476056a133b /gdk/linux-fb/gdkevents-fb.c
parent2eb7985b0bb0542d9c2aa427a8818d9def8ecf80 (diff)
downloadgtk+-dd7510dccbf51df37e0d02d31f4daed4e52152e6.tar.gz
*** empty log message ***
Diffstat (limited to 'gdk/linux-fb/gdkevents-fb.c')
-rw-r--r--gdk/linux-fb/gdkevents-fb.c92
1 files changed, 67 insertions, 25 deletions
diff --git a/gdk/linux-fb/gdkevents-fb.c b/gdk/linux-fb/gdkevents-fb.c
index 7b80aa364a..f353dc3c39 100644
--- a/gdk/linux-fb/gdkevents-fb.c
+++ b/gdk/linux-fb/gdkevents-fb.c
@@ -90,10 +90,27 @@ static GSourceFuncs event_funcs = {
* Functions for maintaining the event queue *
*********************************************/
+static gboolean fb_events_prepare(gpointer source_data,
+ GTimeVal *current_time,
+ gint *timeout,
+ gpointer user_data);
+static gboolean fb_events_check(gpointer source_data,
+ GTimeVal *current_time,
+ gpointer user_data);
+static gboolean fb_events_dispatch(gpointer source_data,
+ GTimeVal *dispatch_time,
+ gpointer user_data);
void
gdk_events_init (void)
{
-
+ static GSourceFuncs fb_events_funcs = {
+ fb_events_prepare,
+ fb_events_check,
+ fb_events_dispatch,
+ NULL
+ };
+
+ g_source_add(G_PRIORITY_HIGH_IDLE, TRUE, &fb_events_funcs, NULL, NULL, NULL);
}
/*
@@ -121,21 +138,64 @@ gdk_events_pending (void)
GdkEvent*
gdk_event_get_graphics_expose (GdkWindow *window)
{
+ GList *ltmp;
g_return_val_if_fail (window != NULL, NULL);
- return NULL;
+ for(ltmp = gdk_queued_events; ltmp; ltmp = ltmp->next)
+ {
+ GdkEvent *event = ltmp->data;
+ if(event->type == GDK_EXPOSE
+ && event->expose.window == window)
+ break;
+ }
+
+ if(ltmp)
+ {
+ GdkEvent *retval = ltmp->data;
+
+ gdk_event_queue_remove_link(ltmp);
+ g_list_free_1(ltmp);
+
+ return retval;
+ }
+
+ return NULL;
}
void
gdk_events_queue (void)
+{
+}
+
+static gboolean
+fb_events_prepare(gpointer source_data,
+ GTimeVal *current_time,
+ gint *timeout,
+ gpointer user_data)
{
-
+ *timeout = -1;
+
+ return fb_events_check(source_data, current_time, user_data);
}
-static gint handler_tag = 0;
+static gboolean
+fb_events_check(gpointer source_data,
+ GTimeVal *current_time,
+ gpointer user_data)
+{
+ gboolean retval;
+
+ GDK_THREADS_ENTER();
+
+ retval = (gdk_event_queue_find_first () != NULL);
+
+ GDK_THREADS_LEAVE();
+
+ return retval;
+}
static gboolean
-dispatch_events(gpointer data)
+fb_events_dispatch(gpointer source_data, GTimeVal *dispatch_time, gpointer user_data)
{
GdkEvent *event;
@@ -148,31 +208,13 @@ dispatch_events(gpointer data)
gdk_fb_drawable_clear(event->expose.window);
else if(gdk_event_func)
(*gdk_event_func)(event, gdk_event_data);
+
gdk_event_free(event);
}
GDK_THREADS_LEAVE();
- if(event && !handler_tag)
- handler_tag = g_idle_add_full(G_PRIORITY_HIGH_IDLE, dispatch_events, NULL, NULL);
- else if(!event && handler_tag)
- {
- g_source_remove(handler_tag);
- handler_tag = 0;
- }
-
- return handler_tag?TRUE:FALSE;
-}
-void
-_gdk_event_queue_changed(GList *queue)
-{
- if(queue && !handler_tag)
- handler_tag = g_idle_add_full(G_PRIORITY_HIGH_IDLE, dispatch_events, NULL, NULL);
- else if(!queue && handler_tag)
- {
- g_source_remove(handler_tag);
- handler_tag = 0;
- }
+ return TRUE;
}
/*