Ejemplo n.º 1
0
static void cb_select_charset(GtkOptionMenu *option_menu, FileInfo *selected_fi)
{
	CharsetTable *ctable;
	static guint index_history = 0, prev_history;

	prev_history = index_history;
	index_history = gtk_option_menu_get_history(option_menu);
	if (!charset_menu_init_flag) {
		ctable = get_charset_table();
		if (index_history < ctable->num + mode) {
			if (selected_fi->charset)
				g_free(selected_fi->charset);
			if (index_history == 0 && mode == OPEN)
				selected_fi->charset = NULL;
			else {
				selected_fi->charset =
					g_strdup(ctable->charset[index_history - mode]);
			}
		} else
			if (!get_manual_charset(option_menu, selected_fi)) {
				index_history = prev_history;
				gtk_option_menu_set_history(option_menu, index_history);
			}
	}
}
Ejemplo n.º 2
0
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;
}
Ejemplo n.º 3
0
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;
}