diff options
author | James Henstridge <james@daa.com.au> | 2002-01-07 10:46:31 +0000 |
---|---|---|
committer | James Henstridge <jamesh@src.gnome.org> | 2002-01-07 10:46:31 +0000 |
commit | df9a8aa58e2f60808e873acbeedd13f36bb69ec2 (patch) | |
tree | e56416d2691492e3936d531c6a3d01ee70ef240e | |
parent | 5061a6345c6458d591f24a3d75c671bfff83814a (diff) | |
download | pygobject-df9a8aa58e2f60808e873acbeedd13f36bb69ec2.tar.gz pygobject-df9a8aa58e2f60808e873acbeedd13f36bb69ec2.tar.xz pygobject-df9a8aa58e2f60808e873acbeedd13f36bb69ec2.zip |
add overriden implementation that allows threads while waiting, so some
2002-01-07 James Henstridge <james@daa.com.au>
* gtk/gdk.override (_wrap_gdk_threads_enter): add overriden
implementation that allows threads while waiting, so some other
thread has a chance to give up the gdk lock.
* gtk/gtkmodule.c (functions): remove stuff.
* gtk/pygtk-private.h: remove definitions here as well.
* gtk/pygtk.h (_PyGtk_FunctionStruct): remove destroy notify and
thread block stuff.
* gtk/gtkobject-support.c: remove pygtk_destroy_notify.
* gtk/gtk.override (pygtk_tree_foreach_marshal): move this
function here from gtkobject-support.c, and don't bother blocking
threads.
(_wrap_gtk_tree_selection_selected_foreach): same here -- don't
need to unblock threads.
(pygtk_tree_selection_marshal): move this function here from
gtkobject-support.c. Convert to use pyg_block_threads.
(_wrap_gtk_dialog_run): add overriden implementation that unblocks
threads.
(_wrap_gtk_main): use pyg_block_threads
(_wrap_gtk_main_iteration): same.
(_wrap_gtk_item_factory_create_items): same here.
(_wrap_gtk_menu_popup): same here.
(_wrap_gtk_clist_set_row_data): use pyg_destroy_notify
(_wrap_gtk_timeout_add): same here.
(_wrap_gtk_idle_add): same here.
(_wrap_gtk_quit_add): same here.
(_wrap_gtk_input_add_full): same here.
(_wrap_gtk_ctree_node_set_row_data): same here.
* gtk/gtkobject-support.c: remove PyGTK_BLOCK_THREADS and
PyGTK_UNBLOCK_THREADS macros.
(pygtk_destroy_notify): use pyg_block_threads.
(pygtk_custom_destroy_notify): same.
(pygtk_handler_marshal): same.
(pygtk_input_marshal): same.
* gtk/gdk.override (_wrap_gdk_threads_init): register gdk lock
based recursive threads block/unblock functions. If threading was
disabled at compile time, then this function will error out.
* gtk/gdk.defs (threads_enter, threads_leave, threads_leave): add
functions.
* gobjectmodule.c (functions): add destroy_notify here as well.
* pygobject.h: add destroy_notify to the PyGObject_Functions
vtable.
-rw-r--r-- | gobject/gobjectmodule.c | 9 | ||||
-rw-r--r-- | gobject/pygobject.h | 3 |
2 files changed, 9 insertions, 3 deletions
diff --git a/gobject/gobjectmodule.c b/gobject/gobjectmodule.c index 1e61fd2..39fba99 100644 --- a/gobject/gobjectmodule.c +++ b/gobject/gobjectmodule.c @@ -250,7 +250,7 @@ pyg_param_spec_new(GParamSpec *pspec) /* -------------- class <-> wrapper manipulation --------------- */ static void -pygobject_destroy_notify(gpointer user_data) +pyg_destroy_notify(gpointer user_data) { PyObject *obj = (PyObject *)user_data; @@ -1228,7 +1228,7 @@ pygobject_dealloc(PyGObject *self) Py_INCREF(self); /* grab a reference on the wrapper */ self->hasref = TRUE; g_object_set_qdata_full(obj, pygobject_ownedref_key, - self, pygobject_destroy_notify); + self, pyg_destroy_notify); g_object_unref(obj); /* we ref the type, so subtype_dealloc() doesn't kill off our @@ -1441,7 +1441,7 @@ pygobject_set_data(PyGObject *self, PyObject *args) return NULL; quark = g_quark_from_string(key); Py_INCREF(data); - g_object_set_qdata_full(self->obj, quark, data, pygobject_destroy_notify); + g_object_set_qdata_full(self->obj, quark, data, pyg_destroy_notify); Py_INCREF(Py_None); return Py_None; } @@ -3002,7 +3002,10 @@ static struct _PyGObject_Functions functions = { pygobject_register_wrapper, pygobject_lookup_class, pygobject_new, + pyg_closure_new, + pyg_destroy_notify, + pyg_type_from_object, pyg_type_wrapper_new, pyg_enum_get_value, diff --git a/gobject/pygobject.h b/gobject/pygobject.h index 8fa4542..9918dd3 100644 --- a/gobject/pygobject.h +++ b/gobject/pygobject.h @@ -37,8 +37,10 @@ struct _PyGObject_Functions { void (* register_wrapper)(PyObject *self); PyTypeObject *(* lookup_class)(GType type); PyObject *(* newgobj)(GObject *obj); + GClosure *(* closure_new)(PyObject *callback, PyObject *extra_args, PyObject *swap_data); + GDestroyNotify destroy_notify; GType (* type_from_object)(PyObject *obj); PyObject *(* type_wrapper_new)(GType type); @@ -91,6 +93,7 @@ struct _PyGObject_Functions *_PyGObject_API; #define pygobject_lookup_class (_PyGObject_API->lookup_class) #define pygobject_new (_PyGObject_API->newgobj) #define pyg_closure_new (_PyGObject_API->closure_new) +#define pyg_destroy_notify (_PyGObject_API->destroy_notify) #define pyg_type_from_object (_PyGObject_API->type_from_object) #define pyg_type_wrapper_new (_PyGObject_API->type_wrapper_new) #define pyg_enum_get_value (_PyGObject_API->enum_get_value) |