[Cxplorer-cvs 01282] CVS update: cxplorer/src

Back to archive index

Yasumichi Akahoshi yasum****@users*****
2005年 9月 26日 (月) 14:26:52 JST


Index: cxplorer/src/cxp-right-pane.c
diff -u cxplorer/src/cxp-right-pane.c:1.72 cxplorer/src/cxp-right-pane.c:1.73
--- cxplorer/src/cxp-right-pane.c:1.72	Fri Sep 23 02:05:09 2005
+++ cxplorer/src/cxp-right-pane.c	Mon Sep 26 14:26:52 2005
@@ -133,6 +133,8 @@
 							 GtkTreePath * path,
 							 GtkTreeIter * iter,
 							 gpointer userdata);
+void cxp_right_pane_drag_data_get(GtkWidget *widget, GdkDragContext *dc, GtkSelectionData *selection_data, guint info, guint t, gpointer data);
+void cxp_right_pane_drag_data_delete (GtkWidget *widget, GdkDragContext *dc, gpointer data);
 
 GType cxp_right_pane_get_type (void)
 {
@@ -218,6 +220,7 @@
 	priv->file_list = cxp_right_pane_file_list_new (self);
 	gtk_container_add (GTK_CONTAINER (scrolled_window), priv->file_list);
 	gtk_widget_show (priv->file_list);
+	gtk_drag_source_set(priv->file_list, GDK_BUTTON1_MASK, cxp_target_types, G_N_ELEMENTS(cxp_target_types), GDK_ACTION_MOVE);
 
 	priv->expander = gtk_expander_new (_("<b>Preview</b>"));
 	gtk_expander_set_use_markup (GTK_EXPANDER (priv->expander), TRUE);
@@ -246,6 +249,10 @@
 			  G_CALLBACK (cxp_right_pane_on_cursor_changed), self);
 	g_signal_connect (priv->file_list, "row_activated",
 			  G_CALLBACK (cxp_right_pane_on_row_activated), self);
+	g_signal_connect (priv->file_list, "drag_data_get",
+			G_CALLBACK (cxp_right_pane_drag_data_get), self);
+	g_signal_connect (priv->file_list, "drag_data_delete",
+			G_CALLBACK (cxp_right_pane_drag_data_delete), self);
 	g_signal_connect (priv->file_list, "key-press-event",
 			  G_CALLBACK (cxp_right_pane_on_key_pressed), self);
 	g_signal_connect (priv->expander, "notify::expanded",
@@ -1359,3 +1366,56 @@
 				  G_CALLBACK (cxp_right_pane_popup_handler),
 				  priv->popup_menu);
 }
+
+void cxp_right_pane_drag_data_get(GtkWidget *widget, GdkDragContext *dc, GtkSelectionData *selection_data, guint info, guint t, gpointer data)
+{
+	CxpRightPanePrivate *priv = CXP_RIGHT_PANE_GET_PRIVATE (data);
+	GList *list, *cur;
+	GtkTreeIter iter;
+	GtkTreeModel *model;
+	GtkTreeSelection *selection;
+	GString *move_files;
+	gchar *fullpath;
+	GtkClipboard *clipboard;
+
+	selection =
+		gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->file_list));
+
+	list = gtk_tree_selection_get_selected_rows (selection, &model);
+
+	g_return_if_fail (list != NULL);
+
+	clipboard = gtk_clipboard_get (GDK_SELECTION_PRIMARY);
+
+	cur = list;
+	move_files = g_string_new ("");
+	while (cur != NULL)
+	{
+		gtk_tree_model_get_iter (model, &iter, cur->data);
+		gtk_tree_model_get (model, &iter, FILE_LIST_COL_FULLPATH,
+				    &fullpath, -1);
+		g_string_append (move_files, fullpath);
+		g_string_append_c (move_files, '\n');
+		g_free (fullpath);
+		cur = g_list_next (cur);
+	}
+	g_list_foreach (list, gtk_tree_path_free, NULL);
+	g_list_free (list);
+
+	gtk_selection_data_set (selection_data, GDK_TARGET_STRING, 8, move_files->str, move_files->len); 
+	//gtk_clipboard_set_text (clipboard, copy_files->str, copy_files->len);
+	g_string_free (move_files, TRUE);
+}
+
+void cxp_right_pane_drag_data_delete (GtkWidget *widget, GdkDragContext *dc, gpointer data)
+{
+	CxpRightPanePrivate *priv = CXP_RIGHT_PANE_GET_PRIVATE (data);
+	gchar *cur_dir;
+
+	cur_dir = g_strdup (priv->cur_dir);
+	cxp_right_pane_change_directory (CXP_RIGHT_PANE(data),
+			cur_dir);
+	g_free (cur_dir);
+
+	g_signal_stop_emission_by_name (priv->file_list, "drag_data_delete");
+}


Cxplorer-cvs メーリングリストの案内
Back to archive index