static GtkWidget *create_charset_menu(FileInfo *selected_fi) { GtkWidget *option_menu; GtkWidget *menu; GtkWidget *menu_item; CharsetTable *ctable; gint i; option_menu = gtk_option_menu_new(); menu = gtk_menu_new(); if (mode == OPEN) { menu_item = gtk_menu_item_new_with_label(_("Auto-Detect")); gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_item); gtk_widget_show(menu_item); // <- required for width adjustment } ctable = get_charset_table(); for (i = 0; i < ctable->num; i++) { menu_item = gtk_menu_item_new_with_label(ctable->str[i]); gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_item); gtk_widget_show(menu_item); // <- required for width adjustment } menu_item_manual_charset = NULL; gtk_menu_shell_append(GTK_MENU_SHELL(menu), init_menu_item_manual_charset(selected_fi->charset_flag ? selected_fi->charset : NULL)); gtk_widget_show(menu_item_manual_charset); // <- required for width adjustment charset_menu_init_flag = TRUE; g_signal_connect(G_OBJECT(option_menu), "changed", G_CALLBACK(cb_select_charset), selected_fi); gtk_option_menu_set_menu(GTK_OPTION_MENU(option_menu), menu); i = 0; if (selected_fi->charset) { do { if (g_strcasecmp(selected_fi->charset, ctable->charset[i]) == 0) break; i++; } while (i < ctable->num); if (mode == OPEN && selected_fi->charset_flag == FALSE) { g_free(selected_fi->charset); selected_fi->charset = NULL; } else if (i == ctable->num && selected_fi->charset_flag == FALSE) { init_menu_item_manual_charset(selected_fi->charset); } i += mode; } if (mode == SAVE || selected_fi->charset_flag) gtk_option_menu_set_history(GTK_OPTION_MENU(option_menu), i); charset_menu_init_flag = FALSE; return option_menu; }
static GtkWidget *create_charset_menu(FileInfo *selected_fi) { GtkListStore *store = gtk_list_store_new (1, G_TYPE_STRING); GtkTreeIter iter; GtkCellRenderer *renderer = gtk_cell_renderer_text_new (); GtkWidget *option_menu = gtk_combo_box_new_with_model (GTK_TREE_MODEL (store)); CharsetTable *ctable; guint i; if (mode == OPEN) { gtk_list_store_append (store, &iter); gtk_list_store_set (store, &iter, 0, _("Auto-Detect"), -1); } ctable = get_charset_table(); for (i = 0; i < ctable->num; i++) { gtk_list_store_append (store, &iter); gtk_list_store_set (store, &iter, 0, ctable->str[i], -1); } menu_item_manual_charset = NULL; gtk_list_store_append (store, &iter); gtk_list_store_set (store, &iter, 0, gtk_menu_item_get_label(GTK_MENU_ITEM(init_menu_item_manual_charset(selected_fi->charset_flag ? selected_fi->charset : NULL))), -1); charset_menu_init_flag = TRUE; g_signal_connect(G_OBJECT(option_menu), "changed", G_CALLBACK(cb_select_charset), selected_fi); gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (option_menu), renderer, FALSE); gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (option_menu), renderer, "text", 0, NULL); i = 0; if (selected_fi->charset) { do { if (g_ascii_strcasecmp(selected_fi->charset, ctable->charset[i]) == 0) break; i++; } while (i < ctable->num); if (mode == OPEN && selected_fi->charset_flag == FALSE) { g_free(selected_fi->charset); selected_fi->charset = NULL; } else if (i == ctable->num && selected_fi->charset_flag == FALSE) { init_menu_item_manual_charset(selected_fi->charset); } i += mode; } if (mode == SAVE || selected_fi->charset_flag) gtk_option_menu_set_history(GTK_OPTION_MENU(option_menu), i); charset_menu_init_flag = FALSE; return option_menu; }
static gboolean get_manual_charset(GtkOptionMenu *option_menu, FileInfo *selected_fi) { GtkWidget *dialog; GtkWidget *vbox; GtkWidget *label; GtkWidget *entry; GError *err = NULL; gchar *str; dialog = gtk_dialog_new_with_buttons(other_codeset_title, GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(option_menu))), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK); gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_MOUSE); vbox = gtk_vbox_new(FALSE, 0); gtk_orientable_set_orientation(GTK_ORIENTABLE(vbox), GTK_ORIENTATION_VERTICAL); gtk_container_set_border_width(GTK_CONTAINER(vbox), 8); gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), vbox, FALSE, FALSE, 0); label = gtk_label_new_with_mnemonic(_("Code_set:")); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.0); gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 5); entry = gtk_entry_new(); gtk_widget_set_hexpand (entry, TRUE); gtk_widget_set_vexpand (entry, TRUE); gtk_entry_set_activates_default(GTK_ENTRY(entry), TRUE); gtk_label_set_mnemonic_widget(GTK_LABEL(label), entry); gtk_box_pack_start(GTK_BOX(vbox), entry, FALSE, FALSE, 5); gtk_dialog_set_response_sensitive(GTK_DIALOG(dialog), GTK_RESPONSE_OK, FALSE); g_signal_connect_after(G_OBJECT(entry), "changed", G_CALLBACK(toggle_sensitivity), NULL); if (selected_fi->charset_flag) gtk_entry_set_text(GTK_ENTRY(entry), selected_fi->charset); gtk_widget_show_all(vbox); if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_OK) { g_convert("TEST", -1, "UTF-8", gtk_entry_get_text(GTK_ENTRY(entry)), NULL, NULL, &err); if (err) { g_error_free(err); gtk_widget_hide(dialog); str = g_strdup_printf(_("'%s' is not supported"), gtk_entry_get_text(GTK_ENTRY(entry))); run_dialog_message(gtk_widget_get_toplevel(GTK_WIDGET(option_menu)), GTK_MESSAGE_ERROR, str); g_free(str); } else { g_free(selected_fi->charset); selected_fi->charset = g_strdup(gtk_entry_get_text(GTK_ENTRY(entry))); selected_fi->charset_flag = TRUE; gtk_widget_destroy(dialog); init_menu_item_manual_charset(selected_fi->charset_flag ? selected_fi->charset : NULL); return TRUE; } } gtk_widget_destroy(dialog); return FALSE; }