[gimp] app: reuse GimpLanguageComboBox to show available manual languages.
- From: Jehan Pagès <jehanp src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] app: reuse GimpLanguageComboBox to show available manual languages.
- Date: Tue, 3 Oct 2017 18:51:21 +0000 (UTC)
commit 66081969783a58060deaacc320fba2fdc3802b2b
Author: Jehan <jehan girinstud io>
Date: Tue Oct 3 01:52:35 2017 +0200
app: reuse GimpLanguageComboBox to show available manual languages.
Better factorize by reusing code rather than recreating a combo box
which does basically the same thing. I only added a boolean parameter to
retrieve only the sublist of manual language.
It also takes advantage of the self-translated language names from
initialization.
app/widgets/gimphelp.c | 196 +++++++++++++-----------------------
app/widgets/gimphelp.h | 2 +
app/widgets/gimplanguagecombobox.c | 4 +-
app/widgets/gimplanguagecombobox.h | 2 +-
app/widgets/gimppropwidgets.c | 2 +-
app/widgets/gimptranslationstore.c | 101 +++++++++++++++++--
app/widgets/gimptranslationstore.h | 2 +-
7 files changed, 173 insertions(+), 136 deletions(-)
---
diff --git a/app/widgets/gimphelp.c b/app/widgets/gimphelp.c
index 8438632..407ee2d 100644
--- a/app/widgets/gimphelp.c
+++ b/app/widgets/gimphelp.c
@@ -47,6 +47,7 @@
#include "gimphelp.h"
#include "gimphelp-ids.h"
+#include "gimplanguagecombobox.h"
#include "gimplanguagestore-parser.h"
#include "gimpmessagebox.h"
#include "gimpmessagedialog.h"
@@ -101,7 +102,6 @@ static GFile * gimp_help_get_user_manual_basedir (void);
static void gimp_help_query_alt_user_manual (GimpIdleHelp *idle_help);
-static GList * gimp_help_get_installed_manuals (Gimp *gimp);
static void gimp_help_language_combo_changed (GtkComboBox *combo,
GimpIdleHelp *idle_help);
@@ -227,6 +227,61 @@ gimp_help_user_manual_changed (Gimp *gimp)
}
}
+GList *
+gimp_help_get_installed_languages (void)
+{
+ GList *manuals = NULL;
+ GFile *basedir;
+
+ /* if GIMP2_HELP_URI is set, assume that the manual can be found there */
+ if (g_getenv ("GIMP2_HELP_URI"))
+ basedir = g_file_new_for_uri (g_getenv ("GIMP2_HELP_URI"));
+ else
+ basedir = gimp_help_get_user_manual_basedir ();
+
+ if (g_file_query_file_type (basedir, G_FILE_QUERY_INFO_NONE, NULL) ==
+ G_FILE_TYPE_DIRECTORY)
+ {
+ GFileEnumerator *enumerator;
+
+ enumerator = g_file_enumerate_children (basedir,
+ G_FILE_ATTRIBUTE_STANDARD_NAME ","
+ G_FILE_ATTRIBUTE_STANDARD_TYPE,
+ G_FILE_QUERY_INFO_NONE,
+ NULL, NULL);
+
+ if (enumerator)
+ {
+ GFileInfo *info;
+
+ while ((info = g_file_enumerator_next_file (enumerator,
+ NULL, NULL)))
+ {
+ if (g_file_info_get_file_type (info) == G_FILE_TYPE_DIRECTORY)
+ {
+ GFile *locale_dir;
+ GFile *file;
+
+ locale_dir = g_file_enumerator_get_child (enumerator, info);
+ file = g_file_get_child (locale_dir, "gimp-help.xml");
+ if (g_file_query_file_type (file, G_FILE_QUERY_INFO_NONE,
+ NULL) == G_FILE_TYPE_REGULAR)
+ {
+ manuals = g_list_prepend (manuals,
+ g_strdup (g_file_info_get_name (info)));
+ }
+ g_object_unref (locale_dir);
+ g_object_unref (file);
+ }
+ g_object_unref (info);
+ }
+ g_object_unref (enumerator);
+ }
+ }
+ g_object_unref (basedir);
+
+ return manuals;
+}
/* private functions */
@@ -755,64 +810,23 @@ gimp_help_query_alt_user_manual (GimpIdleHelp *idle_help)
"in your language."));
/* Add a list of available manuals instead, if any. */
- manuals = gimp_help_get_installed_manuals (idle_help->gimp);
+ manuals = gimp_help_get_installed_languages ();
if (manuals != NULL)
{
- GtkWidget *lang_combo;
- GtkTreeStore *store;
- GtkCellRenderer *cell;
- GList *lang;
- GHashTable *languages;
- GtkTreeIter tree_iter;
-
- languages = gimp_language_store_parser_get_languages (FALSE);
+ GtkWidget *lang_combo;
+
/* Add an additional button. */
gtk_dialog_add_button (GTK_DIALOG (dialog),
_("Read Selected _Language"),
GTK_RESPONSE_YES);
/* And a dropdown list of available manuals. */
- store = gtk_tree_store_new (2, G_TYPE_STRING, G_TYPE_STRING);
-
- /* First item is for labelling. */
- gtk_tree_store_insert (store, &tree_iter, NULL, -1);
- gtk_tree_store_set (store, &tree_iter,
- 0, _("Available manuals"),
- 1, "",
- -1);
- for (lang = manuals; lang; lang = lang->next)
- {
- const gchar *localized_language;
- gchar *label = NULL;
-
- localized_language = g_hash_table_lookup (languages,
- lang->data);
- if (localized_language)
- {
- label = g_strdup_printf ("%s [%s]", localized_language,
- (gchar *) lang->data);
- }
- gtk_tree_store_insert (store, &tree_iter, NULL, -1);
- gtk_tree_store_set (store, &tree_iter,
- 0, label ? label : lang->data,
- 1, lang->data,
- -1);
- if (label)
- g_free (label);
- }
- lang_combo = gtk_combo_box_new_with_model (GTK_TREE_MODEL (store));
- g_object_unref (store);
- cell = gtk_cell_renderer_text_new ();
- gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (lang_combo), cell,
- TRUE);
- gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (lang_combo), cell,
- "text", 0, NULL);
+ lang_combo = gimp_language_combo_box_new (TRUE);
gtk_combo_box_set_active (GTK_COMBO_BOX (lang_combo), 0);
gtk_dialog_set_response_sensitive (idle_help->query_dialog,
GTK_RESPONSE_YES, FALSE);
g_signal_connect (lang_combo, "changed",
G_CALLBACK (gimp_help_language_combo_changed),
idle_help);
-
gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))),
lang_combo, TRUE, TRUE, 0);
gtk_widget_show (lang_combo);
@@ -853,90 +867,17 @@ gimp_help_query_alt_user_manual (GimpIdleHelp *idle_help)
gtk_widget_show (dialog);
}
-static GList *
-gimp_help_get_installed_manuals (Gimp *gimp)
-{
- GList *manuals = NULL;
- GFile *basedir;
-
- g_return_val_if_fail (GIMP_IS_GIMP (gimp), FALSE);
-
- /* if GIMP2_HELP_URI is set, assume that the manual can be found there */
- if (g_getenv ("GIMP2_HELP_URI"))
- basedir = g_file_new_for_uri (g_getenv ("GIMP2_HELP_URI"));
- else
- basedir = gimp_help_get_user_manual_basedir ();
-
- if (g_file_query_file_type (basedir, G_FILE_QUERY_INFO_NONE, NULL) ==
- G_FILE_TYPE_DIRECTORY)
- {
- GFileEnumerator *enumerator;
-
- enumerator = g_file_enumerate_children (basedir,
- G_FILE_ATTRIBUTE_STANDARD_NAME ","
- G_FILE_ATTRIBUTE_STANDARD_TYPE,
- G_FILE_QUERY_INFO_NONE,
- NULL, NULL);
-
- if (enumerator)
- {
- GFileInfo *info;
-
- while ((info = g_file_enumerator_next_file (enumerator,
- NULL, NULL)))
- {
- if (g_file_info_get_file_type (info) == G_FILE_TYPE_DIRECTORY)
- {
- GFile *locale_dir;
- GFile *file;
-
- locale_dir = g_file_enumerator_get_child (enumerator, info);
- file = g_file_get_child (locale_dir, "gimp-help.xml");
- if (g_file_query_file_type (file, G_FILE_QUERY_INFO_NONE,
- NULL) == G_FILE_TYPE_REGULAR)
- {
- manuals = g_list_prepend (manuals,
- g_strdup (g_file_info_get_name (info)));
- }
- g_object_unref (locale_dir);
- g_object_unref (file);
- }
- g_object_unref (info);
- }
- g_object_unref (enumerator);
- }
- }
- g_object_unref (basedir);
-
- return manuals;
-}
-
static void
gimp_help_language_combo_changed (GtkComboBox *combo,
GimpIdleHelp *idle_help)
{
- gchar *help_locales = NULL;
- GtkTreeIter iter;
-
- if (gtk_combo_box_get_active_iter (combo, &iter))
- {
- GtkTreeModel *model;
- GValue value = { 0, };
-
- model = gtk_combo_box_get_model (combo);
- gtk_tree_model_get_value (model, &iter, 1, &value);
- if (g_strcmp0 ("", g_value_get_string (&value)) != 0)
- help_locales = g_strdup_printf ("%s:",
- g_value_get_string (&value));
- g_value_unset (&value);
- }
- g_object_set (idle_help->gimp->config,
- "help-locales", help_locales? help_locales : "",
- NULL);
+ gchar *help_locales = NULL;
+ gchar *code;
- if (help_locales)
+ code = gimp_language_combo_box_get_code (GIMP_LANGUAGE_COMBO_BOX (combo));
+ if (code && g_strcmp0 ("", code) != 0)
{
- g_free (help_locales);
+ help_locales = g_strdup_printf ("%s:", code);
gtk_dialog_set_response_sensitive (idle_help->query_dialog,
GTK_RESPONSE_YES, TRUE);
}
@@ -945,4 +886,11 @@ gimp_help_language_combo_changed (GtkComboBox *combo,
gtk_dialog_set_response_sensitive (idle_help->query_dialog,
GTK_RESPONSE_YES, FALSE);
}
+ g_object_set (idle_help->gimp->config,
+ "help-locales", help_locales? help_locales : "",
+ NULL);
+
+ g_free (code);
+ if (help_locales)
+ g_free (help_locales);
}
diff --git a/app/widgets/gimphelp.h b/app/widgets/gimphelp.h
index 142fb05..110c9c3 100644
--- a/app/widgets/gimphelp.h
+++ b/app/widgets/gimphelp.h
@@ -46,4 +46,6 @@ gboolean gimp_help_user_manual_is_installed (Gimp *gimp);
void gimp_help_user_manual_changed (Gimp *gimp);
+GList * gimp_help_get_installed_languages (void);
+
#endif /* __GIMP_HELP_H__ */
diff --git a/app/widgets/gimplanguagecombobox.c b/app/widgets/gimplanguagecombobox.c
index 6d1db23..188beb2 100644
--- a/app/widgets/gimplanguagecombobox.c
+++ b/app/widgets/gimplanguagecombobox.c
@@ -65,12 +65,12 @@ gimp_language_combo_box_init (GimpLanguageComboBox *combo)
}
GtkWidget *
-gimp_language_combo_box_new (void)
+gimp_language_combo_box_new (gboolean manual_l18n)
{
GtkWidget *combo;
GtkListStore *store;
- store = gimp_translation_store_new ();
+ store = gimp_translation_store_new (manual_l18n);
combo = g_object_new (GIMP_TYPE_LANGUAGE_COMBO_BOX,
"model", store,
diff --git a/app/widgets/gimplanguagecombobox.h b/app/widgets/gimplanguagecombobox.h
index 5e5cd9e..198acc7 100644
--- a/app/widgets/gimplanguagecombobox.h
+++ b/app/widgets/gimplanguagecombobox.h
@@ -40,7 +40,7 @@ struct _GimpLanguageComboBoxClass
GType gimp_language_combo_box_get_type (void) G_GNUC_CONST;
-GtkWidget * gimp_language_combo_box_new (void);
+GtkWidget * gimp_language_combo_box_new (gboolean manual_l18n);
gchar * gimp_language_combo_box_get_code (GimpLanguageComboBox *combo);
gboolean gimp_language_combo_box_set_code (GimpLanguageComboBox *combo,
diff --git a/app/widgets/gimppropwidgets.c b/app/widgets/gimppropwidgets.c
index 23f5e8e..b95a017 100644
--- a/app/widgets/gimppropwidgets.c
+++ b/app/widgets/gimppropwidgets.c
@@ -1351,7 +1351,7 @@ gimp_prop_language_combo_box_new (GObject *config,
if (! param_spec)
return NULL;
- combo = gimp_language_combo_box_new ();
+ combo = gimp_language_combo_box_new (FALSE);
g_object_get (config,
property_name, &value,
diff --git a/app/widgets/gimptranslationstore.c b/app/widgets/gimptranslationstore.c
index bf2d54d..bd957fe 100644
--- a/app/widgets/gimptranslationstore.c
+++ b/app/widgets/gimptranslationstore.c
@@ -18,6 +18,8 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+#include "config.h"
+
#include <locale.h>
#include <string.h>
@@ -27,9 +29,17 @@
#include "widgets-types.h"
+#include "gimphelp.h"
#include "gimplanguagestore-parser.h"
#include "gimptranslationstore.h"
+#include "gimp-intl.h"
+
+enum
+{
+ PROP_0,
+ PROP_MANUAL_L18N
+};
struct _GimpTranslationStoreClass
{
@@ -39,10 +49,20 @@ struct _GimpTranslationStoreClass
struct _GimpTranslationStore
{
GimpLanguageStore parent_instance;
+
+ gboolean manual_l18n;
};
-static void gimp_translation_store_constructed (GObject *object);
+static void gimp_translation_store_constructed (GObject *object);
+static void gimp_translation_store_set_property (GObject *object,
+ guint property_id,
+ const GValue *value,
+ GParamSpec *pspec);
+static void gimp_translation_store_get_property (GObject *object,
+ guint property_id,
+ GValue *value,
+ GParamSpec *pspec);
G_DEFINE_TYPE (GimpTranslationStore, gimp_translation_store,
@@ -54,9 +74,17 @@ G_DEFINE_TYPE (GimpTranslationStore, gimp_translation_store,
static void
gimp_translation_store_class_init (GimpTranslationStoreClass *klass)
{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->constructed = gimp_translation_store_constructed;
+ object_class->set_property = gimp_translation_store_set_property;
+ object_class->get_property = gimp_translation_store_get_property;
- object_class->constructed = gimp_translation_store_constructed;
+ g_object_class_install_property (object_class, PROP_MANUAL_L18N,
+ g_param_spec_boolean ("manual-l18n", NULL, NULL,
+ FALSE,
+ GIMP_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY));
}
static void
@@ -71,19 +99,78 @@ gimp_translation_store_constructed (GObject *object)
GHashTableIter lang_iter;
gpointer code;
gpointer name;
+ GList *sublist = NULL;
lang_list = gimp_language_store_parser_get_languages (TRUE);
g_return_if_fail (lang_list != NULL);
+ if (GIMP_TRANSLATION_STORE (object)->manual_l18n)
+ sublist = gimp_help_get_installed_languages ();
+
g_hash_table_iter_init (&lang_iter, lang_list);
+ if (sublist)
+ {
+ GIMP_LANGUAGE_STORE_GET_CLASS (object)->add (GIMP_LANGUAGE_STORE (object),
+ _("Available manuals..."),
+ "");
+ }
while (g_hash_table_iter_next (&lang_iter, &code, &name))
- GIMP_LANGUAGE_STORE_GET_CLASS (object)->add (GIMP_LANGUAGE_STORE (object),
- name, code);
+ {
+ if (! sublist ||
+ g_list_find_custom (sublist, code, (GCompareFunc) g_strcmp0))
+ {
+ GIMP_LANGUAGE_STORE_GET_CLASS (object)->add (GIMP_LANGUAGE_STORE (object),
+ name, code);
+ }
+ }
+ g_list_free_full (sublist, g_free);
+}
+
+static void
+gimp_translation_store_set_property (GObject *object,
+ guint property_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ GimpTranslationStore *store = GIMP_TRANSLATION_STORE (object);
+
+ switch (property_id)
+ {
+ case PROP_MANUAL_L18N:
+ store->manual_l18n = g_value_get_boolean (value);
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ break;
+ }
+}
+
+static void
+gimp_translation_store_get_property (GObject *object,
+ guint property_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ GimpTranslationStore *store = GIMP_TRANSLATION_STORE (object);
+
+ switch (property_id)
+ {
+ case PROP_MANUAL_L18N:
+ g_value_set_boolean (value, store->manual_l18n);
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ break;
+ }
}
GtkListStore *
-gimp_translation_store_new (void)
+gimp_translation_store_new (gboolean manual_l18n)
{
- return g_object_new (GIMP_TYPE_TRANSLATION_STORE, NULL);
+ return g_object_new (GIMP_TYPE_TRANSLATION_STORE,
+ "manual-l18n", manual_l18n,
+ NULL);
}
diff --git a/app/widgets/gimptranslationstore.h b/app/widgets/gimptranslationstore.h
index 83fb509..7283b2b 100644
--- a/app/widgets/gimptranslationstore.h
+++ b/app/widgets/gimptranslationstore.h
@@ -38,7 +38,7 @@ typedef struct _GimpTranslationStoreClass GimpTranslationStoreClass;
GType gimp_translation_store_get_type (void) G_GNUC_CONST;
-GtkListStore * gimp_translation_store_new (void);
+GtkListStore * gimp_translation_store_new (gboolean manual_l18n);
#endif /* __GIMP_TRANSLATION_STORE_H__ */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]