diff --git a/0001-gnome-xkb-info-Fix-adding-layouts-to-language-and-co.patch b/0001-gnome-xkb-info-Fix-adding-layouts-to-language-and-co.patch new file mode 100644 index 0000000..257d3a7 --- /dev/null +++ b/0001-gnome-xkb-info-Fix-adding-layouts-to-language-and-co.patch @@ -0,0 +1,44 @@ +From 4999cfd5fb9ff3bedef2c6bafc0b34832a94b029 Mon Sep 17 00:00:00 2001 +From: Rui Matos +Date: Thu, 28 Aug 2014 19:16:05 +0200 +Subject: [PATCH 1/2] gnome-xkb-info: Fix adding layouts to language and + country tables + +Layout->xkb_name isn't unique so we can't use it as a key in the hash +table. Layout->id is the unique identifier that we should be using, +otherwise some layouts would never get added. + +https://bugzilla.gnome.org/show_bug.cgi?id=729210 +--- + libgnome-desktop/gnome-xkb-info.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/libgnome-desktop/gnome-xkb-info.c b/libgnome-desktop/gnome-xkb-info.c +index eec1224..0cd089f 100644 +--- a/libgnome-desktop/gnome-xkb-info.c ++++ b/libgnome-desktop/gnome-xkb-info.c +@@ -367,7 +367,7 @@ add_layout_to_table (GHashTable *table, + { + GHashTable *set; + +- if (!layout->xkb_name) ++ if (!layout->id) + return; + + set = g_hash_table_lookup (table, key); +@@ -378,10 +378,10 @@ add_layout_to_table (GHashTable *table, + } + else + { +- if (g_hash_table_contains (set, layout->xkb_name)) ++ if (g_hash_table_contains (set, layout->id)) + return; + } +- g_hash_table_replace (set, layout->xkb_name, layout); ++ g_hash_table_replace (set, layout->id, layout); + } + + static void +-- +1.9.0 + diff --git a/0002-gnome-xkb-info-Apply-main-layout-locale-metadata-to-.patch b/0002-gnome-xkb-info-Apply-main-layout-locale-metadata-to-.patch new file mode 100644 index 0000000..592f7b1 --- /dev/null +++ b/0002-gnome-xkb-info-Apply-main-layout-locale-metadata-to-.patch @@ -0,0 +1,179 @@ +From 959146efdd88f20270384ee1186189310de13b1d Mon Sep 17 00:00:00 2001 +From: Rui Matos +Date: Mon, 18 Nov 2013 15:42:02 +0100 +Subject: [PATCH 2/2] gnome-xkb-info: Apply main layout locale metadata to + variants + +If a variant doesn't specify language/country metadata then we should +file it under its main layout's language/country. + +https://bugzilla.gnome.org/show_bug.cgi?id=711291 +--- + libgnome-desktop/gnome-xkb-info.c | 100 ++++++++++++++++++++++++++++---------- + 1 file changed, 74 insertions(+), 26 deletions(-) + +diff --git a/libgnome-desktop/gnome-xkb-info.c b/libgnome-desktop/gnome-xkb-info.c +index 0cd089f..480836d 100644 +--- a/libgnome-desktop/gnome-xkb-info.c ++++ b/libgnome-desktop/gnome-xkb-info.c +@@ -56,6 +56,8 @@ struct _Layout + gchar *description; + gboolean is_variant; + const Layout *main_layout; ++ GSList *iso639Ids; ++ GSList *iso3166Ids; + }; + + typedef struct _XkbOption XkbOption; +@@ -104,6 +106,8 @@ free_layout (gpointer data) + g_free (layout->xkb_name); + g_free (layout->short_desc); + g_free (layout->description); ++ g_slist_free_full (layout->iso639Ids, g_free); ++ g_slist_free_full (layout->iso3166Ids, g_free); + g_slice_free (Layout, layout); + } + +@@ -385,6 +389,60 @@ add_layout_to_table (GHashTable *table, + } + + static void ++add_layout_to_locale_tables (Layout *layout, ++ GHashTable *layouts_by_language, ++ GHashTable *layouts_by_country) ++{ ++ GSList *l, *lang_codes, *country_codes; ++ gchar *language, *country; ++ ++ lang_codes = layout->iso639Ids; ++ country_codes = layout->iso3166Ids; ++ ++ if (layout->is_variant) ++ { ++ if (!lang_codes) ++ lang_codes = layout->main_layout->iso639Ids; ++ if (!country_codes) ++ country_codes = layout->main_layout->iso3166Ids; ++ } ++ ++ for (l = lang_codes; l; l = l->next) ++ { ++ language = gnome_get_language_from_code ((gchar *) l->data, NULL); ++ if (language) ++ { ++ add_layout_to_table (layouts_by_language, language, layout); ++ g_free (language); ++ } ++ } ++ ++ for (l = country_codes; l; l = l->next) ++ { ++ country = gnome_get_country_from_code ((gchar *) l->data, NULL); ++ if (country) ++ { ++ add_layout_to_table (layouts_by_country, country, layout); ++ g_free (country); ++ } ++ } ++} ++ ++static void ++add_iso639 (Layout *layout, ++ gchar *id) ++{ ++ layout->iso639Ids = g_slist_prepend (layout->iso639Ids, id); ++} ++ ++static void ++add_iso3166 (Layout *layout, ++ gchar *id) ++{ ++ layout->iso3166Ids = g_slist_prepend (layout->iso3166Ids, id); ++} ++ ++static void + parse_end_element (GMarkupParseContext *context, + const gchar *element_name, + gpointer data, +@@ -412,6 +470,9 @@ parse_end_element (GMarkupParseContext *context, + g_hash_table_replace (priv->layouts_table, + priv->current_parser_layout->id, + priv->current_parser_layout); ++ add_layout_to_locale_tables (priv->current_parser_layout, ++ priv->layouts_by_language, ++ priv->layouts_by_country); + priv->current_parser_layout = NULL; + } + else if (strcmp (element_name, "variant") == 0) +@@ -431,12 +492,13 @@ parse_end_element (GMarkupParseContext *context, + g_hash_table_replace (priv->layouts_table, + priv->current_parser_variant->id, + priv->current_parser_variant); ++ add_layout_to_locale_tables (priv->current_parser_variant, ++ priv->layouts_by_language, ++ priv->layouts_by_country); + priv->current_parser_variant = NULL; + } + else if (strcmp (element_name, "iso639Id") == 0) + { +- gchar *language; +- + if (!priv->current_parser_iso639Id) + { + g_set_error (error, G_MARKUP_ERROR, G_MARKUP_ERROR_INVALID_CONTENT, +@@ -444,23 +506,15 @@ parse_end_element (GMarkupParseContext *context, + return; + } + +- language = gnome_get_language_from_code (priv->current_parser_iso639Id, NULL); +- if (language) +- { +- if (priv->current_parser_variant) +- add_layout_to_table (priv->layouts_by_language, language, priv->current_parser_variant); +- else if (priv->current_parser_layout) +- add_layout_to_table (priv->layouts_by_language, language, priv->current_parser_layout); +- +- g_free (language); +- } ++ if (priv->current_parser_variant) ++ add_iso639 (priv->current_parser_variant, priv->current_parser_iso639Id); ++ else if (priv->current_parser_layout) ++ add_iso639 (priv->current_parser_layout, priv->current_parser_iso639Id); + +- g_clear_pointer (&priv->current_parser_iso639Id, g_free); ++ priv->current_parser_iso639Id = NULL; + } + else if (strcmp (element_name, "iso3166Id") == 0) + { +- gchar *country; +- + if (!priv->current_parser_iso3166Id) + { + g_set_error (error, G_MARKUP_ERROR, G_MARKUP_ERROR_INVALID_CONTENT, +@@ -468,18 +522,12 @@ parse_end_element (GMarkupParseContext *context, + return; + } + +- country = gnome_get_country_from_code (priv->current_parser_iso3166Id, NULL); +- if (country) +- { +- if (priv->current_parser_variant) +- add_layout_to_table (priv->layouts_by_country, country, priv->current_parser_variant); +- else if (priv->current_parser_layout) +- add_layout_to_table (priv->layouts_by_country, country, priv->current_parser_layout); +- +- g_free (country); +- } ++ if (priv->current_parser_variant) ++ add_iso3166 (priv->current_parser_variant, priv->current_parser_iso3166Id); ++ else if (priv->current_parser_layout) ++ add_iso3166 (priv->current_parser_layout, priv->current_parser_iso3166Id); + +- g_clear_pointer (&priv->current_parser_iso3166Id, g_free); ++ priv->current_parser_iso3166Id = NULL; + } + else if (strcmp (element_name, "group") == 0) + { +-- +1.9.0 + diff --git a/gnome-desktop3.spec b/gnome-desktop3.spec index afa6292..591b3fc 100644 --- a/gnome-desktop3.spec +++ b/gnome-desktop3.spec @@ -7,11 +7,13 @@ Summary: Shared code among gnome-panel, gnome-session, nautilus, etc Name: gnome-desktop3 Version: 3.10.2 -Release: 2%{?dist} +Release: 3%{?dist} URL: http://www.gnome.org Source0: http://download.gnome.org/sources/gnome-desktop/3.10/gnome-desktop-%{version}.tar.xz Patch0: 0001-default-input-sources-Switch-ja_JP-default-to-ibus-k.patch Patch1: 0001-idle-monitor-Check-if-a-monitor-exists-before-creati.patch +Patch2: 0001-gnome-xkb-info-Fix-adding-layouts-to-language-and-co.patch +Patch3: 0002-gnome-xkb-info-Apply-main-layout-locale-metadata-to-.patch License: GPLv2+ and LGPLv2+ Group: System Environment/Libraries @@ -68,6 +70,8 @@ libgnomedesktop. %setup -q -n gnome-desktop-%{version} %patch0 -p1 %patch1 -p1 +%patch2 -p1 +%patch3 -p1 %build %configure --with-pnp-ids-path="/usr/share/hwdata/pnp.ids" @@ -104,6 +108,9 @@ rm -f $RPM_BUILD_ROOT%{_libdir}/*.a %doc %{_datadir}/gtk-doc/html/gnome-desktop3/ %changelog +* Tue Oct 21 2014 Rui Matos - 3.10.2-3 +- Resolves: rhbz#1150199 - many kbd layouts not selectable + * Tue Nov 26 2013 Rui Matos - 3.10.2-2 - Resolves: rhbz#1008965 - mouse cursor sometimes disappears on login