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

Back to archive index

Yasumichi Akahoshi yasum****@users*****
2005年 9月 26日 (月) 22:03:04 JST


Index: cxplorer/src/cxp-dir-view.c
diff -u cxplorer/src/cxp-dir-view.c:1.27 cxplorer/src/cxp-dir-view.c:1.28
--- cxplorer/src/cxp-dir-view.c:1.27	Mon Sep 26 15:46:59 2005
+++ cxplorer/src/cxp-dir-view.c	Mon Sep 26 22:03:04 2005
@@ -1,4 +1,4 @@
-/* $Id: cxp-dir-view.c,v 1.27 2005/09/26 06:46:59 yasumichi Exp $ */
+/* $Id: cxp-dir-view.c,v 1.28 2005/09/26 13:03:04 yasumichi Exp $ */
 /*
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
@@ -162,7 +162,8 @@
 	priv->dirview = cxp_dir_view_tree_view_new (self);
 	gtk_container_add (GTK_CONTAINER (self), priv->dirview);
 	priv->dispose_has_run = FALSE;
-	gtk_drag_dest_set (priv->dirview, GTK_DEST_DEFAULT_ALL, cxp_target_types, G_N_ELEMENTS(cxp_target_types), GDK_ACTION_MOVE);
+	//gtk_drag_dest_set (priv->dirview, GTK_DEST_DEFAULT_ALL, cxp_target_types, G_N_ELEMENTS(cxp_target_types), GDK_ACTION_MOVE);
+	gtk_tree_view_enable_model_drag_dest(GTK_TREE_VIEW(priv->dirview), cxp_target_types, G_N_ELEMENTS(cxp_target_types), GDK_ACTION_MOVE);
 
 	/* signal connect */
 	g_signal_connect (priv->dirview, "row_expanded",
@@ -773,6 +774,10 @@
 			}
 			g_free (dest_dir);
 			g_strfreev (move_file);
+			gtk_drag_finish (dc, TRUE, TRUE, t);
+			return;
 		}
 	}
+
+	gtk_drag_finish (dc, FALSE, FALSE, t);
 }
Index: cxplorer/src/cxp-right-pane.c
diff -u cxplorer/src/cxp-right-pane.c:1.74 cxplorer/src/cxp-right-pane.c:1.75
--- cxplorer/src/cxp-right-pane.c:1.74	Mon Sep 26 18:56:15 2005
+++ cxplorer/src/cxp-right-pane.c	Mon Sep 26 22:03:04 2005
@@ -136,6 +136,7 @@
 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);
 void cxp_right_pane_drag_data_received (GtkWidget *widget, GdkDragContext *dc, gint x, gint y, GtkSelectionData *selection_data, guint info, guint t, gpointer data);
+gboolean cxp_right_pane_drag_drop (GtkWidget *widget, GdkDragContext *dc, gint x, gint y, guint t, gpointer data);
 
 GType cxp_right_pane_get_type (void)
 {
@@ -222,7 +223,9 @@
 	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);
-	gtk_drag_dest_set (priv->file_list, GTK_DEST_DEFAULT_ALL, cxp_target_types, G_N_ELEMENTS(cxp_target_types), GDK_ACTION_MOVE);
+	//gtk_tree_view_enable_model_drag_source (GTK_TREE_VIEW(priv->file_list), GDK_BUTTON1_MASK, cxp_target_types, G_N_ELEMENTS(cxp_target_types), GDK_ACTION_MOVE);
+	//gtk_drag_dest_set (priv->file_list, GTK_DEST_DEFAULT_ALL, cxp_target_types, G_N_ELEMENTS(cxp_target_types), GDK_ACTION_MOVE);
+	gtk_tree_view_enable_model_drag_dest(GTK_TREE_VIEW(priv->file_list), 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);
@@ -255,6 +258,8 @@
 			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, "drag_drop",
+			G_CALLBACK (cxp_right_pane_drag_drop), self);
 	g_signal_connect (priv->file_list, "drag_data_received",
 			G_CALLBACK (cxp_right_pane_drag_data_received), self);
 	g_signal_connect (priv->file_list, "key-press-event",
@@ -1437,7 +1442,9 @@
 	GtkTreeModel *model;
 	GtkTreePath *path;
 	GtkTreeIter iter;
+	gchar *cur_dir;
 
+	g_print("called\n");
 	model = gtk_tree_view_get_model (GTK_TREE_VIEW(priv->file_list));
 	if(gtk_tree_view_get_dest_row_at_pos (GTK_TREE_VIEW(priv->file_list), x, y, &path, &pos))
 	{
@@ -1465,7 +1472,71 @@
 				}
 				g_free (dest_dir);
 				g_strfreev (move_file);
+				cur_dir = g_strdup (priv->cur_dir);
+				cxp_right_pane_change_directory (CXP_RIGHT_PANE(data),
+						cur_dir);
+				g_free (cur_dir);
+				gtk_drag_finish (dc, TRUE, TRUE, t);
+			}
+		}
+	}
+}
+
+gboolean cxp_right_pane_drag_drop (GtkWidget *widget, GdkDragContext *dc, gint x, gint y, guint t, gpointer data)
+{
+	CxpRightPanePrivate *priv = CXP_RIGHT_PANE_GET_PRIVATE (data);
+	GtkTreeViewDropPosition pos;
+	GtkTreeModel *model;
+	GtkTreePath *path;
+	GtkTreeIter iter;
+	gchar *cur_dir;
+	gchar *dest_dir;
+	gchar *src_path;
+	gchar *src_base;
+	gchar *dest_path;
+
+	GtkTreeSelection *selection;
+	GList *list, *cur;
+
+	model = gtk_tree_view_get_model (GTK_TREE_VIEW(priv->file_list));
+	if(gtk_tree_view_get_dest_row_at_pos (GTK_TREE_VIEW(priv->file_list), x, y, &path, &pos))
+	{
+		if (gtk_tree_model_get_iter(model, &iter, path))
+		{
+			gtk_tree_model_get (model, &iter, FILE_LIST_COL_FULLPATH, &dest_dir, -1);
+			if(g_file_test(dest_dir, G_FILE_TEST_IS_DIR))
+			{
+				selection =
+					gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->file_list));
+
+				list = gtk_tree_selection_get_selected_rows (selection, &model);
+				cur = list;
+				while (cur != NULL)
+				{
+					gtk_tree_model_get_iter (model, &iter, cur->data);
+					gtk_tree_model_get (model, &iter, FILE_LIST_COL_FULLPATH,
+							&src_path, -1);
+					src_base = g_path_get_basename (src_path);
+					dest_path = g_build_filename (dest_dir, src_base, NULL);
+					errno = 0;
+					if(rename(src_path, dest_path) == -1)
+					{
+						cxp_error_dialog_run_about_file (src_base);
+					}
+					g_free (dest_path);
+					g_free (src_base);
+					g_free (src_path);
+					cur = g_list_next (cur);
+				}
+				gtk_drag_finish (dc, TRUE, TRUE, t);
+
+				return	TRUE;
 			}
 		}
 	}
+
+	gtk_drag_finish (dc, FALSE, FALSE, t);
+	g_signal_stop_emission_by_name (priv->file_list, "drag_drop");
+
+	return	FALSE;
 }


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