[gnome-terminal] Fix encodings menu with unknown encoding
- From: Christian Persch <chpe src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-terminal] Fix encodings menu with unknown encoding
- Date: Tue, 10 Aug 2010 16:34:09 +0000 (UTC)
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]