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

Reply via email to