[Xfce4-commits] r27241 - xarchiver/trunk/src

Giuseppe Torelli colossus at xfce.org
Wed Jul 9 11:09:17 CEST 2008


Author: colossus
Date: 2008-07-09 09:09:16 +0000 (Wed, 09 Jul 2008)
New Revision: 27241

Modified:
   xarchiver/trunk/src/archive.c
   xarchiver/trunk/src/archive.h
   xarchiver/trunk/src/interface.c
   xarchiver/trunk/src/interface.h
   xarchiver/trunk/src/main.c
   xarchiver/trunk/src/main.h
   xarchiver/trunk/src/window.c
   xarchiver/trunk/src/window.h
Log:
Add files into specific archive directories is now possible with drag and drop to the sidepane.
Changed View popmenu entry to Open.


Modified: xarchiver/trunk/src/archive.c
===================================================================
--- xarchiver/trunk/src/archive.c	2008-07-09 06:30:06 UTC (rev 27240)
+++ xarchiver/trunk/src/archive.c	2008-07-09 09:09:16 UTC (rev 27241)
@@ -900,37 +900,3 @@
 	return FALSE;
 }
 
-void xa_sidepane_drag_data_received (GtkWidget *widget,GdkDragContext *context,int x,int y,GtkSelectionData *data, unsigned int info,unsigned int time,gpointer user_data)
-{
-	gchar **array = NULL;
-	gchar *filename = NULL;
-	gchar *dirname = NULL;
-	unsigned int len = 0;
-	GtkTreeIter iter;
-	GtkTreeSelection *selection;
-	GtkTreeModel *model;
-
-	array = gtk_selection_data_get_uris(data);
-	if (array == NULL || GTK_WIDGET_VISIBLE(viewport2))
-	{
-		response = xa_show_message_dialog (GTK_WINDOW (xa_main_window),GTK_DIALOG_MODAL,GTK_MESSAGE_ERROR,GTK_BUTTONS_OK,_("Sorry, I could not perform the operation!"),"" );
-		gtk_drag_finish(context,FALSE,FALSE,time);
-		return;
-	}
-	gtk_drag_finish (context,TRUE,FALSE,time);
-
-	while (array[len])
-	{
-		filename = g_filename_from_uri (array[len],NULL,NULL);
-		g_print ("You sent: %s\n",filename);
-		g_free(filename);
-		len++;
-	}
-	selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (widget));
-	if (gtk_tree_selection_get_selected (selection,&model,&iter))
-	{
-		gtk_tree_model_get(model,&iter,1,&dirname,-1);
-		g_print ("Hai selezionato: %s\n",dirname);
-		g_free(dirname);
-	}
-}

Modified: xarchiver/trunk/src/archive.h
===================================================================
--- xarchiver/trunk/src/archive.h	2008-07-09 06:30:06 UTC (rev 27240)
+++ xarchiver/trunk/src/archive.h	2008-07-09 09:09:16 UTC (rev 27241)
@@ -153,6 +153,5 @@
 void xa_sidepane_row_selected(GtkTreeSelection *selection, gpointer data);
 void xa_sidepane_select_row(XEntry *entry);
 gboolean _xa_sidepane_select_row(GtkTreeModel *model,GtkTreePath *path,GtkTreeIter *iter,gpointer data);
-void xa_sidepane_drag_data_received (GtkWidget *widget,GdkDragContext *context,int x,int y,GtkSelectionData *data, unsigned int info,unsigned int time,gpointer user_data);
 XArchive *archive[100];
 #endif

Modified: xarchiver/trunk/src/interface.c
===================================================================
--- xarchiver/trunk/src/interface.c	2008-07-09 06:30:06 UTC (rev 27240)
+++ xarchiver/trunk/src/interface.c	2008-07-09 09:09:16 UTC (rev 27241)
@@ -405,7 +405,7 @@
 	gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(archive_dir_model),1,GTK_SORT_ASCENDING);
 	gtk_tree_view_enable_model_drag_dest(GTK_TREE_VIEW(archive_dir_treeview),drop_targets,1,GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_LINK | GDK_ACTION_ASK);
 	g_signal_connect (G_OBJECT (archive_dir_treeview), "drag-data-received",G_CALLBACK (xa_sidepane_drag_data_received), NULL);
-
+	g_signal_connect (G_OBJECT (archive_dir_treeview), "drag-motion",G_CALLBACK (xa_sidepane_drag_motion), NULL);
 	GtkTreeSelection *sel = gtk_tree_view_get_selection(GTK_TREE_VIEW (archive_dir_treeview));
 	g_signal_connect (sel,"changed",G_CALLBACK (xa_sidepane_row_selected),NULL);
 
@@ -636,6 +636,7 @@
 {
 	GtkWidget *password_dialog,*dialog_vbox1,*vbox1,*hbox2,*image2,*vbox2,*label_pwd_required,*label_filename,*hbox1,*label34,*pw_password_entry;
 	gchar *password = NULL;
+	gboolean done = FALSE;
 
   	password_dialog = gtk_dialog_new_with_buttons ("Xarchiver " VERSION,
 									GTK_WINDOW (xa_main_window), GTK_DIALOG_DESTROY_WITH_PARENT,
@@ -1261,24 +1262,111 @@
     //gtk_widget_set_sensitive (delete,value);
 }
 
-/*
- * Get file path of an item in the archive dir tree.
- * The returned allocated string should be freed when no longer needed.
- * By Hong Jen Yee (PCMan) <pcman.tw at gmail.com>
- */
-char *xa_dir_tree_get_path( GtkTreeIter* it )
+void xa_sidepane_drag_data_received (GtkWidget *widget,GdkDragContext *context,int x,int y,GtkSelectionData *data, unsigned int info,unsigned int time,gpointer user_data)
 {
-    GtkTreeIter parent_it;
-    char *path = NULL, *parent_path = NULL, *name = NULL;
-    gtk_tree_model_get( archive_dir_model, it, 1, &name, -1 );
-    if( gtk_tree_model_iter_parent( archive_dir_model, &parent_it, it ) )
-    {
-        parent_path = xa_dir_tree_get_path( &parent_it );
-        path = g_build_filename( parent_path, name, NULL );
-        g_free( parent_path );
-        g_free( name );
-    }
-    else
-        path = name;
-    return path;
+	gchar **array = NULL;
+	gchar *filename = NULL;
+	gchar *name = NULL;
+	unsigned int len = 0;
+	gint current_page;
+	gint idx;
+	GString *names = g_string_new("");
+	GSList *list = NULL;
+	GtkTreeModel *model;
+	GtkTreePath *path;
+	GtkTreeIter iter;
+	GtkTreeIter parent;
+	GString *full_pathname = g_string_new("");
+	gboolean full_path,add_recurse,dummy_password;
+
+	model = gtk_tree_view_get_model(GTK_TREE_VIEW(widget));
+	current_page = gtk_notebook_get_current_page(notebook);
+	idx = xa_find_archive_index(current_page);
+
+	array = gtk_selection_data_get_uris(data);
+	if (array == NULL || GTK_WIDGET_VISIBLE(viewport2))
+	{
+		response = xa_show_message_dialog (GTK_WINDOW (xa_main_window),GTK_DIALOG_MODAL,GTK_MESSAGE_ERROR,GTK_BUTTONS_OK,_("Sorry, I could not perform the operation!"),"" );
+		gtk_drag_finish(context,FALSE,FALSE,time);
+		return;
+	}
+	while (array[len])
+	{
+		filename = g_filename_from_uri (array[len],NULL,NULL);
+		list = g_slist_append(list,filename);
+		len++;
+	}
+	const char *home_dir = g_get_home_dir();
+	chdir (home_dir);
+
+	/* Let's get the full pathname so to add dropped files there */
+	path = g_object_get_data(G_OBJECT(context),"current_path");
+	if (path == NULL)
+	{
+		gtk_drag_finish (context,TRUE,FALSE,time);
+		return;
+	}
+	gtk_tree_model_get_iter(model,&iter,path);
+	gtk_tree_model_get(model,&iter,1,&name,-1);
+	g_string_prepend_c(full_pathname,'/');
+	g_string_prepend(full_pathname,name);
+	gtk_tree_path_free(path);
+
+	while (gtk_tree_model_iter_parent(model,&parent,&iter))
+	{
+		gtk_tree_model_get(model,&parent,1,&name,-1);
+		g_string_prepend_c(full_pathname,'/');
+		g_string_prepend(full_pathname,name);
+		iter = parent;
+	}
+	if (archive[idx]->location_entry_path != NULL)
+		g_free(archive[idx]->location_entry_path);
+
+	/* This to store the dragged files inside an archive dir */
+	archive[idx]->location_entry_path = g_strdup(full_pathname->str);
+	xa_cat_filenames_basename(archive[idx],list,names);
+	dummy_password = archive[idx]->has_passwd;
+	full_path = archive[idx]->full_path;
+	add_recurse = archive[idx]->add_recurse;
+
+	archive[idx]->has_passwd = 0;
+	archive[idx]->full_path = 0;
+	archive[idx]->add_recurse = 1;
+	xa_execute_add_commands(archive[idx],names,list,NULL);
+
+	archive[idx]->has_passwd = dummy_password;
+	archive[idx]->full_path = full_path;
+	archive[idx]->add_recurse = add_recurse;
+	
+	g_string_free(full_pathname,TRUE);
+	if (list != NULL)
+	{
+		g_slist_foreach(list,(GFunc) g_free,NULL);
+		g_slist_free(list);
+	}
+	g_strfreev (array);
+	gtk_drag_finish (context,TRUE,FALSE,time);
 }
+
+gboolean xa_sidepane_drag_motion (GtkWidget *widget,GdkDragContext *context,gint x,gint y,guint time,gpointer user_data)
+{
+	GtkTreePath *path;
+	GtkTreeViewDropPosition pos;
+	GtkTreeIter iter;
+	GtkTreeModel *model;
+	
+	model = gtk_tree_view_get_model(GTK_TREE_VIEW(widget));
+	gtk_tree_view_get_dest_row_at_pos (GTK_TREE_VIEW (widget),x,y,&path,&pos);
+	if (path)
+	{
+		if (! gtk_tree_view_row_expanded(GTK_TREE_VIEW(widget),path))
+			gtk_tree_view_expand_to_path(GTK_TREE_VIEW(widget),path);
+
+		gtk_tree_model_get_iter (GTK_TREE_MODEL(model),&iter,path);
+		g_object_set_data(G_OBJECT(context),"current_path",path);
+		/* This to set the focus on the dropped row */
+		gtk_tree_view_set_drag_dest_row(GTK_TREE_VIEW(widget),path,GTK_TREE_VIEW_DROP_INTO_OR_BEFORE);
+	}
+	gdk_drag_status (context, context->suggested_action, time);
+	return TRUE;
+}

Modified: xarchiver/trunk/src/interface.h
===================================================================
--- xarchiver/trunk/src/interface.h	2008-07-09 06:30:06 UTC (rev 27240)
+++ xarchiver/trunk/src/interface.h	2008-07-09 09:09:16 UTC (rev 27241)
@@ -137,8 +137,7 @@
 void xa_close_page (GtkWidget *, gpointer );
 void xa_set_button_state (gboolean,gboolean,gboolean,gboolean,gboolean, gboolean, gboolean,gboolean);
 void xa_restore_navigation(int idx);
-void xa_disable_delete_buttons (gboolean );
-char *xa_dir_tree_get_path( GtkTreeIter* it );
-
+void xa_disable_delete_buttons (gboolean);
+void xa_sidepane_drag_data_received (GtkWidget *widget,GdkDragContext *context,int x,int y,GtkSelectionData *data, unsigned int info,unsigned int time,gpointer user_data);
+gboolean xa_sidepane_drag_motion (GtkWidget *widget,GdkDragContext *context,gint x,gint y,guint time,gpointer user_data);
 #endif
-

Modified: xarchiver/trunk/src/main.c
===================================================================
--- xarchiver/trunk/src/main.c	2008-07-09 06:30:06 UTC (rev 27240)
+++ xarchiver/trunk/src/main.c	2008-07-09 09:09:16 UTC (rev 27241)
@@ -260,21 +260,6 @@
 	}
 }
 
-gchar *get_argv_filename(const gchar *filename)
-{
-	gchar *result;
-
-	if (g_path_is_absolute(filename))
-		result = g_strdup(filename);
-	else
-	{
-		gchar *cur_dir = g_get_current_dir();
-		result = g_strjoin("/",cur_dir,filename,NULL);
-		g_free(cur_dir);
-	}
-	return result;
-}
-
 void xa_set_available_archivers()
 {
 	delete[0]  = 0;
@@ -454,7 +439,10 @@
     }
     absolute_path = g_find_program_in_path("xdg-open");
     if (absolute_path != NULL)
+    {
     	xdg_open = TRUE;
+    	g_free (absolute_path);
+    }
 }
 
 XArchive *xa_init_structure_from_cmd_line (char *filename)

Modified: xarchiver/trunk/src/main.h
===================================================================
--- xarchiver/trunk/src/main.h	2008-07-09 06:30:06 UTC (rev 27240)
+++ xarchiver/trunk/src/main.h	2008-07-09 09:09:16 UTC (rev 27241)
@@ -32,7 +32,6 @@
 gchar *config_file,*tar;
 void xa_set_available_archivers();
 
-gchar *get_argv_filename(const gchar *filename);
 XArchive *xa_init_structure_from_cmd_line (char *filename);
 #endif /* MAIN_H */
 

Modified: xarchiver/trunk/src/window.c
===================================================================
--- xarchiver/trunk/src/window.c	2008-07-09 06:30:06 UTC (rev 27240)
+++ xarchiver/trunk/src/window.c	2008-07-09 09:09:16 UTC (rev 27241)
@@ -32,6 +32,7 @@
 extern GList *ArchiveSuffix;
 extern gboolean stop_flag;
 extern gboolean unrar;
+extern gboolean xdg_open;
 extern Prefs_dialog_data *prefs_window;
 extern gchar *config_file;
 extern void xa_free_icon_cache();
@@ -1133,6 +1134,7 @@
 	gtk_tree_view_set_model ( GTK_TREE_VIEW (archive->treeview), GTK_TREE_MODEL (archive->liststore) );
 
 	archive->model = gtk_tree_view_get_model(GTK_TREE_VIEW(archive->treeview));
+	//gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(archive->model),1,GTK_SORT_ASCENDING);
 	g_object_ref(archive->model);
 	gtk_tree_view_set_model(GTK_TREE_VIEW(archive->treeview), NULL);
 
@@ -1552,6 +1554,7 @@
 	gchar *to_send = "E";
 	GList *row_list = NULL;
 	GString *names;
+	gboolean full_path,overwrite;
 
     selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (archive->treeview));
 	row_list = gtk_tree_selection_get_selected_rows (selection, NULL);
@@ -1629,6 +1632,7 @@
 	GSList *list = NULL;
 	gboolean one_file;
 	gboolean dummy_password;
+	gboolean full_path,add_recurse;
 	unsigned int len = 0;
 	gint current_page;
 	gint idx;
@@ -1778,22 +1782,24 @@
 
 void xa_activate_link (GtkAboutDialog *about,const gchar *link,gpointer data)
 {
-	gchar *browser_path;
 	gboolean result;
 
-	browser_path = gtk_combo_box_get_active_text(GTK_COMBO_BOX(prefs_window->combo_prefered_web_browser));
-
-	if (strlen(browser_path) == 0)
+	if ( !xdg_open)
 	{
-		response = xa_show_message_dialog (GTK_WINDOW (xa_main_window),GTK_DIALOG_MODAL,GTK_MESSAGE_INFO,GTK_BUTTONS_OK,
-		_("You didn't set which browser to use!"),_("Please go to Preferences->Advanced and set it."));		
-		g_free (browser_path);
-		return;	
+		gchar *browser_path = NULL;
+		browser_path = gtk_combo_box_get_active_text(GTK_COMBO_BOX(prefs_window->combo_prefered_web_browser));
+		if (strlen(browser_path) == 0)
+		{
+			response = xa_show_message_dialog (GTK_WINDOW (xa_main_window),GTK_DIALOG_MODAL,GTK_MESSAGE_INFO,GTK_BUTTONS_OK,_("You didn't set which browser to use!"),_("Please go to Preferences->Advanced and set it."));
+			g_free (browser_path);
+			return;
+		}
+		result = xa_launch_external_program(browser_path,(gchar *)link);
+		if (browser_path != NULL)
+			g_free (browser_path);
 	}
-	result = xa_launch_external_program(browser_path,(gchar *)link);
-
-	if (browser_path != NULL)
-		g_free (browser_path);
+	else
+		xa_launch_external_program("xdg-open",(gchar *)link);
 }
 
 gboolean xa_launch_external_program(gchar *program,gchar *arg)
@@ -1825,7 +1831,7 @@
 	return TRUE;
 }
 
-void xa_show_help (GtkMenuItem *menuitem , gpointer user_data )
+void xa_show_help (GtkMenuItem *menuitem,gpointer user_data )
 {
 	gchar *uri = g_strconcat ("file://", DATADIR, "/doc/", PACKAGE, "/html/index.html", NULL);
 	xa_activate_link (NULL,uri,NULL);

Modified: xarchiver/trunk/src/window.h
===================================================================
--- xarchiver/trunk/src/window.h	2008-07-09 06:30:06 UTC (rev 27240)
+++ xarchiver/trunk/src/window.h	2008-07-09 09:09:16 UTC (rev 27241)
@@ -55,7 +55,6 @@
 short int response;
 double content_size;
 unsigned long long int file_size, file_offset;
-gboolean done,full_path,overwrite,add_recurse;
 Extract_dialog_data *extract_window;
 Add_dialog_data *add_window;
 GtkWidget *dialog, *scrollwin, *view_window, *_properties_win;



More information about the Xfce4-commits mailing list