Add:Core:Support for FRA FRA NLS Setting
[navit-package] / navit / event_glib.c
index ec7c373..83c0a26 100644 (file)
@@ -22,6 +22,7 @@
 #include "event_glib.h"
 #include "debug.h"
 #include "callback.h"
+#include "plugin.h"
 
 static GMainLoop *loop;
 
@@ -54,11 +55,11 @@ event_glib_call_watch(GIOChannel * iochan, GIOCondition condition, gpointer t)
 }
 
 static struct event_watch *
-event_glib_add_watch(struct file *file, enum event_watch_cond cond, struct callback *cb)
+event_glib_add_watch(void *fd, enum event_watch_cond cond, struct callback *cb)
 {
        struct event_watch *ret=g_new0(struct event_watch, 1);
-       int flags=0,fd=(int)file_get_os_handle(file);
-       ret->iochan = g_io_channel_unix_new(fd);
+       int flags=0;
+       ret->iochan = g_io_channel_unix_new(GPOINTER_TO_INT(fd));
        switch (cond) {
        case event_watch_cond_read:
                flags=G_IO_IN;
@@ -70,18 +71,17 @@ event_glib_add_watch(struct file *file, enum event_watch_cond cond, struct callb
                flags=G_IO_ERR|G_IO_HUP;
                break;
        }       
-       ret->source = g_io_add_watch(ret->iochan, cond, event_glib_call_watch, (gpointer)cb);
+       ret->source = g_io_add_watch(ret->iochan, flags, event_glib_call_watch, (gpointer)cb);
        return ret;
 }
 
 static void
 event_glib_remove_watch(struct event_watch *ev)
 {
-       GError *error = NULL;
        if (! ev)
                return;
        g_source_remove(ev->source);
-       g_io_channel_shutdown(ev->iochan, 0, &error);
+       g_io_channel_unref(ev->iochan);
        g_free(ev);
 }
 
@@ -125,15 +125,34 @@ event_glib_remove_timeout(struct event_timeout *ev)
        g_free(ev);
 }
 
+struct event_idle {
+       guint source;
+       struct callback *cb;
+};
+
+static gboolean
+event_glib_call_idle(struct event_idle *ev)
+{
+       callback_call_0(ev->cb);
+       return TRUE;
+}
+
 static struct event_idle *
-event_glib_add_idle(struct callback *cb)
+event_glib_add_idle(int priority, struct callback *cb)
 {
-       return NULL;
+       struct event_idle *ret=g_new0(struct event_idle, 1);
+       ret->cb=cb;
+       ret->source = g_idle_add_full(priority+100, (GSourceFunc)event_glib_call_idle, (gpointer)ret, NULL);
+       return ret;
 }
 
 static void
 event_glib_remove_idle(struct event_idle *ev)
 {
+       if (! ev)
+               return;
+       g_source_remove(ev->source);
+       g_free(ev);
 }
 
 static void
@@ -160,10 +179,14 @@ static struct event_methods event_glib_methods = {
        event_glib_call_callback,
 };
 
-static void
+struct event_priv {
+};
+
+static struct event_priv*
 event_glib_new(struct event_methods *meth)
 {
        *meth=event_glib_methods;
+       return (struct event_priv *)event_glib_new;
 }
 
 void