[gnome-terminal] Fix encodings menu with unknown encoding



commit c1f65ee714e079b482348046c55f2dae2dac883d
Author: Christian Persch <chpe gnome org>
Date:   Tue Aug 10 18:33:19 2010 +0200

    Fix encodings menu with unknown encoding
    
    When the encoding is unknown, don't select the first entry in the menu.
    Instead, make sure the actual encoding always has its own menu entry.

 src/terminal-app.c    |   41 +++++++++++++++++++++++++++++------------
 src/terminal-app.h    |    4 ++++
 src/terminal-window.c |   12 ++++++++++--
 3 files changed, 43 insertions(+), 14 deletions(-)
---
diff --git a/src/terminal-app.c b/src/terminal-app.c
index 4eca8fa..a3aae2e 100644
--- a/src/terminal-app.c
+++ b/src/terminal-app.c
@@ -952,18 +952,7 @@ terminal_app_encoding_list_notify_cb (GConfClient *client,
       if (!charset)
         continue;
 
-      encoding = g_hash_table_lookup (app->encodings, charset);
-      if (encoding == NULL)
-        {
-          encoding = terminal_encoding_new (charset,
-                                            _("User Defined"),
-                                            TRUE,
-                                            TRUE /* scary! */);
-          g_hash_table_insert (app->encodings,
-                               (gpointer) terminal_encoding_get_id (encoding),
-                               encoding);
-        }
-
+      encoding = terminal_app_ensure_encoding (app, charset);
       if (!terminal_encoding_is_valid (encoding))
         continue;
 
@@ -2018,6 +2007,34 @@ terminal_app_get_encodings (TerminalApp *app)
 }
 
 /**
+ * terminal_app_ensure_encoding:
+ * @app:
+ * @charset:
+ *
+ * Ensures there's a #TerminalEncoding for @charset available.
+ */
+TerminalEncoding *
+terminal_app_ensure_encoding (TerminalApp *app,
+                              const char *charset)
+{
+  TerminalEncoding *encoding;
+
+  encoding = g_hash_table_lookup (app->encodings, charset);
+  if (encoding == NULL)
+    {
+      encoding = terminal_encoding_new (charset,
+                                        _("User Defined"),
+                                        TRUE,
+                                        TRUE /* scary! */);
+      g_hash_table_insert (app->encodings,
+                          (gpointer) terminal_encoding_get_id (encoding),
+                          encoding);
+    }
+
+  return encoding;
+}
+
+/**
  * terminal_app_get_active_encodings:
  *
  * Returns: a newly allocated list of newly referenced #TerminalEncoding objects.
diff --git a/src/terminal-app.h b/src/terminal-app.h
index fcaf428..5c489c3 100644
--- a/src/terminal-app.h
+++ b/src/terminal-app.h
@@ -23,6 +23,7 @@
 
 #include <gtk/gtk.h>
 
+#include "terminal-encoding.h"
 #include "terminal-screen.h"
 #include "terminal-options.h"
 
@@ -139,6 +140,9 @@ TerminalProfile* terminal_app_get_default_profile (TerminalApp *app);
 /* never returns NULL if any profiles exist, one is always supposed to */
 TerminalProfile* terminal_app_get_profile_for_new_term (TerminalApp *app);
 
+TerminalEncoding *terminal_app_ensure_encoding (TerminalApp *app,
+                                                const char *charset);
+
 GHashTable *terminal_app_get_encodings (TerminalApp *app);
 
 GSList* terminal_app_get_active_encodings (TerminalApp *app);
diff --git a/src/terminal-window.c b/src/terminal-window.c
index b3c3561..a4a8767 100644
--- a/src/terminal-window.c
+++ b/src/terminal-window.c
@@ -764,11 +764,13 @@ static void
 terminal_window_update_encoding_menu (TerminalWindow *window)
 {
   TerminalWindowPrivate *priv = window->priv;
+  TerminalApp *app;
   GtkActionGroup *action_group;
   GSList *group;
   guint n;
   GSList *encodings, *l;
   const char *charset;
+  TerminalEncoding *active_encoding;
 
   /* Remove the old UI */
   if (priv->encodings_ui_id != 0)
@@ -794,8 +796,14 @@ terminal_window_update_encoding_menu (TerminalWindow *window)
     charset = vte_terminal_get_encoding (VTE_TERMINAL (priv->active_screen));
   else
     charset = "current";
-  
-  encodings = terminal_app_get_active_encodings (terminal_app_get ());
+
+  app = terminal_app_get ();
+  active_encoding = terminal_app_ensure_encoding (app, charset);
+
+  encodings = terminal_app_get_active_encodings (app);
+
+  if (g_slist_find (encodings, active_encoding) == NULL)
+    encodings = g_slist_append (encodings, terminal_encoding_ref (active_encoding));
 
   group = NULL;
   n = 0;



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]