[Frugalware-git] ayatana: libdee-0.5.18-2-i686 * added patch
Devil505
devil505linux at gmail.com
Fri Aug 26 15:12:56 CEST 2011
Git-Url: http://git.frugalware.org/gitweb/gitweb.cgi?p=ayatana.git;a=commitdiff;h=76fcca6b91aeb8113458e5f0c0a49be79750d58a
commit 76fcca6b91aeb8113458e5f0c0a49be79750d58a
Author: Devil505 <devil505linux at gmail.com>
Date: Fri Aug 26 15:10:47 2011 +0200
libdee-0.5.18-2-i686
* added patch
diff --git a/source/ayatana-extra/libdee/FrugalBuild b/source/ayatana-extra/libdee/FrugalBuild
index 4fca9f5..217d9d4 100644
--- a/source/ayatana-extra/libdee/FrugalBuild
+++ b/source/ayatana-extra/libdee/FrugalBuild
@@ -4,16 +4,27 @@
pkgname=libdee
pkgbranch=trunk
pkgver=0.5.18
-pkgrel=1
+pkgrel=2
pkgdesc="Libdee is a library that uses DBus to provide objects allowing you to create Model-View-Controller type programs across DBus."
url="https://launchpad.net/dee"
depends=('dbus-glib')
-makedepends=('gobject-introspection' 'vala')
+makedepends=('gobject-introspection' 'vala' 'gtk-doc')
groups=('ayatana-extra')
archs=('i686' 'x86_64')
_F_archive_name="dee"
up2date="Flasttar $url"
-source=(http://launchpad.net/$_F_archive_name/$pkgbranch/$pkgver/+download/$_F_archive_name-$pkgver.tar.gz)
-sha1sums=('1a4199a54d0b258f9bb670f8082c0cdc8e7ac2b6')
+source=(http://launchpad.net/$_F_archive_name/$pkgbranch/$pkgver/+download/$_F_archive_name-$pkgver.tar.gz \
+ dee_filter_collator_desc.patch)
+sha1sums=('1a4199a54d0b258f9bb670f8082c0cdc8e7ac2b6' \
+ '2644e8a1c8ad1bed52e9effdc7b9b349af100b12')
+
+build() {
+ Fcd
+ Fpatchall
+ autoreconf -fi || fdie
+ Fmake
+ Fmakeinstall
+}
+
# optimization OK
diff --git a/source/ayatana-extra/libdee/dee_filter_collator_desc.patch b/source/ayatana-extra/libdee/dee_filter_collator_desc.patch
new file mode 100644
index 0000000..6d232cc
--- /dev/null
+++ b/source/ayatana-extra/libdee/dee_filter_collator_desc.patch
@@ -0,0 +1,877 @@
+Description: Upstream changes introduced in version 0.5.18-1ubuntu1
+ This patch has been created by dpkg-source during the package build.
+ Here's the last changelog entry, hopefully it gives details on why
+ those changes were made:
+ .
+ dee (0.5.18-1ubuntu1) oneiric; urgency=low
+ .
+ * Merged changes from trunk to get dee_filter_collator_desc and vapi
+ fixes
+ * debian/libdee-1.0-1.symbols
+ - Added new symbol
+ * debian/control
+ - Added Vcs
+ - Updated Maintainers
+ - Added build depends for dh-autoreconf
+ * debian/rules
+ - autoreconf
+ .
+ The person named in the Author field signed this changelog entry.
+Author: Ken VanDine <ken.vandine at canonical.com>
+
+---
+The information above should follow the Patch Tagging Guidelines, please
+checkout http://dep.debian.net/deps/dep3/ to learn about the format. Here
+are templates for supplementary fields that you might want to add:
+
+Origin: <vendor|upstream|other>, <url of original patch>
+Bug: <url in upstream bugtracker>
+Bug-Debian: http://bugs.debian.org/<bugnumber>
+Bug-Ubuntu: https://launchpad.net/bugs/<bugnumber>
+Forwarded: <no|not-needed|url proving that it has been forwarded>
+Reviewed-By: <name and email of someone who approved the patch>
+Last-Update: <YYYY-MM-DD>
+
+--- dee-0.5.18.orig/gtk-doc.make
++++ dee-0.5.18/gtk-doc.make
+@@ -23,13 +23,15 @@ GPATH = $(srcdir)
+
+ TARGET_DIR=$(HTML_DIR)/$(DOC_MODULE)
+
+-EXTRA_DIST = \
++SETUP_FILES = \
+ $(content_files) \
+- $(HTML_IMAGES) \
+ $(DOC_MAIN_SGML_FILE) \
+ $(DOC_MODULE)-sections.txt \
+ $(DOC_MODULE)-overrides.txt
+
++EXTRA_DIST = \
++ $(SETUP_FILES)
++
+ DOC_STAMPS=setup-build.stamp scan-build.stamp tmpl-build.stamp sgml-build.stamp \
+ html-build.stamp pdf-build.stamp \
+ setup.stamp tmpl.stamp sgml.stamp html.stamp pdf.stamp
+@@ -71,17 +73,20 @@ $(REPORT_FILES): sgml-build.stamp
+
+ #### setup ####
+
+-setup-build.stamp::
++setup-build.stamp:
+ - at if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \
+- cp -a $(abs_srcdir)/$(DOC_MAIN_SGML_FILE) $(abs_builddir)/; \
+- cp -a $(abs_srcdir)/$(DOC_MODULE)* $(abs_builddir)/; \
+- if test "x$(content_files)" != "x" ; then \
+- for file in $(content_files) ; do \
+- test -f $(abs_srcdir)/$$file || \
+- cp -a $(abs_srcdir)/$$file $(abs_builddir)/; \
++ echo 'gtk-doc: Preparing build'; \
++ files=`echo $(SETUP_FILES) $(expand_content_files) $(DOC_MODULE).types`; \
++ if test "x$$files" != "x" ; then \
++ for file in $$files ; do \
++ test -f $(abs_srcdir)/$$file && \
++ cp -p $(abs_srcdir)/$$file $(abs_builddir)/; \
+ done \
+- fi \
++ fi; \
++ test -f $(abs_srcdir)/tmpl && \
++ cp -rp $(abs_srcdir)/tmpl $(abs_builddir)/; \
+ fi
++ @touch setup-build.stamp
+
+
+ setup.stamp: setup-build.stamp
+@@ -92,7 +97,7 @@ setup.stamp: setup-build.stamp
+
+ scan-build.stamp: $(HFILE_GLOB) $(CFILE_GLOB)
+ @echo 'gtk-doc: Scanning header files'
+- @_source_dir='' ;
++ @_source_dir='' ; \
+ for i in $(DOC_SOURCE_DIR) ; do \
+ _source_dir="$${_source_dir} --source-dir=$$i" ; \
+ done ; \
+@@ -111,9 +116,14 @@ $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES)
+
+ #### templates ####
+
+-tmpl-build.stamp: $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt
++tmpl-build.stamp: setup.stamp $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt
+ @echo 'gtk-doc: Rebuilding template files'
+ @gtkdoc-mktmpl --module=$(DOC_MODULE) $(MKTMPL_OPTIONS)
++ @if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \
++ if test -w $(abs_srcdir) ; then \
++ cp -rp $(abs_builddir)/tmpl $(abs_srcdir)/; \
++ fi \
++ fi
+ @touch tmpl-build.stamp
+
+ tmpl.stamp: tmpl-build.stamp
+@@ -149,7 +159,15 @@ html-build.stamp: sgml.stamp $(DOC_MAIN_
+ mkhtml_options=--path="$(abs_srcdir)"; \
+ fi; \
+ cd html && gtkdoc-mkhtml $$mkhtml_options $(MKHTML_OPTIONS) $(DOC_MODULE) ../$(DOC_MAIN_SGML_FILE)
+- @test "x$(HTML_IMAGES)" = "x" || ( cd $(srcdir) && cp $(HTML_IMAGES) $(abs_builddir)/html )
++ - at test "x$(HTML_IMAGES)" = "x" || \
++ for file in $(HTML_IMAGES) ; do \
++ if test -f $(abs_srcdir)/$$file ; then \
++ cp $(abs_srcdir)/$$file $(abs_builddir)/html; \
++ fi; \
++ if test -f $(abs_builddir)/$$file ; then \
++ cp $(abs_builddir)/$$file $(abs_builddir)/html; \
++ fi; \
++ done;
+ @echo 'gtk-doc: Fixing cross-references'
+ @gtkdoc-fixxref --module=$(DOC_MODULE) --module-dir=html --html-dir=$(HTML_DIR) $(FIXXREF_OPTIONS)
+ @touch html-build.stamp
+@@ -179,10 +197,11 @@ clean-local:
+ rm -rf .libs
+
+ distclean-local:
+- rm -rf xml $(REPORT_FILES) $(DOC_MODULE).pdf \
++ rm -rf xml html $(REPORT_FILES) $(DOC_MODULE).pdf \
+ $(DOC_MODULE)-decl-list.txt $(DOC_MODULE)-decl.txt
+ if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \
+- rm -f $(DOC_MAIN_SGML_FILE) $(DOC_MODULE)*; \
++ rm -f $(SETUP_FILES) $(expand_content_files) $(DOC_MODULE).types; \
++ rm -rf tmpl; \
+ fi
+
+ maintainer-clean-local: clean
+@@ -234,11 +253,11 @@ endif
+ dist-hook: dist-check-gtkdoc dist-hook-local
+ mkdir $(distdir)/tmpl
+ mkdir $(distdir)/html
+- -cp $(srcdir)/tmpl/*.sgml $(distdir)/tmpl
+- cp $(srcdir)/html/* $(distdir)/html
+- -cp $(srcdir)/$(DOC_MODULE).pdf $(distdir)/
+- -cp $(srcdir)/$(DOC_MODULE).types $(distdir)/
+- -cp $(srcdir)/$(DOC_MODULE)-sections.txt $(distdir)/
++ -cp $(build)/tmpl/*.sgml $(distdir)/tmpl
++ cp $(builddir)/html/* $(distdir)/html
++ -cp $(builddir)/$(DOC_MODULE).pdf $(distdir)/
++ -cp $(build)/$(DOC_MODULE).types $(distdir)/
++ -cp $(build)/$(DOC_MODULE)-sections.txt $(distdir)/
+ cd $(distdir) && rm -f $(DISTCLEANFILES)
+ $(GTKDOC_REBASE) --online --relative --html-dir=$(distdir)/html
+
+--- dee-0.5.18.orig/configure.ac
++++ dee-0.5.18/configure.ac
+@@ -4,7 +4,7 @@ AC_PREREQ(2.65)
+ # but also remember to bump the lib version as instructed below
+ m4_define([dee_major], [0])
+ m4_define([dee_minor], [5])
+-m4_define([dee_micro], [18])
++m4_define([dee_micro], [19])
+ m4_define([dee_api],
+ [dee_major.dee_minor])
+ m4_define([dee_version],
+--- dee-0.5.18.orig/vapi/dee-1.0.gi
++++ dee-0.5.18/vapi/dee-1.0.gi
+@@ -82,6 +82,12 @@
+ <parameter name="column" type="guint"/>
+ </parameters>
+ </method>
++ <method name="new_collator_desc" symbol="dee_filter_new_collator_desc">
++ <return-type type="DeeFilter*"/>
++ <parameters>
++ <parameter name="column" type="guint"/>
++ </parameters>
++ </method>
+ <method name="new_for_any_column" symbol="dee_filter_new_for_any_column">
+ <return-type type="DeeFilter*"/>
+ <parameters>
+--- /dev/null
++++ dee-0.5.18/vapi/dee-1.0-custom.vala
+@@ -0,0 +1,40 @@
++
++namespace Dee
++{
++ [CCode (cheader_filename = "dee.h")]
++ public interface Model : GLib.Object
++ {
++ public virtual signal void row_added (ModelIter iter);
++ public virtual signal void row_removed (ModelIter iter);
++ public virtual signal void row_changed (ModelIter iter);
++ }
++
++ [CCode (cheader_filename = "dee.h")]
++ public class FilterModel
++ {
++ [NoAccessorMethod]
++ public unowned Filter filter { get; construct; }
++ }
++ [Compact]
++ [CCode (free_function = "g_free", cheader_filename = "dee.h")]
++ public class Filter {
++ }
++
++
++ [CCode (cheader_filename = "dee.h")]
++ public interface ResultSet: GLib.Object
++ {
++ [CCode (cname = "_vala_dee_result_set_next_value")]
++ public unowned Dee.ModelIter? next_value ();
++ [CCode (cname = "_vala_dee_result_set_iterator")]
++ public ResultSet iterator ();
++ }
++
++ [CCode (cheader_filename = "dee.h")]
++ public class HashIndex : Dee.Index
++ {
++ [CCode (type = "DeeHashIndex*", has_construct_function = false)]
++ public HashIndex (Dee.Model model, Dee.Analyzer analyzer);
++ }
++
++}
+--- dee-0.5.18.orig/vapi/dee-1.0.vapi
++++ dee-0.5.18/vapi/dee-1.0.vapi
+@@ -31,7 +31,7 @@ namespace Dee {
+ public string primary_path { get; construct; }
+ }
+ [Compact]
+- [CCode (cheader_filename = "dee.h")]
++ [CCode (free_function = "g_free", cheader_filename = "dee.h")]
+ public class Filter {
+ public weak GLib.DestroyNotify destroy;
+ public weak Dee.ModelMapFunc map_func;
+@@ -40,6 +40,8 @@ namespace Dee {
+ [CCode (has_construct_function = false)]
+ public Filter.collator (uint column);
+ [CCode (has_construct_function = false)]
++ public Filter.collator_desc (uint column);
++ [CCode (has_construct_function = false)]
+ public Filter.for_any_column (uint column, GLib.Variant value);
+ [CCode (has_construct_function = false)]
+ public Filter.for_key_column (uint column, string key);
+--- /dev/null
++++ dee-0.5.18/examples/synced-lists.c
+@@ -0,0 +1,269 @@
++/*
++ * Copyright (C) 2010 Canonical Ltd
++ *
++ * This program is free software: you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 3 as
++ * published by the Free Software Foundation.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program. If not, see <http://www.gnu.org/licenses/>.
++ *
++ * Authored by
++ * Neil Jagdish Patel <neil.patel at canonical.com>
++ * Mikkel Kamstrup Erlandsen <mikkel.kamstrup at canonical.com>
++ *
++ * Compile with:
++ *
++ * gcc synced-lists.c -o synced-lists `pkg-config --libs --cflags dee gtk+-2.0`
++ *
++ */
++#include <time.h>
++#include <glib.h>
++#include <glib-object.h>
++#include <gtk/gtk.h>
++#include <dee.h>
++#include <unistd.h>
++
++static DeeModel *model;
++static GtkWidget *window;
++static GtkWidget *list;
++static GtkListStore *store;
++
++static void
++on_row_added (DeeModel *model, DeeModelIter *iter)
++{
++ gint i = 0;
++ gchar *str = NULL;
++ GtkTreeIter titer;
++
++ dee_model_get (model, iter, 0, &i, 1, &str, -1);
++
++ gtk_list_store_append (store, &titer);
++ gtk_list_store_set (store, &titer,
++ 0, g_strdup_printf ("%d", i),
++ 1, str,
++ 2, iter,
++ -1);
++
++ g_free (str);
++}
++
++static void
++on_row_removed (DeeModel *model, DeeModelIter *old_iter)
++{
++ GtkTreeIter iter = { 0};
++
++ gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter);
++
++ do
++ {
++ gpointer data = NULL;
++
++ gtk_tree_model_get (GTK_TREE_MODEL (store), &iter,
++ 2, &data,
++ -1);
++
++ if (data == old_iter)
++ {
++ gtk_list_store_remove (store, &iter);
++ break;
++ }
++ }
++ while (gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter));
++}
++
++static void
++on_row_changed (DeeModel *model, DeeModelIter *row_iter)
++{
++ GtkTreeIter iter = { 0 };
++
++ gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter);
++
++ do
++ {
++ gpointer data = NULL;
++
++ gtk_tree_model_get (GTK_TREE_MODEL (store), &iter,
++ 2, &data,
++ -1);
++
++ if (data == row_iter)
++ {
++ gint i = 0;
++ gchar *str = NULL;
++
++ dee_model_get (model, row_iter, 0, &i, 1, &str, -1);
++
++ gtk_list_store_set (store, &iter,
++ 0, g_strdup_printf ("%d", i),
++ 1, str,
++ -1);
++ break;
++ }
++ }
++ while (gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter));
++}
++
++static void
++add_row (GtkWidget *button)
++{
++ dee_model_append (model,
++ 0, getpid (),
++ 1, "Wazza",
++ -1);
++}
++
++static void
++remove_row (GtkWidget *button)
++{
++ GtkTreeSelection *sel;
++ GtkTreeIter iter;
++
++ sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (list));
++
++ if (gtk_tree_selection_get_selected (sel,
++ NULL,
++ &iter))
++ {
++ gpointer data = NULL;
++
++ gtk_tree_model_get (GTK_TREE_MODEL (store),
++ &iter,
++ 2, &data,
++ -1);
++
++ dee_model_remove (model, data);
++ }
++ else
++ g_debug ("No selection to delete");
++}
++
++static void
++clear_rows (GtkWidget *button)
++{
++ dee_model_clear (model);
++}
++
++static void
++on_cell_edited (GtkCellRendererText *renderer,
++ gchar *path,
++ gchar *new_text,
++ gpointer old_data)
++{
++ GtkTreeIter iter;
++
++ if (gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (store),
++ &iter,
++ path))
++ {
++ gpointer data = NULL;
++
++ gtk_tree_model_get (GTK_TREE_MODEL (store),
++ &iter,
++ 2, &data,
++ -1);
++
++ dee_model_set (model,
++ (DeeModelIter *)data,
++ 1, new_text,
++ -1);
++ }
++}
++
++gint
++main (gint argc, gchar *argv[])
++{
++ GtkWidget *vbox, *hbox, *scroll, *button;
++
++ gtk_init (&argc, &argv);
++
++ window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
++ gtk_window_resize (GTK_WINDOW (window), 300, 600);
++ gtk_container_set_border_width (GTK_CONTAINER (window), 12);
++
++ vbox = gtk_vbox_new (FALSE, 12);
++ gtk_container_add (GTK_CONTAINER (window), vbox);
++
++ button = gtk_label_new (g_strdup_printf ("My PID: <b>%d</b>", getpid()));
++ g_object_set (button, "use-markup", TRUE, NULL);
++ gtk_misc_set_alignment (GTK_MISC (button), 0.5, 0.5);
++ gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
++
++ scroll = gtk_scrolled_window_new (NULL, NULL);
++ gtk_box_pack_start (GTK_BOX (vbox), scroll, TRUE, TRUE, 0);
++ gtk_widget_show (scroll);
++
++ list = gtk_tree_view_new ();
++ gtk_container_add (GTK_CONTAINER (scroll), list);
++ gtk_widget_show (list);
++
++ {
++ GtkCellRenderer *cell;
++ GtkTreeViewColumn *col;
++
++ cell = gtk_cell_renderer_text_new ();
++ col = gtk_tree_view_column_new_with_attributes ("0",
++ cell,
++ "text", 0,
++ NULL);
++ gtk_tree_view_append_column (GTK_TREE_VIEW (list), col);
++
++ cell = gtk_cell_renderer_text_new ();
++ g_object_set (cell, "editable", TRUE, NULL);
++ g_signal_connect (cell, "edited",
++ G_CALLBACK (on_cell_edited), NULL);
++ col = gtk_tree_view_column_new_with_attributes ("1",
++ cell,
++ "text", 1,
++ NULL);
++ gtk_tree_view_append_column (GTK_TREE_VIEW (list), col);
++ }
++
++ hbox = gtk_hbox_new (TRUE, 12);
++ gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
++
++ button = gtk_button_new_from_stock (GTK_STOCK_ADD);
++ gtk_container_add (GTK_CONTAINER (hbox), button);
++ g_signal_connect (button, "clicked",
++ G_CALLBACK (add_row), NULL);
++
++ button = gtk_button_new_from_stock (GTK_STOCK_REMOVE);
++ gtk_container_add (GTK_CONTAINER (hbox), button);
++ g_signal_connect (button, "clicked",
++ G_CALLBACK (remove_row), NULL);
++
++ button = gtk_button_new_from_stock (GTK_STOCK_CLEAR);
++ gtk_container_add (GTK_CONTAINER (hbox), button);
++ g_signal_connect (button, "clicked",
++ G_CALLBACK (clear_rows), NULL);
++
++ gtk_widget_show_all (window);
++
++ store = gtk_list_store_new (3,
++ G_TYPE_STRING,
++ G_TYPE_STRING,
++ G_TYPE_POINTER);
++ gtk_tree_view_set_model (GTK_TREE_VIEW (list), GTK_TREE_MODEL (store));
++
++ model = dee_model_new ("com.canonical.Dbus.Model.Example",
++ 2,
++ G_TYPE_INT,
++ G_TYPE_STRING);
++ g_signal_connect (model, "row-added",
++ G_CALLBACK (on_row_added), NULL);
++ g_signal_connect (model, "row-removed",
++ G_CALLBACK (on_row_removed), NULL);
++ g_signal_connect (model, "row-changed",
++ G_CALLBACK (on_row_changed), NULL);
++
++ dee_model_connect (DEE_SHARED_MODEL (model));
++
++ gtk_main ();
++
++ return 0;
++}
+--- dee-0.5.18.orig/tests/test-model-tags.c
++++ dee-0.5.18/tests/test-model-tags.c
+@@ -118,7 +118,9 @@ test_no_tags (Fixture *fix, gconstpointe
+ /* Check that getting an undefined tag fails gracefully */
+ if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDOUT | G_TEST_TRAP_SILENCE_STDERR))
+ {
++ tag = NULL;
+ tag = dee_model_get_tag (fix->m, iter, GUINT_TO_POINTER (123));
++ g_assert (tag == NULL);
+ exit (0); /* successful test run */
+ }
+ g_test_trap_assert_failed ();
+--- dee-0.5.18.orig/tests/test-filter-model.c
++++ dee-0.5.18/tests/test-filter-model.c
+@@ -39,7 +39,9 @@ static void test_discard_all
+ gconstpointer data);
+ static void test_discard_all_append_notify (FilterFixture *fix,
+ gconstpointer data);
+-static void test_collator (FilterFixture *fix,
++static void test_collator_asc (FilterFixture *fix,
++ gconstpointer data);
++static void test_collator_desc (FilterFixture *fix,
+ gconstpointer data);
+ static void test_key (FilterFixture *fix,
+ gconstpointer data);
+@@ -62,8 +64,10 @@ test_filter_model_create_suite (void)
+ setup, test_discard_all, teardown);
+ g_test_add (DOMAIN"/DiscardAllAppendNotify", FilterFixture, 0,
+ setup, test_discard_all_append_notify, teardown);
+- g_test_add (DOMAIN"/Collator", FilterFixture, 0,
+- setup, test_collator, teardown);
++ g_test_add (DOMAIN"/CollatorAscending", FilterFixture, 0,
++ setup, test_collator_asc, teardown);
++ g_test_add (DOMAIN"/CollatorDescending", FilterFixture, 0,
++ setup, test_collator_desc, teardown);
+ g_test_add (DOMAIN"/Key", FilterFixture, 0,
+ setup, test_key, teardown);
+ g_test_add (DOMAIN"/Any", FilterFixture, 0,
+@@ -301,9 +305,9 @@ test_discard_all_append_notify (FilterFi
+ g_object_unref (m);
+ }
+
+-/* Test dee_filter_new_collator() */
++/* Test dee_filter_new_collator() ascending */
+ static void
+-test_collator (FilterFixture *fix, gconstpointer data)
++test_collator_asc (FilterFixture *fix, gconstpointer data)
+ {
+ DeeModelIter *r0, *r1, *r2, *r3, *r4, *r5;
+ DeeFilter *collator = dee_filter_new_collator (1);
+@@ -336,11 +340,56 @@ test_collator (FilterFixture *fix, gcons
+ /* Appending to the end of the sorted model is a special case in the code,
+ * so double check on that... */
+ dee_model_append (fix->model, 5, "Zzzz");
++ r0 = dee_model_get_iter_at_row (m, 0);
+ r5 = dee_model_get_iter_at_row (m, 5);
++ g_assert_cmpstr ("Four", ==, dee_model_get_string (m, r0, 1));
+ g_assert_cmpstr ("Zzzz", ==, dee_model_get_string (m, r5, 1));
+
+ g_object_unref (m);
+ }
++
++/* Test dee_filter_new_collator_desc() descending*/
++static void
++test_collator_desc (FilterFixture *fix, gconstpointer data)
++{
++ DeeModelIter *r0, *r1, *r2, *r3, *r4, *r5;
++ DeeFilter *collator = dee_filter_new_collator_desc (1);
++ DeeModel *m = dee_filter_model_new (collator, fix->model);
++
++ g_free (collator);
++
++ /* Test alphabetic sorting after initial construction */
++ r0 = dee_model_get_iter_at_row (m, 0);
++ r1 = dee_model_get_iter_at_row (m, 1);
++ r2 = dee_model_get_iter_at_row (m, 2);
++ g_assert_cmpstr ("Zero", ==, dee_model_get_string (m, r0, 1));
++ g_assert_cmpstr ("Two", ==, dee_model_get_string (m, r1, 1));
++ g_assert_cmpstr ("One", ==, dee_model_get_string (m, r2, 1));
++
++ /* Test alphabetic sorting after updates */
++ dee_model_append (fix->model, 3, "Three");
++ dee_model_append (fix->model, 4, "Four");
++ r0 = dee_model_get_iter_at_row (m, 0);
++ r1 = dee_model_get_iter_at_row (m, 1);
++ r2 = dee_model_get_iter_at_row (m, 2);
++ r3 = dee_model_get_iter_at_row (m, 3);
++ r4 = dee_model_get_iter_at_row (m, 4);
++ g_assert_cmpstr ("Zero", ==, dee_model_get_string (m, r0, 1));
++ g_assert_cmpstr ("Two", ==, dee_model_get_string (m, r1, 1));
++ g_assert_cmpstr ("Three", ==, dee_model_get_string (m, r2, 1));
++ g_assert_cmpstr ("One", ==, dee_model_get_string (m, r3, 1));
++ g_assert_cmpstr ("Four", ==, dee_model_get_string (m, r4, 1));
++
++ /* Appending to the end of the sorted model is a special case in the code,
++ * so double check on that... */
++ dee_model_append (fix->model, 5, "Zzzz");
++ r0 = dee_model_get_iter_at_row (m, 0);
++ r5 = dee_model_get_iter_at_row (m, 5);
++ g_assert_cmpstr ("Four", ==, dee_model_get_string (m, r5, 1));
++ g_assert_cmpstr ("Zzzz", ==, dee_model_get_string (m, r0, 1));
++
++ g_object_unref (m);
++}
+
+ static void
+ _test_orig_ordering (FilterFixture *fix,
+--- dee-0.5.18.orig/dee/dee-filters.h
++++ dee-0.5.18/dee/dee-filters.h
+@@ -32,6 +32,8 @@ G_BEGIN_DECLS
+
+ DeeFilter* dee_filter_new_collator (guint column);
+
++DeeFilter* dee_filter_new_collator_desc (guint column);
++
+ DeeFilter* dee_filter_new_for_key_column (guint column, const gchar *key);
+
+ DeeFilter* dee_filter_new_for_any_column (guint column, GVariant *value);
+--- dee-0.5.18.orig/dee/dee-filters.c
++++ dee-0.5.18/dee/dee-filters.c
+@@ -84,6 +84,11 @@ static void _dee_filter_collator_map_not
+ DeeFilterModel *filter_model,
+ gpointer user_data);
+
++static void _dee_filter_collator_desc_map_notify (DeeModel *orig_model,
++ DeeModelIter *orig_iter,
++ DeeFilterModel *filter_model,
++ gpointer user_data);
++
+ static void
+ _dee_filter_collator_map_func (DeeModel *orig_model,
+ DeeFilterModel *filter_model,
+@@ -109,6 +114,30 @@ _dee_filter_collator_map_func (DeeModel
+ }
+
+ static void
++_dee_filter_collator_desc_map_func (DeeModel *orig_model,
++ DeeFilterModel *filter_model,
++ gpointer user_data)
++{
++ DeeModelIter *iter, *end;
++ CollatorFilter *filter;
++
++ g_return_if_fail (user_data != NULL);
++
++ filter = (CollatorFilter *) user_data;
++ filter->collation_key_tag =
++ dee_model_register_tag (orig_model, (GDestroyNotify) g_free);
++
++ iter = dee_model_get_first_iter (orig_model);
++ end = dee_model_get_last_iter (orig_model);
++ while (iter != end)
++ {
++ _dee_filter_collator_desc_map_notify (orig_model, iter, filter_model, filter);
++ iter = dee_model_next (orig_model, iter);
++ }
++
++}
++
++static void
+ _dee_filter_collator_map_notify (DeeModel *orig_model,
+ DeeModelIter *orig_iter,
+ DeeFilterModel *filter_model,
+@@ -154,6 +183,51 @@ _dee_filter_collator_map_notify (DeeMode
+ }
+
+ static void
++_dee_filter_collator_desc_map_notify (DeeModel *orig_model,
++ DeeModelIter *orig_iter,
++ DeeFilterModel *filter_model,
++ gpointer user_data)
++{
++ DeeModelIter *iter, *end;
++ CollatorFilter *filter;
++ const gchar *column_value, *test_value;
++ gchar *collation_key;
++
++ g_return_if_fail (user_data != NULL);
++ g_return_if_fail (orig_iter != NULL);
++
++ filter = (CollatorFilter *) user_data;
++
++ /* Build and set collation ley for the current row */
++ column_value = dee_model_get_string (orig_model, orig_iter, filter->column);
++ collation_key = g_utf8_collate_key (column_value, -1);
++ dee_model_set_tag (orig_model, orig_iter,
++ filter->collation_key_tag, collation_key); // steal collation_key
++
++ iter = dee_model_get_first_iter (DEE_MODEL (filter_model));
++ end = dee_model_get_last_iter (DEE_MODEL (filter_model));
++ while (iter != end)
++ {
++ test_value = dee_model_get_tag (orig_model, iter, filter->collation_key_tag);
++ if (g_strcmp0 (test_value, column_value) > 0)
++ {
++ iter = dee_model_next (DEE_MODEL (filter_model), iter);
++ }
++ else
++ {
++ dee_filter_model_insert_iter_before (filter_model, orig_iter, iter);
++ iter = NULL;
++ break;
++ }
++ }
++
++ if (iter == end)
++ {
++ dee_filter_model_append_iter(filter_model, orig_iter);
++ }
++}
++
++static void
+ _dee_filter_key_map_func (DeeModel *orig_model,
+ DeeFilterModel *filter_model,
+ gpointer user_data)
+@@ -357,6 +431,37 @@ dee_filter_new_collator (guint column
+ }
+
+ /**
++ * dee_filter_new_collator_desc:
++ * @column: The index of a column containing the strings to sort after
++ *
++ * Create a #DeeFilter that takes string values from a column in the model
++ * and builds a #DeeFilterModel with the rows sorted descending according to the
++ * collation rules of the current locale.
++ *
++ * Returns: (transfer full): A newly allocated #DeeFilter. Do not modify it.
++ * Free with g_free().
++ */
++DeeFilter*
++dee_filter_new_collator_desc (guint column)
++{
++ DeeFilter *filter;
++ CollatorFilter *collator;
++
++ filter = g_new0 (DeeFilter, 1);
++ filter->map_func = _dee_filter_collator_desc_map_func;
++ filter->map_notify = _dee_filter_collator_desc_map_notify;
++
++ collator = g_new0 (CollatorFilter, 1);
++ collator->column = column;
++
++ filter->destroy = (GDestroyNotify) g_free;
++ filter->user_data =collator;
++
++ return filter;
++}
++
++
++/**
+ * dee_filter_new_for_key_column:
+ * @column: The index of a column containing the string key to match
+ *
+--- dee-0.5.18.orig/dee/dee-peer.c
++++ dee-0.5.18/dee/dee-peer.c
+@@ -1190,13 +1190,11 @@ on_dbus_peer_signal (GDBusConnection *co
+ gpointer user_data)
+ {
+ DeePeer *self;
+- DeePeerPrivate *priv;
+ gchar *peer_address = NULL;
+
+ g_return_if_fail (DEE_IS_PEER (user_data));
+
+ self = DEE_PEER (user_data);
+- priv = self->priv;
+
+ if (g_strcmp0 ("Bye", signal_name) == 0)
+ {
+--- dee-0.5.18.orig/dee/dee-serializable-model.c
++++ dee-0.5.18/dee/dee-serializable-model.c
+@@ -866,7 +866,7 @@ dee_serializable_model_serialize (DeeSer
+ GVariantBuilder aav, clone;
+ GVariant *val, *tt, *schema;
+ DeeModelIter *iter;
+- guint i, j, n_rows, n_columns;
++ guint i, j, n_columns;
+ guint64 last_seqnum;
+
+ g_return_val_if_fail (DEE_IS_SERIALIZABLE_MODEL (self), FALSE);
+@@ -874,7 +874,6 @@ dee_serializable_model_serialize (DeeSer
+ trace_object (self, "Building clone");
+
+ _self = DEE_MODEL (self);
+- n_rows = dee_model_get_n_rows (_self);
+ n_columns = dee_model_get_n_columns (_self);
+
+ g_variant_builder_init (&aav, G_VARIANT_TYPE ("aav"));
+--- dee-0.5.18.orig/dee/dee-shared-model.c
++++ dee-0.5.18/dee/dee-shared-model.c
+@@ -1459,7 +1459,7 @@ dee_shared_model_serialize (DeeSerializa
+ GVariantBuilder aav, au, ay, clone;
+ GVariant *val, *tt, *schema;
+ DeeModelIter *iter;
+- guint i, j, n_rows, n_columns;
++ guint i, j, n_columns;
+ guint64 last_seqnum;
+
+ g_return_val_if_fail (DEE_IS_SHARED_MODEL (self), FALSE);
+@@ -1468,7 +1468,6 @@ dee_shared_model_serialize (DeeSerializa
+ dee_model_get_n_rows (DEE_MODEL (self)));
+
+ _self = DEE_MODEL (self);
+- n_rows = dee_model_get_n_rows (DEE_MODEL (self));
+ n_columns = dee_model_get_n_columns (DEE_MODEL (self));
+
+ g_variant_builder_init (&aav, G_VARIANT_TYPE ("aav"));
+--- dee-0.5.18.orig/dee/dee-sequence-model.c
++++ dee-0.5.18/dee/dee-sequence-model.c
+@@ -367,13 +367,10 @@ dee_sequence_model_remove (DeeModel
+ DeeModelIter *iter_)
+ {
+ DeeSequenceModel *_self = (DeeSequenceModel *)self;
+- DeeSequenceModelPrivate *priv;
+ GSequenceIter *iter = (GSequenceIter *)iter_;
+
+ g_return_if_fail (DEE_IS_SEQUENCE_MODEL (_self));
+ g_return_if_fail (iter != NULL);
+-
+- priv = _self->priv;
+
+ if (iter_ == dee_model_get_last_iter (self))
+ return;
+@@ -452,7 +449,6 @@ dee_sequence_model_set_value_silently (D
+ GVariant *value)
+ {
+ DeeSequenceModel *_self = (DeeSequenceModel *)self;
+- DeeSequenceModelPrivate *priv;
+ GPtrArray *row;
+
+ g_return_if_fail (DEE_IS_SEQUENCE_MODEL (_self));
+@@ -460,8 +456,6 @@ dee_sequence_model_set_value_silently (D
+ g_return_if_fail (column < dee_model_get_n_columns (self));
+ g_return_if_fail (g_variant_type_equal (g_variant_get_type (value), G_VARIANT_TYPE (dee_model_get_column_schema (self, column))));
+ g_return_if_fail (value != NULL);
+-
+- priv = _self->priv;
+
+ row = g_sequence_get ((GSequenceIter *) iter);
+ if (g_ptr_array_index (row, column) != NULL)
+--- dee-0.5.18.orig/dee/dee-filter-model.c
++++ dee-0.5.18/dee/dee-filter-model.c
+@@ -192,7 +192,6 @@ dee_filter_model_constructed (GObject *o
+ {
+ DeeFilterModelPrivate *priv = DEE_FILTER_MODEL (object)->priv;
+ DeeFilter *filter = priv->filter;
+- guint n_columns;
+
+ if (filter == NULL)
+ {
+@@ -201,8 +200,7 @@ dee_filter_model_constructed (GObject *o
+ return;
+ }
+
+- g_object_get (object, "back-end", &(priv->orig_model), NULL);
+- n_columns = dee_model_get_n_columns (priv->orig_model);
++ g_object_get (object, "back-end", &(priv->orig_model), NULL);
+
+ /* Map the end iter of the orig_model to the end iter of our iter list */
+ g_hash_table_insert (priv->iter_map,
More information about the Frugalware-git
mailing list