⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ui_pathsel.c

📁 Gqview,Linux下基于GTK+库写成的轻量级而能丰富的图像浏览程序。
💻 C
📖 第 1 页 / 共 3 页
字号:
	else		{		const gchar *text;		gtk_list_store_set(GTK_LIST_STORE(model), &iter, 0, new, 1, new_path, -1);		text = gtk_entry_get_text(GTK_ENTRY(dd->entry));		if (text && old_path && strcmp(text, old_path) == 0)			{			gtk_entry_set_text(GTK_ENTRY(dd->entry), new_path);			}		}	g_free(old_path);	g_free(new_path);	return TRUE;}static void dest_view_rename(Dest_Data *dd, GtkTreeView *view){	GtkTreeModel *model;	GtkTreeIter iter;	gchar *text;	if (!dd->right_click_path) return;	model = gtk_tree_view_get_model(view);	gtk_tree_model_get_iter(model, &iter, dd->right_click_path);	gtk_tree_model_get(model, &iter, 0, &text, -1);	tree_edit_by_path(view, dd->right_click_path, 0, text,			  dest_view_rename_cb, dd);	g_free(text);}static void dest_view_delete_dlg_cancel(GenericDialog *gd, gpointer data){	DestDel_Data *dl = data;	dl->dd->gd = NULL;	g_free(dl->path);	g_free(dl);}static void dest_view_delete_dlg_ok_cb(GenericDialog *gd, gpointer data){	DestDel_Data *dl = data;	if (!unlink_file(dl->path))		{		gchar *text = g_strdup_printf(_("Unable to delete file:\n%s"), dl->path);		warning_dialog(_("File deletion failed"), text, GTK_STOCK_DIALOG_WARNING, dl->dd->entry);		g_free(text);		}	else if (dl->dd->path)		{		/* refresh list */		gchar *path = g_strdup(dl->dd->path);		dest_populate(dl->dd, path);		g_free(path);		}	dest_view_delete_dlg_cancel(gd, data);}static void dest_view_delete(Dest_Data *dd, GtkTreeView *view){	gchar *path;	gchar *text;	DestDel_Data *dl;	GtkTreeModel *model;	GtkTreeIter iter;	if (view != GTK_TREE_VIEW(dd->f_view)) return;	if (!dd->right_click_path) return;	model = gtk_tree_view_get_model(view);	gtk_tree_model_get_iter(model, &iter, dd->right_click_path);	gtk_tree_model_get(model, &iter, 1, &path, -1);		if (!path) return;	dl = g_new(DestDel_Data, 1);	dl->dd = dd;	dl->path = path;	if (dd->gd)		{		GenericDialog *gd = dd->gd;		dest_view_delete_dlg_cancel(dd->gd, dd->gd->data);		generic_dialog_close(gd);		}	dd->gd = generic_dialog_new(_("Delete file"), PACKAGE, "dlg_confirm",				    dd->entry, TRUE,				    dest_view_delete_dlg_cancel, dl);	generic_dialog_add_button(dd->gd, GTK_STOCK_DELETE, NULL, dest_view_delete_dlg_ok_cb, TRUE);	text = g_strdup_printf(_("About to delete the file:\n %s"), path);	generic_dialog_add_message(dd->gd, GTK_STOCK_DIALOG_QUESTION,				   _("Delete file"), text);	g_free(text);	gtk_widget_show(dd->gd->dialog);}static void dest_view_bookmark(Dest_Data *dd, GtkTreeView *view){	GtkTreeModel *model;	GtkTreeIter iter;	gchar *path;	if (!dd->right_click_path) return;	model = gtk_tree_view_get_model(view);	gtk_tree_model_get_iter(model, &iter, dd->right_click_path);	gtk_tree_model_get(model, &iter, 1, &path, -1);	bookmark_list_add(dd->bookmark_list, filename_from_path(path), path);	g_free(path);}static void dest_popup_dir_rename_cb(GtkWidget *widget, gpointer data){	Dest_Data *dd = data;	dest_view_rename(dd, GTK_TREE_VIEW(dd->d_view));}static void dest_popup_dir_bookmark_cb(GtkWidget *widget, gpointer data){	Dest_Data *dd = data;	dest_view_bookmark(dd, GTK_TREE_VIEW(dd->d_view));}static void dest_popup_file_rename_cb(GtkWidget *widget, gpointer data){	Dest_Data *dd = data;	dest_view_rename(dd, GTK_TREE_VIEW(dd->f_view));}static void dest_popup_file_delete_cb(GtkWidget *widget, gpointer data){	Dest_Data *dd = data;	dest_view_delete(dd, GTK_TREE_VIEW(dd->f_view));}static void dest_popup_file_bookmark_cb(GtkWidget *widget, gpointer data){	Dest_Data *dd = data;	dest_view_bookmark(dd, GTK_TREE_VIEW(dd->f_view));}static void dest_popup_position_cb(GtkMenu *menu, gint *x, gint *y,				   gboolean *push_in, gpointer data){	Dest_Data *dd = data;	GtkTreeView *view;	gint cw, ch;	view = g_object_get_data(G_OBJECT(menu), "active_view");	tree_view_get_cell_clamped(view, dd->right_click_path, 0, TRUE, x, y, &cw, &ch);	*y += ch;	popup_menu_position_clamp(menu, x, y, 0);}static gint dest_popup_menu(Dest_Data *dd, GtkTreeView *view,			    gint button, guint32 time, gint local){	GtkWidget *menu;	if (!dd->right_click_path) return FALSE;	if (view == GTK_TREE_VIEW(dd->d_view))		{		GtkTreeModel *model;		GtkTreeIter iter;		gchar *text;		gint normal_dir;		model = gtk_tree_view_get_model(view);		gtk_tree_model_get_iter(model, &iter, dd->right_click_path);		gtk_tree_model_get(model, &iter, 0, &text, -1);		if (!text) return FALSE;	       		normal_dir = (strcmp(text, ".") == 0 || strcmp(text, "..") == 0);		menu = popup_menu_short_lived();		menu_item_add_sensitive(menu, _("_Rename"), !normal_dir,			      G_CALLBACK(dest_popup_dir_rename_cb), dd);		menu_item_add_stock(menu, _("Add _Bookmark"), GTK_STOCK_JUMP_TO,			      G_CALLBACK(dest_popup_dir_bookmark_cb), dd);		}	else		{		menu = popup_menu_short_lived();		menu_item_add(menu, _("_Rename"),				G_CALLBACK(dest_popup_file_rename_cb), dd);		menu_item_add_stock(menu, _("_Delete"), GTK_STOCK_DELETE,				G_CALLBACK(dest_popup_file_delete_cb), dd);		menu_item_add_stock(menu, _("Add _Bookmark"), GTK_STOCK_JUMP_TO,				G_CALLBACK(dest_popup_file_bookmark_cb), dd);		}	if (local)		{		g_object_set_data(G_OBJECT(menu), "active_view", view);		gtk_menu_popup(GTK_MENU(menu), NULL, NULL,			       dest_popup_position_cb, dd, button, time);		}	else		{		gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, button, time);		}	return TRUE;}static gint dest_press_cb(GtkWidget *view, GdkEventButton *event, gpointer data){	Dest_Data *dd = data;	GtkTreePath *tpath;	GtkTreeViewColumn *column;	gint cell_x, cell_y;	GtkTreeModel *model;	GtkTreeIter iter;	GtkTreeSelection *selection;	if (event->button != 3 ||	    !gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(view), event->x, event->y,					   &tpath, &column, &cell_x, &cell_y))		{		return FALSE;		}	model = gtk_tree_view_get_model(GTK_TREE_VIEW(view));	gtk_tree_model_get_iter(model, &iter, tpath);	selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(view));	gtk_tree_selection_select_iter(selection, &iter);	if (dd->right_click_path) gtk_tree_path_free(dd->right_click_path);	dd->right_click_path = tpath;	return dest_popup_menu(dd, GTK_TREE_VIEW(view), 0, event->time, FALSE);}static gboolean dest_keypress_cb(GtkWidget *view, GdkEventKey *event, gpointer data){	Dest_Data *dd = data;	switch (event->keyval)		{		case GDK_F10:			if (!(event->state & GDK_CONTROL_MASK)) return FALSE;		case GDK_Menu:			dest_view_store_selection(dd, GTK_TREE_VIEW(view));			dest_popup_menu(dd, GTK_TREE_VIEW(view), 0, event->time, TRUE);			return TRUE;			break;		case 'R': case 'r':			if (event->state & GDK_CONTROL_MASK)				{				dest_view_store_selection(dd, GTK_TREE_VIEW(view));				dest_view_rename(dd, GTK_TREE_VIEW(view));				return TRUE;				}			break;		case GDK_Delete:			dest_view_store_selection(dd, GTK_TREE_VIEW(view));			dest_view_delete(dd, GTK_TREE_VIEW(view));			return TRUE;			break;		case 'B' : case 'b':			if (event->state & GDK_CONTROL_MASK)				{				dest_view_store_selection(dd, GTK_TREE_VIEW(view));				dest_view_bookmark(dd, GTK_TREE_VIEW(view));				return TRUE;				}			break;		}	return FALSE;}	static void dest_new_dir_cb(GtkWidget *widget, gpointer data){	Dest_Data *dd = data;	gchar *path;	gchar *buf;	const gchar *tmp;	gint from_text = FALSE;	tmp = gtk_entry_get_text(GTK_ENTRY(dd->entry));	if (!isname(tmp))		{		path = g_strdup(tmp);		from_text = TRUE;		}	else		{		buf = concat_dir_and_file(dd->path, _("New folder"));		path = unique_filename(buf, NULL, " ", FALSE);		g_free(buf);		}	if (!mkdir_utf8(path, 0755))		{		/* failed */		gchar *text;		text = g_strdup_printf(_("Unable to create folder:\n%s"), filename_from_path(path));		warning_dialog(_("Error creating folder"), text, GTK_STOCK_DIALOG_ERROR, dd->entry);		g_free(text);		}	else		{		GtkTreeIter iter;		GtkListStore *store;		const gchar *text;		if (from_text) gtk_entry_set_text(GTK_ENTRY(dd->entry), dd->path);		store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(dd->d_view)));		text = filename_from_path(path);		gtk_list_store_append(store, &iter);		gtk_list_store_set(store, &iter, 0, text, 1, path, -1);		if (dd->right_click_path) gtk_tree_path_free(dd->right_click_path);		dd->right_click_path = gtk_tree_model_get_path(GTK_TREE_MODEL(store), &iter);		tree_edit_by_path(GTK_TREE_VIEW(dd->d_view), dd->right_click_path, 0, text,				  dest_view_rename_cb, dd);		}	g_free(path);}/* *----------------------------------------------------------------------------- * destination widget file selection, traversal, view options *----------------------------------------------------------------------------- */ static void dest_select_cb(GtkTreeSelection *selection, gpointer data){	Dest_Data *dd = data;	GtkTreeView *view;	GtkTreeModel *store;	GtkTreeIter iter;	gchar *path;	if (!gtk_tree_selection_get_selected(selection, NULL, &iter)) return;	view = gtk_tree_selection_get_tree_view(selection);	store = gtk_tree_view_get_model(view);	gtk_tree_model_get(store, &iter, 1, &path, -1);	if (view == GTK_TREE_VIEW(dd->d_view))		{		dest_change_dir(dd, path, (dd->f_view != NULL));		}	else		{		gtk_entry_set_text(GTK_ENTRY(dd->entry), path);		}	g_free(path);}static void dest_activate_cb(GtkWidget *view, GtkTreePath *tpath, GtkTreeViewColumn *column, gpointer data){	Dest_Data *dd = data;	GtkTreeModel *store;	GtkTreeIter iter;	gchar *path;	store = gtk_tree_view_get_model(GTK_TREE_VIEW(view));	gtk_tree_model_get_iter(store, &iter, tpath);	gtk_tree_model_get(store, &iter, 1, &path, -1);	if (view == dd->d_view)		{		dest_change_dir(dd, path, (dd->f_view != NULL));		}	else		{		if (dd->select_func)			{			dd->select_func(path, dd->select_data);			}		}	g_free(path);}static void dest_home_cb(GtkWidget *widget, gpointer data){	Dest_Data *dd = data;	dest_change_dir(dd, homedir(), (dd->f_view != NULL));}static void dest_show_hidden_cb(GtkWidget *widget, gpointer data){	Dest_Data *dd = data;	gchar *buf;	dd->show_hidden = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dd->hidden_button));	buf = g_strdup(dd->path);	dest_populate(dd, buf);	g_free(buf);}static void dest_entry_changed_cb(GtkEditable *editable, gpointer data){	Dest_Data *dd = data;	const gchar *path;	gchar *buf;	path = gtk_entry_get_text(GTK_ENTRY(dd->entry));	if (dd->path && strcmp(path, dd->path) == 0) return;	buf = remove_level_from_path(path);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -