From 37c4363aa20be4bba0f2fa84e70a083a327370d0 Mon Sep 17 00:00:00 2001 From: Paul Pogonyshev Date: Tue, 5 Aug 2008 20:39:27 +0000 Subject: Bug 546135 – GIcon and implementations improvements MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 2008-08-05 Paul Pogonyshev Bug 546135 – GIcon and implementations improvements * gio/gio-types.defs (FileIcon): New 'define-object'. * gio/gio.override (pygio_do_icon_richcompare) (_wrap_g_icon_tp_richcompare, _wrap_g_icon_tp_hash) (_wrap_g_file_icon_tp_richcompare, _wrap_g_file_icon_tp_hash) (_wrap_g_file_icon_tp_repr, _wrap_g_themed_icon_tp_richcompare) (_wrap_g_themed_icon_tp_hash, _wrap_g_themed_icon_tp_repr): New functions. svn path=/trunk/; revision=924 --- ChangeLog | 13 ++++++ gio/gio-types.defs | 9 ++++ gio/gio.override | 124 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 146 insertions(+) diff --git a/ChangeLog b/ChangeLog index 6909e12..309cfab 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,16 @@ +2008-08-05 Paul Pogonyshev + + Bug 546135 – GIcon and implementations improvements + + * gio/gio-types.defs (FileIcon): New 'define-object'. + + * gio/gio.override (pygio_do_icon_richcompare) + (_wrap_g_icon_tp_richcompare, _wrap_g_icon_tp_hash) + (_wrap_g_file_icon_tp_richcompare, _wrap_g_file_icon_tp_hash) + (_wrap_g_file_icon_tp_repr, _wrap_g_themed_icon_tp_richcompare) + (_wrap_g_themed_icon_tp_hash, _wrap_g_themed_icon_tp_repr): New + functions. + 2008-08-03 Gian Mario Tagliaretti Bug 546046 – Wrap GFile.replace_async and query_info_async diff --git a/gio/gio-types.defs b/gio/gio-types.defs index 00eeaa3..fe55b45 100644 --- a/gio/gio-types.defs +++ b/gio/gio-types.defs @@ -216,6 +216,15 @@ (gtype-id "G_TYPE_NATIVE_VOLUME_MONITOR") ) +(define-object FileIcon + (in-module "gio") + (parent "GObject") + (c-name "GFileIcon") + (gtype-id "G_TYPE_FILE_ICON") + (implements "GIcon") + (implements "GLoadableIcon") +) + (define-object ThemedIcon (in-module "gio") (parent "GObject") diff --git a/gio/gio.override b/gio/gio.override index 13a4950..6bde819 100644 --- a/gio/gio.override +++ b/gio/gio.override @@ -179,6 +179,86 @@ _wrap_g_app_info_get_all_for_type (PyGObject *self, PyObject *args) return ret; } %% +override-slot GIcon.tp_richcompare +static PyObject * +pygio_do_icon_richcompare(PyGObject *self, PyGObject *other, int op) +{ + PyObject *result; + + if (PyObject_TypeCheck(self, &PyGIcon_Type) + && PyObject_TypeCheck(other, &PyGIcon_Type)) { + GIcon *icon1 = G_ICON(self->obj); + GIcon *icon2 = G_ICON(other->obj); + + switch (op) { + case Py_EQ: + result = (g_icon_equal(icon1, icon2) + ? Py_True : Py_False); + break; + case Py_NE: + result = (!g_icon_equal(icon1, icon2) + ? Py_True : Py_False); + break; + default: + result = Py_NotImplemented; + } + } + else + result = Py_NotImplemented; + + Py_INCREF(result); + return result; +} +static PyObject * +_wrap_g_icon_tp_richcompare(PyGObject *self, PyGObject *other, int op) +{ + return pygio_do_icon_richcompare(self, other, op); +} +%% +override-slot GIcon.tp_hash +static long +_wrap_g_icon_tp_hash(PyGObject *self) +{ + return g_icon_hash(G_ICON(self->obj)); +} +%% +override-slot GFileIcon.tp_richcompare +/* We need to duplicate, because GIcon is an interface, not a class. */ +static PyObject * +_wrap_g_file_icon_tp_richcompare(PyGObject *self, PyGObject *other, int op) +{ + return pygio_do_icon_richcompare(self, other, op); +} +%% +override-slot GFileIcon.tp_hash +/* We need to duplicate, because GIcon is an interface, not a class. */ +static long +_wrap_g_file_icon_tp_hash(PyGObject *self) +{ + return g_icon_hash(G_ICON(self->obj)); +} +%% +override-slot GFileIcon.tp_repr +static int +_wrap_g_file_icon_tp_repr(PyGObject *self) +{ + GFile *file = g_file_icon_get_file(G_FILE_ICON(self->obj)); + char *uri = (file ? g_file_get_uri(file) : NULL); + gchar *representation; + PyObject *result; + + if (uri) { + representation = g_strdup_printf("<%s at %p: %s>", self->ob_type->tp_name, self, uri); + g_free(uri); + } + else + representation = g_strdup_printf("<%s at %p: UNKNOWN URI>", self->ob_type->tp_name, self); + + result = PyString_FromString(representation); + g_free(representation); + return result; +} +%% override g_themed_icon_get_names noargs static PyObject * _wrap_g_themed_icon_get_names(PyGObject *self) @@ -200,6 +280,50 @@ _wrap_g_themed_icon_get_names(PyGObject *self) return ret; } %% +override-slot GThemedIcon.tp_richcompare +/* We need to duplicate, because GIcon is an interface, not a class. */ +static PyObject * +_wrap_g_themed_icon_tp_richcompare(PyGObject *self, PyGObject *other, int op) +{ + return pygio_do_icon_richcompare(self, other, op); +} +%% +override-slot GThemedIcon.tp_hash +/* We need to duplicate, because GIcon is an interface, not a class. */ +static long +_wrap_g_themed_icon_tp_hash(PyGObject *self) +{ + return g_icon_hash(G_ICON(self->obj)); +} +%% +override-slot GThemedIcon.tp_repr +static int +_wrap_g_themed_icon_tp_repr(PyGObject *self) +{ + const char * const *names = g_themed_icon_get_names(G_THEMED_ICON(self->obj)); + GString *representation = g_string_new(NULL); + PyObject *result; + + g_string_append_printf(representation, "<%s at %p: ", self->ob_type->tp_name, self); + + if (names) { + gboolean first_name = TRUE; + while (*names) { + if (!first_name) + g_string_append(representation, ", "); + else + first_name = FALSE; + + g_string_append(representation, *names++); + } + } + + g_string_append(representation, ">"); + result = PyString_FromString(representation->str); + g_string_free(representation, TRUE); + return result; +} +%% override g_content_type_guess kwargs static PyObject * _wrap_g_content_type_guess(PyGObject *self, PyObject *args, PyObject *kwargs) -- cgit