summaryrefslogtreecommitdiff
path: root/src/terminal-encoding.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/terminal-encoding.c')
-rw-r--r--src/terminal-encoding.c868
1 files changed, 436 insertions, 432 deletions
diff --git a/src/terminal-encoding.c b/src/terminal-encoding.c
index 25d343b..ba689ce 100644
--- a/src/terminal-encoding.c
+++ b/src/terminal-encoding.c
@@ -33,7 +33,7 @@
*
* There's a list of character sets stored in mateconf, indicating
* which encodings to display in the encoding menu.
- *
+ *
* We have a pre-canned list of available encodings
* (hardcoded in the table below) that can be added to
* the encoding menu, and to give a human-readable name
@@ -44,101 +44,104 @@
* labeled "user defined" but still appears in the menu.
*/
-static const struct {
- const char *charset;
- const char *name;
-} encodings[] = {
- { "ISO-8859-1", N_("Western") },
- { "ISO-8859-2", N_("Central European") },
- { "ISO-8859-3", N_("South European") },
- { "ISO-8859-4", N_("Baltic") },
- { "ISO-8859-5", N_("Cyrillic") },
- { "ISO-8859-6", N_("Arabic") },
- { "ISO-8859-7", N_("Greek") },
- { "ISO-8859-8", N_("Hebrew Visual") },
- { "ISO-8859-8-I", N_("Hebrew") },
- { "ISO-8859-9", N_("Turkish") },
- { "ISO-8859-10", N_("Nordic") },
- { "ISO-8859-13", N_("Baltic") },
- { "ISO-8859-14", N_("Celtic") },
- { "ISO-8859-15", N_("Western") },
- { "ISO-8859-16", N_("Romanian") },
- { "UTF-8", N_("Unicode") },
- { "ARMSCII-8", N_("Armenian") },
- { "BIG5", N_("Chinese Traditional") },
- { "BIG5-HKSCS", N_("Chinese Traditional") },
- { "CP866", N_("Cyrillic/Russian") },
- { "EUC-JP", N_("Japanese") },
- { "EUC-KR", N_("Korean") },
- { "EUC-TW", N_("Chinese Traditional") },
- { "GB18030", N_("Chinese Simplified") },
- { "GB2312", N_("Chinese Simplified") },
- { "GBK", N_("Chinese Simplified") },
- { "GEORGIAN-PS", N_("Georgian") },
- { "IBM850", N_("Western") },
- { "IBM852", N_("Central European") },
- { "IBM855", N_("Cyrillic") },
- { "IBM857", N_("Turkish") },
- { "IBM862", N_("Hebrew") },
- { "IBM864", N_("Arabic") },
- { "ISO-2022-JP", N_("Japanese") },
- { "ISO-2022-KR", N_("Korean") },
- { "ISO-IR-111", N_("Cyrillic") },
- { "KOI8-R", N_("Cyrillic") },
- { "KOI8-U", N_("Cyrillic/Ukrainian") },
- { "MAC_ARABIC", N_("Arabic") },
- { "MAC_CE", N_("Central European") },
- { "MAC_CROATIAN", N_("Croatian") },
- { "MAC-CYRILLIC", N_("Cyrillic") },
- { "MAC_DEVANAGARI", N_("Hindi") },
- { "MAC_FARSI", N_("Persian") },
- { "MAC_GREEK", N_("Greek") },
- { "MAC_GUJARATI", N_("Gujarati") },
- { "MAC_GURMUKHI", N_("Gurmukhi") },
- { "MAC_HEBREW", N_("Hebrew") },
- { "MAC_ICELANDIC", N_("Icelandic") },
- { "MAC_ROMAN", N_("Western") },
- { "MAC_ROMANIAN", N_("Romanian") },
- { "MAC_TURKISH", N_("Turkish") },
- { "MAC_UKRAINIAN", N_("Cyrillic/Ukrainian") },
- { "SHIFT_JIS", N_("Japanese") },
- { "TCVN", N_("Vietnamese") },
- { "TIS-620", N_("Thai") },
- { "UHC", N_("Korean") },
- { "VISCII", N_("Vietnamese") },
- { "WINDOWS-1250", N_("Central European") },
- { "WINDOWS-1251", N_("Cyrillic") },
- { "WINDOWS-1252", N_("Western") },
- { "WINDOWS-1253", N_("Greek") },
- { "WINDOWS-1254", N_("Turkish") },
- { "WINDOWS-1255", N_("Hebrew") },
- { "WINDOWS-1256", N_("Arabic") },
- { "WINDOWS-1257", N_("Baltic") },
- { "WINDOWS-1258", N_("Vietnamese") },
+static const struct
+{
+ const char *charset;
+ const char *name;
+} encodings[] =
+{
+ { "ISO-8859-1", N_("Western") },
+ { "ISO-8859-2", N_("Central European") },
+ { "ISO-8859-3", N_("South European") },
+ { "ISO-8859-4", N_("Baltic") },
+ { "ISO-8859-5", N_("Cyrillic") },
+ { "ISO-8859-6", N_("Arabic") },
+ { "ISO-8859-7", N_("Greek") },
+ { "ISO-8859-8", N_("Hebrew Visual") },
+ { "ISO-8859-8-I", N_("Hebrew") },
+ { "ISO-8859-9", N_("Turkish") },
+ { "ISO-8859-10", N_("Nordic") },
+ { "ISO-8859-13", N_("Baltic") },
+ { "ISO-8859-14", N_("Celtic") },
+ { "ISO-8859-15", N_("Western") },
+ { "ISO-8859-16", N_("Romanian") },
+ { "UTF-8", N_("Unicode") },
+ { "ARMSCII-8", N_("Armenian") },
+ { "BIG5", N_("Chinese Traditional") },
+ { "BIG5-HKSCS", N_("Chinese Traditional") },
+ { "CP866", N_("Cyrillic/Russian") },
+ { "EUC-JP", N_("Japanese") },
+ { "EUC-KR", N_("Korean") },
+ { "EUC-TW", N_("Chinese Traditional") },
+ { "GB18030", N_("Chinese Simplified") },
+ { "GB2312", N_("Chinese Simplified") },
+ { "GBK", N_("Chinese Simplified") },
+ { "GEORGIAN-PS", N_("Georgian") },
+ { "IBM850", N_("Western") },
+ { "IBM852", N_("Central European") },
+ { "IBM855", N_("Cyrillic") },
+ { "IBM857", N_("Turkish") },
+ { "IBM862", N_("Hebrew") },
+ { "IBM864", N_("Arabic") },
+ { "ISO-2022-JP", N_("Japanese") },
+ { "ISO-2022-KR", N_("Korean") },
+ { "ISO-IR-111", N_("Cyrillic") },
+ { "KOI8-R", N_("Cyrillic") },
+ { "KOI8-U", N_("Cyrillic/Ukrainian") },
+ { "MAC_ARABIC", N_("Arabic") },
+ { "MAC_CE", N_("Central European") },
+ { "MAC_CROATIAN", N_("Croatian") },
+ { "MAC-CYRILLIC", N_("Cyrillic") },
+ { "MAC_DEVANAGARI", N_("Hindi") },
+ { "MAC_FARSI", N_("Persian") },
+ { "MAC_GREEK", N_("Greek") },
+ { "MAC_GUJARATI", N_("Gujarati") },
+ { "MAC_GURMUKHI", N_("Gurmukhi") },
+ { "MAC_HEBREW", N_("Hebrew") },
+ { "MAC_ICELANDIC", N_("Icelandic") },
+ { "MAC_ROMAN", N_("Western") },
+ { "MAC_ROMANIAN", N_("Romanian") },
+ { "MAC_TURKISH", N_("Turkish") },
+ { "MAC_UKRAINIAN", N_("Cyrillic/Ukrainian") },
+ { "SHIFT_JIS", N_("Japanese") },
+ { "TCVN", N_("Vietnamese") },
+ { "TIS-620", N_("Thai") },
+ { "UHC", N_("Korean") },
+ { "VISCII", N_("Vietnamese") },
+ { "WINDOWS-1250", N_("Central European") },
+ { "WINDOWS-1251", N_("Cyrillic") },
+ { "WINDOWS-1252", N_("Western") },
+ { "WINDOWS-1253", N_("Greek") },
+ { "WINDOWS-1254", N_("Turkish") },
+ { "WINDOWS-1255", N_("Hebrew") },
+ { "WINDOWS-1256", N_("Arabic") },
+ { "WINDOWS-1257", N_("Baltic") },
+ { "WINDOWS-1258", N_("Vietnamese") },
#if 0
- /* These encodings do NOT pass-through ASCII, so are always rejected.
- * FIXME: why are they in this table; or rather why do we need
- * the ASCII pass-through requirement?
- */
- { "UTF-7", N_("Unicode") },
- { "UTF-16", N_("Unicode") },
- { "UCS-2", N_("Unicode") },
- { "UCS-4", N_("Unicode") },
- { "JOHAB", N_("Korean") },
+ /* These encodings do NOT pass-through ASCII, so are always rejected.
+ * FIXME: why are they in this table; or rather why do we need
+ * the ASCII pass-through requirement?
+ */
+ { "UTF-7", N_("Unicode") },
+ { "UTF-16", N_("Unicode") },
+ { "UCS-2", N_("Unicode") },
+ { "UCS-4", N_("Unicode") },
+ { "JOHAB", N_("Korean") },
#endif
};
-typedef struct {
- GtkWidget *dialog;
- GtkListStore *base_store;
- GtkTreeView *available_tree_view;
- GtkTreeSelection *available_selection;
- GtkTreeModel *available_model;
- GtkTreeView *active_tree_view;
- GtkTreeSelection *active_selection;
- GtkTreeModel *active_model;
- GtkWidget *add_button;
- GtkWidget *remove_button;
+typedef struct
+{
+ GtkWidget *dialog;
+ GtkListStore *base_store;
+ GtkTreeView *available_tree_view;
+ GtkTreeSelection *available_selection;
+ GtkTreeModel *available_model;
+ GtkTreeView *active_tree_view;
+ GtkTreeSelection *active_selection;
+ GtkTreeModel *active_model;
+ GtkWidget *add_button;
+ GtkWidget *remove_button;
} EncodingDialogData;
static GtkWidget *encoding_dialog = NULL;
@@ -149,163 +152,164 @@ terminal_encoding_new (const char *charset,
gboolean is_custom,
gboolean force_valid)
{
- TerminalEncoding *encoding;
+ TerminalEncoding *encoding;
- encoding = g_slice_new (TerminalEncoding);
- encoding->refcount = 1;
- encoding->id = g_strdup (charset);
- encoding->name = g_strdup (display_name);
- encoding->valid = encoding->validity_checked = force_valid;
- encoding->is_custom = is_custom;
- encoding->is_active = FALSE;
+ encoding = g_slice_new (TerminalEncoding);
+ encoding->refcount = 1;
+ encoding->id = g_strdup (charset);
+ encoding->name = g_strdup (display_name);
+ encoding->valid = encoding->validity_checked = force_valid;
+ encoding->is_custom = is_custom;
+ encoding->is_active = FALSE;
- return encoding;
+ return encoding;
}
TerminalEncoding*
terminal_encoding_ref (TerminalEncoding *encoding)
{
- g_return_val_if_fail (encoding != NULL, NULL);
+ g_return_val_if_fail (encoding != NULL, NULL);
- encoding->refcount++;
- return encoding;
+ encoding->refcount++;
+ return encoding;
}
void
terminal_encoding_unref (TerminalEncoding *encoding)
{
- if (--encoding->refcount > 0)
- return;
+ if (--encoding->refcount > 0)
+ return;
- g_free (encoding->name);
- g_free (encoding->id);
- g_slice_free (TerminalEncoding, encoding);
+ g_free (encoding->name);
+ g_free (encoding->id);
+ g_slice_free (TerminalEncoding, encoding);
}
const char *
terminal_encoding_get_id (TerminalEncoding *encoding)
{
- g_return_val_if_fail (encoding != NULL, NULL);
+ g_return_val_if_fail (encoding != NULL, NULL);
- return encoding->id;
+ return encoding->id;
}
const char *
terminal_encoding_get_charset (TerminalEncoding *encoding)
{
- g_return_val_if_fail (encoding != NULL, NULL);
+ g_return_val_if_fail (encoding != NULL, NULL);
- if (strcmp (encoding->id, "current") == 0)
- {
- const char *charset;
+ if (strcmp (encoding->id, "current") == 0)
+ {
+ const char *charset;
- g_get_charset (&charset);
- return charset;
- }
+ g_get_charset (&charset);
+ return charset;
+ }
- return encoding->id;
+ return encoding->id;
}
gboolean
terminal_encoding_is_valid (TerminalEncoding *encoding)
{
- /* All of the printing ASCII characters from space (32) to the tilde (126) */
- static const char ascii_sample[] =
- " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~";
- char *converted;
- gsize bytes_read = 0, bytes_written = 0;
- GError *error = NULL;
-
- if (encoding->validity_checked)
- return encoding->valid;
-
- /* Test that the encoding is a proper superset of ASCII (which naive
- * apps are going to use anyway) by attempting to validate the text
- * using the current encoding. This also flushes out any encodings
- * which the underlying GIConv implementation can't support.
- */
- converted = g_convert (ascii_sample, sizeof (ascii_sample) - 1,
- terminal_encoding_get_charset (encoding), "UTF-8",
- &bytes_read, &bytes_written, &error);
-
- /* The encoding is only valid if ASCII passes through cleanly. */
- encoding->valid = (bytes_read == (sizeof (ascii_sample) - 1)) &&
- (converted != NULL) &&
- (strcmp (converted, ascii_sample) == 0);
+ /* All of the printing ASCII characters from space (32) to the tilde (126) */
+ static const char ascii_sample[] =
+ " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~";
+ char *converted;
+ gsize bytes_read = 0, bytes_written = 0;
+ GError *error = NULL;
+
+ if (encoding->validity_checked)
+ return encoding->valid;
+
+ /* Test that the encoding is a proper superset of ASCII (which naive
+ * apps are going to use anyway) by attempting to validate the text
+ * using the current encoding. This also flushes out any encodings
+ * which the underlying GIConv implementation can't support.
+ */
+ converted = g_convert (ascii_sample, sizeof (ascii_sample) - 1,
+ terminal_encoding_get_charset (encoding), "UTF-8",
+ &bytes_read, &bytes_written, &error);
+
+ /* The encoding is only valid if ASCII passes through cleanly. */
+ encoding->valid = (bytes_read == (sizeof (ascii_sample) - 1)) &&
+ (converted != NULL) &&
+ (strcmp (converted, ascii_sample) == 0);
#ifdef MATE_ENABLE_DEBUG
- _TERMINAL_DEBUG_IF (TERMINAL_DEBUG_ENCODINGS)
- {
- if (!encoding->valid)
- {
- _terminal_debug_print (TERMINAL_DEBUG_ENCODINGS,
- "Rejecting encoding %s as invalid:\n",
- terminal_encoding_get_charset (encoding));
- _terminal_debug_print (TERMINAL_DEBUG_ENCODINGS,
- " input \"%s\"\n",
- ascii_sample);
- _terminal_debug_print (TERMINAL_DEBUG_ENCODINGS,
- " output \"%s\" bytes read %u written %u\n",
- converted ? converted : "(null)", bytes_read, bytes_written);
- if (error)
- _terminal_debug_print (TERMINAL_DEBUG_ENCODINGS,
- " Error: %s\n",
- error->message);
- }
- else
- _terminal_debug_print (TERMINAL_DEBUG_ENCODINGS,
- "Encoding %s is valid\n\n",
- terminal_encoding_get_charset (encoding));
- }
+ _TERMINAL_DEBUG_IF (TERMINAL_DEBUG_ENCODINGS)
+ {
+ if (!encoding->valid)
+ {
+ _terminal_debug_print (TERMINAL_DEBUG_ENCODINGS,
+ "Rejecting encoding %s as invalid:\n",
+ terminal_encoding_get_charset (encoding));
+ _terminal_debug_print (TERMINAL_DEBUG_ENCODINGS,
+ " input \"%s\"\n",
+ ascii_sample);
+ _terminal_debug_print (TERMINAL_DEBUG_ENCODINGS,
+ " output \"%s\" bytes read %u written %u\n",
+ converted ? converted : "(null)", bytes_read, bytes_written);
+ if (error)
+ _terminal_debug_print (TERMINAL_DEBUG_ENCODINGS,
+ " Error: %s\n",
+ error->message);
+ }
+ else
+ _terminal_debug_print (TERMINAL_DEBUG_ENCODINGS,
+ "Encoding %s is valid\n\n",
+ terminal_encoding_get_charset (encoding));
+ }
#endif
- g_clear_error (&error);
- g_free (converted);
+ g_clear_error (&error);
+ g_free (converted);
- encoding->validity_checked = TRUE;
- return encoding->valid;
+ encoding->validity_checked = TRUE;
+ return encoding->valid;
}
GType
terminal_encoding_get_type (void)
{
- static GType type = 0;
+ static GType type = 0;
- if (G_UNLIKELY (type == 0)) {
- type = g_boxed_type_register_static (I_("TerminalEncoding"),
- (GBoxedCopyFunc) terminal_encoding_ref,
- (GBoxedFreeFunc) terminal_encoding_unref);
- }
+ if (G_UNLIKELY (type == 0))
+ {
+ type = g_boxed_type_register_static (I_("TerminalEncoding"),
+ (GBoxedCopyFunc) terminal_encoding_ref,
+ (GBoxedFreeFunc) terminal_encoding_unref);
+ }
- return type;
+ return type;
}
static void
update_active_encodings_mateconf (void)
{
- GSList *list, *l;
- GSList *strings = NULL;
- MateConfClient *conf;
-
- list = terminal_app_get_active_encodings (terminal_app_get ());
- for (l = list; l != NULL; l = l->next)
- {
- TerminalEncoding *encoding = (TerminalEncoding *) l->data;
-
- strings = g_slist_prepend (strings, (gpointer) terminal_encoding_get_id (encoding));
- }
-
- conf = mateconf_client_get_default ();
- mateconf_client_set_list (conf,
- CONF_GLOBAL_PREFIX"/active_encodings",
- MATECONF_VALUE_STRING,
- strings,
- NULL);
- g_object_unref (conf);
-
- g_slist_free (strings);
- g_slist_foreach (list, (GFunc) terminal_encoding_unref, NULL);
- g_slist_free (list);
+ GSList *list, *l;
+ GSList *strings = NULL;
+ MateConfClient *conf;
+
+ list = terminal_app_get_active_encodings (terminal_app_get ());
+ for (l = list; l != NULL; l = l->next)
+ {
+ TerminalEncoding *encoding = (TerminalEncoding *) l->data;
+
+ strings = g_slist_prepend (strings, (gpointer) terminal_encoding_get_id (encoding));
+ }
+
+ conf = mateconf_client_get_default ();
+ mateconf_client_set_list (conf,
+ CONF_GLOBAL_PREFIX"/active_encodings",
+ MATECONF_VALUE_STRING,
+ strings,
+ NULL);
+ g_object_unref (conf);
+
+ g_slist_free (strings);
+ g_slist_foreach (list, (GFunc) terminal_encoding_unref, NULL);
+ g_slist_free (list);
}
static void
@@ -313,78 +317,78 @@ response_callback (GtkWidget *window,
int id,
EncodingDialogData *data)
{
- if (id == GTK_RESPONSE_HELP)
- terminal_util_show_help ("mate-terminal-encoding-add", GTK_WINDOW (window));
- else
- gtk_widget_destroy (GTK_WIDGET (window));
+ if (id == GTK_RESPONSE_HELP)
+ terminal_util_show_help ("mate-terminal-encoding-add", GTK_WINDOW (window));
+ else
+ gtk_widget_destroy (GTK_WIDGET (window));
}
enum
{
- COLUMN_NAME,
- COLUMN_CHARSET,
- COLUMN_DATA,
- N_COLUMNS
+ COLUMN_NAME,
+ COLUMN_CHARSET,
+ COLUMN_DATA,
+ N_COLUMNS
};
static void
selection_changed_cb (GtkTreeSelection *selection,
EncodingDialogData *data)
{
- GtkWidget *button;
- gboolean have_selection;
-
- if (selection == data->available_selection)
- button = data->add_button;
- else if (selection == data->active_selection)
- button = data->remove_button;
- else
- g_assert_not_reached ();
-
- have_selection = gtk_tree_selection_get_selected (selection, NULL, NULL);
- gtk_widget_set_sensitive (button, have_selection);
+ GtkWidget *button;
+ gboolean have_selection;
+
+ if (selection == data->available_selection)
+ button = data->add_button;
+ else if (selection == data->active_selection)
+ button = data->remove_button;
+ else
+ g_assert_not_reached ();
+
+ have_selection = gtk_tree_selection_get_selected (selection, NULL, NULL);
+ gtk_widget_set_sensitive (button, have_selection);
}
static void
button_clicked_cb (GtkWidget *button,
EncodingDialogData *data)
{
- GtkTreeSelection *selection;
- GtkTreeModel *model;
- GtkTreeIter filter_iter, iter;
- TerminalEncoding *encoding;
-
- if (button == data->add_button)
- selection = data->available_selection;
- else if (button == data->remove_button)
- selection = data->active_selection;
- else
- g_assert_not_reached ();
-
- if (!gtk_tree_selection_get_selected (selection, &model, &filter_iter))
- return;
-
- gtk_tree_model_filter_convert_iter_to_child_iter (GTK_TREE_MODEL_FILTER (model),
- &iter,
- &filter_iter);
-
- model = GTK_TREE_MODEL (data->base_store);
- gtk_tree_model_get (model, &iter, COLUMN_DATA, &encoding, -1);
- g_assert (encoding != NULL);
-
- if (button == data->add_button)
- encoding->is_active = TRUE;
- else if (button == data->remove_button)
- encoding->is_active = FALSE;
- else
- g_assert_not_reached ();
-
- terminal_encoding_unref (encoding);
-
- /* We don't need to emit row-changed here, since updating the mateconf pref
- * will update the models.
- */
- update_active_encodings_mateconf ();
+ GtkTreeSelection *selection;
+ GtkTreeModel *model;
+ GtkTreeIter filter_iter, iter;
+ TerminalEncoding *encoding;
+
+ if (button == data->add_button)
+ selection = data->available_selection;
+ else if (button == data->remove_button)
+ selection = data->active_selection;
+ else
+ g_assert_not_reached ();
+
+ if (!gtk_tree_selection_get_selected (selection, &model, &filter_iter))
+ return;
+
+ gtk_tree_model_filter_convert_iter_to_child_iter (GTK_TREE_MODEL_FILTER (model),
+ &iter,
+ &filter_iter);
+
+ model = GTK_TREE_MODEL (data->base_store);
+ gtk_tree_model_get (model, &iter, COLUMN_DATA, &encoding, -1);
+ g_assert (encoding != NULL);
+
+ if (button == data->add_button)
+ encoding->is_active = TRUE;
+ else if (button == data->remove_button)
+ encoding->is_active = FALSE;
+ else
+ g_assert_not_reached ();
+
+ terminal_encoding_unref (encoding);
+
+ /* We don't need to emit row-changed here, since updating the mateconf pref
+ * will update the models.
+ */
+ update_active_encodings_mateconf ();
}
static void
@@ -392,16 +396,16 @@ liststore_insert_encoding (gpointer key,
TerminalEncoding *encoding,
GtkListStore *store)
{
- GtkTreeIter iter;
+ GtkTreeIter iter;
- if (!terminal_encoding_is_valid (encoding))
- return;
+ if (!terminal_encoding_is_valid (encoding))
+ return;
- gtk_list_store_insert_with_values (store, &iter, -1,
- COLUMN_CHARSET, terminal_encoding_get_charset (encoding),
- COLUMN_NAME, encoding->name,
- COLUMN_DATA, encoding,
- -1);
+ gtk_list_store_insert_with_values (store, &iter, -1,
+ COLUMN_CHARSET, terminal_encoding_get_charset (encoding),
+ COLUMN_NAME, encoding->name,
+ COLUMN_DATA, encoding,
+ -1);
}
static gboolean
@@ -409,206 +413,206 @@ filter_active_encodings (GtkTreeModel *child_model,
GtkTreeIter *child_iter,
gpointer data)
{
- TerminalEncoding *encoding;
- gboolean active = GPOINTER_TO_UINT (data);
- gboolean visible;
+ TerminalEncoding *encoding;
+ gboolean active = GPOINTER_TO_UINT (data);
+ gboolean visible;
- gtk_tree_model_get (child_model, child_iter, COLUMN_DATA, &encoding, -1);
- visible = active ? encoding->is_active : !encoding->is_active;
- terminal_encoding_unref (encoding);
+ gtk_tree_model_get (child_model, child_iter, COLUMN_DATA, &encoding, -1);
+ visible = active ? encoding->is_active : !encoding->is_active;
+ terminal_encoding_unref (encoding);
- return visible;
+ return visible;
}
static GtkTreeModel *
encodings_create_treemodel (GtkListStore *base_store,
gboolean active)
{
- GtkTreeModel *model;
+ GtkTreeModel *model;
- model = gtk_tree_model_filter_new (GTK_TREE_MODEL (base_store), NULL);
- gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER (model),
- filter_active_encodings,
- GUINT_TO_POINTER (active), NULL);
+ model = gtk_tree_model_filter_new (GTK_TREE_MODEL (base_store), NULL);
+ gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER (model),
+ filter_active_encodings,
+ GUINT_TO_POINTER (active), NULL);
- return model;
+ return model;
}
static void
encodings_list_changed_cb (TerminalApp *app,
EncodingDialogData *data)
{
- gtk_list_store_clear (data->base_store);
+ gtk_list_store_clear (data->base_store);
- g_hash_table_foreach (terminal_app_get_encodings (app), (GHFunc) liststore_insert_encoding, data->base_store);
+ g_hash_table_foreach (terminal_app_get_encodings (app), (GHFunc) liststore_insert_encoding, data->base_store);
}
static void
encoding_dialog_data_free (EncodingDialogData *data)
{
- g_signal_handlers_disconnect_by_func (terminal_app_get (),
- G_CALLBACK (encodings_list_changed_cb),
- data);
+ g_signal_handlers_disconnect_by_func (terminal_app_get (),
+ G_CALLBACK (encodings_list_changed_cb),
+ data);
- g_free (data);
+ g_free (data);
}
void
terminal_encoding_dialog_show (GtkWindow *transient_parent)
{
- TerminalApp *app;
- GtkCellRenderer *cell_renderer;
- GtkTreeViewColumn *column;
- GtkTreeModel *model;
- EncodingDialogData *data;
-
- if (encoding_dialog)
- {
- gtk_window_set_transient_for (GTK_WINDOW (encoding_dialog), transient_parent);
- gtk_window_present (GTK_WINDOW (encoding_dialog));
- return;
- }
-
- data = g_new (EncodingDialogData, 1);
-
- if (!terminal_util_load_builder_file ("encodings-dialog.ui",
- "encodings-dialog", &data->dialog,
- "add-button", &data->add_button,
- "remove-button", &data->remove_button,
- "available-treeview", &data->available_tree_view,
- "displayed-treeview", &data->active_tree_view,
- NULL))
- {
- g_free (data);
- return;
- }
-
- g_object_set_data_full (G_OBJECT (data->dialog), "GT::Data", data, (GDestroyNotify) encoding_dialog_data_free);
-
- gtk_window_set_transient_for (GTK_WINDOW (data->dialog), transient_parent);
- gtk_window_set_role (GTK_WINDOW (data->dialog), "mate-terminal-encodings");
- g_signal_connect (data->dialog, "response",
- G_CALLBACK (response_callback), data);
-
- /* buttons */
- g_signal_connect (data->add_button, "clicked",
- G_CALLBACK (button_clicked_cb), data);
-
- g_signal_connect (data->remove_button, "clicked",
- G_CALLBACK (button_clicked_cb), data);
-
- /* Tree view of available encodings */
- /* Column 1 */
- cell_renderer = gtk_cell_renderer_text_new ();
- column = gtk_tree_view_column_new_with_attributes (_("_Description"),
- cell_renderer,
- "text", COLUMN_NAME,
- NULL);
- gtk_tree_view_append_column (data->available_tree_view, column);
- gtk_tree_view_column_set_sort_column_id (column, COLUMN_NAME);
-
- /* Column 2 */
- cell_renderer = gtk_cell_renderer_text_new ();
- column = gtk_tree_view_column_new_with_attributes (_("_Encoding"),
- cell_renderer,
- "text", COLUMN_CHARSET,
- NULL);
- gtk_tree_view_append_column (data->available_tree_view, column);
- gtk_tree_view_column_set_sort_column_id (column, COLUMN_CHARSET);
-
- data->available_selection = gtk_tree_view_get_selection (data->available_tree_view);
- gtk_tree_selection_set_mode (data->available_selection, GTK_SELECTION_BROWSE);
-
- g_signal_connect (data->available_selection, "changed",
- G_CALLBACK (selection_changed_cb), data);
-
- /* Tree view of selected encodings */
- /* Column 1 */
- cell_renderer = gtk_cell_renderer_text_new ();
- column = gtk_tree_view_column_new_with_attributes (_("_Description"),
- cell_renderer,
- "text", COLUMN_NAME,
- NULL);
- gtk_tree_view_append_column (data->active_tree_view, column);
- gtk_tree_view_column_set_sort_column_id (column, COLUMN_NAME);
-
- /* Column 2 */
- cell_renderer = gtk_cell_renderer_text_new ();
- column = gtk_tree_view_column_new_with_attributes (_("_Encoding"),
- cell_renderer,
- "text", COLUMN_CHARSET,
- NULL);
- gtk_tree_view_append_column (data->active_tree_view, column);
- gtk_tree_view_column_set_sort_column_id (column, COLUMN_CHARSET);
-
- /* Add the data */
-
- data->active_selection = gtk_tree_view_get_selection (data->active_tree_view);
- gtk_tree_selection_set_mode (data->active_selection, GTK_SELECTION_BROWSE);
-
- g_signal_connect (data->active_selection, "changed",
- G_CALLBACK (selection_changed_cb), data);
-
- data->base_store = gtk_list_store_new (N_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, TERMINAL_TYPE_ENCODING);
-
- app = terminal_app_get ();
- encodings_list_changed_cb (app, data);
- g_signal_connect (app, "encoding-list-changed",
- G_CALLBACK (encodings_list_changed_cb), data);
-
- /* Now turn on sorting */
- gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (data->base_store),
- COLUMN_NAME,
- GTK_SORT_ASCENDING);
-
- model = encodings_create_treemodel (data->base_store, FALSE);
- gtk_tree_view_set_model (data->available_tree_view, model);
- g_object_unref (model);
-
- model = encodings_create_treemodel (data->base_store, TRUE);
- gtk_tree_view_set_model (data->active_tree_view, model);
- g_object_unref (model);
-
- g_object_unref (data->base_store);
-
- gtk_window_present (GTK_WINDOW (data->dialog));
-
- encoding_dialog = data->dialog;
- g_signal_connect (data->dialog, "destroy",
- G_CALLBACK (gtk_widget_destroyed), &encoding_dialog);
+ TerminalApp *app;
+ GtkCellRenderer *cell_renderer;
+ GtkTreeViewColumn *column;
+ GtkTreeModel *model;
+ EncodingDialogData *data;
+
+ if (encoding_dialog)
+ {
+ gtk_window_set_transient_for (GTK_WINDOW (encoding_dialog), transient_parent);
+ gtk_window_present (GTK_WINDOW (encoding_dialog));
+ return;
+ }
+
+ data = g_new (EncodingDialogData, 1);
+
+ if (!terminal_util_load_builder_file ("encodings-dialog.ui",
+ "encodings-dialog", &data->dialog,
+ "add-button", &data->add_button,
+ "remove-button", &data->remove_button,
+ "available-treeview", &data->available_tree_view,
+ "displayed-treeview", &data->active_tree_view,
+ NULL))
+ {
+ g_free (data);
+ return;
+ }
+
+ g_object_set_data_full (G_OBJECT (data->dialog), "GT::Data", data, (GDestroyNotify) encoding_dialog_data_free);
+
+ gtk_window_set_transient_for (GTK_WINDOW (data->dialog), transient_parent);
+ gtk_window_set_role (GTK_WINDOW (data->dialog), "mate-terminal-encodings");
+ g_signal_connect (data->dialog, "response",
+ G_CALLBACK (response_callback), data);
+
+ /* buttons */
+ g_signal_connect (data->add_button, "clicked",
+ G_CALLBACK (button_clicked_cb), data);
+
+ g_signal_connect (data->remove_button, "clicked",
+ G_CALLBACK (button_clicked_cb), data);
+
+ /* Tree view of available encodings */
+ /* Column 1 */
+ cell_renderer = gtk_cell_renderer_text_new ();
+ column = gtk_tree_view_column_new_with_attributes (_("_Description"),
+ cell_renderer,
+ "text", COLUMN_NAME,
+ NULL);
+ gtk_tree_view_append_column (data->available_tree_view, column);
+ gtk_tree_view_column_set_sort_column_id (column, COLUMN_NAME);
+
+ /* Column 2 */
+ cell_renderer = gtk_cell_renderer_text_new ();
+ column = gtk_tree_view_column_new_with_attributes (_("_Encoding"),
+ cell_renderer,
+ "text", COLUMN_CHARSET,
+ NULL);
+ gtk_tree_view_append_column (data->available_tree_view, column);
+ gtk_tree_view_column_set_sort_column_id (column, COLUMN_CHARSET);
+
+ data->available_selection = gtk_tree_view_get_selection (data->available_tree_view);
+ gtk_tree_selection_set_mode (data->available_selection, GTK_SELECTION_BROWSE);
+
+ g_signal_connect (data->available_selection, "changed",
+ G_CALLBACK (selection_changed_cb), data);
+
+ /* Tree view of selected encodings */
+ /* Column 1 */
+ cell_renderer = gtk_cell_renderer_text_new ();
+ column = gtk_tree_view_column_new_with_attributes (_("_Description"),
+ cell_renderer,
+ "text", COLUMN_NAME,
+ NULL);
+ gtk_tree_view_append_column (data->active_tree_view, column);
+ gtk_tree_view_column_set_sort_column_id (column, COLUMN_NAME);
+
+ /* Column 2 */
+ cell_renderer = gtk_cell_renderer_text_new ();
+ column = gtk_tree_view_column_new_with_attributes (_("_Encoding"),
+ cell_renderer,
+ "text", COLUMN_CHARSET,
+ NULL);
+ gtk_tree_view_append_column (data->active_tree_view, column);
+ gtk_tree_view_column_set_sort_column_id (column, COLUMN_CHARSET);
+
+ /* Add the data */
+
+ data->active_selection = gtk_tree_view_get_selection (data->active_tree_view);
+ gtk_tree_selection_set_mode (data->active_selection, GTK_SELECTION_BROWSE);
+
+ g_signal_connect (data->active_selection, "changed",
+ G_CALLBACK (selection_changed_cb), data);
+
+ data->base_store = gtk_list_store_new (N_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, TERMINAL_TYPE_ENCODING);
+
+ app = terminal_app_get ();
+ encodings_list_changed_cb (app, data);
+ g_signal_connect (app, "encoding-list-changed",
+ G_CALLBACK (encodings_list_changed_cb), data);
+
+ /* Now turn on sorting */
+ gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (data->base_store),
+ COLUMN_NAME,
+ GTK_SORT_ASCENDING);
+
+ model = encodings_create_treemodel (data->base_store, FALSE);
+ gtk_tree_view_set_model (data->available_tree_view, model);
+ g_object_unref (model);
+
+ model = encodings_create_treemodel (data->base_store, TRUE);
+ gtk_tree_view_set_model (data->active_tree_view, model);
+ g_object_unref (model);
+
+ g_object_unref (data->base_store);
+
+ gtk_window_present (GTK_WINDOW (data->dialog));
+
+ encoding_dialog = data->dialog;
+ g_signal_connect (data->dialog, "destroy",
+ G_CALLBACK (gtk_widget_destroyed), &encoding_dialog);
}
GHashTable *
terminal_encodings_get_builtins (void)
{
- GHashTable *encodings_hashtable;
- guint i;
- TerminalEncoding *encoding;
-
- encodings_hashtable = g_hash_table_new_full (g_str_hash, g_str_equal,
- NULL,
- (GDestroyNotify) terminal_encoding_unref);
-
-
- /* Placeholder entry for the current locale's charset */
- encoding = terminal_encoding_new ("current",
- _("Current Locale"),
- FALSE,
- TRUE);
- g_hash_table_insert (encodings_hashtable,
- (gpointer) terminal_encoding_get_id (encoding),
- encoding);
-
- for (i = 0; i < G_N_ELEMENTS (encodings); ++i)
- {
- encoding = terminal_encoding_new (encodings[i].charset,
- _(encodings[i].name),
- FALSE,
- FALSE);
- g_hash_table_insert (encodings_hashtable,
- (gpointer) terminal_encoding_get_id (encoding),
- encoding);
- }
-
- return encodings_hashtable;
+ GHashTable *encodings_hashtable;
+ guint i;
+ TerminalEncoding *encoding;
+
+ encodings_hashtable = g_hash_table_new_full (g_str_hash, g_str_equal,
+ NULL,
+ (GDestroyNotify) terminal_encoding_unref);
+
+
+ /* Placeholder entry for the current locale's charset */
+ encoding = terminal_encoding_new ("current",
+ _("Current Locale"),
+ FALSE,
+ TRUE);
+ g_hash_table_insert (encodings_hashtable,
+ (gpointer) terminal_encoding_get_id (encoding),
+ encoding);
+
+ for (i = 0; i < G_N_ELEMENTS (encodings); ++i)
+ {
+ encoding = terminal_encoding_new (encodings[i].charset,
+ _(encodings[i].name),
+ FALSE,
+ FALSE);
+ g_hash_table_insert (encodings_hashtable,
+ (gpointer) terminal_encoding_get_id (encoding),
+ encoding);
+ }
+
+ return encodings_hashtable;
}