diff -Nru nautilus-python-0.5.0/debian/changelog nautilus-python-0.5.0/debian/changelog --- nautilus-python-0.5.0/debian/changelog 2008-09-17 15:41:08.000000000 -0400 +++ nautilus-python-0.5.0/debian/changelog 2008-09-17 15:41:08.000000000 -0400 @@ -1,3 +1,9 @@ +nautilus-python (0.5.0-0ubuntu5) intrepid; urgency=low + + * Backport support for location widgets from 0.5.1 + + -- Tim Cole Wed, 17 Sep 2008 15:31:05 -0400 + nautilus-python (0.5.0-0ubuntu4) intrepid; urgency=low * No-change rebuild to get rid of the libffi4 dependency. diff -Nru nautilus-python-0.5.0/src/nautilus.defs nautilus-python-0.5.0/src/nautilus.defs --- nautilus-python-0.5.0/src/nautilus.defs 2008-09-17 15:41:08.000000000 -0400 +++ nautilus-python-0.5.0/src/nautilus.defs 2008-09-17 15:41:08.000000000 -0400 @@ -25,6 +25,12 @@ (gtype-id "NAUTILUS_TYPE_INFO_PROVIDER") ) +(define-interface LocationWidgetProvider + (in-module "Nautilus") + (c-name "NautilusLocationWidgetProvider") + (gtype-id "NAUTILUS_TYPE_LOCATION_WIDGET_PROVIDER") +) + (define-object Menu (in-module "Nautilus") (parent "GObject") diff -Nru nautilus-python-0.5.0/src/nautilus.override nautilus-python-0.5.0/src/nautilus.override --- nautilus-python-0.5.0/src/nautilus.override 2008-01-11 06:07:15.000000000 -0500 +++ nautilus-python-0.5.0/src/nautilus.override 2008-09-17 15:41:08.000000000 -0400 @@ -28,6 +28,7 @@ #include #include #include +#include #include #include diff -Nru nautilus-python-0.5.0/src/nautilus-python.c nautilus-python-0.5.0/src/nautilus-python.c --- nautilus-python-0.5.0/src/nautilus-python.c 2008-09-17 15:41:08.000000000 -0400 +++ nautilus-python-0.5.0/src/nautilus-python.c 2008-09-17 15:41:08.000000000 -0400 @@ -139,6 +139,7 @@ if (PyObject_IsSubclass(value, (PyObject*)&PyNautilusColumnProvider_Type) || PyObject_IsSubclass(value, (PyObject*)&PyNautilusInfoProvider_Type) || + PyObject_IsSubclass(value, (PyObject*)&PyNautilusLocationWidgetProvider_Type) || PyObject_IsSubclass(value, (PyObject*)&PyNautilusMenuProvider_Type) || PyObject_IsSubclass(value, (PyObject*)&PyNautilusPropertyPageProvider_Type)) { @@ -293,6 +294,9 @@ /* Extract types and interfaces from nautilus */ mdict = PyModule_GetDict(nautilus); + _PyGtkWidget_Type = pygobject_lookup_class(GTK_TYPE_WIDGET); + g_assert(_PyGtkWidget_Type != NULL); + #define IMPORT(x, y) \ _PyNautilus##x##_Type = (PyTypeObject *)PyDict_GetItemString(mdict, y); \ if (_PyNautilus##x##_Type == NULL) { \ @@ -303,6 +307,7 @@ IMPORT(Column, "Column"); IMPORT(ColumnProvider, "ColumnProvider"); IMPORT(InfoProvider, "InfoProvider"); + IMPORT(LocationWidgetProvider, "LocationWidgetProvider"); IMPORT(Menu, "Menu"); IMPORT(MenuItem, "MenuItem"); IMPORT(MenuProvider, "MenuProvider"); diff -Nru nautilus-python-0.5.0/src/nautilus-python.h nautilus-python-0.5.0/src/nautilus-python.h --- nautilus-python-0.5.0/src/nautilus-python.h 2008-01-11 06:26:55.000000000 -0500 +++ nautilus-python-0.5.0/src/nautilus-python.h 2008-09-17 15:41:08.000000000 -0400 @@ -46,6 +46,9 @@ g_printf("%s: entered " x "\n", __FUNCTION__, y); } +PyTypeObject *_PyGtkWidget_Type; +#define PyGtkWidget_Type (*_PyGtkWidget_Type) + PyTypeObject *_PyNautilusColumn_Type; #define PyNautilusColumn_Type (*_PyNautilusColumn_Type) @@ -55,6 +58,9 @@ PyTypeObject *_PyNautilusInfoProvider_Type; #define PyNautilusInfoProvider_Type (*_PyNautilusInfoProvider_Type) +PyTypeObject *_PyNautilusLocationWidgetProvider_Type; +#define PyNautilusLocationWidgetProvider_Type (*_PyNautilusLocationWidgetProvider_Type) + PyTypeObject *_PyNautilusMenu_Type; #define PyNautilusMenu_Type (*_PyNautilusMenu_Type) diff -Nru nautilus-python-0.5.0/src/nautilus-python-object.c nautilus-python-0.5.0/src/nautilus-python-object.c --- nautilus-python-0.5.0/src/nautilus-python-object.c 2008-01-11 06:07:44.000000000 -0500 +++ nautilus-python-0.5.0/src/nautilus-python-object.c 2008-09-17 15:41:08.000000000 -0400 @@ -33,6 +33,7 @@ #include #include #include +#include #include #include #include @@ -131,6 +132,51 @@ iface->get_pages = nautilus_python_object_get_property_pages; } +#define METHOD_NAME "get_widget" +static GtkWidget * +nautilus_python_object_get_widget (NautilusLocationWidgetProvider *provider, + const char *uri, + GtkWidget *window) +{ + NautilusPythonObject *object = (NautilusPythonObject*)provider; + GtkWidget *ret = NULL; + PyObject *py_ret = NULL; + PyGObject *py_ret_gobj; + PyObject *py_uri = NULL; + PyGILState_STATE state = pyg_gil_state_ensure(); + + debug_enter(); + + CHECK_METHOD_NAME(object->instance); + + py_uri = PyString_FromString(uri); + + py_ret = PyObject_CallMethod(object->instance, METHOD_PREFIX METHOD_NAME, + "(NN)", py_uri, + pygobject_new((GObject *)window)); + HANDLE_RETVAL(py_ret); + + py_ret_gobj = (PyGObject *)py_ret; + if (!pygobject_check(py_ret_gobj, &PyGtkWidget_Type)) { + PyErr_SetString(PyExc_TypeError, + METHOD_NAME "should return a gtk.Widget"); + goto beach; + } + ret = (GtkWidget *)g_object_ref(py_ret_gobj->obj); + + beach: + Py_XDECREF(py_ret); + pyg_gil_state_release(state); + return ret; +} +#undef METHOD_NAME + +static void +nautilus_python_object_location_widget_provider_iface_init (NautilusLocationWidgetProviderIface *iface) +{ + iface->get_widget = nautilus_python_object_get_widget; +} + #define METHOD_NAME "get_file_items" static GList * nautilus_python_object_get_file_items (NautilusMenuProvider *provider, @@ -364,6 +410,12 @@ NULL }; + static const GInterfaceInfo location_widget_provider_iface_info = { + (GInterfaceInitFunc) nautilus_python_object_location_widget_provider_iface_init, + NULL, + NULL + }; + static const GInterfaceInfo menu_provider_iface_info = { (GInterfaceInitFunc) nautilus_python_object_menu_provider_iface_init, NULL, @@ -406,6 +458,12 @@ NAUTILUS_TYPE_PROPERTY_PAGE_PROVIDER, &property_page_provider_iface_info); } + + if (PyObject_IsSubclass(type, (PyObject*)&PyNautilusLocationWidgetProvider_Type)) { + g_type_module_add_interface (module, gtype, + NAUTILUS_TYPE_LOCATION_WIDGET_PROVIDER, + &location_widget_provider_iface_info); + } if (PyObject_IsSubclass(type, (PyObject*)&PyNautilusMenuProvider_Type)) { g_type_module_add_interface (module, gtype,