From b9925f5ee5cf98f9fe5f72ce08361ee74477b48e51a2d446621d949b79f7e91d Mon Sep 17 00:00:00 2001 From: OBS User unknown Date: Tue, 10 Feb 2009 11:12:20 +0000 Subject: [PATCH] OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/gnome-desktop?expand=0&rev=45 --- baselibs.conf | 2 +- gnome-desktop-2.24.1.tar.bz2 | 3 - gnome-desktop-2.25.5.tar.bz2 | 3 + gnome-desktop-desktop.patch | 8 +- ...e-desktop-fate300461-desktop-gettext.patch | 227 ++-- gnome-desktop-foreign-for-screen.patch | 36 - gnome-desktop-randr-gerror.diff | 1133 ----------------- gnome-desktop.changes | 78 ++ gnome-desktop.spec | 124 +- icon-search-path.dif | 99 -- 10 files changed, 311 insertions(+), 1402 deletions(-) delete mode 100644 gnome-desktop-2.24.1.tar.bz2 create mode 100644 gnome-desktop-2.25.5.tar.bz2 delete mode 100644 gnome-desktop-foreign-for-screen.patch delete mode 100644 gnome-desktop-randr-gerror.diff delete mode 100644 icon-search-path.dif diff --git a/baselibs.conf b/baselibs.conf index d2fbbdf..c7cf96d 100644 --- a/baselibs.conf +++ b/baselibs.conf @@ -1,4 +1,4 @@ gnome-desktop -libgnome-desktop-2-7 +libgnome-desktop-2-11 obsoletes "gnome-desktop- <= " provides "gnome-desktop- = " diff --git a/gnome-desktop-2.24.1.tar.bz2 b/gnome-desktop-2.24.1.tar.bz2 deleted file mode 100644 index 06c8bf1..0000000 --- a/gnome-desktop-2.24.1.tar.bz2 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ec7beb0886dfaeebb506b2f0e6e255b4254b3ca812ab6f69a6cafb3d9e492a40 -size 1508429 diff --git a/gnome-desktop-2.25.5.tar.bz2 b/gnome-desktop-2.25.5.tar.bz2 new file mode 100644 index 0000000..290eaa7 --- /dev/null +++ b/gnome-desktop-2.25.5.tar.bz2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0337976c3c557b60b9c5d49f3c0f40b7e6873a60d57910ba7d55287375b6cab9 +size 3084443 diff --git a/gnome-desktop-desktop.patch b/gnome-desktop-desktop.patch index c0c3b18..240bad9 100644 --- a/gnome-desktop-desktop.patch +++ b/gnome-desktop-desktop.patch @@ -2,7 +2,7 @@ Index: gnome-about/gnome-about.desktop.in.in =================================================================== --- gnome-about/gnome-about.desktop.in.in.orig +++ gnome-about/gnome-about.desktop.in.in -@@ -1,12 +1,12 @@ +@@ -1,7 +1,7 @@ [Desktop Entry] Encoding=UTF-8 _Name=About GNOME @@ -11,9 +11,3 @@ Index: gnome-about/gnome-about.desktop.in.in Exec=gnome-about Icon=gnome-logo-icon-transparent Terminal=false - Type=Application --Categories=GNOME;GTK;Core; -+Categories=GNOME;GTK;Core;Documentation; - OnlyShowIn=GNOME; - X-GNOME-Bugzilla-Bugzilla=GNOME - X-GNOME-Bugzilla-Product=gnome-desktop diff --git a/gnome-desktop-fate300461-desktop-gettext.patch b/gnome-desktop-fate300461-desktop-gettext.patch index 6f698f7..e037ef2 100644 --- a/gnome-desktop-fate300461-desktop-gettext.patch +++ b/gnome-desktop-fate300461-desktop-gettext.patch @@ -1,18 +1,8 @@ -Add support of gettext for desktop entry files. - -We only support this for the following keys: Name, GenericName, Comment. We -don't support all keys because it can create issues for the Icon key (which is -localizable -- which can result in a broken icon). - -Translations that are present in the desktop entry take precedence over -translations via gettext. If we don't do this, then user modifications won't -appear since they will have lower precedence. - -Index: gnome-desktop-2.23.91/libgnome-desktop/gnome-desktop-item.c +Index: libgnome-desktop/gnome-desktop-item.c =================================================================== ---- gnome-desktop-2.23.91.orig/libgnome-desktop/gnome-desktop-item.c -+++ gnome-desktop-2.23.91/libgnome-desktop/gnome-desktop-item.c -@@ -84,6 +84,7 @@ struct _GnomeDesktopItem { +--- libgnome-desktop/gnome-desktop-item.c (révision 5293) ++++ libgnome-desktop/gnome-desktop-item.c (copie de travail) +@@ -81,6 +81,7 @@ struct _GnomeDesktopItem { GHashTable *main_hash; char *location; @@ -20,16 +10,16 @@ Index: gnome-desktop-2.23.91/libgnome-desktop/gnome-desktop-item.c time_t mtime; -@@ -139,6 +140,8 @@ static GnomeDesktopItem *gnome_desktop_i - - static void update_recently_used_apps (const GnomeDesktopItem *item); +@@ -134,6 +135,8 @@ static GnomeDesktopItem *gnome_desktop_i + GnomeDesktopItemLoadFlags flags, + GError **error); +static const char *lookup (const GnomeDesktopItem *item, const char *key); + static int readbuf_getc (ReadBuf *rb) { -@@ -399,6 +402,7 @@ gnome_desktop_item_new (void) +@@ -394,6 +397,7 @@ gnome_desktop_item_new (void) "1.0"); retval->launch_time = 0; @@ -37,7 +27,7 @@ Index: gnome-desktop-2.23.91/libgnome-desktop/gnome-desktop-item.c return retval; } -@@ -477,6 +481,10 @@ gnome_desktop_item_copy (const GnomeDesk +@@ -472,6 +476,10 @@ gnome_desktop_item_copy (const GnomeDesk copy_string_hash, retval->main_hash); @@ -48,7 +38,7 @@ Index: gnome-desktop-2.23.91/libgnome-desktop/gnome-desktop-item.c return retval; } -@@ -924,6 +932,9 @@ gnome_desktop_item_unref (GnomeDesktopIt +@@ -923,6 +931,9 @@ gnome_desktop_item_unref (GnomeDesktopIt g_free (item->location); item->location = NULL; @@ -58,90 +48,151 @@ Index: gnome-desktop-2.23.91/libgnome-desktop/gnome-desktop-item.c g_free (item); } -@@ -999,16 +1010,79 @@ lookup (const GnomeDesktopItem *item, co +@@ -1011,6 +1022,71 @@ lookup_locale (const GnomeDesktopItem *i + } + static const char * - lookup_locale (const GnomeDesktopItem *item, const char *key, const char *locale) - { ++lookup_gettext (const GnomeDesktopItem *item, const char *key) ++{ + const char *ret; ++ const char *msg_locale; ++ const char *value; + + ret = NULL; -+ - if (locale == NULL || - strcmp (locale, "C") == 0) { -- return lookup (item, key); -+ ret = lookup (item, key); - } else { -- const char *ret; - char *full = g_strdup_printf ("%s[%s]", key, locale); - ret = lookup (item, full); - g_free (full); -- return ret; - } + + /* we're only interested in gettext translation if we don't have a + * translation in the .desktop file itself and if the key is one of the + * keys we know we want to translate: Name, GenericName, Comment. + * Blindly doing this for all keys can give strange result for the + * icons, since the Icon is a locale string in the spec, eg. */ -+ if (!ret && item->gettext_domain && -+ (strcmp (key, GNOME_DESKTOP_ITEM_NAME) == 0 || -+ strcmp (key, GNOME_DESKTOP_ITEM_GENERIC_NAME) == 0 || -+ strcmp (key, GNOME_DESKTOP_ITEM_COMMENT) == 0)) { -+ const char *msg_locale = setlocale (LC_MESSAGES, NULL); ++ if (!(item->gettext_domain && ++ (strcmp (key, GNOME_DESKTOP_ITEM_NAME) == 0 || ++ strcmp (key, GNOME_DESKTOP_ITEM_GENERIC_NAME) == 0 || ++ strcmp (key, GNOME_DESKTOP_ITEM_COMMENT) == 0))) ++ return NULL; + -+ /* only get translation in the mo file if the requested locale -+ * is the LC_MESSAGES one. Ideally, we should do more and -+ * change LC_MESSAGES to use the requested locale, but there's -+ * no guarantee it's installed on the system and it might have -+ * some side-effects. Since this is a corner case, let's ignore -+ * it. */ -+ if (msg_locale && locale && -+ strcmp (msg_locale, locale) == 0) { -+ const char *value = lookup (item, key); ++ msg_locale = setlocale (LC_MESSAGES, NULL); ++ if (!msg_locale) ++ return NULL; + -+ if (item->location && value != NULL && value[0] != '\0') { -+ GFile *file; -+ char *basename; ++ value = lookup (item, key); ++ if (value == NULL || value[0] == '\0') ++ return NULL; + -+ file = g_file_new_for_uri (item->location); -+ basename = g_file_get_basename (file); -+ g_object_unref (file); ++ if (item->location) { ++ GFile *file; ++ char *basename; + -+ if (basename) { -+ char *context; -+ char *context_value; ++ file = g_file_new_for_uri (item->location); ++ basename = g_file_get_basename (file); ++ g_object_unref (file); + -+ context = g_strdup_printf ("%s(%s)", key, -+ basename); -+ context_value = g_strdup_printf ("%s%s%s", -+ context, ": ", value); -+ ret = g_dgettext (item->gettext_domain, -+ context_value); -+ if (ret == context_value) -+ ret = NULL; ++ if (basename) { ++ char *context; ++ char *context_value; + -+ g_free (context_value); -+ g_free (context); -+ g_free (basename); -+ } -+ } ++ context = g_strdup_printf ("%s(%s)", key, ++ basename); ++ context_value = g_strdup_printf ("%s%s%s", ++ context, ": ", value); ++ ret = g_dgettext (item->gettext_domain, ++ context_value); ++ if (ret == context_value) ++ ret = NULL; + -+ if (!ret && value != NULL && value[0] != '\0') { -+ ret = g_dgettext (item->gettext_domain, value); -+ /* don't accept no translation, since we might -+ * have something better later, with another -+ * locale */ -+ if (ret == value) -+ ret = NULL; -+ } ++ g_free (context_value); ++ g_free (context); ++ g_free (basename); + } + } + ++ if (!ret) { ++ ret = g_dgettext (item->gettext_domain, value); ++ /* don't accept no translation */ ++ if (ret == value) ++ ret = NULL; ++ } ++ ++ return ret; ++} ++ ++static const char * + lookup_best_locale (const GnomeDesktopItem *item, const char *key) + { + const char * const *langs_pointer; +@@ -1020,6 +1096,14 @@ lookup_best_locale (const GnomeDesktopIt + for (i = 0; langs_pointer[i] != NULL; i++) { + const char *ret = NULL; + ++ /* if we reach C, it means there were no inline translations so ++ * far, so let's try gettext first */ ++ if (strcmp (langs_pointer[i], "C") == 0) { ++ ret = lookup_gettext (item, key); ++ if (ret != NULL) ++ return ret; ++ } ++ + ret = lookup_locale (item, key, langs_pointer[i]); + if (ret != NULL) + return ret; +@@ -2946,11 +3030,21 @@ gnome_desktop_item_get_localestring_lang + const char *attr, + const char *language) + { ++ const char *msg_locale; ++ const char *ret; ++ + g_return_val_if_fail (item != NULL, NULL); + g_return_val_if_fail (item->refcount > 0, NULL); + g_return_val_if_fail (attr != NULL, NULL); + +- return lookup_locale (item, attr, language); ++ msg_locale = setlocale (LC_MESSAGES, NULL); ++ ++ ret = lookup_locale (item, attr, language); ++ /* let's try gettext if the requested language is the current one */ ++ if (!ret && language && strcmp (msg_locale, language)) ++ ret = lookup_gettext (item, attr); ++ + return ret; } - static const char * -@@ -4039,6 +4113,10 @@ ditem_load (ReadBuf *rb, + /** +@@ -2978,6 +3072,14 @@ gnome_desktop_item_get_attr_locale (cons + for (i = 0; langs_pointer[i] != NULL; i++) { + const char *value = NULL; + ++ /* if we reach C, it means there were no inline translations so ++ * far, so let's try gettext first */ ++ if (strcmp (langs_pointer[i], "C") == 0) { ++ value = lookup_gettext (item, attr); ++ if (value) ++ return setlocale (LC_MESSAGES, NULL); ++ } ++ + value = lookup_locale (item, attr, langs_pointer[i]); + if (value) + return langs_pointer[i]; +@@ -2998,6 +3100,9 @@ gnome_desktop_item_get_languages (const + + for (li = item->languages; li != NULL; li = li->next) { + char *language = li->data; ++ /* no gettext support here: this wouldn't give us a lot. Worst ++ * case, an desktop item editor won't see that there's a ++ * translation for the current locale. */ + if (attr == NULL || + lookup_locale (item, attr, language) != NULL) { + list = g_list_prepend (list, language); +@@ -3715,6 +3820,8 @@ try_english_key (GnomeDesktopItem *item, + + str = NULL; + for (i = 0; locales[i] != NULL && str == NULL; i++) { ++ /* no gettext support here: this function is for broken ++ * .desktop files anyway */ + str = g_strdup (lookup_locale (item, key, locales[i])); + } + if (str != NULL) { +@@ -3983,6 +4090,10 @@ ditem_load (ReadBuf *rb, readbuf_close (rb); @@ -152,15 +203,15 @@ Index: gnome-desktop-2.23.91/libgnome-desktop/gnome-desktop-item.c return item; } -Index: gnome-desktop-2.23.91/libgnome-desktop/libgnome/gnome-desktop-item.h +Index: libgnome-desktop/libgnome/gnome-desktop-item.h =================================================================== ---- gnome-desktop-2.23.91.orig/libgnome-desktop/libgnome/gnome-desktop-item.h -+++ gnome-desktop-2.23.91/libgnome-desktop/libgnome/gnome-desktop-item.h -@@ -98,6 +98,7 @@ typedef struct _GnomeDesktopItem GnomeDe - #define GNOME_DESKTOP_ITEM_DOC_PATH "X-GNOME-DocPath" /* string */ +--- libgnome-desktop/libgnome/gnome-desktop-item.h.orig ++++ libgnome-desktop/libgnome/gnome-desktop-item.h +@@ -97,6 +97,7 @@ typedef struct _GnomeDesktopItem GnomeDe + #define GNOME_DESKTOP_ITEM_DOC_PATH "X-GNOME-DocPath" /* string */ #define GNOME_DESKTOP_ITEM_SUBSTITUTEUID "X-KDE-SubstituteUID" /*boolean*/ #define GNOME_DESKTOP_ITEM_ROOT_ONLY "X-KDE-RootOnly" /*boolean*/ +#define GNOME_DESKTOP_ITEM_GETTEXT_DOMAIN "X-SUSE-Gettext-Domain" /* string */ /* The vfolder proposal */ - #define GNOME_DESKTOP_ITEM_CATEGORIES "Categories" /* string */ - #define GNOME_DESKTOP_ITEM_ONLY_SHOW_IN "OnlyShowIn" /* string */ + #define GNOME_DESKTOP_ITEM_CATEGORIES "Categories" /* string */ + #define GNOME_DESKTOP_ITEM_ONLY_SHOW_IN "OnlyShowIn" /* string */ diff --git a/gnome-desktop-foreign-for-screen.patch b/gnome-desktop-foreign-for-screen.patch deleted file mode 100644 index 4953e9d..0000000 --- a/gnome-desktop-foreign-for-screen.patch +++ /dev/null @@ -1,36 +0,0 @@ - libgnome-desktop/gnome-bg.c | 10 +++++++--- - 1 files changed, 7 insertions(+), 3 deletions(-) - -diff --git a/libgnome-desktop/gnome-bg.c b/libgnome-desktop/gnome-bg.c -index d9d6709..c1932da 100644 ---- a/libgnome-desktop/gnome-bg.c -+++ b/libgnome-desktop/gnome-bg.c -@@ -880,6 +880,7 @@ make_root_pixmap (GdkScreen *screen, gint width, gint height) - Pixmap result; - GdkPixmap *gdk_pixmap; - int screen_num; -+ int depth; - - screen_num = gdk_screen_get_number (screen); - -@@ -902,14 +903,17 @@ make_root_pixmap (GdkScreen *screen, gint width, gint height) - - XSetCloseDownMode (display, RetainPermanent); - -+ depth = DefaultDepth (display, screen_num); -+ - result = XCreatePixmap (display, - RootWindow (display, screen_num), -- width, height, -- DefaultDepth (display, screen_num)); -+ width, height, depth); - - XCloseDisplay (display); - -- gdk_pixmap = gdk_pixmap_foreign_new (result); -+ gdk_pixmap = gdk_pixmap_foreign_new_for_screen (screen, result, -+ width, height, depth); -+ - gdk_drawable_set_colormap ( - GDK_DRAWABLE (gdk_pixmap), - gdk_drawable_get_colormap (gdk_screen_get_root_window (screen))); diff --git a/gnome-desktop-randr-gerror.diff b/gnome-desktop-randr-gerror.diff deleted file mode 100644 index 2b4daa9..0000000 --- a/gnome-desktop-randr-gerror.diff +++ /dev/null @@ -1,1133 +0,0 @@ -diff --git a/libgnome-desktop/ChangeLog b/libgnome-desktop/ChangeLog -index 747f8ae..3166b49 100644 ---- a/libgnome-desktop/ChangeLog -+++ b/libgnome-desktop/ChangeLog -@@ -1,3 +1,43 @@ -+2008-12-12 Vincent Untz -+ -+ * gnome-rr-config.c: (crtc_assignment_new): -+ * gnome-rr.c: (gnome_rr_crtc_set_config): fix translator comments, to -+ really fix bug #563831. -+ -+2008-12-10 Vincent Untz -+ -+ * gnome-rr-config.c: (has_similar_mode): kill since it's unused and -+ creates a warning -+ -+2008-12-10 Vincent Untz -+ -+ * gnome-rr-config.c: (crtc_assignment_new): -+ * gnome-rr.c: (gnome_rr_crtc_set_config): -+ Fix build, thanks to Frederic Peters for the quick -+ notice. Fix bug #563926 and bug #563927. -+ -+2008-12-09 Federico Mena Quintero -+ -+ Fix http://bugzilla.gnome.org/show_bug.cgi?id=563831 -+ -+ * gnome-rr.c (gnome_rr_crtc_set_config): Make an error string more -+ friendly to translation. -+ -+ * gnome-rr-config.c (crtc_assignment_new): Likewise. -+ -+2008-10-16 Federico Mena Quintero -+ -+ Add error reporting to the GnomeRR API. -+ -+ * libgnomeui/gnome-rr.h (GnomeRRError): New enum with error codes -+ for the GnomeRR API. -+ -+ * gnome-rr.c (gnome_rr_error_quark): New public function. -+ -+Wed Oct 8 21:05:22 2008 Søren Sandmann -+ -+ * Various new RR API to support fn-F7 support -+ - ==================== 2.24.0 ==================== - - 2008-09-22 Vincent Untz -diff --git a/libgnome-desktop/gnome-rr-config.c b/libgnome-desktop/gnome-rr-config.c -index 4c0800a..7880c7e 100644 ---- a/libgnome-desktop/gnome-rr-config.c -+++ b/libgnome-desktop/gnome-rr-config.c -@@ -24,6 +24,8 @@ - - #define GNOME_DESKTOP_USE_UNSTABLE_API - -+#include -+#include - #include - #include - #include -@@ -66,9 +68,11 @@ static gboolean parse_file_gmarkup (const gchar *file, - - typedef struct CrtcAssignment CrtcAssignment; - --static gboolean crtc_assignment_apply (CrtcAssignment *assign); -+static gboolean crtc_assignment_apply (CrtcAssignment *assign, -+ GError **error); - static CrtcAssignment *crtc_assignment_new (GnomeRRScreen *screen, -- GnomeOutputInfo **outputs); -+ GnomeOutputInfo **outputs, -+ GError **error); - static void crtc_assignment_free (CrtcAssignment *assign); - static void output_free (GnomeOutputInfo *output); - static GnomeOutputInfo *output_copy (GnomeOutputInfo *output); -@@ -746,6 +750,42 @@ output_match (GnomeOutputInfo *output1, GnomeOutputInfo *output2) - return TRUE; - } - -+static gboolean -+output_equal (GnomeOutputInfo *output1, GnomeOutputInfo *output2) -+{ -+ g_assert (output1 != NULL); -+ g_assert (output2 != NULL); -+ -+ if (!output_match (output1, output2)) -+ return FALSE; -+ -+ if (output1->on != output2->on) -+ return FALSE; -+ -+ if (output1->on) -+ { -+ if (output1->width != output2->width) -+ return FALSE; -+ -+ if (output1->height != output2->height) -+ return FALSE; -+ -+ if (output1->rate != output2->rate) -+ return FALSE; -+ -+ if (output1->x != output2->x) -+ return FALSE; -+ -+ if (output1->y != output2->y) -+ return FALSE; -+ -+ if (output1->rotation != output2->rotation) -+ return FALSE; -+ } -+ -+ return TRUE; -+} -+ - static GnomeOutputInfo * - find_output (GnomeRRConfig *config, const char *name) - { -@@ -762,6 +802,9 @@ find_output (GnomeRRConfig *config, const char *name) - return NULL; - } - -+/* Match means "these configurations apply to the same hardware -+ * setups" -+ */ - gboolean - gnome_rr_config_match (GnomeRRConfig *c1, GnomeRRConfig *c2) - { -@@ -780,6 +823,28 @@ gnome_rr_config_match (GnomeRRConfig *c1, GnomeRRConfig *c2) - return TRUE; - } - -+/* Equal means "the configurations will result in the same -+ * modes being set on the outputs" -+ */ -+gboolean -+gnome_rr_config_equal (GnomeRRConfig *c1, -+ GnomeRRConfig *c2) -+{ -+ int i; -+ -+ for (i = 0; c1->outputs[i] != NULL; ++i) -+ { -+ GnomeOutputInfo *output1 = c1->outputs[i]; -+ GnomeOutputInfo *output2; -+ -+ output2 = find_output (c2, output1->name); -+ if (!output2 || !output_equal (output1, output2)) -+ return FALSE; -+ } -+ -+ return TRUE; -+} -+ - static GnomeOutputInfo ** - make_outputs (GnomeRRConfig *config) - { -@@ -820,12 +885,19 @@ make_outputs (GnomeRRConfig *config) - - gboolean - gnome_rr_config_applicable (GnomeRRConfig *configuration, -- GnomeRRScreen *screen) -+ GnomeRRScreen *screen, -+ GError **error) - { -- GnomeOutputInfo **outputs = make_outputs (configuration); -- CrtcAssignment *assign = crtc_assignment_new (screen, outputs); -+ GnomeOutputInfo **outputs; -+ CrtcAssignment *assign; - gboolean result; - -+ g_return_val_if_fail (configuration != NULL, FALSE); -+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE); -+ -+ outputs = make_outputs (configuration); -+ assign = crtc_assignment_new (screen, outputs, error); -+ - if (assign) - { - result = TRUE; -@@ -841,21 +913,6 @@ gnome_rr_config_applicable (GnomeRRConfig *configuration, - return result; - } - --static GnomeRRConfig * --gnome_rr_config_find (GnomeRRConfig **haystack, -- GnomeRRConfig *needle) --{ -- int i; -- -- for (i = 0; haystack[i] != NULL; ++i) -- { -- if (gnome_rr_config_match (haystack[i], needle)) -- return haystack[i]; -- } -- -- return NULL; --} -- - /* Database management */ - - static gchar * -@@ -992,14 +1049,19 @@ gnome_rr_config_sanitize (GnomeRRConfig *config) - - - gboolean --gnome_rr_config_save (GnomeRRConfig *configuration, GError **err) -+gnome_rr_config_save (GnomeRRConfig *configuration, GError **error) - { - GnomeRRConfig **configurations; -- GString *output = g_string_new(""); -+ GString *output; - int i; - gchar *filename; - gboolean result; - -+ g_return_val_if_fail (configuration != NULL, FALSE); -+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE); -+ -+ output = g_string_new (""); -+ - configurations = configurations_read (NULL); /* NULL-GError */ - - g_string_append_printf (output, "\n"); -@@ -1020,7 +1082,7 @@ gnome_rr_config_save (GnomeRRConfig *configuration, GError **err) - g_string_append_printf (output, "\n"); - - filename = get_config_filename (); -- result = g_file_set_contents (filename, output->str, -1, err); -+ result = g_file_set_contents (filename, output->str, -1, error); - g_free (filename); - - if (result) -@@ -1037,22 +1099,82 @@ gnome_rr_config_save (GnomeRRConfig *configuration, GError **err) - return result; - } - --static gboolean --apply_configuration (GnomeRRConfig *conf, GnomeRRScreen *screen) -+static GnomeRRConfig * -+gnome_rr_config_copy (GnomeRRConfig *config) -+{ -+ GnomeRRConfig *copy = g_new0 (GnomeRRConfig, 1); -+ int i; -+ GPtrArray *array = g_ptr_array_new (); -+ -+ copy->clone = config->clone; -+ -+ for (i = 0; config->outputs[i] != NULL; ++i) -+ g_ptr_array_add (array, output_copy (config->outputs[i])); -+ -+ g_ptr_array_add (array, NULL); -+ copy->outputs = (GnomeOutputInfo **)g_ptr_array_free (array, FALSE); -+ -+ return copy; -+} -+ -+GnomeRRConfig * -+gnome_rr_config_new_stored (GnomeRRScreen *screen, GError **error) -+{ -+ GnomeRRConfig *current; -+ GnomeRRConfig **configs; -+ GnomeRRConfig *result; -+ -+ g_return_val_if_fail (screen != NULL, NULL); -+ g_return_val_if_fail (error == NULL || *error == NULL, NULL); -+ -+ current = gnome_rr_config_new_current (screen); -+ -+ configs = configurations_read (error); -+ -+ result = NULL; -+ if (configs) -+ { -+ int i; -+ -+ for (i = 0; configs[i] != NULL; ++i) -+ { -+ if (gnome_rr_config_match (configs[i], current)) -+ { -+ result = gnome_rr_config_copy (configs[i]); -+ break; -+ } -+ } -+ -+ if (result == NULL) -+ g_set_error (error, GNOME_RR_ERROR, GNOME_RR_ERROR_NO_MATCHING_CONFIG, -+ _("none of the saved display configurations matched the active configuration")); -+ -+ configurations_free (configs); -+ } -+ -+ gnome_rr_config_free (current); -+ -+ return result; -+} -+ -+gboolean -+gnome_rr_config_apply (GnomeRRConfig *config, -+ GnomeRRScreen *screen, -+ GError **error) - { - CrtcAssignment *assignment; - GnomeOutputInfo **outputs; - gboolean result = FALSE; - -- outputs = make_outputs (conf); -+ outputs = make_outputs (config); - -- assignment = crtc_assignment_new (screen, outputs); -+ assignment = crtc_assignment_new (screen, outputs, error); - - outputs_free (outputs); - - if (assignment) - { -- if (crtc_assignment_apply (assignment)) -+ if (crtc_assignment_apply (assignment, error)) - result = TRUE; - - crtc_assignment_free (assignment); -@@ -1064,44 +1186,42 @@ apply_configuration (GnomeRRConfig *conf, GnomeRRScreen *screen) - } - - gboolean --gnome_rr_config_apply_stored (GnomeRRScreen *screen) -+gnome_rr_config_apply_stored (GnomeRRScreen *screen, GError **error) - { -- GnomeRRConfig **configs; -- GnomeRRConfig *current; -- GnomeRRConfig *found; -- gboolean result = TRUE; -+ GnomeRRConfig *stored; -+ GError *my_error; - -- if (!screen) -- return FALSE; -+ g_return_val_if_fail (screen != NULL, FALSE); -+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE); - -- configs = configurations_read (NULL); /* NULL-GError */ -+ my_error = NULL; -+ if (!gnome_rr_screen_refresh (screen, &my_error)) { -+ if (my_error) { -+ g_propagate_error (error, my_error); -+ return FALSE; /* This is a genuine error */ -+ } - -- gnome_rr_screen_refresh (screen); -- -- current = gnome_rr_config_new_current (screen); -+ /* This means the screen didn't change, so just proceed */ -+ } - -- if (configs) -+ stored = gnome_rr_config_new_stored (screen, error); -+ -+ if (stored) - { -- if ((found = gnome_rr_config_find (configs, current))) -- { -- apply_configuration (found, screen); -+ gboolean result; - -- result = TRUE; -- } -- else -- { -- result = FALSE; -- } -+ result = gnome_rr_config_apply (stored, screen, error); -+ -+ gnome_rr_config_free (stored); - -- configurations_free (configs); -+ return result; -+ } -+ else -+ { -+ return FALSE; - } -- -- gnome_rr_config_free (current); -- -- return result; - } - -- - /* - * CRTC assignment - */ -@@ -1214,6 +1334,11 @@ crtc_assignment_free (CrtcAssignment *assign) - g_free (assign); - } - -+typedef struct { -+ gboolean has_error; -+ GError **error; -+} ConfigureCrtcState; -+ - static void - configure_crtc (gpointer key, - gpointer value, -@@ -1221,13 +1346,19 @@ configure_crtc (gpointer key, - { - GnomeRRCrtc *crtc = key; - CrtcInfo *info = value; -- -- gnome_rr_crtc_set_config (crtc, -- info->x, info->y, -- info->mode, -- info->rotation, -- (GnomeRROutput **)info->outputs->pdata, -- info->outputs->len); -+ ConfigureCrtcState *state = data; -+ -+ if (state->has_error) -+ return; -+ -+ if (!gnome_rr_crtc_set_config (crtc, -+ info->x, info->y, -+ info->mode, -+ info->rotation, -+ (GnomeRROutput **)info->outputs->pdata, -+ info->outputs->len, -+ state->error)) -+ state->has_error = TRUE; - } - - static gboolean -@@ -1368,7 +1499,7 @@ get_required_virtual_size (CrtcAssignment *assign, int *width, int *height) - } - - static CrtcAssignment * --crtc_assignment_new (GnomeRRScreen *screen, GnomeOutputInfo **outputs) -+crtc_assignment_new (GnomeRRScreen *screen, GnomeOutputInfo **outputs, GError **error) - { - CrtcAssignment *assignment = g_new0 (CrtcAssignment, 1); - -@@ -1388,6 +1519,15 @@ crtc_assignment_new (GnomeRRScreen *screen, GnomeOutputInfo **outputs) - if (width < min_width || width > max_width || - height < min_height || height > max_height) - { -+ g_set_error (error, GNOME_RR_ERROR, GNOME_RR_ERROR_BOUNDS_ERROR, -+ /* Translators: the "requested", "minimum", and -+ * "maximum" words here are not keywords; please -+ * translate them as usual. */ -+ _("required virtual size does not fit available size: " -+ "requested=(%d, %d), minimum=(%d, %d), maximum=(%d, %d)"), -+ width, height, -+ min_width, min_height, -+ max_width, max_height); - goto fail; - } - -@@ -1395,6 +1535,9 @@ crtc_assignment_new (GnomeRRScreen *screen, GnomeOutputInfo **outputs) - - return assignment; - } -+ else -+ g_set_error (error, GNOME_RR_ERROR, GNOME_RR_ERROR_CRTC_ASSIGNMENT, -+ _("could not find a suitable configuration of screens")); - - fail: - crtc_assignment_free (assignment); -@@ -1403,7 +1546,7 @@ fail: - } - - static gboolean --crtc_assignment_apply (CrtcAssignment *assign) -+crtc_assignment_apply (CrtcAssignment *assign, GError **error) - { - GnomeRRCrtc **all_crtcs = gnome_rr_screen_list_crtcs (assign->screen); - int width, height; -@@ -1425,6 +1568,8 @@ crtc_assignment_apply (CrtcAssignment *assign) - width = MIN (max_width, width); - height = MAX (min_height, height); - height = MIN (max_height, height); -+ -+ /* FMQ: do we need to check the sizes instead of clamping them? */ - - /* Turn off all crtcs that are currently displaying outside the new screen, - * or are not used in the new setup -@@ -1452,7 +1597,7 @@ crtc_assignment_apply (CrtcAssignment *assign) - - if (x + w > width || y + h > height || !g_hash_table_lookup (assign->info, crtc)) - { -- if (!gnome_rr_crtc_set_config (crtc, 0, 0, NULL, GNOME_RR_ROTATION_0, NULL, 0)) -+ if (!gnome_rr_crtc_set_config (crtc, 0, 0, NULL, GNOME_RR_ROTATION_0, NULL, 0, error)) - { - success = FALSE; - break; -@@ -1473,9 +1618,16 @@ crtc_assignment_apply (CrtcAssignment *assign) - - if (success) - { -+ ConfigureCrtcState state; -+ - gnome_rr_screen_set_size (assign->screen, width, height, width_mm, height_mm); -+ -+ state.has_error = FALSE; -+ state.error = error; - -- g_hash_table_foreach (assign->info, configure_crtc, NULL); -+ g_hash_table_foreach (assign->info, configure_crtc, &state); -+ -+ success = !state.has_error; - } - - return success; -diff --git a/libgnome-desktop/gnome-rr.c b/libgnome-desktop/gnome-rr.c -index 6a37d32..109b89e 100644 ---- a/libgnome-desktop/gnome-rr.c -+++ b/libgnome-desktop/gnome-rr.c -@@ -24,6 +24,8 @@ - - #define GNOME_DESKTOP_USE_UNSTABLE_API - -+#include -+#include - #include "libgnomeui/gnome-rr.h" - #include - #include -@@ -50,6 +52,8 @@ struct ScreenInfo - GnomeRRMode ** modes; - - GnomeRRScreen * screen; -+ -+ GnomeRRMode ** clone_modes; - }; - - struct GnomeRRScreen -@@ -118,14 +122,16 @@ struct GnomeRRMode - static GnomeRRCrtc * crtc_new (ScreenInfo *info, - RRCrtc id); - static void crtc_free (GnomeRRCrtc *crtc); --static void crtc_initialize (GnomeRRCrtc *crtc, -- XRRScreenResources *res); -+static gboolean crtc_initialize (GnomeRRCrtc *crtc, -+ XRRScreenResources *res, -+ GError **error); - - /* GnomeRROutput */ - static GnomeRROutput *output_new (ScreenInfo *info, - RROutput id); --static void output_initialize (GnomeRROutput *output, -- XRRScreenResources *res); -+static gboolean output_initialize (GnomeRROutput *output, -+ XRRScreenResources *res, -+ GError **error); - static void output_free (GnomeRROutput *output); - - /* GnomeRRMode */ -@@ -136,6 +142,22 @@ static void mode_initialize (GnomeRRMode *mode, - static void mode_free (GnomeRRMode *mode); - - -+/* Errors */ -+ -+/** -+ * gnome_rr_error_quark: -+ * -+ * Returns the #GQuark that will be used for #GError values returned by the -+ * GnomeRR API. -+ * -+ * Return value: a #GQuark used to identify errors coming from the GnomeRR API. -+ */ -+GQuark -+gnome_rr_error_quark (void) -+{ -+ return g_quark_from_static_string ("gnome-rr-error-quark"); -+} -+ - /* Screen */ - static GnomeRROutput * - gnome_rr_output_by_id (ScreenInfo *info, RROutput id) -@@ -222,14 +244,90 @@ screen_info_free (ScreenInfo *info) - mode_free (*mode); - g_free (info->modes); - } -+ -+ if (info->clone_modes) -+ { -+ /* The modes themselves were freed above */ -+ g_free (info->clone_modes); -+ } - - g_free (info); - } - - static gboolean -+has_similar_mode (GnomeRROutput *output, GnomeRRMode *mode) -+{ -+ int i; -+ GnomeRRMode **modes = gnome_rr_output_list_modes (output); -+ int width = gnome_rr_mode_get_width (mode); -+ int height = gnome_rr_mode_get_height (mode); -+ -+ for (i = 0; modes[i] != NULL; ++i) -+ { -+ GnomeRRMode *m = modes[i]; -+ -+ if (gnome_rr_mode_get_width (m) == width && -+ gnome_rr_mode_get_height (m) == height) -+ { -+ return TRUE; -+ } -+ } -+ -+ return FALSE; -+} -+ -+static void -+gather_clone_modes (ScreenInfo *info) -+{ -+ int i; -+ GPtrArray *result = g_ptr_array_new (); -+ -+ for (i = 0; info->outputs[i] != NULL; ++i) -+ { -+ int j; -+ GnomeRROutput *output1, *output2; -+ -+ output1 = info->outputs[i]; -+ -+ if (!output1->connected) -+ continue; -+ -+ for (j = 0; output1->modes[j] != NULL; ++j) -+ { -+ GnomeRRMode *mode = output1->modes[j]; -+ gboolean valid; -+ int k; -+ -+ valid = TRUE; -+ for (k = 0; info->outputs[k] != NULL; ++k) -+ { -+ output2 = info->outputs[k]; -+ -+ if (!output2->connected) -+ continue; -+ -+ if (!has_similar_mode (output2, mode)) -+ { -+ valid = FALSE; -+ break; -+ } -+ } -+ -+ if (valid) -+ g_ptr_array_add (result, mode); -+ } -+ } -+ -+ g_ptr_array_add (result, NULL); -+ -+ info->clone_modes = (GnomeRRMode **)g_ptr_array_free (result, FALSE); -+} -+ -+static gboolean - fill_out_screen_info (Display *xdisplay, - Window xroot, -- ScreenInfo *info) -+ ScreenInfo *info, -+ GError **error) - { - XRRScreenResources *resources; - -@@ -244,14 +342,18 @@ fill_out_screen_info (Display *xdisplay, - &(info->max_width), - &(info->max_height))) { - /* XRR caught an error */ -- return False; -+ g_set_error (error, GNOME_RR_ERROR, GNOME_RR_ERROR_RANDR_ERROR, -+ _("could not get the range of screen sizes")); -+ return FALSE; - } - - gdk_flush (); - if (gdk_error_trap_pop ()) - { - /* Unhandled X Error was generated */ -- return False; -+ g_set_error (error, GNOME_RR_ERROR, GNOME_RR_ERROR_UNKNOWN, -+ _("unhandled X error while getting the range of screen sizes")); -+ return FALSE; - } - - #if 0 -@@ -311,10 +413,16 @@ fill_out_screen_info (Display *xdisplay, - - /* Initialize */ - for (crtc = info->crtcs; *crtc; ++crtc) -- crtc_initialize (*crtc, resources); -+ { -+ if (!crtc_initialize (*crtc, resources, error)) -+ return FALSE; -+ } - - for (output = info->outputs; *output; ++output) -- output_initialize (*output, resources); -+ { -+ if (!output_initialize (*output, resources, error)) -+ return FALSE; -+ } - - for (i = 0; i < resources->nmode; ++i) - { -@@ -322,6 +430,8 @@ fill_out_screen_info (Display *xdisplay, - - mode_initialize (mode, &(resources->modes[i])); - } -+ -+ gather_clone_modes (info); - - return TRUE; - } -@@ -330,13 +440,14 @@ fill_out_screen_info (Display *xdisplay, - #if 0 - g_print ("Couldn't get screen resources\n"); - #endif -- -+ g_set_error (error, GNOME_RR_ERROR, GNOME_RR_ERROR_RANDR_ERROR, -+ _("could not get the screen resources (CRTCs, outputs, modes)")); - return FALSE; - } - } - - static ScreenInfo * --screen_info_new (GnomeRRScreen *screen) -+screen_info_new (GnomeRRScreen *screen, GError **error) - { - ScreenInfo *info = g_new0 (ScreenInfo, 1); - -@@ -347,36 +458,36 @@ screen_info_new (GnomeRRScreen *screen) - info->modes = NULL; - info->screen = screen; - -- if (fill_out_screen_info (screen->xdisplay, screen->xroot, info)) -+ if (fill_out_screen_info (screen->xdisplay, screen->xroot, info, error)) - { - return info; - } - else - { -- g_free (info); -+ screen_info_free (info); - return NULL; - } - } - - static gboolean --screen_update (GnomeRRScreen *screen, gboolean force_callback) -+screen_update (GnomeRRScreen *screen, gboolean force_callback, GError **error) - { - ScreenInfo *info; - gboolean changed = FALSE; - - g_assert (screen != NULL); -- -- info = screen_info_new (screen); -- if (info) -- { -- if (info->resources->configTimestamp != screen->info->resources->configTimestamp) -+ -+ info = screen_info_new (screen, error); -+ if (!info) -+ return FALSE; -+ -+ if (info->resources->configTimestamp != screen->info->resources->configTimestamp) - changed = TRUE; - -- screen_info_free (screen->info); -+ screen_info_free (screen->info); - -- screen->info = info; -- } -- -+ screen->info = info; -+ - if ((changed || force_callback) && screen->callback) - screen->callback (screen, screen->data); - -@@ -404,7 +515,7 @@ screen_on_event (GdkXEvent *xevent, - /* FIXME: we may need to be more discriminating in - * what causes 'changed' events - */ -- screen_update (screen, TRUE); -+ screen_update (screen, TRUE, NULL); /* NULL-GError */ - } - - /* Pass the event on to GTK+ */ -@@ -417,11 +528,14 @@ screen_on_event (GdkXEvent *xevent, - GnomeRRScreen * - gnome_rr_screen_new (GdkScreen *gdk_screen, - GnomeRRScreenChanged callback, -- gpointer data) -+ gpointer data, -+ GError **error) - { - Display *dpy = GDK_SCREEN_XDISPLAY (gdk_screen); - int event_base; - int ignore; -+ -+ g_return_val_if_fail (error == NULL || *error == NULL, NULL); - - if (XRRQueryExtension (dpy, &event_base, &ignore)) - { -@@ -438,7 +552,7 @@ gnome_rr_screen_new (GdkScreen *gdk_screen, - - screen->randr_event_base = event_base; - -- screen->info = screen_info_new (screen); -+ screen->info = screen_info_new (screen, error); - - if (!screen->info) { - g_free (screen); -@@ -459,8 +573,13 @@ gnome_rr_screen_new (GdkScreen *gdk_screen, - gdk_window_add_filter (screen->gdk_root, screen_on_event, screen); - return screen; - } -- -- return NULL; -+ else -+ { -+ g_set_error (error, GNOME_RR_ERROR, GNOME_RR_ERROR_NO_RANDR_EXTENSION, -+ _("RANDR extension is not present")); -+ -+ return NULL; -+ } - } - - void -@@ -511,10 +630,25 @@ gnome_rr_screen_get_ranges (GnomeRRScreen *screen, - *max_height = screen->info->max_height; - } - -+/** -+ * gnome_rr_screen_refresh -+ * @screen: a #GnomeRRScreen -+ * @error: location to store error, or %NULL -+ * -+ * Refreshes the screen configuration, and calls the screen's callback if it -+ * exists and if the screen's configuration changed. -+ * -+ * Return value: TRUE if the screen's configuration changed; otherwise, the -+ * function returns FALSE and a NULL error if the configuration didn't change, -+ * or FALSE and a non-NULL error if there was an error while refreshing the -+ * configuration. -+ */ - gboolean --gnome_rr_screen_refresh (GnomeRRScreen *screen) -+gnome_rr_screen_refresh (GnomeRRScreen *screen, -+ GError **error) - { -- return screen_update (screen, FALSE); -+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE); -+ return screen_update (screen, FALSE, error); - } - - GnomeRRMode ** -@@ -526,6 +660,15 @@ gnome_rr_screen_list_modes (GnomeRRScreen *screen) - return screen->info->modes; - } - -+GnomeRRMode ** -+gnome_rr_screen_list_clone_modes (GnomeRRScreen *screen) -+{ -+ g_return_val_if_fail (screen != NULL, NULL); -+ g_return_val_if_fail (screen->info != NULL, NULL); -+ -+ return screen->info->clone_modes; -+} -+ - GnomeRRCrtc ** - gnome_rr_screen_list_crtcs (GnomeRRScreen *screen) - { -@@ -647,8 +790,8 @@ read_edid_data (GnomeRROutput *output) - return NULL; - } - --static void --output_initialize (GnomeRROutput *output, XRRScreenResources *res) -+static gboolean -+output_initialize (GnomeRROutput *output, XRRScreenResources *res, GError **error) - { - XRROutputInfo *info = XRRGetOutputInfo ( - DISPLAY (output), res, output->id); -@@ -661,8 +804,11 @@ output_initialize (GnomeRROutput *output, XRRScreenResources *res) - - if (!info || !output->info) - { -- /* FIXME */ -- return; -+ /* FIXME: see the comment in crtc_initialize() */ -+ g_set_error (error, GNOME_RR_ERROR, GNOME_RR_ERROR_RANDR_ERROR, -+ _("could not get information about output %d"), -+ (int) output->id); -+ return FALSE; - } - - output->name = g_strdup (info->name); /* FIXME: what is nameLen used for? */ -@@ -714,6 +860,8 @@ output_initialize (GnomeRROutput *output, XRRScreenResources *res) - output->edid_data = read_edid_data (output); - - XRRFreeOutputInfo (info); -+ -+ return TRUE; - } - - static void -@@ -927,22 +1075,38 @@ gnome_rr_crtc_set_config (GnomeRRCrtc *crtc, - GnomeRRMode *mode, - GnomeRRRotation rotation, - GnomeRROutput **outputs, -- int n_outputs) -+ int n_outputs, -+ GError **error) - { - ScreenInfo *info; - GArray *output_ids; -+ Status status; - gboolean result; - int i; - - g_return_val_if_fail (crtc != NULL, FALSE); - g_return_val_if_fail (mode != NULL || outputs == NULL || n_outputs == 0, FALSE); -+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE); - - info = crtc->info; - - if (mode) - { -- g_return_val_if_fail (x + mode->width <= info->max_width, FALSE); -- g_return_val_if_fail (y + mode->height <= info->max_height, FALSE); -+ if (x + mode->width > info->max_width -+ || y + mode->height > info->max_height) -+ { -+ g_set_error (error, GNOME_RR_ERROR, GNOME_RR_ERROR_BOUNDS_ERROR, -+ /* Translators: the "position", "size", and "maximum" -+ * words here are not keywords; please translate them -+ * as usual. */ -+ _("requested position/size for CRTC %d is outside the allowed limit: " -+ "position=(%d, %d), size=(%d, %d), maximum=(%d, %d)"), -+ (int) crtc->id, -+ x, y, -+ mode->width, mode->height, -+ info->max_width, info->max_height); -+ return FALSE; -+ } - } - - output_ids = g_array_new (FALSE, FALSE, sizeof (RROutput)); -@@ -953,15 +1117,24 @@ gnome_rr_crtc_set_config (GnomeRRCrtc *crtc, - g_array_append_val (output_ids, outputs[i]->id); - } - -- result = XRRSetCrtcConfig (DISPLAY (crtc), info->resources, crtc->id, -+ status = XRRSetCrtcConfig (DISPLAY (crtc), info->resources, crtc->id, - CurrentTime, - x, y, - mode ? mode->id : None, - xrotation_from_rotation (rotation), - (RROutput *)output_ids->data, -- output_ids->len) == RRSetConfigSuccess; -+ output_ids->len); - - g_array_free (output_ids, TRUE); -+ -+ if (status == RRSetConfigSuccess) -+ result = TRUE; -+ else { -+ result = FALSE; -+ g_set_error (error, GNOME_RR_ERROR, GNOME_RR_ERROR_RANDR_ERROR, -+ _("could not set the configuration for CRTC %d"), -+ (int) crtc->id); -+ } - - return result; - } -@@ -1049,9 +1222,10 @@ crtc_new (ScreenInfo *info, RROutput id) - return crtc; - } - --static void -+static gboolean - crtc_initialize (GnomeRRCrtc *crtc, -- XRRScreenResources *res) -+ XRRScreenResources *res, -+ GError **error) - { - XRRCrtcInfo *info = XRRGetCrtcInfo (DISPLAY (crtc), res, crtc->id); - GPtrArray *a; -@@ -1064,7 +1238,12 @@ crtc_initialize (GnomeRRCrtc *crtc, - if (!info) - { - /* FIXME: We need to reaquire the screen resources */ -- return; -+ /* FIXME: can we actually catch BadRRCrtc, and does it make sense to emit that? */ -+ -+ g_set_error (error, GNOME_RR_ERROR, GNOME_RR_ERROR_RANDR_ERROR, -+ _("could not get information about CRTC %d"), -+ (int) crtc->id); -+ return FALSE; - } - - /* GnomeRRMode */ -@@ -1102,6 +1281,8 @@ crtc_initialize (GnomeRRCrtc *crtc, - crtc->rotations = gnome_rr_rotation_from_xrotation (info->rotations); - - XRRFreeCrtcInfo (info); -+ -+ return TRUE; - } - - static void -diff --git a/libgnome-desktop/libgnomeui/gnome-rr-config.h b/libgnome-desktop/libgnomeui/gnome-rr-config.h -index 6a8302d..a59db55 100644 ---- a/libgnome-desktop/libgnomeui/gnome-rr-config.h -+++ b/libgnome-desktop/libgnomeui/gnome-rr-config.h -@@ -34,6 +34,13 @@ - typedef struct GnomeOutputInfo GnomeOutputInfo; - typedef struct GnomeRRConfig GnomeRRConfig; - -+/* FIXME: -+ * -+ * This structure is a Frankenstein monster where all of the fields -+ * are generated by the system, but some of them can be changed by -+ * the client. -+ */ -+ - struct GnomeOutputInfo - { - char * name; -@@ -66,14 +73,28 @@ struct GnomeRRConfig - }; - - GnomeRRConfig *gnome_rr_config_new_current (GnomeRRScreen *screen); -+GnomeRRConfig *gnome_rr_config_new_stored (GnomeRRScreen *screen, -+ GError **error); - void gnome_rr_config_free (GnomeRRConfig *configuration); - gboolean gnome_rr_config_match (GnomeRRConfig *config1, - GnomeRRConfig *config2); -+gboolean gnome_rr_config_equal (GnomeRRConfig *config1, -+ GnomeRRConfig *config2); - gboolean gnome_rr_config_save (GnomeRRConfig *configuration, -- GError **err); -+ GError **error); - void gnome_rr_config_sanitize (GnomeRRConfig *configuration); --gboolean gnome_rr_config_apply_stored (GnomeRRScreen *screen); -+gboolean gnome_rr_config_apply (GnomeRRConfig *configuration, -+ GnomeRRScreen *screen, -+ GError **error); -+gboolean gnome_rr_config_apply_stored (GnomeRRScreen *screen, -+ GError **error); - gboolean gnome_rr_config_applicable (GnomeRRConfig *configuration, -- GnomeRRScreen *screen); -+ GnomeRRScreen *screen, -+ GError **error); -+ -+/* A utility function that isn't really in the spirit of this file, but I don't -+ * don't know a better place for it. -+ */ -+GnomeRRMode **gnome_rr_create_clone_modes (GnomeRRScreen *screen); - - #endif -diff --git a/libgnome-desktop/libgnomeui/gnome-rr.h b/libgnome-desktop/libgnomeui/gnome-rr.h -index 01b4f45..38b1af8 100644 ---- a/libgnome-desktop/libgnomeui/gnome-rr.h -+++ b/libgnome-desktop/libgnomeui/gnome-rr.h -@@ -48,14 +48,31 @@ typedef enum - GNOME_RR_REFLECT_Y = (1 << 5) - } GnomeRRRotation; - -+/* Error codes */ -+ -+#define GNOME_RR_ERROR (gnome_rr_error_quark ()) -+ -+GQuark gnome_rr_error_quark (void); -+ -+typedef enum { -+ GNOME_RR_ERROR_UNKNOWN, /* generic "fail" */ -+ GNOME_RR_ERROR_NO_RANDR_EXTENSION, /* RANDR extension is not present */ -+ GNOME_RR_ERROR_RANDR_ERROR, /* generic/undescribed error from the underlying XRR API */ -+ GNOME_RR_ERROR_BOUNDS_ERROR, /* requested bounds of a CRTC are outside the maximum size */ -+ GNOME_RR_ERROR_CRTC_ASSIGNMENT, /* could not assign CRTCs to outputs */ -+ GNOME_RR_ERROR_NO_MATCHING_CONFIG, /* none of the saved configurations matched the current configuration */ -+} GnomeRRError; -+ - /* GnomeRRScreen */ - GnomeRRScreen * gnome_rr_screen_new (GdkScreen *screen, - GnomeRRScreenChanged callback, -- gpointer data); -+ gpointer data, -+ GError **error); - void gnome_rr_screen_destroy (GnomeRRScreen *screen); - GnomeRROutput **gnome_rr_screen_list_outputs (GnomeRRScreen *screen); - GnomeRRCrtc ** gnome_rr_screen_list_crtcs (GnomeRRScreen *screen); - GnomeRRMode ** gnome_rr_screen_list_modes (GnomeRRScreen *screen); -+GnomeRRMode ** gnome_rr_screen_list_clone_modes (GnomeRRScreen *screen); - void gnome_rr_screen_set_size (GnomeRRScreen *screen, - int width, - int height, -@@ -63,7 +80,8 @@ void gnome_rr_screen_set_size (GnomeRRScreen *scree - int mm_height); - GnomeRRCrtc * gnome_rr_screen_get_crtc_by_id (GnomeRRScreen *screen, - guint32 id); --gboolean gnome_rr_screen_refresh (GnomeRRScreen *screen); -+gboolean gnome_rr_screen_refresh (GnomeRRScreen *screen, -+ GError **error); - GnomeRROutput * gnome_rr_screen_get_output_by_id (GnomeRRScreen *screen, - guint32 id); - GnomeRROutput * gnome_rr_screen_get_output_by_name (GnomeRRScreen *screen, -@@ -109,7 +127,8 @@ gboolean gnome_rr_crtc_set_config (GnomeRRCrtc *crtc, - GnomeRRMode *mode, - GnomeRRRotation rotation, - GnomeRROutput **outputs, -- int n_outputs); -+ int n_outputs, -+ GError **error); - gboolean gnome_rr_crtc_can_drive_output (GnomeRRCrtc *crtc, - GnomeRROutput *output); - GnomeRRMode * gnome_rr_crtc_get_current_mode (GnomeRRCrtc *crtc); -diff --git a/po/POTFILES.in b/po/POTFILES.in -index 3bf18ac..84c9122 100644 ---- a/po/POTFILES.in -+++ b/po/POTFILES.in -@@ -7,3 +7,5 @@ libgnome-desktop/display-name.c - libgnome-desktop/gnome-desktop-item.c - libgnome-desktop/gnome-ditem-edit.c - libgnome-desktop/gnome-hint.c -+libgnome-desktop/gnome-rr.c -+libgnome-desktop/gnome-rr-config.c diff --git a/gnome-desktop.changes b/gnome-desktop.changes index 7687ad6..7e65291 100644 --- a/gnome-desktop.changes +++ b/gnome-desktop.changes @@ -1,9 +1,52 @@ +------------------------------------------------------------------- +Sun Feb 1 15:46:02 EST 2009 - mboman@suse.de + +- Update to version 2.25.5: + + GnomeBG: use gdk_color_equal() instead of custom function + + GnomeRR: use XRRGetScreenResourcesCurrent instead of + XRRGetScreenResources when available (xrandr 1.3) because it's + cheaper + + GnomeBG: emit "transitioned" signal instead of "changed" signal for + new frames in a slideshow background + + GnomeBG: reorganize code a bit + + GnomeBG: add fading API to support fading between two backgrounds + + Translation updates + +------------------------------------------------------------------- +Sun Feb 1 02:10:51 CET 2009 - vuntz@novell.com + +- Update gnome-desktop-fate300461-desktop-gettext.patch: the inline + translations were ignored if they were not matching the first + language returned by g_get_language_names(), and gettext was + used. This was not the intended behavior, and made it impossible + to customize the name/comment of a launcher, eg. + +------------------------------------------------------------------- +Fri Jan 23 16:56:13 CET 2009 - vuntz@novell.com + +- Remove static libraries. +- Remove part of gnome-desktop-desktop.patch that is already + handled with %suse_update_desktop_file +- Sanitize BuildRequires and Requires. +- Minor tweaks. + +------------------------------------------------------------------- +Fri Jan 23 04:10:09 CET 2009 - vuntz@novell.com + +- Really drop gnome-desktop-foreign-for-screen.patch, fixed + upstream. + ------------------------------------------------------------------- Sat Jan 17 02:59:53 CET 2009 - crrodriguez@suse.de - remove "la" files, baby step to clean up all references to libavahi-*.la +------------------------------------------------------------------- +Sat Jan 10 13:54:07 CST 2009 - mboman@suse.de + +- Remove gnome-desktop-randr-gerror.diff. Fixed upstream + ------------------------------------------------------------------- Fri Jan 9 13:54:07 CST 2009 - federico@novell.com @@ -14,6 +57,41 @@ Fri Jan 9 13:54:07 CST 2009 - federico@novell.com - Removed gnome-desktop-randr-cloned-outputs.diff, as it is already part of the patch above. +------------------------------------------------------------------- +Tue Jan 6 13:25:52 EST 2009 - mboman@suse.de + +- Update to version 2.25.4: + + Translation updates + +------------------------------------------------------------------- +Sat Dec 20 10:08:21 EST 2008 - mboman@suse.de + +- Update to version 2.25.3: + + libgnome-desktop + - GnomeRR: plug leaks + - GnomeRR: add API-breaking error reporting API + - GnomeBG: fix potential crash with some empty slideshow + - Build fixes + + Translation updates + +------------------------------------------------------------------- +Sun Dec 14 11:03:00 EST 2008 - mboman@suse.de + +- Update to version 2.25.2: + + libgnome-desktop + - GnomeDesktopThumbnail: reenable check for preview::icon + - GnomeRR: add Lenovo display name + - GnomeBG: plug a leak + - GnomeDesktopThumbnail: fix potential crash when a temporary file + cannot be created + + Misc + - Require glib 2.19.1 + - Update a bit API documentation + - Require GTK+ 2.14.0 + + Translation updates +- Remove icon-search-path.dif. Not valid due to API/ABI changes +- Remove gnome-desktop-randr-cloned-outputs.diff. Fixed upstream + ------------------------------------------------------------------- Tue Nov 11 11:03:18 CET 2008 - rodrigo@novell.com diff --git a/gnome-desktop.spec b/gnome-desktop.spec index 8fd146a..04f718b 100644 --- a/gnome-desktop.spec +++ b/gnome-desktop.spec @@ -1,5 +1,5 @@ # -# spec file for package gnome-desktop (Version 2.24.1) +# spec file for package gnome-desktop (Version 2.25.5) # # Copyright (c) 2009 SUSE LINUX Products GmbH, Nuernberg, Germany. # @@ -19,32 +19,33 @@ Name: gnome-desktop -BuildRequires: fdupes gnome-common gnome-doc-utils gnome-doc-utils-devel -BuildRequires: gtk-doc intltool libgnomeui-devel perl-XML-Parser -BuildRequires: scrollkeeper startup-notification-devel +BuildRequires: fdupes +BuildRequires: gconf2-devel +BuildRequires: gnome-common +BuildRequires: gnome-doc-utils-devel +BuildRequires: gtk-doc +BuildRequires: gtk2-devel +BuildRequires: intltool +BuildRequires: scrollkeeper +BuildRequires: startup-notification-devel BuildRequires: update-desktop-files License: GNU Free Documentation License, Version 1.1 (GFDL 1.1); GPL v2 or later; LGPL v2.1 or later Group: System/GUI/GNOME Obsoletes: gnome-core -Version: 2.24.1 -Release: 6 +Version: 2.25.5 +Release: 1 Summary: The GNOME Desktop API Library Source: %{name}-%{version}.tar.bz2 Url: http://www.gnome.org BuildRoot: %{_tmppath}/%{name}-%{version}-build -Patch: icon-search-path.dif Patch1: X-KDE-SubstituteUID.dif Patch2: gnome-desktop-desktop.patch # PATCH-FEATURE-OPENSUSE gnome-desktop-recently-used-apps.patch -- Add launched .desktop files to recently used apps. Patch3: gnome-desktop-recently-used-apps.patch # PATCH-FEATURE-OPENSUSE gnome-desktop-fate300461-desktop-gettext.patch fate300461 vuntz@novell.com -- Look for translation of desktop entry strings via gettext Patch5: gnome-desktop-fate300461-desktop-gettext.patch -# PATCH-FIX-UPSTREAM gnome-desktop-foreign-for-screen.patch bgo#555701 rodrigo@novell.com -Patch7: gnome-desktop-foreign-for-screen.patch -# PATCH-FEATURE-UPSTREAM gnome-desktop-randr-gerror.diff federico@novell.com - Add GError reporting to the GnomeRR API for RANDR -Patch8: gnome-desktop-randr-gerror.diff Requires: %{name}-lang = %{version} -Requires: libgnome-desktop-2-7 = %{version} +Requires: libgnome-desktop-2-11 = %{version} %description This package contains the libgnome-desktop library that contains APIs @@ -66,13 +67,13 @@ Authors: Havoc Pennington Anders Carlsson -%package -n libgnome-desktop-2-7 +%package -n libgnome-desktop-2-11 License: GNU Free Documentation License, Version 1.1 (GFDL 1.1); GPL v2 or later; LGPL v2.1 or later Summary: The GNOME Desktop API Library Group: System/GUI/GNOME Requires: %{name} >= %{version} -%description -n libgnome-desktop-2-7 +%description -n libgnome-desktop-2-11 This package contains the libgnome-desktop library that contains APIs that really belong in libgnome/libgnomeui but have not seen enough testing or development to be considered stable. Use them at your own @@ -96,7 +97,7 @@ Authors: License: LGPL v2.1 or later Summary: Include Files and Libraries mandatory for Development Group: Development/Libraries/GNOME -Requires: %{name} = %{version} gtk2-devel libgnomeui-devel libopenssl-devel startup-notification-devel +Requires: %{name} = %{version} gconf2-devel gtk2-devel startup-notification-devel %description devel This package contains all necessary include files and libraries needed @@ -133,13 +134,10 @@ Authors: %lang_package %prep %setup -q -%patch -p1 %patch1 %patch2 -p0 %patch3 -p1 -%patch5 -p1 -%patch7 -p1 -%patch8 -p1 +%patch5 -p0 %build autoreconf -f -i @@ -147,7 +145,6 @@ export CFLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing" %configure --with-pic\ --disable-static\ --disable-scrollkeeper\ - --with-kde-datadir=/opt/kde3\ --with-gnome-distributor="SUSE" make %{?jobs:-j%jobs} @@ -155,20 +152,18 @@ make %{?jobs:-j%jobs} %makeinstall %find_lang %{name}-2.0 %find_lang fdl %{name}-2.0.lang -# This no longer seems to exist. -# %find_lang gnome-feedback %{name}-2.0.lang %find_lang gpl %{name}-2.0.lang %find_lang lgpl %{name}-2.0.lang %suse_update_desktop_file gnome-about Documentation -%fdupes $RPM_BUILD_ROOT %{__rm} -vf %{buildroot}%{_libdir}/*.la +%fdupes $RPM_BUILD_ROOT %clean rm -rf $RPM_BUILD_ROOT -%post -n libgnome-desktop-2-7 -p /sbin/ldconfig +%post -n libgnome-desktop-2-11 -p /sbin/ldconfig -%postun -n libgnome-desktop-2-7 -p /sbin/ldconfig +%postun -n libgnome-desktop-2-11 -p /sbin/ldconfig %files %defattr (-, root, root) @@ -176,16 +171,21 @@ rm -rf $RPM_BUILD_ROOT %{_bindir}/* %{_datadir}/applications/gnome-about.desktop %{_datadir}/gnome-about -%{_datadir}/omf/* +%doc %{_datadir}/omf/* %{_datadir}/pixmaps/*.png %{_datadir}/pixmaps/*.xpm %doc %{_mandir}/man?/*.* -%files -n libgnome-desktop-2-7 +%files -n libgnome-desktop-2-11 %defattr(-, root, root) %{_libdir}/*.so.* %files lang -f %{name}-2.0.lang +## ha/ig does not exist in Factory currently +##%if %suse_version <= 1110 +# exclude locales which don't exist on old versions of openSUSE +%exclude %{_datadir}/locale/ig/LC_MESSAGES/* +##%endif %files devel %defattr (-, root, root) @@ -198,9 +198,37 @@ rm -rf $RPM_BUILD_ROOT %{_datadir}/gtk-doc/html/gnome-desktop %changelog -* Sat Jan 17 2009 crrodriguez@suse.de +* Sun Feb 01 2009 mboman@suse.de +- Update to version 2.25.5: + + GnomeBG: use gdk_color_equal() instead of custom function + + GnomeRR: use XRRGetScreenResourcesCurrent instead of + XRRGetScreenResources when available (xrandr 1.3) because it's + cheaper + + GnomeBG: emit "transitioned" signal instead of "changed" signal for + new frames in a slideshow background + + GnomeBG: reorganize code a bit + + GnomeBG: add fading API to support fading between two backgrounds + + Translation updates +* Sat Jan 31 2009 vuntz@novell.com +- Update gnome-desktop-fate300461-desktop-gettext.patch: the inline + translations were ignored if they were not matching the first + language returned by g_get_language_names(), and gettext was + used. This was not the intended behavior, and made it impossible + to customize the name/comment of a launcher, eg. +* Fri Jan 23 2009 vuntz@novell.com +- Remove static libraries. +- Remove part of gnome-desktop-desktop.patch that is already + handled with %%suse_update_desktop_file +- Sanitize BuildRequires and Requires. +- Minor tweaks. +* Thu Jan 22 2009 vuntz@novell.com +- Really drop gnome-desktop-foreign-for-screen.patch, fixed + upstream. +* Fri Jan 16 2009 crrodriguez@suse.de - remove "la" files, baby step to clean up all references to libavahi-*.la +* Sat Jan 10 2009 mboman@suse.de +- Remove gnome-desktop-randr-gerror.diff. Fixed upstream * Fri Jan 09 2009 federico@novell.com - Added gnome-desktop-randr-gerror.diff. This adds GError reporting to the GnomeRR API, which in turn lets gnome-settings-daemon and @@ -208,12 +236,38 @@ rm -rf $RPM_BUILD_ROOT fails in multihead configuration. - Removed gnome-desktop-randr-cloned-outputs.diff, as it is already part of the patch above. +* Tue Jan 06 2009 mboman@suse.de +- Update to version 2.25.4: + + Translation updates +* Sat Dec 20 2008 mboman@suse.de +- Update to version 2.25.3: + + libgnome-desktop + - GnomeRR: plug leaks + - GnomeRR: add API-breaking error reporting API + - GnomeBG: fix potential crash with some empty slideshow + - Build fixes + + Translation updates +* Sun Dec 14 2008 mboman@suse.de +- Update to version 2.25.2: + + libgnome-desktop + - GnomeDesktopThumbnail: reenable check for preview::icon + - GnomeRR: add Lenovo display name + - GnomeBG: plug a leak + - GnomeDesktopThumbnail: fix potential crash when a temporary file + cannot be created + + Misc + - Require glib 2.19.1 + - Update a bit API documentation + - Require GTK+ 2.14.0 + + Translation updates +- Remove icon-search-path.dif. Not valid due to API/ABI changes +- Remove gnome-desktop-randr-cloned-outputs.diff. Fixed upstream * Tue Nov 11 2008 rodrigo@novell.com - Add upstream patch for bgo#555701 * Wed Oct 22 2008 maw@suse.de - Update to version 2.24.1: + Updated translations. -* Sat Oct 04 2008 mboman@suse.de +* Fri Oct 03 2008 mboman@suse.de - Update to version 2.24.0: + GnomeRR: don't try and set the screen size if turning off any of the CRTC's failed @@ -322,7 +376,7 @@ rm -rf $RPM_BUILD_ROOT for multilib support * Tue Apr 01 2008 vuntz@suse.de - Remove uz@cyrillic workaround (see bnc#372941) -* Fri Mar 14 2008 maw@suse.de +* Thu Mar 13 2008 maw@suse.de - Update to version 2.22.0: + Updated translations. * Tue Mar 04 2008 maw@suse.de @@ -378,7 +432,7 @@ rm -rf $RPM_BUILD_ROOT * Tue Aug 14 2007 maw@suse.de - Rename the uz@cyrillic locale directory to uz@Cyrl to avoid unowned directories. -* Wed Aug 08 2007 maw@suse.de +* Tue Aug 07 2007 maw@suse.de - Use %%fdupes - Split off a -lang subpackage - s#%%run_ldconfig#/sbin/ldconfig/ in %%post and %%postun. @@ -397,7 +451,7 @@ rm -rf $RPM_BUILD_ROOT - Removed invalid desktop Category "Application" (#254654). * Fri Apr 27 2007 sbrabec@suse.cz - Do not call meinproc (#227624). -* Thu Apr 12 2007 maw@suse.de +* Wed Apr 11 2007 maw@suse.de - Update to version 2.18.1 - Minor fixes - Updated translations for both the documentation (ar and ca) @@ -420,7 +474,7 @@ rm -rf $RPM_BUILD_ROOT * Wed Nov 15 2006 jimmyk@suse.de - Updated recently-used-apps.patch to be compatible with new recently-used format, BNC #221392. -* Fri Oct 13 2006 ro@suse.de +* Thu Oct 12 2006 ro@suse.de - added gnome-doc-utils-devel to buildreq * Mon Oct 02 2006 jhargadon@suse.de - update to version 2.16.1 @@ -501,11 +555,11 @@ rm -rf $RPM_BUILD_ROOT - Update to version 2.9.91 * Tue Feb 08 2005 sbrabec@suse.cz - Changed Categories for gnome-about (#50440). -* Sun Feb 06 2005 gekker@suse.de +* Sat Feb 05 2005 gekker@suse.de - Update to version 2.9.90.1 * Sat Jan 22 2005 gekker@suse.de - Fixing the broken build -* Fri Jan 21 2005 gekker@suse.de +* Thu Jan 20 2005 gekker@suse.de - Update to version 2.9.4 * Tue Nov 02 2004 ro@suse.de - locale rename: no -> nb diff --git a/icon-search-path.dif b/icon-search-path.dif deleted file mode 100644 index fc4f6a2..0000000 --- a/icon-search-path.dif +++ /dev/null @@ -1,99 +0,0 @@ -diff -ruN gnome-desktop-2.2.2/libgnome-desktop/gnome-desktop-item.c gnome-desktop-n/libgnome-desktop/gnome-desktop-item.c ---- gnome-desktop-2.2.2/libgnome-desktop/gnome-desktop-item.c 2003-05-14 14:40:38.000000000 +0200 -+++ gnome-desktop-n/libgnome-desktop/gnome-desktop-item.c 2003-09-15 14:55:59.000000000 +0200 -@@ -2340,6 +2340,11 @@ - static GSList *hicolor_kde_32 = NULL; - static GSList *hicolor_kde_22 = NULL; - static GSList *hicolor_kde_16 = NULL; -+static GSList *crystalsvg_kde_48 = NULL; -+static GSList *crystalsvg_kde_32 = NULL; -+static GSList *crystalsvg_kde_22 = NULL; -+static GSList *crystalsvg_kde_16 = NULL; -+ - /* XXX: maybe we don't care about locolor - static GSList *locolor_kde_48 = NULL; - static GSList *locolor_kde_32 = NULL; -@@ -2397,6 +2402,10 @@ - ADD_DIRS (hicolor, 32); - ADD_DIRS (hicolor, 22); - ADD_DIRS (hicolor, 16); -+ ADD_DIRS (crystalsvg, 48); -+ ADD_DIRS (crystalsvg, 32); -+ ADD_DIRS (crystalsvg, 22); -+ ADD_DIRS (crystalsvg, 16); - - /* XXX: maybe we don't care about locolor - ADD_DIRS (locolor, 48); -@@ -2423,6 +2432,15 @@ - g_slist_copy (hicolor_kde_22)); - list = g_slist_concat (list, - g_slist_copy (hicolor_kde_16)); -+ list = g_slist_concat (list, -+ g_slist_copy (crystalsvg_kde_48)); -+ list = g_slist_concat (list, -+ g_slist_copy (crystalsvg_kde_32)); -+ list = g_slist_concat (list, -+ g_slist_copy (crystalsvg_kde_16)); -+ list = g_slist_concat (list, -+ g_slist_copy (crystalsvg_kde_22)); -+ - } else if (size > 22) { - /* 23-32 */ - list = g_slist_concat (g_slist_copy (hicolor_kde_32), -@@ -2431,6 +2449,15 @@ - g_slist_copy (hicolor_kde_22)); - list = g_slist_concat (list, - g_slist_copy (hicolor_kde_16)); -+ list = g_slist_concat (list, -+ g_slist_copy (crystalsvg_kde_48)); -+ list = g_slist_concat (list, -+ g_slist_copy (crystalsvg_kde_32)); -+ list = g_slist_concat (list, -+ g_slist_copy (crystalsvg_kde_16)); -+ list = g_slist_concat (list, -+ g_slist_copy (crystalsvg_kde_22)); -+ - } else if (size > 16) { - /* 17-22 */ - list = g_slist_concat (g_slist_copy (hicolor_kde_22), -@@ -2439,6 +2466,15 @@ - g_slist_copy (hicolor_kde_48)); - list = g_slist_concat (list, - g_slist_copy (hicolor_kde_16)); -+ list = g_slist_concat (list, -+ g_slist_copy (crystalsvg_kde_48)); -+ list = g_slist_concat (list, -+ g_slist_copy (crystalsvg_kde_32)); -+ list = g_slist_concat (list, -+ g_slist_copy (crystalsvg_kde_16)); -+ list = g_slist_concat (list, -+ g_slist_copy (crystalsvg_kde_22)); -+ - } else { - /* 1-16 */ - list = g_slist_concat (g_slist_copy (hicolor_kde_16), -@@ -2447,6 +2483,15 @@ - g_slist_copy (hicolor_kde_32)); - list = g_slist_concat (list, - g_slist_copy (hicolor_kde_48)); -+ list = g_slist_concat (list, -+ g_slist_copy (crystalsvg_kde_48)); -+ list = g_slist_concat (list, -+ g_slist_copy (crystalsvg_kde_32)); -+ list = g_slist_concat (list, -+ g_slist_copy (crystalsvg_kde_16)); -+ list = g_slist_concat (list, -+ g_slist_copy (crystalsvg_kde_22)); -+ - } - - list = g_slist_append (list, kde_icondir); -@@ -2463,7 +2508,7 @@ - char *try_prefixes[] = { - "/usr", - "/opt/kde", -- "/opt/kde2", -+ "/opt/kde3", - "/usr/local", - "/kde", - "/kde2",