[Xfce4-commits] r27193 - in xarchiver/trunk: . src
Giuseppe Torelli
colossus at xfce.org
Wed Jul 2 14:42:48 CEST 2008
Author: colossus
Date: 2008-07-02 12:42:48 +0000 (Wed, 02 Jul 2008)
New Revision: 27193
Modified:
xarchiver/trunk/README
xarchiver/trunk/src/archive.c
xarchiver/trunk/src/archive.h
xarchiver/trunk/src/interface.c
xarchiver/trunk/src/string_utils.c
xarchiver/trunk/src/string_utils.h
xarchiver/trunk/src/window.c
Log:
Clicking on the directories in the sidepane will update the location bar and the main window with the
respective archive entries.
Updated README file.
Modified: xarchiver/trunk/README
===================================================================
--- xarchiver/trunk/README 2008-07-02 09:08:48 UTC (rev 27192)
+++ xarchiver/trunk/README 2008-07-02 12:42:48 UTC (rev 27193)
@@ -1,6 +1,7 @@
What is it?
===========
-Xarchiver is a Desktop Environment independent archiver frontend. All common archive types are supported.
+Xarchiver is the best user graphic interface on Linux for handling archives. It's a Desktop Environment independent
+archiver frontend. All common archive types are supported.
RPM and DEB packages are handled without their package managers. To run it you only need GTK+2 libraries and
obviously the various rar, arj and 7z for these archive types. All the others archivers are installed by
default in most distro.
Modified: xarchiver/trunk/src/archive.c
===================================================================
--- xarchiver/trunk/src/archive.c 2008-07-02 09:08:48 UTC (rev 27192)
+++ xarchiver/trunk/src/archive.c 2008-07-02 12:42:48 UTC (rev 27193)
@@ -532,7 +532,7 @@
void xa_update_window_with_archive_entries (XArchive *archive,XEntry *entry)
{
GdkPixbuf *pixbuf = NULL;
- GtkTreeIter iter,dummy_iter;
+ GtkTreeIter iter;
unsigned short int i;
gpointer current_column;
@@ -613,9 +613,7 @@
}
entry = entry->next;
}
- if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(archive_dir_model),&dummy_iter));
- else
- xa_browse_dir_sidebar(archive->root_entry,archive_dir_model,NULL,NULL);
+ xa_fill_dir_sidebar(archive);
}
XEntry* xa_find_entry_from_path (XEntry *root_entry,const gchar *fullpathname)
@@ -822,15 +820,57 @@
if (entry->is_dir)
{
gtk_tree_store_append(model,&child_iter,containing_iter);
- gtk_tree_store_set(model,&child_iter,0,"gtk-directory",1,entry->filename,2,"",-1);
+ gtk_tree_store_set(model,&child_iter,0,"gtk-directory",1,entry->filename,2,entry,-1);
}
xa_browse_dir_sidebar(entry->child,model,NULL,&child_iter);
xa_browse_dir_sidebar(entry->next, model,NULL,containing_iter);
}
-void xa_clean_dir_sidebar()
+void xa_fill_dir_sidebar(XArchive *archive)
{
- gtk_tree_store_clear(GTK_TREE_STORE(model));
+ GtkTreeIter iter;
+
+ if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(archive_dir_model),&iter))
+ return;
+
+ gtk_tree_store_clear(GTK_TREE_STORE(archive_dir_model));
+ xa_browse_dir_sidebar(archive->root_entry,archive_dir_model,NULL,NULL);
}
+void xa_sidepane_row_selected(GtkTreeSelection *selection, gpointer data)
+{
+ XEntry *entry;
+ GtkTreeIter iter;
+ GtkTreeIter parent;
+ GtkTreeModel *model;
+ GString *string = g_string_new("");
+ gchar *dir;
+ gint current_page;
+ gint idx;
+
+ current_page = gtk_notebook_get_current_page(notebook);
+ idx = xa_find_archive_index(current_page);
+
+ if (gtk_tree_selection_get_selected (selection,&model,&iter))
+ {
+ /* Let get the last selected dir */
+ gtk_tree_model_get(model,&iter,1,&dir,-1);
+ g_string_prepend_c(string,'/');
+ g_string_prepend(string,dir);
+
+ /* Get the memory address of entry so to update the main listview */
+ gtk_tree_model_get(model,&iter,2,&entry,-1);
+ while (gtk_tree_model_iter_parent(model,&parent,&iter))
+ {
+ gtk_tree_model_get(model,&parent,1,&dir,-1);
+ g_string_prepend_c(string,'/');
+ g_string_prepend(string,dir);
+ iter = parent;
+ }
+ gtk_entry_set_text(GTK_ENTRY(location_entry),string->str);
+ g_string_free(string,TRUE);
+
+ xa_update_window_with_archive_entries(archive[idx],entry);
+ }
+}
Modified: xarchiver/trunk/src/archive.h
===================================================================
--- xarchiver/trunk/src/archive.h 2008-07-02 09:08:48 UTC (rev 27192)
+++ xarchiver/trunk/src/archive.h 2008-07-02 12:42:48 UTC (rev 27193)
@@ -143,6 +143,7 @@
void xa_entries_to_filelist(XEntry *, GString **, gchar *);
gboolean xa_detect_encrypted_archive (XArchive *archive);
void xa_browse_dir_sidebar (XEntry *, GtkTreeStore *,gchar *,GtkTreeIter *);
-void xa_clean_dir_sidebar();
+void xa_fill_dir_sidebar(XArchive *);
+void xa_sidepane_row_selected(GtkTreeSelection *selection, gpointer data);
XArchive *archive[100];
#endif
Modified: xarchiver/trunk/src/interface.c
===================================================================
--- xarchiver/trunk/src/interface.c 2008-07-02 09:08:48 UTC (rev 27192)
+++ xarchiver/trunk/src/interface.c 2008-07-02 12:42:48 UTC (rev 27193)
@@ -384,7 +384,6 @@
hpaned1 = gtk_hpaned_new ();
gtk_widget_show (hpaned1);
gtk_box_pack_start (GTK_BOX (vbox1),hpaned1,TRUE,TRUE,0);
- //gtk_paned_set_position (GTK_PANED (hpaned1),200);
scrolledwindow2 = gtk_scrolled_window_new (NULL, NULL);
if (show_sidebar)
@@ -394,17 +393,15 @@
gtk_paned_pack1 (GTK_PANED (hpaned1), scrolledwindow2, FALSE, TRUE);
g_object_set (G_OBJECT (scrolledwindow2),"hscrollbar-policy", GTK_POLICY_AUTOMATIC,"vscrollbar-policy", GTK_POLICY_AUTOMATIC, NULL);
- archive_dir_model = gtk_tree_store_new (3,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING);
+ archive_dir_model = gtk_tree_store_new (3,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_POINTER);
archive_dir_treeview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(archive_dir_model));
gtk_container_add (GTK_CONTAINER (scrolledwindow2), archive_dir_treeview);
gtk_widget_show(archive_dir_treeview);
gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (archive_dir_treeview), FALSE);
gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(archive_dir_model),1,GTK_SORT_ASCENDING);
- /*g_signal_connect (G_OBJECT (archive_dir_treeview),"row-expanded",G_CALLBACK(xa_expand_dir),dialog_data->destination_path_entry);
- g_signal_connect (G_OBJECT (archive_dir_treeview),"row-activated",G_CALLBACK(xa_row_activated),dialog_data->destination_path_entry);
GtkTreeSelection *sel = gtk_tree_view_get_selection(GTK_TREE_VIEW (archive_dir_treeview));
- g_signal_connect (sel,"changed",G_CALLBACK (xa_tree_view_row_selected),dialog_data->destination_path_entry);*/
+ g_signal_connect (sel,"changed",G_CALLBACK (xa_sidepane_row_selected),NULL);
column = gtk_tree_view_column_new();
archive_dir_renderer = gtk_cell_renderer_pixbuf_new();
@@ -415,8 +412,6 @@
gtk_tree_view_column_pack_start(column,archive_dir_renderer,TRUE);
gtk_tree_view_column_set_attributes(column,archive_dir_renderer,"text",1,NULL);
gtk_tree_view_append_column (GTK_TREE_VIEW (archive_dir_treeview),column);
- /*g_signal_connect (renderer, "editing-canceled",G_CALLBACK (xa_cell_edited_canceled),dialog_data);
- g_signal_connect (renderer, "edited",G_CALLBACK (xa_cell_edited),dialog_data);*/
/* Create the notebook widget */
notebook = GTK_NOTEBOOK(gtk_notebook_new() );
@@ -675,8 +670,12 @@
gtk_misc_set_alignment (GTK_MISC (label_filename), 0, 0.5);
if (archive_name != NULL)
- gtk_label_set_text(GTK_LABEL(label_filename),archive_name);
-
+ {
+ gchar *name;
+ name = xa_remove_path_from_archive_name(archive_name);
+ gtk_label_set_text(GTK_LABEL(label_filename),name);
+ g_free (name);
+ }
hbox1 = gtk_hbox_new (FALSE, 5);
gtk_widget_show (hbox1);
gtk_box_pack_start (GTK_BOX (vbox2), hbox1, TRUE, TRUE, 0);
Modified: xarchiver/trunk/src/string_utils.c
===================================================================
--- xarchiver/trunk/src/string_utils.c 2008-07-02 09:08:48 UTC (rev 27192)
+++ xarchiver/trunk/src/string_utils.c 2008-07-02 12:42:48 UTC (rev 27193)
@@ -145,36 +145,6 @@
return field;
}
-char **split_line (char *line,int n_fields)
-{
- char **fields;
- char *scan, *field_end;
- int i;
-
- fields = g_new0 (char *, n_fields + 1);
- fields[n_fields] = NULL;
-
- scan = eat_spaces (line);
- for (i = 0; i < n_fields; i++)
- {
- if (scan == NULL)
- {
- fields[i] = NULL;
- continue;
- }
- field_end = strchr (scan, ' ');
- //The following line is mine, I added the case when the last field ends with a newline
- if (field_end == NULL)
- field_end = strchr (scan, '\n');
- else
- {
- fields[i] = g_strndup (scan, field_end - scan);
- scan = eat_spaces (field_end);
- }
- }
- return fields;
-}
-
static int count_chars_to_escape (const char *str, const char *meta_chars)
{
int meta_chars_n = strlen (meta_chars);
@@ -346,3 +316,19 @@
}
return (result == 0);
}
+
+gchar *xa_remove_path_from_archive_name(gchar *name)
+{
+ gchar *utf8_string,*text;
+
+ text = g_strrstr (name,"/");
+ if (text != NULL)
+ {
+ text++;
+ utf8_string = g_filename_display_name (text);
+ }
+ else
+ utf8_string = g_filename_display_name (name);
+
+ return utf8_string;
+}
Modified: xarchiver/trunk/src/string_utils.h
===================================================================
--- xarchiver/trunk/src/string_utils.h 2008-07-02 09:08:48 UTC (rev 27192)
+++ xarchiver/trunk/src/string_utils.h 2008-07-02 12:42:48 UTC (rev 27193)
@@ -34,7 +34,6 @@
int CountCharacter ( gchar *string , int chr );
gchar *RemoveBackSlashes ( gchar *name);
char *get_last_field (char *line,int last_field);
-char **split_line (char *line,int n_fields);
char *xa_escape_common_chars (const char *str, const char *meta_chars, const char prefix, const char postfix);
char *eat_spaces (char *line);
gchar *xa_get_parent_dir (const gchar *current_dir);
@@ -43,5 +42,6 @@
gchar *extract_local_path (gchar *path);
void xa_set_window_title ( GtkWidget *window , gchar *title);
gboolean match_patterns (char **patterns,const char *string,int flags);
+gchar *xa_remove_path_from_archive_name(gchar *name);
#endif
Modified: xarchiver/trunk/src/window.c
===================================================================
--- xarchiver/trunk/src/window.c 2008-07-02 09:08:48 UTC (rev 27192)
+++ xarchiver/trunk/src/window.c 2008-07-02 12:42:48 UTC (rev 27193)
@@ -852,7 +852,7 @@
"name", "xarchiver",
"version", PACKAGE_VERSION,
"copyright", "Copyright \xC2\xA9 2005-2008 Giuseppe Torelli",
- "comments", "A lightweight GTK+2 archive manager",
+ "comments", "The best GUI for handling archivers on Linux",
"authors", authors,
"documenters",documenters,
"translator_credits", _("translator-credits"),
@@ -1360,7 +1360,7 @@
void xa_archive_properties (GtkMenuItem *menuitem,gpointer user_data)
{
struct stat my_stat;
- gchar *utf8_string , *measure, *text, *dummy_string;
+ gchar *utf8_string , *measure,*dummy_string;
char date[64];
gchar *t;
unsigned long long int file_size;
@@ -1372,17 +1372,9 @@
stat (archive[idx]->path , &my_stat );
file_size = my_stat.st_size;
archive_properties_win = create_archive_properties_window();
- //Name
- text = g_strrstr ( archive[idx]->path, "/" );
- if (text != NULL)
- {
- text++;
- utf8_string = g_filename_display_name (text);
- }
- else
- utf8_string = g_filename_display_name (archive[idx]->path);
- gtk_entry_set_text ( GTK_ENTRY (name_data), utf8_string );
- g_free (utf8_string);
+ utf8_string = xa_remove_path_from_archive_name(archive[idx]->escaped_path);
+ gtk_entry_set_text ( GTK_ENTRY (name_data), utf8_string );
+ g_free (utf8_string);
//Path
dummy_string = remove_level_from_path (archive[idx]->path);
if (strlen(dummy_string) == 0 || strcmp(dummy_string,"..") == 0)
More information about the Xfce4-commits
mailing list