Add closure_marshal/closure_callback fields to GSourceFuncs for use by
authorOwen Taylor <otaylor@redhat.com>
Mon, 3 Sep 2001 22:12:51 +0000 (22:12 +0000)
committerOwen Taylor <otaylor@src.gnome.org>
Mon, 3 Sep 2001 22:12:51 +0000 (22:12 +0000)
Mon Aug 27 14:56:12 2001  Owen Taylor  <otaylor@redhat.com>

* glib/gmain.h: Add closure_marshal/closure_callback
fields to GSourceFuncs for use by g_source_set_closure().

* glib/gmain.c glib/giounix.c glib/giowin32.c
  glib/gmain.h: Export the SourceFuncs vtables so GObject
can use them to figure out closure callbacks/marshallers
for the default source types.

Mon Aug 27 14:55:27 2001  Owen Taylor  <otaylor@redhat.com>

* gsourceclosure.[ch] (g_source_set_closure): Implement.

* gsourceclosure.[ch]: Add GType's for GIOChannel, GIOCondition.

15 files changed:
ChangeLog
ChangeLog.pre-2-0
ChangeLog.pre-2-10
ChangeLog.pre-2-12
ChangeLog.pre-2-2
ChangeLog.pre-2-4
ChangeLog.pre-2-6
ChangeLog.pre-2-8
docs/reference/glib/tmpl/main.sgml
glib/giochannel.h
glib/giounix.c
glib/giowin32.c
glib/glib-object.h
glib/gmain.c
glib/gmain.h

index c3bd76a..c7c8b83 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+Mon Aug 27 14:56:12 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * glib/gmain.h: Add closure_marshal/closure_callback
+       fields to GSourceFuncs for use by g_source_set_closure().
+
+       * glib/gmain.c glib/giounix.c glib/giowin32.c 
+         glib/gmain.h: Export the SourceFuncs vtables so GObject
+       can use them to figure out closure callbacks/marshallers
+       for the default source types.
+
 Sun Sep  2 13:05:53 2001  Owen Taylor  <otaylor@redhat.com>
 
        * glib/gstrfuncs.c (g_strchomp): Replace some uses
index c3bd76a..c7c8b83 100644 (file)
@@ -1,3 +1,13 @@
+Mon Aug 27 14:56:12 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * glib/gmain.h: Add closure_marshal/closure_callback
+       fields to GSourceFuncs for use by g_source_set_closure().
+
+       * glib/gmain.c glib/giounix.c glib/giowin32.c 
+         glib/gmain.h: Export the SourceFuncs vtables so GObject
+       can use them to figure out closure callbacks/marshallers
+       for the default source types.
+
 Sun Sep  2 13:05:53 2001  Owen Taylor  <otaylor@redhat.com>
 
        * glib/gstrfuncs.c (g_strchomp): Replace some uses
index c3bd76a..c7c8b83 100644 (file)
@@ -1,3 +1,13 @@
+Mon Aug 27 14:56:12 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * glib/gmain.h: Add closure_marshal/closure_callback
+       fields to GSourceFuncs for use by g_source_set_closure().
+
+       * glib/gmain.c glib/giounix.c glib/giowin32.c 
+         glib/gmain.h: Export the SourceFuncs vtables so GObject
+       can use them to figure out closure callbacks/marshallers
+       for the default source types.
+
 Sun Sep  2 13:05:53 2001  Owen Taylor  <otaylor@redhat.com>
 
        * glib/gstrfuncs.c (g_strchomp): Replace some uses
index c3bd76a..c7c8b83 100644 (file)
@@ -1,3 +1,13 @@
+Mon Aug 27 14:56:12 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * glib/gmain.h: Add closure_marshal/closure_callback
+       fields to GSourceFuncs for use by g_source_set_closure().
+
+       * glib/gmain.c glib/giounix.c glib/giowin32.c 
+         glib/gmain.h: Export the SourceFuncs vtables so GObject
+       can use them to figure out closure callbacks/marshallers
+       for the default source types.
+
 Sun Sep  2 13:05:53 2001  Owen Taylor  <otaylor@redhat.com>
 
        * glib/gstrfuncs.c (g_strchomp): Replace some uses
index c3bd76a..c7c8b83 100644 (file)
@@ -1,3 +1,13 @@
+Mon Aug 27 14:56:12 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * glib/gmain.h: Add closure_marshal/closure_callback
+       fields to GSourceFuncs for use by g_source_set_closure().
+
+       * glib/gmain.c glib/giounix.c glib/giowin32.c 
+         glib/gmain.h: Export the SourceFuncs vtables so GObject
+       can use them to figure out closure callbacks/marshallers
+       for the default source types.
+
 Sun Sep  2 13:05:53 2001  Owen Taylor  <otaylor@redhat.com>
 
        * glib/gstrfuncs.c (g_strchomp): Replace some uses
index c3bd76a..c7c8b83 100644 (file)
@@ -1,3 +1,13 @@
+Mon Aug 27 14:56:12 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * glib/gmain.h: Add closure_marshal/closure_callback
+       fields to GSourceFuncs for use by g_source_set_closure().
+
+       * glib/gmain.c glib/giounix.c glib/giowin32.c 
+         glib/gmain.h: Export the SourceFuncs vtables so GObject
+       can use them to figure out closure callbacks/marshallers
+       for the default source types.
+
 Sun Sep  2 13:05:53 2001  Owen Taylor  <otaylor@redhat.com>
 
        * glib/gstrfuncs.c (g_strchomp): Replace some uses
index c3bd76a..c7c8b83 100644 (file)
@@ -1,3 +1,13 @@
+Mon Aug 27 14:56:12 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * glib/gmain.h: Add closure_marshal/closure_callback
+       fields to GSourceFuncs for use by g_source_set_closure().
+
+       * glib/gmain.c glib/giounix.c glib/giowin32.c 
+         glib/gmain.h: Export the SourceFuncs vtables so GObject
+       can use them to figure out closure callbacks/marshallers
+       for the default source types.
+
 Sun Sep  2 13:05:53 2001  Owen Taylor  <otaylor@redhat.com>
 
        * glib/gstrfuncs.c (g_strchomp): Replace some uses
index c3bd76a..c7c8b83 100644 (file)
@@ -1,3 +1,13 @@
+Mon Aug 27 14:56:12 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * glib/gmain.h: Add closure_marshal/closure_callback
+       fields to GSourceFuncs for use by g_source_set_closure().
+
+       * glib/gmain.c glib/giounix.c glib/giowin32.c 
+         glib/gmain.h: Export the SourceFuncs vtables so GObject
+       can use them to figure out closure callbacks/marshallers
+       for the default source types.
+
 Sun Sep  2 13:05:53 2001  Owen Taylor  <otaylor@redhat.com>
 
        * glib/gstrfuncs.c (g_strchomp): Replace some uses
index f754c2d..cdc3075 100644 (file)
@@ -636,6 +636,8 @@ the required condition has been met, and returns TRUE if so.
 @check: 
 @dispatch: 
 @finalize: 
+@closure_callback: 
+@closure_marshal: 
 
 <!-- ##### STRUCT GSourceCallbackFuncs ##### -->
 <para>
index 3a89852..be6b8aa 100644 (file)
@@ -284,6 +284,10 @@ GIOChannelError g_io_channel_error_from_errno (gint en);
 GIOChannel* g_io_channel_unix_new    (int         fd);
 gint        g_io_channel_unix_get_fd (GIOChannel *channel);
 
+
+/* Hook for GClosure / GSource integration. Don't touch */
+GLIB_VAR GSourceFuncs g_io_watch_funcs;
+
 #ifdef G_OS_WIN32
 
 #define G_WIN32_MSG_HANDLE 19981206
index fa54b86..c2db911 100644 (file)
@@ -95,7 +95,7 @@ static gboolean g_io_unix_dispatch (GSource     *source,
                                    gpointer     user_data);
 static void     g_io_unix_finalize (GSource     *source);
 
-GSourceFuncs unix_watch_funcs = {
+GSourceFuncs g_io_watch_funcs = {
   g_io_unix_prepare,
   g_io_unix_check,
   g_io_unix_dispatch,
@@ -324,7 +324,7 @@ g_io_unix_create_watch (GIOChannel   *channel,
   GIOUnixWatch *watch;
 
 
-  source = g_source_new (&unix_watch_funcs, sizeof (GIOUnixWatch));
+  source = g_source_new (&g_io_watch_funcs, sizeof (GIOUnixWatch));
   watch = (GIOUnixWatch *)source;
   
   watch->channel = channel;
index 84e0009..0134a95 100644 (file)
@@ -595,7 +595,7 @@ g_io_win32_finalize (GSource *source)
   g_io_channel_unref (watch->channel);
 }
 
-static GSourceFuncs win32_watch_funcs = {
+GSourceFuncs g_io_watch_funcs = {
   g_io_win32_prepare,
   g_io_win32_check,
   g_io_win32_dispatch,
@@ -611,7 +611,7 @@ g_io_win32_create_watch (GIOChannel    *channel,
   GIOWin32Watch *watch;
   GSource *source;
 
-  source = g_source_new (&win32_watch_funcs, sizeof (GIOWin32Watch));
+  source = g_source_new (&g_io_watch_funcs, sizeof (GIOWin32Watch));
   watch = (GIOWin32Watch *)source;
   
   watch->channel = channel;
index 98e3dfe..dfde3d0 100644 (file)
@@ -27,6 +27,7 @@
 #include       <gobject/gparam.h>
 #include       <gobject/gparamspecs.h>
 #include       <gobject/gsignal.h>
+#include       <gobject/gsourceclosure.h>
 #include       <gobject/gtype.h>
 #include       <gobject/gtypemodule.h>
 #include       <gobject/gtypeplugin.h>
index 35be1a4..2f11b1a 100644 (file)
@@ -220,7 +220,7 @@ static gboolean g_idle_dispatch    (GSource     *source,
 G_LOCK_DEFINE_STATIC (main_loop);
 static GMainContext *default_main_context;
 
-static GSourceFuncs timeout_funcs =
+GSourceFuncs g_timeout_funcs =
 {
   g_timeout_prepare,
   g_timeout_check,
@@ -228,7 +228,7 @@ static GSourceFuncs timeout_funcs =
   NULL
 };
 
-static GSourceFuncs idle_funcs =
+GSourceFuncs g_idle_funcs =
 {
   g_idle_prepare,
   g_idle_check,
@@ -1057,6 +1057,7 @@ g_source_callback_unref (gpointer cb_data)
 
 static void
 g_source_callback_get (gpointer     cb_data,
+                      GSource     *source, 
                       GSourceFunc *func,
                       gpointer    *data)
 {
@@ -1588,7 +1589,7 @@ g_main_dispatch (GMainContext *context)
          UNLOCK_CONTEXT (context);
 
          if (cb_funcs)
-           cb_funcs->get (cb_data, &callback, &user_data);
+           cb_funcs->get (cb_data, source, &callback, &user_data);
 
          need_destroy = ! dispatch (source,
                                     callback,
@@ -2966,7 +2967,7 @@ g_timeout_dispatch (GSource    *source,
 GSource *
 g_timeout_source_new (guint interval)
 {
-  GSource *source = g_source_new (&timeout_funcs, sizeof (GTimeoutSource));
+  GSource *source = g_source_new (&g_timeout_funcs, sizeof (GTimeoutSource));
   GTimeoutSource *timeout_source = (GTimeoutSource *)source;
   GTimeVal current_time;
 
@@ -3104,7 +3105,7 @@ g_idle_dispatch (GSource    *source,
 GSource *
 g_idle_source_new (void)
 {
-  return g_source_new (&idle_funcs, sizeof (GSource));
+  return g_source_new (&g_idle_funcs, sizeof (GSource));
 }
 
 /**
@@ -3175,6 +3176,6 @@ g_idle_add (GSourceFunc    function,
 gboolean
 g_idle_remove_by_data (gpointer data)
 {
-  return g_source_remove_by_funcs_user_data (&idle_funcs, data);
+  return g_source_remove_by_funcs_user_data (&g_idle_funcs, data);
 }
 
index 5853c10..cd95288 100644 (file)
@@ -59,10 +59,13 @@ struct _GSourceCallbackFuncs
   void (*ref)   (gpointer     cb_data);
   void (*unref) (gpointer     cb_data);
   void (*get)   (gpointer     cb_data,
+                GSource     *source, 
                 GSourceFunc *func,
                 gpointer    *data);
 };
 
+typedef void (*GSourceDummyMarshal) (void);
+
 struct _GSourceFuncs
 {
   gboolean (*prepare)  (GSource    *source,
@@ -72,6 +75,10 @@ struct _GSourceFuncs
                        GSourceFunc callback,
                        gpointer    user_data);
   void     (*finalize) (GSource    *source); /* Can be NULL */
+
+  /* For use by g_source_set_closure */
+  GSourceFunc     closure_callback;       
+  GSourceDummyMarshal closure_marshal; /* Really is of type GClosureMarshal */
 };
 
 /* Any definitions using GPollFD or GPollFunc are primarily
@@ -286,6 +293,10 @@ guint              g_idle_add_full         (gint           priority,
                                         GDestroyNotify notify);
 gboolean       g_idle_remove_by_data   (gpointer       data);
 
+/* Hook for GClosure / GSource integration. Don't touch */
+GLIB_VAR GSourceFuncs g_timeout_funcs;
+GLIB_VAR GSourceFuncs g_idle_funcs;
+
 #ifdef G_OS_WIN32
 
 /* This is used to add polling for Windows messages. GDK (GTK+) programs