[gspell/wip/choose-language-context-menu: 2/2] text-view: mark the current language in the language menu
- From: Sébastien Wilmet <swilmet src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gspell/wip/choose-language-context-menu: 2/2] text-view: mark the current language in the language menu
- Date: Mon, 16 May 2016 13:14:58 +0000 (UTC)
commit f9599e578e996b88aa8136f256c4ba2f82eb5454
Author: Sébastien Wilmet <swilmet gnome org>
Date: Mon May 16 15:11:47 2016 +0200
text-view: mark the current language in the language menu
gspell/gspell-text-view.c | 53 +++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 51 insertions(+), 2 deletions(-)
---
diff --git a/gspell/gspell-text-view.c b/gspell/gspell-text-view.c
index 07a7280..b9ba031 100644
--- a/gspell/gspell-text-view.c
+++ b/gspell/gspell-text-view.c
@@ -153,22 +153,71 @@ activate_language_cb (GtkWidget *menu_item,
gspell_checker_set_language (checker, lang);
}
+static const GspellLanguage *
+get_active_language (GspellTextView *gspell_view)
+{
+ GspellTextViewPrivate *priv;
+ GtkTextBuffer *gtk_buffer;
+ GspellTextBuffer *gspell_buffer;
+ GspellChecker *checker;
+
+ priv = gspell_text_view_get_instance_private (gspell_view);
+
+ if (priv->view == NULL)
+ {
+ return NULL;
+ }
+
+ gtk_buffer = gtk_text_view_get_buffer (priv->view);
+ gspell_buffer = gspell_text_buffer_get_from_gtk_text_buffer (gtk_buffer);
+ checker = gspell_text_buffer_get_spell_checker (gspell_buffer);
+
+ return gspell_checker_get_language (checker);
+}
+
static GtkWidget *
get_language_menu (GspellTextView *gspell_view)
{
GtkWidget *menu;
+ const GspellLanguage *active_lang;
const GList *languages;
const GList *l;
menu = gtk_menu_new ();
+ active_lang = get_active_language (gspell_view);
+
languages = gspell_language_get_available ();
for (l = languages; l != NULL; l = l->next)
{
- GtkWidget *menu_item;
const GspellLanguage *lang = l->data;
+ const gchar *lang_name;
+ GtkWidget *menu_item;
+
+ lang_name = gspell_language_get_name (lang);
+
+ if (lang == active_lang)
+ {
+ /* Do not create a group. Just mark the current language
+ * as active.
+ *
+ * With a group, the first language in the list gets
+ * activated, which changes the GspellChecker language
+ * before we arrive to the active_lang.
+ *
+ * Also, having a bullet only for the active_lang is
+ * sufficient (to be like in Firefox), the menu is
+ * anyway ephemeral. No need to have an empty bullet for
+ * all the other languages.
+ */
+ menu_item = gtk_radio_menu_item_new_with_label (NULL, lang_name);
+ gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menu_item), TRUE);
+ }
+ else
+ {
+ menu_item = gtk_menu_item_new_with_label (lang_name);
+ }
- menu_item = gtk_menu_item_new_with_label (gspell_language_get_name (lang));
gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
g_object_set_data (G_OBJECT (menu_item),
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]