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) <[EMAIL PROTECTED]>
- */
-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;
_______________________________________________
Xfce4-commits mailing list
[email protected]
http://foo-projects.org/mailman/listinfo/xfce4-commits