Home | History | Annotate | Download | only in patches
      1  17265  erwannc diff -Nrup SUNWgnome-file-mgr-2.24.2/nautilus-2.24.2/configure.in nautilus-2.24.2/configure.in
      2  17265  erwannc --- SUNWgnome-file-mgr-2.24.2/nautilus-2.24.2/configure.in	2008-10-20 14:09:22.000000000 +0200
      3  17265  erwannc +++ nautilus-2.24.2/configure.in	2009-01-23 22:36:12.616536282 +0100
      4  15264  erwannc @@ -327,6 +327,22 @@ if test "x$enable_beagle" != "xno"; then
      5  15264  erwannc          AC_SUBST(BEAGLE_CFLAGS)
      6  15264  erwannc  	AC_SUBST(BEAGLE_LIBS)
      7  15264  erwannc  fi
      8  15264  erwannc +dnl ==========================================================================
      9  15264  erwannc +
     10  15264  erwannc +dnl ********************
     11  15264  erwannc +dnl * Check for libzfs *
     12  15264  erwannc +dnl ********************
     13  15264  erwannc +ZFS_LIBS=
     14  15264  erwannc +msg_zfs=no
     15  15264  erwannc +AC_CHECK_LIB(zfs, zfs_iter_root,
     16  15264  erwannc +   [AC_CHECK_HEADER(libzfs.h,
     17  15264  erwannc +       [AC_DEFINE(HAVE_ZFS, 1, [Define to 1 if ZFS is available])
     18  15264  erwannc +        ZFS_LIBS="-lzfs"
     19  15264  erwannc +        msg_zfs=yes])
     20  15264  erwannc +     ])
     21  15264  erwannc +AC_SUBST(ZFS_LIBS)
     22  15264  erwannc +
     23  15264  erwannc +
     24  15264  erwannc  
     25  15264  erwannc  dnl ==========================================================================
     26  15264  erwannc  
     27  17265  erwannc diff -Nrup SUNWgnome-file-mgr-2.24.2/nautilus-2.24.2/icons/Makefile.am nautilus-2.24.2/icons/Makefile.am
     28  17265  erwannc --- SUNWgnome-file-mgr-2.24.2/nautilus-2.24.2/icons/Makefile.am	2008-10-06 19:22:21.000000000 +0200
     29  17265  erwannc +++ nautilus-2.24.2/icons/Makefile.am	2009-01-23 22:36:10.586685500 +0100
     30  17150  erwannc @@ -12,6 +12,10 @@ icon_DATA =\
     31  15526  erwannc  	knob.png \
     32  15526  erwannc  	note-indicator.png \
     33  15526  erwannc  	thumbnail_frame.png \
     34  15526  erwannc +	restore.png \
     35  16819  erwannc +	restore-search.png \
     36  16819  erwannc +	restore-no.png \
     37  17150  erwannc +	camera.png \
     38  15526  erwannc  	$(NULL)
     39  15526  erwannc  
     40  15526  erwannc  EXTRA_DIST = $(icon_DATA)
     41  17265  erwannc diff -Nrup SUNWgnome-file-mgr-2.24.2/nautilus-2.24.2/libnautilus-private/Makefile.am nautilus-2.24.2/libnautilus-private/Makefile.am
     42  17265  erwannc --- SUNWgnome-file-mgr-2.24.2/nautilus-2.24.2/libnautilus-private/Makefile.am	2009-01-23 22:38:49.620637861 +0100
     43  17265  erwannc +++ nautilus-2.24.2/libnautilus-private/Makefile.am	2009-01-23 22:36:11.639751348 +0100
     44  15264  erwannc @@ -32,6 +32,7 @@ libnautilus_private_la_LIBADD =		\
     45  15264  erwannc  	$(TRACKER_LIBS)			\
     46  15264  erwannc  	$(top_builddir)/libnautilus-extension/libnautilus-extension.la \
     47  15264  erwannc  	$(CORE_LIBS)			\
     48  15264  erwannc +	$(ZFS_LIBS)			\
     49  15264  erwannc  	$(NULL)
     50  15264  erwannc  
     51  15264  erwannc  marshal_sources = \
     52  15264  erwannc @@ -200,6 +201,8 @@ libnautilus_private_la_SOURCES = \
     53  15264  erwannc  	nautilus-window-info.h \
     54  15264  erwannc  	nautilus-window-slot-info.c \
     55  15264  erwannc  	nautilus-window-slot-info.h \
     56  15264  erwannc +	nautilus-zfs.c \
     57  15264  erwannc +	nautilus-zfs.h \	
     58  15264  erwannc  	$(NULL)
     59  15264  erwannc  
     60  15264  erwannc  BEAGLE_SOURCES = \
     61  16819  erwannc diff -x '*.out' -x '*.*~' -x '*.orig' -x '*.rej' -rupN nautilus-2.24.2/libnautilus-private/apps_nautilus_preferences.schemas.in ../nautilus-full-async/libnautilus-private/apps_nautilus_preferences.schemas.in
     62  16819  erwannc --- nautilus-2.24.2/libnautilus-private/apps_nautilus_preferences.schemas.in	2008-12-02 14:18:12.708779941 +0100
     63  16819  erwannc +++ ../nautilus-full-async/libnautilus-private/apps_nautilus_preferences.schemas.in	2008-12-02 11:42:32.798412022 +0100
     64  16342  erwannc @@ -5,6 +5,19 @@
     65  16342  erwannc           in nautilus-global-preferences.c -->
     66  16342  erwannc  
     67  16342  erwannc      <!-- General preferences -->
     68  16342  erwannc +      <schema>
     69  16342  erwannc +       <key>/schemas/apps/nautilus/preferences/enable_time_slider</key>
     70  16342  erwannc +       <applyto>/apps/nautilus/preferences/enable_time_slider</applyto>
     71  16342  erwannc +       <owner>nautilus</owner>
     72  16342  erwannc +       <type>bool</type>
     73  16342  erwannc +       <default>true</default>
     74  16342  erwannc +       <locale name="C">
     75  16342  erwannc +          <short>Enables the visualization of the ZFS snaphots timeline</short>
     76  16342  erwannc +          <long>
     77  16342  erwannc +            If set to true, the visualization of the ZFS snapshots timeline is enabled
     78  16342  erwannc +          </long>
     79  16342  erwannc +       </locale>
     80  16342  erwannc +     </schema>
     81  16342  erwannc  
     82  16342  erwannc      <schema>
     83  16342  erwannc        <key>/schemas/desktop/gnome/file_views/show_hidden_files</key>
     84  17265  erwannc diff -Nrup SUNWgnome-file-mgr-2.24.2/nautilus-2.24.2/libnautilus-private/nautilus-column-utilities.c nautilus-2.24.2/libnautilus-private/nautilus-column-utilities.c
     85  17265  erwannc --- SUNWgnome-file-mgr-2.24.2/nautilus-2.24.2/libnautilus-private/nautilus-column-utilities.c	2009-01-23 22:38:49.621050437 +0100
     86  17265  erwannc +++ nautilus-2.24.2/libnautilus-private/nautilus-column-utilities.c	2009-01-23 22:36:11.726383584 +0100
     87  15715  erwannc @@ -122,6 +122,13 @@ get_builtin_columns (void)
     88  15715  erwannc  					       "description", _("The SELinux security context of the file."),
     89  15715  erwannc  					       NULL));
     90  15715  erwannc  #endif
     91  15715  erwannc +	columns = g_list_append (columns,
     92  15715  erwannc +				 g_object_new (NAUTILUS_TYPE_COLUMN,
     93  15715  erwannc +					       "name", "restore_info",
     94  15715  erwannc +					       "attribute", "restore_info",
     95  15715  erwannc +					       "label", _("Restore information"),
     96  15715  erwannc +					       "description", _("Restore information of the file."),
     97  15715  erwannc +					       NULL));
     98  15715  erwannc  	
     99  15715  erwannc  	return columns;
    100  15715  erwannc  }
    101  17265  erwannc diff -Nrup SUNWgnome-file-mgr-2.24.2/nautilus-2.24.2/libnautilus-private/nautilus-directory-async.c nautilus-2.24.2/libnautilus-private/nautilus-directory-async.c
    102  17265  erwannc --- SUNWgnome-file-mgr-2.24.2/nautilus-2.24.2/libnautilus-private/nautilus-directory-async.c	2009-01-23 22:38:49.600884917 +0100
    103  17265  erwannc +++ nautilus-2.24.2/libnautilus-private/nautilus-directory-async.c	2009-01-23 22:36:11.646385711 +0100
    104  16819  erwannc @@ -640,6 +640,10 @@ nautilus_directory_set_up_request (Reque
    105  16819  erwannc  	if (file_attributes & NAUTILUS_FILE_ATTRIBUTE_FILESYSTEM_INFO) {
    106  16819  erwannc  		request->filesystem_info = TRUE;
    107  16819  erwannc  	}
    108  16819  erwannc +	
    109  16819  erwannc +	if (file_attributes & NAUTILUS_FILE_ATTRIBUTE_RESTORE_INFO) {
    110  16819  erwannc +		request->restore_info = TRUE;
    111  16819  erwannc +	}
    112  16819  erwannc  }
    113  16819  erwannc  
    114  16819  erwannc  static void
    115  16819  erwannc @@ -4723,6 +4727,18 @@ cancel_link_info_for_file (NautilusDirec
    116  16819  erwannc  	}
    117  16819  erwannc  }
    118  16819  erwannc  
    119  16819  erwannc +void nautilus_directory_cancel_restore_info (NautilusDirectory *directory)
    120  16819  erwannc +{
    121  16819  erwannc +  if (NAUTILUS_IS_DIRECTORY (directory))
    122  16819  erwannc +    {
    123  16819  erwannc +      if (directory->details->restore_cancel)
    124  16819  erwannc +	{
    125  16819  erwannc +	  g_cancellable_cancel (directory->details->restore_cancel);
    126  16819  erwannc +	  directory->details->restore_cancel = NULL;
    127  16819  erwannc +	}
    128  16819  erwannc +    }
    129  16819  erwannc +}
    130  16819  erwannc +
    131  16819  erwannc  
    132  16819  erwannc  static void
    133  16819  erwannc  cancel_loading_attributes (NautilusDirectory *directory,
    134  16819  erwannc @@ -4766,6 +4782,10 @@ cancel_loading_attributes (NautilusDirec
    135  16819  erwannc  	if (request.mount) {
    136  16819  erwannc  		mount_cancel (directory);
    137  16819  erwannc  	}
    138  16819  erwannc +
    139  16819  erwannc +	if (request.restore_info) {
    140  16819  erwannc +	    nautilus_directory_cancel_restore_info (directory);
    141  16819  erwannc +	}
    142  16819  erwannc  	
    143  16819  erwannc  	/* FIXME bugzilla.gnome.org 45064: implement cancelling metadata when we
    144  16819  erwannc  	   implement invalidating metadata */
    145  16819  erwannc @@ -4812,6 +4832,9 @@ nautilus_directory_cancel_loading_file_a
    146  16819  erwannc  	if (request.mount) {
    147  16819  erwannc  		cancel_mount_for_file (directory, file);
    148  16819  erwannc  	}
    149  16819  erwannc +	if (request.restore_info) {
    150  16819  erwannc +	    nautilus_directory_cancel_restore_info (directory);
    151  16819  erwannc +	}
    152  16819  erwannc  
    153  16819  erwannc  	/* FIXME bugzilla.gnome.org 45064: implement cancelling metadata when we
    154  16819  erwannc  	   implement invalidating metadata */
    155  17265  erwannc diff -Nrup SUNWgnome-file-mgr-2.24.2/nautilus-2.24.2/libnautilus-private/nautilus-directory-private.h nautilus-2.24.2/libnautilus-private/nautilus-directory-private.h
    156  17265  erwannc --- SUNWgnome-file-mgr-2.24.2/nautilus-2.24.2/libnautilus-private/nautilus-directory-private.h	2008-10-06 19:22:21.000000000 +0200
    157  17265  erwannc +++ nautilus-2.24.2/libnautilus-private/nautilus-directory-private.h	2009-01-23 22:36:11.641529607 +0100
    158  16819  erwannc @@ -114,9 +114,14 @@ struct NautilusDirectoryDetails
    159  16819  erwannc  
    160  16819  erwannc  	LinkInfoReadState *link_info_read_state;
    161  16819  erwannc  
    162  16819  erwannc +	GCancellable *restore_cancel;
    163  16819  erwannc +
    164  15264  erwannc  	GList *file_operations_in_progress; /* list of FileOperation * */
    165  15264  erwannc  
    166  15264  erwannc  	GHashTable *hidden_file_hash;
    167  15264  erwannc +
    168  15264  erwannc +	/* zfs snapshot info */
    169  15264  erwannc +	GList *zfs_snapshots;
    170  15264  erwannc  };
    171  15264  erwannc  
    172  15264  erwannc  /* A request for information about one or more files. */
    173  16819  erwannc @@ -134,6 +139,7 @@ typedef struct {
    174  16819  erwannc  	gboolean thumbnail;
    175  16819  erwannc  	gboolean mount;
    176  16819  erwannc  	gboolean filesystem_info;
    177  16819  erwannc +	gboolean restore_info;
    178  16819  erwannc  } Request;
    179  16819  erwannc  
    180  16819  erwannc  NautilusDirectory *nautilus_directory_get_existing                    (GFile                     *location);
    181  17265  erwannc diff -Nrup SUNWgnome-file-mgr-2.24.2/nautilus-2.24.2/libnautilus-private/nautilus-directory.c nautilus-2.24.2/libnautilus-private/nautilus-directory.c
    182  17265  erwannc --- SUNWgnome-file-mgr-2.24.2/nautilus-2.24.2/libnautilus-private/nautilus-directory.c	2009-01-23 22:38:49.601904193 +0100
    183  17265  erwannc +++ nautilus-2.24.2/libnautilus-private/nautilus-directory.c	2009-01-23 22:36:12.453860140 +0100
    184  15264  erwannc @@ -38,6 +38,7 @@
    185  15264  erwannc  #include "nautilus-metafile.h"
    186  15264  erwannc  #include "nautilus-desktop-directory.h"
    187  15264  erwannc  #include "nautilus-vfs-directory.h"
    188  15264  erwannc +#include "nautilus-zfs.h"
    189  15264  erwannc  #include <eel/eel-glib-extensions.h>
    190  15264  erwannc  #include <eel/eel-gtk-macros.h>
    191  15264  erwannc  #include <eel/eel-string.h>
    192  16819  erwannc @@ -140,6 +141,8 @@ nautilus_directory_init (gpointer object
    193  15264  erwannc  	directory->details->low_priority_queue = nautilus_file_queue_new ();
    194  15264  erwannc  	directory->details->extension_queue = nautilus_file_queue_new ();
    195  15264  erwannc  	directory->details->idle_queue = nautilus_idle_queue_new ();
    196  15264  erwannc +	directory->details->zfs_snapshots = NULL;
    197  16819  erwannc +	directory->details->restore_cancel = NULL;
    198  15264  erwannc  }
    199  15264  erwannc  
    200  15264  erwannc  NautilusDirectory *
    201  16819  erwannc @@ -215,7 +218,13 @@ nautilus_directory_finalize (GObject *ob
    202  15264  erwannc  	if (directory->details->hidden_file_hash) {
    203  15264  erwannc  		g_hash_table_destroy (directory->details->hidden_file_hash);
    204  15264  erwannc  	}
    205  16819  erwannc -	
    206  15264  erwannc +
    207  15264  erwannc +	if (directory->details->zfs_snapshots) {
    208  15264  erwannc +	        ts_free_snapshots (directory->details->zfs_snapshots);
    209  15264  erwannc +	}
    210  16819  erwannc +	if (directory->details->restore_cancel)
    211  16819  erwannc +	  g_cancellable_cancel (directory->details->restore_cancel);
    212  16819  erwannc +
    213  15264  erwannc  	nautilus_file_queue_destroy (directory->details->high_priority_queue);
    214  15264  erwannc  	nautilus_file_queue_destroy (directory->details->low_priority_queue);
    215  16819  erwannc  	nautilus_file_queue_destroy (directory->details->extension_queue);
    216  16819  erwannc @@ -330,11 +339,27 @@ async_data_preference_changed_callback (
    217  16342  erwannc  	g_hash_table_foreach (directories, async_state_changed_one, NULL);
    218  16342  erwannc  }
    219  16342  erwannc  
    220  16342  erwannc +static gboolean time_slider_enabled = TRUE;
    221  16342  erwannc +
    222  16819  erwannc +gboolean
    223  16342  erwannc +is_time_slider_enabled ()
    224  16342  erwannc +{
    225  16342  erwannc +  return time_slider_enabled;
    226  16342  erwannc +}
    227  16342  erwannc +
    228  16342  erwannc +static void time_slider_pref_changed_callback ()
    229  16342  erwannc +{
    230  16342  erwannc +  time_slider_enabled = eel_preferences_get_boolean (NAUTILUS_PREFERENCES_ENABLE_TIME_SLIDER);
    231  16342  erwannc +}
    232  16342  erwannc +
    233  16342  erwannc +
    234  16342  erwannc  static void
    235  16342  erwannc  add_preferences_callbacks (void)
    236  15264  erwannc  {
    237  16342  erwannc  	nautilus_global_preferences_init ();
    238  16342  erwannc  
    239  16342  erwannc +	time_slider_enabled = eel_preferences_get_boolean (NAUTILUS_PREFERENCES_ENABLE_TIME_SLIDER);
    240  16342  erwannc +
    241  16342  erwannc  	eel_preferences_add_callback (NAUTILUS_PREFERENCES_SHOW_HIDDEN_FILES,
    242  16342  erwannc  				      filtering_changed_callback,
    243  16342  erwannc  				      NULL);
    244  16819  erwannc @@ -351,6 +376,9 @@ add_preferences_callbacks (void)
    245  16342  erwannc  	eel_preferences_add_callback (NAUTILUS_PREFERENCES_DATE_FORMAT,
    246  16342  erwannc  				      async_data_preference_changed_callback,
    247  16342  erwannc  				      NULL);
    248  16342  erwannc +	eel_preferences_add_callback (NAUTILUS_PREFERENCES_ENABLE_TIME_SLIDER,
    249  16342  erwannc +				      time_slider_pref_changed_callback,
    250  16342  erwannc +				      NULL);
    251  16342  erwannc  }
    252  16342  erwannc  
    253  16342  erwannc  /**
    254  16819  erwannc @@ -544,6 +572,7 @@ nautilus_directory_new (GFile *location)
    255  16342  erwannc  {
    256  15264  erwannc  	NautilusDirectory *directory;
    257  15264  erwannc  	char *uri;
    258  15264  erwannc +	char *path;
    259  15264  erwannc  
    260  15264  erwannc  	uri = g_file_get_uri (location);
    261  15264  erwannc  	
    262  16819  erwannc @@ -555,10 +584,13 @@ nautilus_directory_new (GFile *location)
    263  15264  erwannc  		directory = NAUTILUS_DIRECTORY (nautilus_search_directory_new_from_saved_search (uri));
    264  15264  erwannc  	} else {
    265  15264  erwannc  		directory = NAUTILUS_DIRECTORY (g_object_new (NAUTILUS_TYPE_VFS_DIRECTORY, NULL));
    266  15264  erwannc +		path = g_file_get_path (location);
    267  15264  erwannc +		g_free (path);
    268  15264  erwannc  	}
    269  15264  erwannc  
    270  15264  erwannc  	set_directory_location (directory, location);
    271  15264  erwannc  
    272  15264  erwannc +
    273  15264  erwannc  	g_free (uri);
    274  15264  erwannc  	
    275  15264  erwannc  	return directory;
    276  17150  erwannc @@ -577,6 +609,197 @@ nautilus_directory_is_local (NautilusDir
    277  16819  erwannc  	       g_file_is_native (directory->details->location);
    278  15264  erwannc  }
    279  15264  erwannc  
    280  16819  erwannc +typedef struct {
    281  16819  erwannc +  NautilusDirectory         *dir;
    282  16819  erwannc +  GCancellable	            *cancel;
    283  16819  erwannc +  TsReadyCallback	     callback;
    284  16819  erwannc +  gpointer		     callback_user_data;
    285  16819  erwannc +} QuerySnapshotsAsyncData;
    286  16819  erwannc +
    287  16819  erwannc +
    288  16819  erwannc +static void snapshot_list_ready_callback (GObject *source_object,
    289  16819  erwannc +					  GAsyncResult *res,
    290  16819  erwannc +					  gpointer user_data)
    291  15264  erwannc +{
    292  16819  erwannc +  GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (res);
    293  16819  erwannc +  QuerySnapshotsAsyncData *data = (QuerySnapshotsAsyncData*) user_data;
    294  15280  erwannc +
    295  16819  erwannc +  if (!g_cancellable_is_cancelled (data->cancel))
    296  16819  erwannc +    {
    297  16819  erwannc +      data->dir->details->zfs_snapshots = g_simple_async_result_get_op_res_gpointer (simple);
    298  16819  erwannc +    }
    299  16819  erwannc +
    300  16819  erwannc +  data->callback (data->dir, data->cancel, data->callback_user_data);
    301  16819  erwannc +}
    302  16819  erwannc +
    303  16819  erwannc +void
    304  16819  erwannc +nautilus_directory_get_snapshots_async (NautilusDirectory *directory, 
    305  16819  erwannc +					TsReadyCallback ready_callback, 
    306  16819  erwannc +					GCancellable *cancel, 
    307  16819  erwannc +					gpointer      callback_user_data)
    308  16819  erwannc +{
    309  15264  erwannc +	g_assert (NAUTILUS_IS_DIRECTORY (directory));
    310  15264  erwannc +	
    311  16819  erwannc +	if (directory->details->location == NULL) 
    312  16819  erwannc +	  return;
    313  15264  erwannc +
    314  15264  erwannc +	if (directory->details->zfs_snapshots) {
    315  15264  erwannc +	  ts_free_snapshots (directory->details->zfs_snapshots);
    316  16342  erwannc +	  directory->details->zfs_snapshots = NULL;
    317  15264  erwannc +	}
    318  16819  erwannc +	
    319  16819  erwannc +	if (is_time_slider_enabled ())
    320  16819  erwannc +	  {
    321  16819  erwannc +	    QuerySnapshotsAsyncData *data;
    322  16819  erwannc +	    data = g_new0 (QuerySnapshotsAsyncData,1);
    323  16819  erwannc +	    data->dir = directory;
    324  16819  erwannc +	    data->cancel = cancel;
    325  16819  erwannc +	    data->callback = ready_callback;
    326  16819  erwannc +	    data->callback_user_data = callback_user_data;
    327  15280  erwannc +
    328  16819  erwannc +	    ts_get_snapshots_for_dir_async (directory->details->location, 
    329  16819  erwannc +					    snapshot_list_ready_callback, 
    330  16819  erwannc +					    cancel,
    331  16819  erwannc +					    data);
    332  16819  erwannc +	  }
    333  16819  erwannc +}
    334  16819  erwannc +
    335  16819  erwannc +gboolean
    336  16819  erwannc +nautilus_directory_has_snapshots (NautilusDirectory *directory)
    337  16819  erwannc +{
    338  16819  erwannc +	g_assert (NAUTILUS_IS_DIRECTORY (directory));
    339  16819  erwannc +	
    340  15264  erwannc +	if (directory->details->zfs_snapshots)
    341  15264  erwannc +	  return TRUE;
    342  15264  erwannc +
    343  15264  erwannc +	return FALSE;
    344  15264  erwannc +}
    345  15264  erwannc +int
    346  15264  erwannc +nautilus_directory_get_num_snapshots (NautilusDirectory	*directory)
    347  15264  erwannc +{
    348  15264  erwannc +  g_assert (NAUTILUS_IS_DIRECTORY (directory));
    349  15264  erwannc +
    350  15264  erwannc +    if (directory->details->zfs_snapshots)
    351  15264  erwannc +      {
    352  15264  erwannc +	int i = 0;
    353  15264  erwannc +	GList *tmp;
    354  15350  erwannc +	for (tmp = directory->details->zfs_snapshots;tmp;tmp = tmp->next)
    355  15264  erwannc +	  i++;
    356  15264  erwannc +	return i;
    357  15264  erwannc +      }
    358  15264  erwannc +    return 0;
    359  15264  erwannc +}
    360  15264  erwannc +
    361  15264  erwannc +gboolean           
    362  15264  erwannc +nautilus_directory_is_in_snapshot (NautilusDirectory         *directory)
    363  15264  erwannc +{
    364  15264  erwannc +  char *directory_uri;
    365  15715  erwannc +  gboolean result = FALSE;
    366  15264  erwannc +
    367  15264  erwannc +  g_return_val_if_fail (NAUTILUS_IS_DIRECTORY (directory), FALSE);
    368  15264  erwannc +  
    369  15264  erwannc +  directory_uri = nautilus_directory_get_uri (directory);
    370  15264  erwannc +  
    371  15715  erwannc +  result = ts_is_in_snapshot (directory_uri);
    372  15264  erwannc +
    373  15264  erwannc +  g_free (directory_uri);
    374  15264  erwannc +
    375  15715  erwannc +  return result;
    376  15264  erwannc +}
    377  15264  erwannc +
    378  15264  erwannc +GList *
    379  15264  erwannc +nautilus_directory_get_snapshots (NautilusDirectory *directory)
    380  15264  erwannc +{
    381  15264  erwannc +  g_assert (NAUTILUS_IS_DIRECTORY (directory));
    382  15264  erwannc +
    383  15264  erwannc +  return directory->details->zfs_snapshots;
    384  15264  erwannc +}
    385  15264  erwannc +
    386  17150  erwannc +void  nautilus_directory_remove_snapshot (NautilusDirectory *directory,
    387  17150  erwannc +					  ZfsDataSet *snap)
    388  17150  erwannc +{
    389  17150  erwannc +  if (directory->details->zfs_snapshots)
    390  17150  erwannc +    {
    391  17150  erwannc +      directory->details->zfs_snapshots = g_list_remove (directory->details->zfs_snapshots, snap);
    392  17150  erwannc +      ts_free_zfs_dataset (snap);
    393  17150  erwannc +    }
    394  17150  erwannc +}
    395  15264  erwannc +/* return true if snapdir dir path is a dir or subdir of refdir */
    396  15264  erwannc +gboolean 
    397  15264  erwannc +nautilus_directory_is_a_snapshot_dir_of (NautilusDirectory *snapdir,
    398  15264  erwannc +					 NautilusDirectory *refdir)
    399  15264  erwannc +{
    400  15264  erwannc +
    401  15264  erwannc +   gboolean result = FALSE;   
    402  15264  erwannc +
    403  15264  erwannc +  if (nautilus_directory_is_in_snapshot (snapdir))
    404  15264  erwannc +    {
    405  15264  erwannc +      char snapdir_root_real_path [PATH_MAX+1];
    406  15264  erwannc +      char refdir_real_path [PATH_MAX+1];
    407  15264  erwannc +      NautilusDirectory *snapdir_root = nautilus_directory_get_snap_root (snapdir);
    408  15264  erwannc +      GFile *snapdir_root_file = nautilus_directory_get_location (snapdir_root);
    409  15264  erwannc +      GFile *refdir_file = nautilus_directory_get_location (refdir);
    410  15264  erwannc +      char* snapdir_root_path = g_file_get_path (snapdir_root_file);
    411  15264  erwannc +      char* refdir_path = g_file_get_path (refdir_file);
    412  15264  erwannc +      
    413  15264  erwannc +      if (realpath (snapdir_root_path, snapdir_root_real_path) && 
    414  15264  erwannc +	      realpath (refdir_path, refdir_real_path))
    415  15264  erwannc +	    {
    416  15264  erwannc +	      if (g_strrstr (snapdir_root_real_path,refdir_real_path))
    417  15264  erwannc +		result = TRUE;
    418  15264  erwannc +	    }
    419  15264  erwannc +
    420  15264  erwannc +	  g_free (snapdir_root_path);
    421  15264  erwannc +	  g_free (refdir_path);
    422  15264  erwannc +	  g_object_unref (snapdir_root_file);
    423  15264  erwannc +	  g_object_unref (refdir_file);
    424  15264  erwannc +	  g_object_unref (snapdir_root);
    425  15264  erwannc +    }
    426  15264  erwannc +
    427  15264  erwannc +  return result;
    428  15264  erwannc +}
    429  15264  erwannc +
    430  15264  erwannc +NautilusDirectory *nautilus_directory_get_snap_root (NautilusDirectory	  *directory)
    431  15264  erwannc +{
    432  15264  erwannc +  char *directory_uri, *snap_root;
    433  15264  erwannc +  char *zfs, *iter;
    434  15264  erwannc +  int count = 0;
    435  15280  erwannc +  NautilusDirectory *new_dir;
    436  15264  erwannc +
    437  15264  erwannc +  g_assert (NAUTILUS_IS_DIRECTORY (directory));
    438  15264  erwannc +  
    439  15264  erwannc +  directory_uri = nautilus_directory_get_uri (directory);
    440  15264  erwannc +
    441  15264  erwannc +  if (!nautilus_directory_is_in_snapshot (directory))
    442  15264  erwannc +    return directory;
    443  15264  erwannc +
    444  15264  erwannc +  /*remove .zfs/snapshot/blah/ */
    445  15264  erwannc +  zfs = g_strrstr (directory_uri, ".zfs/snapshot/");
    446  15264  erwannc +  iter = zfs;
    447  15264  erwannc +
    448  15264  erwannc +  if (iter)
    449  15264  erwannc +    {
    450  15264  erwannc +      iter += sizeof (".zfs/snapshot/");
    451  15264  erwannc +      while (*iter != '/' && *iter != '\0')
    452  15264  erwannc +	iter++;
    453  15264  erwannc +
    454  15264  erwannc +      if (*iter == '/')
    455  15264  erwannc +	iter++;
    456  15264  erwannc +      
    457  15264  erwannc +      *zfs = '\0';
    458  15264  erwannc +      snap_root = g_strdup_printf ("%s%s", directory_uri, iter);
    459  15264  erwannc +      
    460  15264  erwannc +      *zfs = 'a';
    461  15264  erwannc +      g_free (directory_uri);
    462  15280  erwannc +      new_dir = nautilus_directory_get_by_uri (snap_root);
    463  15280  erwannc +      g_free (snap_root);
    464  15280  erwannc +      return new_dir;
    465  15264  erwannc +    }
    466  15715  erwannc +  return directory;
    467  15264  erwannc +}
    468  15264  erwannc +
    469  15264  erwannc +
    470  15264  erwannc +
    471  16819  erwannc  gboolean
    472  15264  erwannc  nautilus_directory_is_in_trash (NautilusDirectory *directory)
    473  15264  erwannc  {
    474  17265  erwannc diff -Nrup SUNWgnome-file-mgr-2.24.2/nautilus-2.24.2/libnautilus-private/nautilus-directory.h nautilus-2.24.2/libnautilus-private/nautilus-directory.h
    475  17265  erwannc --- SUNWgnome-file-mgr-2.24.2/nautilus-2.24.2/libnautilus-private/nautilus-directory.h	2008-10-06 19:22:21.000000000 +0200
    476  17265  erwannc +++ nautilus-2.24.2/libnautilus-private/nautilus-directory.h	2009-01-23 22:36:11.710303836 +0100
    477  16819  erwannc @@ -28,6 +28,7 @@
    478  16819  erwannc  #include <gtk/gtk.h>
    479  16819  erwannc  #include <gio/gio.h>
    480  16819  erwannc  #include <libnautilus-private/nautilus-file-attributes.h>
    481  16819  erwannc +#include <libnautilus-private/nautilus-zfs.h>
    482  16819  erwannc  
    483  16819  erwannc  /* NautilusDirectory is a class that manages the model for a directory,
    484  16819  erwannc     real or virtual, for Nautilus, mainly the file-manager component. The directory is
    485  17150  erwannc @@ -218,6 +219,24 @@ gboolean           nautilus_directory_ar
    486  15264  erwannc  gboolean           nautilus_directory_is_local                 (NautilusDirectory         *directory);
    487  15264  erwannc  
    488  15264  erwannc  gboolean           nautilus_directory_is_in_trash              (NautilusDirectory         *directory);
    489  16819  erwannc +typedef void (*TsReadyCallback) (NautilusDirectory *directory,
    490  16819  erwannc +				 GCancellable	   *cancellable,
    491  16819  erwannc +				 gpointer           callback_data);
    492  16819  erwannc +
    493  16819  erwannc +void		   nautilus_directory_get_snapshots_async      (NautilusDirectory	  *directory, 
    494  16819  erwannc +								TsReadyCallback		   ready_callback, 
    495  16819  erwannc +								GCancellable		  *cancel, 
    496  16819  erwannc +								gpointer		   callback_user_data);
    497  15264  erwannc +gboolean           nautilus_directory_has_snapshots            (NautilusDirectory         *directory);
    498  15264  erwannc +gboolean           nautilus_directory_is_in_snapshot           (NautilusDirectory         *directory);
    499  15264  erwannc +int		   nautilus_directory_get_num_snapshots	       (NautilusDirectory	  *directory);
    500  15264  erwannc +GList *		   nautilus_directory_get_snapshots	       (NautilusDirectory	  *directory);
    501  17150  erwannc +void		   nautilus_directory_remove_snapshot	       (NautilusDirectory	  *directory,
    502  17150  erwannc +								ZfsDataSet		  *snap);
    503  15264  erwannc +NautilusDirectory *nautilus_directory_get_snap_root	       (NautilusDirectory	  *directory);
    504  15264  erwannc +gboolean	   nautilus_directory_is_a_snapshot_dir_of     (NautilusDirectory	  *snapdir,
    505  15264  erwannc +								NautilusDirectory	  *refdir);
    506  16819  erwannc +void		   nautilus_directory_cancel_restore_info      (NautilusDirectory	  *directory);
    507  16819  erwannc  
    508  15264  erwannc  /* Return false if directory contains anything besides a Nautilus metafile.
    509  15264  erwannc   * Only valid if directory is monitored. Used by the Trash monitor.
    510  17150  erwannc @@ -238,6 +257,7 @@ GList *            nautilus_directory_li
    511  16819  erwannc  gboolean           nautilus_directory_is_desktop_directory     (NautilusDirectory         *directory);
    512  16819  erwannc  
    513  16819  erwannc  gboolean           nautilus_directory_is_editable              (NautilusDirectory         *directory);
    514  16819  erwannc +gboolean	   is_time_slider_enabled ();
    515  16819  erwannc  
    516  16819  erwannc  
    517  16819  erwannc  #endif /* NAUTILUS_DIRECTORY_H */
    518  17265  erwannc diff -Nrup SUNWgnome-file-mgr-2.24.2/nautilus-2.24.2/libnautilus-private/nautilus-file-attributes.h nautilus-2.24.2/libnautilus-private/nautilus-file-attributes.h
    519  17265  erwannc --- SUNWgnome-file-mgr-2.24.2/nautilus-2.24.2/libnautilus-private/nautilus-file-attributes.h	2008-10-06 19:22:21.000000000 +0200
    520  17265  erwannc +++ nautilus-2.24.2/libnautilus-private/nautilus-file-attributes.h	2009-01-23 22:36:12.450443252 +0100
    521  16819  erwannc @@ -42,6 +42,7 @@ typedef enum {
    522  16819  erwannc  	NAUTILUS_FILE_ATTRIBUTE_THUMBNAIL = 1 << 9,
    523  16819  erwannc  	NAUTILUS_FILE_ATTRIBUTE_MOUNT = 1 << 10,
    524  16819  erwannc  	NAUTILUS_FILE_ATTRIBUTE_FILESYSTEM_INFO = 1 << 11,
    525  16819  erwannc +	NAUTILUS_FILE_ATTRIBUTE_RESTORE_INFO = 1 << 12,
    526  16819  erwannc  } NautilusFileAttributes;
    527  16819  erwannc  
    528  16819  erwannc  #endif /* NAUTILUS_FILE_ATTRIBUTES_H */
    529  17265  erwannc diff -Nrup SUNWgnome-file-mgr-2.24.2/nautilus-2.24.2/libnautilus-private/nautilus-file-private.h nautilus-2.24.2/libnautilus-private/nautilus-file-private.h
    530  17265  erwannc --- SUNWgnome-file-mgr-2.24.2/nautilus-2.24.2/libnautilus-private/nautilus-file-private.h	2008-10-06 19:22:21.000000000 +0200
    531  17265  erwannc +++ nautilus-2.24.2/libnautilus-private/nautilus-file-private.h	2009-01-23 22:36:11.662583045 +0100
    532  17265  erwannc @@ -146,6 +146,15 @@ struct NautilusFileDetails
    533  16819  erwannc  
    534  16819  erwannc  	/* Mount for mountpoint or the references GMount for a "mountable" */
    535  16819  erwannc  	GMount *mount;
    536  16819  erwannc +
    537  16819  erwannc +	/* time slider file difference information */
    538  16819  erwannc +
    539  16819  erwannc +	char *restore_info;
    540  17265  erwannc +
    541  17265  erwannc +        /* snapshot directory for versions */
    542  17265  erwannc +
    543  17265  erwannc +        char *snapshot_directory;
    544  17265  erwannc +        GCancellable *has_snapshot_cancel;
    545  16819  erwannc  	
    546  16819  erwannc  	/* boolean fields: bitfield to save space, since there can be
    547  16819  erwannc             many NautilusFile objects. */
    548  17265  erwannc @@ -194,6 +203,13 @@ struct NautilusFileDetails
    549  16819  erwannc  	
    550  16819  erwannc  	eel_boolean_bit is_thumbnailing               : 1;
    551  16819  erwannc  
    552  16819  erwannc +	eel_boolean_bit restore_info_is_up_to_date    : 1;
    553  16819  erwannc +	eel_boolean_bit restore_info_in_progress      : 1;
    554  16819  erwannc +
    555  17265  erwannc +        eel_boolean_bit has_snap_versions_is_up_to_date    : 1;
    556  17265  erwannc +	eel_boolean_bit has_snap_versions_in_progress      : 1;
    557  17265  erwannc +        eel_boolean_bit has_snap_versions                  : 1;
    558  17265  erwannc +
    559  16819  erwannc  	/* TRUE if the file is open in a spatial window */
    560  16819  erwannc  	eel_boolean_bit has_open_window               : 1;
    561  16819  erwannc  
    562  17265  erwannc diff -Nrup SUNWgnome-file-mgr-2.24.2/nautilus-2.24.2/libnautilus-private/nautilus-file.c nautilus-2.24.2/libnautilus-private/nautilus-file.c
    563  17265  erwannc --- SUNWgnome-file-mgr-2.24.2/nautilus-2.24.2/libnautilus-private/nautilus-file.c	2009-01-23 22:38:49.604932056 +0100
    564  17265  erwannc +++ nautilus-2.24.2/libnautilus-private/nautilus-file.c	2009-01-23 22:36:11.724833444 +0100
    565  15715  erwannc @@ -48,6 +48,7 @@
    566  15715  erwannc  #include "nautilus-vfs-file.h"
    567  15715  erwannc  #include "nautilus-saved-search-file.h"
    568  15715  erwannc  #include "nautilus-lockdown.h"
    569  15715  erwannc +#include "nautilus-zfs.h"
    570  15715  erwannc  #include <eel/eel-debug.h>
    571  15715  erwannc  #include <eel/eel-glib-extensions.h>
    572  15715  erwannc  #include <eel/eel-gtk-extensions.h>
    573  15715  erwannc @@ -146,7 +147,8 @@ static GQuark attribute_name_q,
    574  15715  erwannc  	attribute_where_q,
    575  15715  erwannc  	attribute_link_target_q,
    576  15715  erwannc  	attribute_volume_q,
    577  15715  erwannc -	attribute_free_space_q;
    578  15715  erwannc +	attribute_free_space_q,
    579  15715  erwannc +	attribute_restore_info_q;
    580  15715  erwannc  
    581  15715  erwannc  
    582  15715  erwannc  static void     nautilus_file_instance_init                  (NautilusFile          *file);
    583  16819  erwannc @@ -159,6 +161,7 @@ static gboolean update_info_and_name    
    584  16819  erwannc  							      GFileInfo             *info);
    585  16819  erwannc  static const char * nautilus_file_peek_display_name (NautilusFile *file);
    586  16819  erwannc  static const char * nautilus_file_peek_display_name_collation_key (NautilusFile *file);
    587  16819  erwannc +static void invalidate_restore_info (NautilusFile *file);
    588  16819  erwannc  
    589  16819  erwannc  GType
    590  16819  erwannc  nautilus_file_get_type (void)
    591  17265  erwannc @@ -364,6 +367,14 @@ nautilus_file_clear_info (NautilusFile *
    592  16819  erwannc  
    593  16819  erwannc  	eel_ref_str_unref (file->details->filesystem_id);
    594  16819  erwannc  	file->details->filesystem_id = NULL;
    595  16819  erwannc +	g_free (file->details->restore_info);
    596  16819  erwannc +	file->details->restore_info = NULL;
    597  16819  erwannc +	invalidate_restore_info (file);
    598  17265  erwannc +        g_free (file->details->snapshot_directory);
    599  17265  erwannc +	file->details->snapshot_directory = NULL;
    600  17265  erwannc +        file->details->has_snap_versions_in_progress = FALSE;
    601  17265  erwannc +        file->details->has_snap_versions_is_up_to_date = FALSE;
    602  17265  erwannc +        file->details->has_snap_versions = FALSE;
    603  16819  erwannc  }
    604  16819  erwannc  
    605  16819  erwannc  static NautilusFile *
    606  17265  erwannc @@ -674,6 +685,9 @@ finalize (GObject *object)
    607  16819  erwannc  	g_free (file->details->selinux_context);
    608  16819  erwannc  	g_free (file->details->top_left_text);
    609  16819  erwannc  	g_free (file->details->custom_icon);
    610  16819  erwannc +	g_free (file->details->restore_info);
    611  17265  erwannc +        if (file->details->snapshot_directory)
    612  17265  erwannc +                g_free (file->details->snapshot_directory);
    613  16819  erwannc  	if (file->details->activation_location) {
    614  16819  erwannc  		g_object_unref (file->details->activation_location);
    615  16819  erwannc  	}
    616  17265  erwannc @@ -5442,7 +5456,9 @@ nautilus_file_get_string_attribute_q (Na
    617  15715  erwannc  	if (attribute_q == attribute_free_space_q) {
    618  15715  erwannc  		return nautilus_file_get_volume_free_space (file);
    619  15715  erwannc  	}
    620  15715  erwannc -
    621  15715  erwannc +	if (attribute_q == attribute_restore_info_q) {
    622  16819  erwannc +		return nautilus_file_get_restore_info_async (file);
    623  15715  erwannc +	}
    624  15715  erwannc  	extension_attribute = NULL;
    625  15715  erwannc  	
    626  15715  erwannc  	if (file->details->pending_extension_attributes) {
    627  17265  erwannc @@ -6332,6 +6348,616 @@ nautilus_file_get_trash_original_file (N
    628  15715  erwannc  
    629  15715  erwannc  }
    630  15715  erwannc  
    631  15715  erwannc +gboolean                
    632  15715  erwannc +nautilus_file_is_in_snapshot (NautilusFile *file)
    633  15715  erwannc +{
    634  15715  erwannc +  char *file_uri = nautilus_file_get_uri (file);
    635  15715  erwannc +  gboolean result = ts_is_in_snapshot (file_uri);
    636  15715  erwannc +  g_free (file_uri);
    637  15715  erwannc +  return result;
    638  15715  erwannc +}
    639  15715  erwannc +
    640  16819  erwannc +static gboolean nautilus_file_in_snap_exist_in_current (NautilusFile *file, GCancellable *cancel)
    641  15715  erwannc +{
    642  15715  erwannc +  /* get path without /.zfs/snapshot/blah/ */
    643  15715  erwannc +  /* test is file exist */
    644  15715  erwannc +  char *file_uri = nautilus_file_get_uri (file);
    645  15715  erwannc +  char *file_uri_without_snap = NULL;
    646  15715  erwannc +  gboolean result = FALSE;
    647  15715  erwannc +
    648  16819  erwannc +  if (g_cancellable_is_cancelled (cancel))
    649  16819  erwannc +    {
    650  16819  erwannc +      g_free (file_uri);
    651  16819  erwannc +      return FALSE;
    652  16819  erwannc +    }
    653  16819  erwannc +
    654  15715  erwannc +  file_uri_without_snap = ts_remove_snapshot_dir (file_uri);
    655  15715  erwannc +
    656  15715  erwannc +  if (file_uri_without_snap)
    657  15715  erwannc +    {
    658  15715  erwannc +      GFile* root_file = g_file_new_for_uri (file_uri_without_snap);
    659  15715  erwannc +      char *path = g_file_get_path (root_file);
    660  16819  erwannc +	  
    661  15715  erwannc +      if (path)
    662  15715  erwannc +	{
    663  15715  erwannc +	  result =  g_file_test (path, G_FILE_TEST_EXISTS);
    664  15715  erwannc +	  g_free (path);
    665  15715  erwannc +	}
    666  15715  erwannc +      g_object_unref (root_file);
    667  15715  erwannc +      g_free (file_uri_without_snap);
    668  15715  erwannc +
    669  15715  erwannc +    }
    670  15715  erwannc +  
    671  15715  erwannc +  g_free (file_uri);
    672  15715  erwannc +
    673  15715  erwannc +  return result;
    674  15715  erwannc +}
    675  15715  erwannc +
    676  15715  erwannc +
    677  16819  erwannc +char * nautilus_file_in_snapshot_get_info (NautilusFile *file, GCancellable *cancel)
    678  15715  erwannc +{
    679  15715  erwannc +  char *info = NULL;
    680  15715  erwannc +  GFile *then_gfile = nautilus_file_get_location (file);
    681  15715  erwannc +  char *then_path = g_file_get_path (then_gfile);
    682  15715  erwannc +  g_object_unref (then_gfile);
    683  15715  erwannc +
    684  16819  erwannc +  if (g_cancellable_is_cancelled (cancel))
    685  16819  erwannc +    {
    686  16819  erwannc +      g_free (then_gfile);
    687  16819  erwannc +      g_free (then_path);
    688  16819  erwannc +      return g_strdup ("cancelled");
    689  16819  erwannc +    }
    690  15715  erwannc +  if (then_path)
    691  15715  erwannc +    {
    692  15715  erwannc +      struct stat64 now;
    693  15715  erwannc +      struct stat64 then;
    694  15715  erwannc +      char *now_path = ts_remove_snapshot_dir (then_path);
    695  15715  erwannc +
    696  15715  erwannc +      if (lstat64 (now_path, &now) == 0)
    697  15715  erwannc +	{
    698  15715  erwannc +	  if (lstat64 (then_path, &then) == 0)
    699  15715  erwannc +	    {
    700  15715  erwannc +
    701  15715  erwannc +	      if (now.st_mtime != then.st_mtime)
    702  15715  erwannc +		{
    703  15715  erwannc +		  if (now.st_size == then.st_size)
    704  15715  erwannc +		    /* SUN_BRANDING */
    705  15715  erwannc +		    info = g_strdup (_("different date, same size as latest version"));
    706  15715  erwannc +		  else if (now.st_size > then.st_size)
    707  15715  erwannc +		    /* SUN_BRANDING */
    708  15715  erwannc +		    info = g_strdup (_("different date, smaller than latest version"));
    709  15715  erwannc +		  else if ( now.st_size < then.st_size)
    710  15715  erwannc +		    /* SUN_BRANDING */
    711  15715  erwannc +		    info = g_strdup (_("different date, bigger than latest version"));
    712  15715  erwannc +		}
    713  15715  erwannc +	      else
    714  15715  erwannc +		/* SUN_BRANDING */
    715  15715  erwannc +		info = g_strdup (_("identical to latest version"));
    716  15715  erwannc +	    }
    717  16819  erwannc +	  else
    718  16819  erwannc +	    info = g_strdup_printf ("FIXME no then %s", then_path);
    719  15715  erwannc +	}
    720  15715  erwannc +      else
    721  15715  erwannc +	/* SUN_BRANDING */
    722  15715  erwannc +	info = g_strdup (_("not present in latest version"));
    723  15715  erwannc +
    724  15715  erwannc +      g_free (now_path);
    725  15715  erwannc +      g_free (then_path);
    726  15715  erwannc +    }
    727  15715  erwannc +
    728  15715  erwannc +  return info;
    729  15715  erwannc +}
    730  15715  erwannc +
    731  16819  erwannc +static char * restore_string (char *str, GCancellable *cancel)
    732  15715  erwannc +{
    733  16819  erwannc +  if (g_cancellable_is_cancelled (cancel))
    734  15715  erwannc +    {
    735  16819  erwannc +      g_free (str);
    736  16819  erwannc +      return g_strdup (_("unknown"));
    737  15715  erwannc +    }
    738  15715  erwannc +  else
    739  16819  erwannc +    return str;
    740  15715  erwannc +}
    741  15715  erwannc +
    742  16819  erwannc +gint time_cmp (time_t *a,
    743  16819  erwannc +	       time_t *b)
    744  16819  erwannc +{
    745  16819  erwannc +  if (*a == *b)
    746  16819  erwannc +    return 0;
    747  16819  erwannc +  if (*a > *b)
    748  16819  erwannc +    return 1;
    749  16819  erwannc +  if (*a < *b)
    750  16819  erwannc +    return -1;
    751  16819  erwannc +
    752  16819  erwannc +}
    753  16819  erwannc +
    754  15715  erwannc +char *			
    755  17265  erwannc +nautilus_file_get_num_snapshot_version (NautilusFile *file, 
    756  17265  erwannc +                                        GCancellable *cancel,
    757  17265  erwannc +                                        gboolean stop_at_first)
    758  15715  erwannc +{
    759  16819  erwannc +  GList *tmp = NULL;
    760  16819  erwannc +  GList *tmp2 = NULL;
    761  16819  erwannc +  GList *time = NULL;
    762  16819  erwannc +  time_t* now_time = NULL;
    763  15715  erwannc +  char *result = NULL;
    764  15715  erwannc +  int version = 0;
    765  16819  erwannc +  NautilusFile *parent = NULL;
    766  16819  erwannc +  NautilusDirectory *dir = NULL;
    767  17265  erwannc +  char *snapdir = NULL;
    768  17265  erwannc +
    769  16819  erwannc +  if (NAUTILUS_IS_FILE (file))
    770  16819  erwannc +    {
    771  16819  erwannc +      parent = nautilus_file_get_parent (file);
    772  16819  erwannc +      if (parent)
    773  16819  erwannc +	{
    774  16819  erwannc +	  dir = nautilus_directory_get_for_file (parent);
    775  16819  erwannc +	  g_object_unref (parent);
    776  16819  erwannc +	}
    777  16819  erwannc +    }
    778  15715  erwannc +  if (dir)
    779  15715  erwannc +    {
    780  15715  erwannc +      struct stat64 now;
    781  15715  erwannc +      struct stat64 then;
    782  15715  erwannc +      char snap_name[PATH_MAX+1];
    783  15715  erwannc +      char *name = nautilus_file_get_name (file);
    784  16819  erwannc +      
    785  16819  erwannc +      g_object_ref (dir);
    786  15715  erwannc +      tmp = nautilus_directory_get_snapshots (dir);
    787  15715  erwannc +      
    788  15715  erwannc +      GFile *now_gfile = nautilus_file_get_location (file);
    789  15715  erwannc +      char *now_path = g_file_get_path (now_gfile);
    790  15715  erwannc +      g_object_unref (now_gfile);
    791  15715  erwannc +
    792  15715  erwannc +      if (now_path)
    793  15715  erwannc +	{
    794  15715  erwannc +	  if (lstat64 (now_path, &now) != 0)
    795  15715  erwannc +	    {
    796  15715  erwannc +	      g_free (now_path);
    797  15715  erwannc +	      g_object_unref (dir);
    798  15715  erwannc +	      return NULL;
    799  15715  erwannc +	    }
    800  15715  erwannc +	}
    801  16819  erwannc +      
    802  15715  erwannc +      g_free (now_path);
    803  15721  erwannc +
    804  15721  erwannc +      time = NULL;
    805  15721  erwannc +
    806  16819  erwannc +      /* get list of mtime for all files in snapshots */
    807  16819  erwannc +
    808  16819  erwannc +      now_time = g_new0 (time_t, 1);
    809  16819  erwannc +      *now_time = now.st_mtim.tv_sec;
    810  16819  erwannc +      time = g_list_prepend (time, now_time);
    811  16819  erwannc +
    812  16819  erwannc +
    813  15715  erwannc +      for (tmp; tmp; tmp = tmp->next)
    814  15715  erwannc +	{
    815  15715  erwannc +	  g_sprintf (snap_name, "%s/%s", 
    816  16819  erwannc +		     ((ZfsDataSet *) tmp->data)->mountpoint, 
    817  15715  erwannc +		     name);
    818  16819  erwannc +	  if (g_cancellable_is_cancelled (cancel))
    819  16819  erwannc +	    goto cancel;
    820  15715  erwannc +	  if (lstat64 (snap_name, &then) == 0)
    821  15715  erwannc +	    {
    822  16819  erwannc +	      if (g_list_find_custom (time, &then.st_mtim.tv_sec, (GCompareFunc) time_cmp) == NULL)
    823  16819  erwannc +		{ /*insert in list only is unique */
    824  15721  erwannc +		  time_t* snap_time = g_new0 (time_t, 1);
    825  15721  erwannc +		  *snap_time = then.st_mtim.tv_sec;
    826  16819  erwannc +		  time = g_list_prepend (time, snap_time);
    827  17265  erwannc +                  if (stop_at_first)
    828  17265  erwannc +                    {
    829  17265  erwannc +                      snapdir = g_strdup (((ZfsDataSet *) tmp->data)->mountpoint);
    830  17265  erwannc +                      goto cancel;
    831  17265  erwannc +                    }
    832  15721  erwannc +		}
    833  15715  erwannc +	    }
    834  15715  erwannc +
    835  15715  erwannc +	}
    836  16819  erwannc +cancel:
    837  15715  erwannc +      g_free (name);
    838  16819  erwannc +      g_object_unref (dir);
    839  15715  erwannc +    }
    840  15715  erwannc +
    841  15721  erwannc +
    842  15721  erwannc +  for (tmp = time; tmp; tmp = tmp->next)
    843  15721  erwannc +    {
    844  15721  erwannc +      g_free ((time_t*) tmp->data);
    845  15721  erwannc +      version++;
    846  15721  erwannc +    }
    847  15721  erwannc +
    848  16819  erwannc +  /* remove current version */
    849  16819  erwannc +  version--;
    850  16819  erwannc +
    851  15721  erwannc +  g_list_free (time);
    852  15721  erwannc +
    853  15715  erwannc +  if (version == 0)
    854  17265  erwannc +    {
    855  17265  erwannc +      if (stop_at_first)
    856  17265  erwannc +        return NULL;
    857  17265  erwannc +      else /*SUN_BRANDING*/
    858  17265  erwannc +        return restore_string (g_strdup_printf (_("no other version")), cancel);
    859  17265  erwannc +    }
    860  17265  erwannc +
    861  17265  erwannc +  if (stop_at_first)
    862  17265  erwannc +    return snapdir;
    863  17265  erwannc +  else
    864  15715  erwannc +    /* SUN_BRANDING */
    865  17265  erwannc +    return restore_string (g_strdup_printf ("%d %s", version,
    866  17265  erwannc +                                            version > 1 ? _ ("other versions") : _ ("other version")),
    867  17265  erwannc +                           cancel);
    868  15715  erwannc +}
    869  15715  erwannc +
    870  16819  erwannc +static gboolean worker_thread_started = FALSE;
    871  16819  erwannc +
    872  16819  erwannc +typedef void (*ReadyCallback) (gpointer		  data,
    873  16819  erwannc +			       GCancellable      *cancellable);
    874  16819  erwannc +typedef void (*WorkerFunction) (gpointer		  data,
    875  16819  erwannc +			       GCancellable      *cancellable);
    876  16819  erwannc +typedef struct {
    877  16819  erwannc +  gpointer	    data;
    878  16819  erwannc +  gpointer	    return_data;
    879  16819  erwannc +  ReadyCallback	    ready_callback;
    880  16819  erwannc +  WorkerFunction    worker_func;
    881  16819  erwannc +  GCancellable	    *cancellable;
    882  16819  erwannc +} QueryData;
    883  16819  erwannc +
    884  16819  erwannc +static void 		
    885  16819  erwannc +nautilus_file_get_restore_info (gpointer data,
    886  16819  erwannc +				GCancellable       *cancellable)
    887  16819  erwannc +{
    888  16819  erwannc +  QueryData *qdata = (QueryData*) data;
    889  16819  erwannc +  NautilusFile *file = NAUTILUS_FILE (qdata->data);
    890  16819  erwannc +  char *result = NULL;
    891  16819  erwannc +
    892  16819  erwannc +  /*{
    893  16819  erwannc +    struct timespec ts;
    894  17265  erwannc +    ts.tv_sec = 1;
    895  17265  erwannc +    ts.tv_nsec = 0;
    896  16819  erwannc +    nanosleep (&ts, NULL);
    897  17265  erwannc +  }
    898  16819  erwannc +
    899  17265  erwannc +    {
    900  17265  erwannc +      GFile *f = nautilus_file_get_location (file);
    901  17265  erwannc +      char *path = g_file_get_uri (f);
    902  17265  erwannc +      printf ("start restore info for %s", path);
    903  17265  erwannc +      g_free (path);
    904  17265  erwannc +      g_object_unref (f);
    905  17265  erwannc +    }*/
    906  16819  erwannc +  if (!g_cancellable_is_cancelled (cancellable))
    907  16819  erwannc +    {
    908  16819  erwannc +
    909  16819  erwannc +      if (nautilus_file_is_directory (file))
    910  16819  erwannc +	{
    911  16819  erwannc +	  NautilusDirectory *dir = nautilus_directory_get_for_file (file);
    912  16819  erwannc +	  g_object_ref (dir);
    913  16819  erwannc +	  if (nautilus_directory_is_in_snapshot (dir))
    914  16819  erwannc +	    {
    915  16819  erwannc +	      if (!nautilus_file_in_snap_exist_in_current (file, cancellable))
    916  16819  erwannc +		/* SUN_BRANDING */
    917  16819  erwannc +		result = g_strdup (_("not present in latest version"));
    918  16819  erwannc +	      else
    919  16819  erwannc +		/* SUN_BRANDING */
    920  16819  erwannc +		result = g_strdup (_("present in latest version"));
    921  16819  erwannc +	    }
    922  16819  erwannc +	  else
    923  16819  erwannc +	    {
    924  16819  erwannc +	      int version = nautilus_directory_get_num_snapshots (dir);
    925  16819  erwannc +
    926  16819  erwannc +	      if (version == 0)
    927  16819  erwannc +		/* SUN_BRANDING */
    928  16819  erwannc +		result = g_strdup (_("no version"));
    929  16819  erwannc +	      else
    930  16819  erwannc +		/* SUN_BRANDING */
    931  16819  erwannc +		result = g_strdup_printf ("%d %s",version,
    932  16819  erwannc +					  version > 1 ? _("versions") : _("version"));
    933  16819  erwannc +	    }
    934  16819  erwannc +	  g_object_unref (dir);
    935  16819  erwannc +	}
    936  16819  erwannc +      else
    937  16819  erwannc +	{
    938  16819  erwannc +	  if (nautilus_file_is_in_snapshot (file))
    939  16819  erwannc +	      result = nautilus_file_in_snapshot_get_info (file, cancellable);
    940  16819  erwannc +	  else
    941  17265  erwannc +	      result = nautilus_file_get_num_snapshot_version (file, cancellable, FALSE);
    942  16819  erwannc +	}
    943  16819  erwannc +    }
    944  16819  erwannc +
    945  17150  erwannc +/*    {
    946  17265  erwannc +      printf ("is %s\n", result);
    947  17265  erwannc +    }*/
    948  17150  erwannc +
    949  17265  erwannc +
    950  16819  erwannc +  qdata->return_data = restore_string (result, cancellable);
    951  16819  erwannc +}
    952  16819  erwannc +
    953  16819  erwannc +
    954  16819  erwannc +static void restore_information_ready_callback (gpointer data,
    955  16819  erwannc +						GCancellable *cancellable)
    956  16819  erwannc +{
    957  16819  erwannc +  QueryData *qdata = (QueryData*) data;
    958  16819  erwannc +  NautilusFile *file = (NautilusFile*) qdata->data;
    959  16819  erwannc +  char *return_data = qdata->return_data;
    960  16819  erwannc +
    961  16819  erwannc +  if (!NAUTILUS_IS_FILE (file))
    962  16819  erwannc +    return;
    963  16819  erwannc +
    964  16819  erwannc +  file->details->restore_info_in_progress = FALSE;
    965  16819  erwannc +
    966  16819  erwannc +  if (g_cancellable_is_cancelled (cancellable))
    967  16819  erwannc +    {
    968  16819  erwannc +      file->details->restore_info = g_strdup (_("unknown"));
    969  16819  erwannc +      invalidate_restore_info (file);
    970  16819  erwannc +      if (return_data)
    971  16819  erwannc +	g_free (return_data);
    972  16819  erwannc +    }
    973  16819  erwannc +  else
    974  16819  erwannc +    {
    975  16819  erwannc +      file->details->restore_info_is_up_to_date = TRUE;
    976  16819  erwannc +      file->details->restore_info = return_data;
    977  16819  erwannc +    }
    978  16819  erwannc +
    979  16819  erwannc +  nautilus_file_changed (file);
    980  16819  erwannc +  nautilus_file_unref (file);
    981  16819  erwannc +}
    982  16819  erwannc +
    983  16819  erwannc +
    984  16819  erwannc +static gboolean
    985  16819  erwannc +complete_in_idle_cb (gpointer data)
    986  16819  erwannc +{
    987  16819  erwannc +  QueryData *qdata = (QueryData*)data;
    988  16819  erwannc +  qdata->ready_callback (data, qdata->cancellable);
    989  16819  erwannc +  g_free (qdata);
    990  16819  erwannc +  return FALSE;
    991  16819  erwannc +}
    992  16819  erwannc +
    993  16819  erwannc +static void
    994  16819  erwannc +worker_queue_finished_callback (GObject *source_object,
    995  16819  erwannc +				GAsyncResult *res,
    996  16819  erwannc +				gpointer user_data)
    997  16819  erwannc +{
    998  16819  erwannc +  GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (res);
    999  16819  erwannc +  GCancellable *cancel = (GCancellable*) user_data;
   1000  16819  erwannc +
   1001  16819  erwannc +  worker_thread_started = FALSE;
   1002  16819  erwannc +
   1003  16819  erwannc +  if (g_cancellable_is_cancelled (cancel))
   1004  16819  erwannc +    {
   1005  16819  erwannc +      return;
   1006  16819  erwannc +    }
   1007  16819  erwannc +
   1008  16819  erwannc +  g_simple_async_result_get_op_res_gpointer (simple);
   1009  16819  erwannc +
   1010  16819  erwannc +}
   1011  16819  erwannc +
   1012  16819  erwannc +static void
   1013  16819  erwannc +worker_queue_func (GSimpleAsyncResult *res,
   1014  16819  erwannc +		   GObject            *object,
   1015  16819  erwannc +		   GCancellable       *cancellable)
   1016  16819  erwannc +{
   1017  16819  erwannc +  QueryData *data = NULL;
   1018  16819  erwannc +
   1019  16819  erwannc +  GTimeVal timeout;
   1020  16819  erwannc +  GAsyncQueue *queue = (GAsyncQueue*) g_simple_async_result_get_op_res_gpointer (res);
   1021  16819  erwannc +  g_async_queue_ref (queue);
   1022  16819  erwannc +
   1023  16819  erwannc +  g_get_current_time (&timeout);
   1024  16819  erwannc +  g_time_val_add (&timeout, 3000000);
   1025  16819  erwannc +
   1026  16819  erwannc +  data = g_async_queue_timed_pop (queue, &timeout);
   1027  16819  erwannc +
   1028  16819  erwannc +  while (data)
   1029  16819  erwannc +    {
   1030  16819  erwannc +      GSource *source;
   1031  16819  erwannc +
   1032  16819  erwannc +      /* only call the worker fct if not cancel 
   1033  16819  erwannc +       * but execute ready function anyway */
   1034  16819  erwannc +      if (!g_cancellable_is_cancelled (data->cancellable))
   1035  16819  erwannc +	data->worker_func (data, data->cancellable);
   1036  16819  erwannc +
   1037  16819  erwannc +      /*call ready callback in main loop/thread */
   1038  16819  erwannc +      source = g_idle_source_new ();
   1039  16819  erwannc +      g_source_set_priority (source, G_PRIORITY_DEFAULT);
   1040  16819  erwannc +      g_source_set_callback (source, complete_in_idle_cb, data, NULL);
   1041  16819  erwannc +      g_source_attach (source, NULL);
   1042  16819  erwannc +      g_source_unref (source);
   1043  16819  erwannc +
   1044  16819  erwannc +      /* pop next one */
   1045  16819  erwannc +      g_get_current_time (&timeout);
   1046  16819  erwannc +      g_time_val_add (&timeout, 3000000);
   1047  16819  erwannc +      data = g_async_queue_timed_pop (queue, &timeout);
   1048  16819  erwannc +    }
   1049  16819  erwannc +
   1050  16819  erwannc +  g_async_queue_unref (queue);
   1051  16819  erwannc +}
   1052  16819  erwannc +
   1053  16819  erwannc +char * nautilus_file_get_restore_info_async (NautilusFile *file)
   1054  16819  erwannc +{
   1055  16819  erwannc +  if (!is_time_slider_enabled ())
   1056  16819  erwannc +    return NULL;
   1057  16819  erwannc +
   1058  16819  erwannc +  if (!ts_is_restore_column_enabled ())
   1059  16819  erwannc +    return NULL;
   1060  16819  erwannc +
   1061  16819  erwannc +  if (file->details->restore_info_is_up_to_date)
   1062  16819  erwannc +    {
   1063  16819  erwannc +      /*if ( file->details->restore_info == NULL)
   1064  16819  erwannc +	return g_strdup ("null cached info");*/
   1065  16819  erwannc +      return g_strdup (file->details->restore_info);
   1066  16819  erwannc +    }
   1067  16819  erwannc +
   1068  16819  erwannc +  if (file->details->restore_info_in_progress)
   1069  16819  erwannc +    return g_strdup ("...");
   1070  16819  erwannc +  else
   1071  16819  erwannc +    {
   1072  16819  erwannc +      static GAsyncQueue *queue = NULL;
   1073  16819  erwannc +      QueryData *data  = NULL;
   1074  16819  erwannc +
   1075  16819  erwannc +      if (!file->details->directory)
   1076  16819  erwannc +	return g_strdup ("no directory element\n");
   1077  16819  erwannc +
   1078  16819  erwannc +      if (!nautilus_directory_has_snapshots (file->details->directory) && !nautilus_file_is_in_snapshot (file))
   1079  16819  erwannc +	return g_strdup ("doesn't have snap nor is in snap\n");
   1080  16819  erwannc +
   1081  16819  erwannc +      if (!file->details->directory->details->restore_cancel)
   1082  16819  erwannc +	{
   1083  16819  erwannc +	  file->details->directory->details->restore_cancel = g_cancellable_new ();
   1084  16819  erwannc +	}
   1085  16819  erwannc +      else
   1086  16819  erwannc +	{
   1087  16819  erwannc +	  if (g_cancellable_is_cancelled (file->details->directory->details->restore_cancel))
   1088  16819  erwannc +	    return NULL;
   1089  16819  erwannc +	}
   1090  16819  erwannc +
   1091  16819  erwannc +      g_free (file->details->restore_info);
   1092  16819  erwannc +      file->details->restore_info = NULL;
   1093  16819  erwannc +      file->details->restore_info_in_progress = TRUE;
   1094  16819  erwannc +
   1095  16819  erwannc +      if (!queue)
   1096  16819  erwannc +	queue = g_async_queue_new ();
   1097  16819  erwannc +
   1098  16819  erwannc +      data = g_new0 (QueryData, 1);
   1099  16819  erwannc +      data->data = file;
   1100  16819  erwannc +      nautilus_file_ref (file);
   1101  16819  erwannc +      data->cancellable = file->details->directory->details->restore_cancel;
   1102  16819  erwannc +      data->ready_callback = restore_information_ready_callback;
   1103  16819  erwannc +      data->worker_func = nautilus_file_get_restore_info;
   1104  16819  erwannc +
   1105  16819  erwannc +      g_async_queue_push (queue, data);
   1106  16819  erwannc +
   1107  16819  erwannc +      if (!worker_thread_started)
   1108  16819  erwannc +	{
   1109  16819  erwannc +	  GSimpleAsyncResult *res;
   1110  16819  erwannc +	  worker_thread_started = TRUE;
   1111  16819  erwannc +
   1112  16819  erwannc +	  res = g_simple_async_result_new (G_OBJECT (file), 
   1113  16819  erwannc +					   worker_queue_finished_callback, 
   1114  16819  erwannc +					   NULL, 
   1115  16819  erwannc +					   (gpointer) worker_queue_func);
   1116  16819  erwannc +
   1117  16819  erwannc +	  g_simple_async_result_set_op_res_gpointer (res, queue, NULL);
   1118  16819  erwannc +	  g_simple_async_result_run_in_thread (res, 
   1119  16819  erwannc +					       worker_queue_func, 
   1120  16819  erwannc +					       G_PRIORITY_DEFAULT, 
   1121  16819  erwannc +					       data->cancellable);
   1122  16819  erwannc +	}
   1123  16819  erwannc +
   1124  16819  erwannc +      return g_strdup ("...");
   1125  16819  erwannc +    }
   1126  16819  erwannc +}
   1127  16819  erwannc +
   1128  17265  erwannc +HasSnapshotResult
   1129  17265  erwannc +nautilus_file_has_snapshot_version (NautilusFile *file)
   1130  17265  erwannc +{
   1131  17265  erwannc +    if (file->details->has_snap_versions_is_up_to_date)
   1132  17265  erwannc +        return (file->details->has_snap_versions);
   1133  17265  erwannc +    return UNKNOWN_STATE;
   1134  17265  erwannc +}
   1135  16819  erwannc +
   1136  17265  erwannc +typedef struct {
   1137  17265  erwannc +  NautilusFile              *file;
   1138  17265  erwannc +  GCancellable              *cancel;
   1139  17265  erwannc +  FileHasSnapshotCallback    callback;
   1140  17265  erwannc +  gpointer		     callback_user_data;
   1141  17265  erwannc +  char                      *snap_dir;
   1142  17265  erwannc +} HasSnapshotAsyncData;
   1143  16819  erwannc +
   1144  17265  erwannc +typedef void (*HasSnapReadyCallback) (NautilusDirectory *file,
   1145  17265  erwannc +                                      GCancellable	*cancel,
   1146  17265  erwannc +                                      gpointer           callback_data);
   1147  17265  erwannc +
   1148  17265  erwannc +
   1149  17265  erwannc +static void has_snapshot_ready_callback (GObject *source_object,
   1150  17265  erwannc +                                         GAsyncResult *res,
   1151  17265  erwannc +                                         gpointer user_data)
   1152  15715  erwannc +{
   1153  17265  erwannc +  GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (res);
   1154  17265  erwannc +  HasSnapshotAsyncData *data = (HasSnapshotAsyncData*) user_data;
   1155  17265  erwannc +
   1156  17265  erwannc +  if (g_cancellable_is_cancelled (data->cancel))
   1157  17265  erwannc +    {
   1158  17265  erwannc +      data->file->details->has_snap_versions_in_progress = FALSE;
   1159  17265  erwannc +      data->file->details->has_snap_versions_is_up_to_date = FALSE;
   1160  17265  erwannc +      if (data->file->details->snapshot_directory)
   1161  17265  erwannc +        g_free (data->file->details->snapshot_directory);
   1162  17265  erwannc +      
   1163  17265  erwannc +      data->file->details->has_snapshot_cancel = NULL;
   1164  17265  erwannc +    }
   1165  17265  erwannc +  else
   1166  17265  erwannc +    {
   1167  17265  erwannc +      data->file->details->has_snap_versions_in_progress = FALSE;
   1168  17265  erwannc +      data->file->details->has_snap_versions_is_up_to_date = TRUE;
   1169  17265  erwannc +      if (data->file->details->snapshot_directory)
   1170  17265  erwannc +        g_free (data->file->details->snapshot_directory);
   1171  17265  erwannc +      data->file->details->snapshot_directory = g_simple_async_result_get_op_res_gpointer (simple);
   1172  17265  erwannc +      if (data->file->details->snapshot_directory)
   1173  17265  erwannc +        data->file->details->has_snap_versions = TRUE;
   1174  17265  erwannc +      else
   1175  17265  erwannc +        data->file->details->has_snap_versions = FALSE;
   1176  17265  erwannc +    }
   1177  17265  erwannc +  data->callback (data->callback_user_data);
   1178  15715  erwannc +}
   1179  17265  erwannc +char *
   1180  17265  erwannc +nautilus_file_get_snapshot_dir (NautilusFile *file)
   1181  17265  erwannc +{
   1182  17265  erwannc +  return file->details->snapshot_directory;
   1183  17265  erwannc +}
   1184  17265  erwannc +void nautilus_file_real_get_snapshot_version (GSimpleAsyncResult *res,
   1185  17265  erwannc +            				      GObject            *object,
   1186  17265  erwannc +        				      GCancellable       *cancellable)
   1187  17265  erwannc +{
   1188  17265  erwannc +  NautilusFile *file = NAUTILUS_FILE (object);
   1189  17265  erwannc +  char *snap_info = nautilus_file_get_num_snapshot_version (file, cancellable, TRUE);
   1190  15715  erwannc +
   1191  17265  erwannc +  if (!snap_info) /* scan for .zfs directory*/
   1192  17265  erwannc +    snap_info = ts_get_not_zfs_snapshot_dir (nautilus_file_get_location (file));
   1193  17265  erwannc +/*
   1194  17265  erwannc +  {
   1195  17265  erwannc +    struct timespec ts;
   1196  17265  erwannc +    ts.tv_sec = 4;
   1197  17265  erwannc +    ts.tv_nsec = 0;
   1198  17265  erwannc +    nanosleep (&ts, NULL);
   1199  17265  erwannc +  }
   1200  17265  erwannc +*/
   1201  17265  erwannc +  if (snap_info)
   1202  17265  erwannc +    g_simple_async_result_set_op_res_gpointer (res, snap_info, (GDestroyNotify) NULL);
   1203  17265  erwannc +  else
   1204  17265  erwannc +    g_simple_async_result_set_op_res_gpointer (res, NULL, (GDestroyNotify) NULL);
   1205  17265  erwannc +}
   1206  15715  erwannc +
   1207  17265  erwannc +void nautilus_file_get_snapshot_version (NautilusFile *file,
   1208  17265  erwannc +                                         FileHasSnapshotCallback callback,
   1209  17265  erwannc +                                         GCancellable *cancel,
   1210  17265  erwannc +                                         gpointer user_data)
   1211  17265  erwannc +{
   1212  17265  erwannc +    HasSnapshotAsyncData *data;
   1213  17265  erwannc +    GSimpleAsyncResult *res;
   1214  17265  erwannc +
   1215  17265  erwannc +    if (file->details->has_snap_versions_in_progress)
   1216  17265  erwannc +    {
   1217  17265  erwannc +        g_cancellable_cancel(file->details->has_snapshot_cancel);
   1218  17265  erwannc +        file->details->has_snapshot_cancel = NULL;
   1219  17265  erwannc +        file->details->has_snap_versions_in_progress = FALSE;        
   1220  17265  erwannc +    }
   1221  17265  erwannc +
   1222  17265  erwannc +    file->details->has_snapshot_cancel = cancel;
   1223  17265  erwannc +    file->details->has_snap_versions_in_progress = TRUE;
   1224  17265  erwannc +    file->details->has_snap_versions_is_up_to_date  = FALSE;
   1225  17265  erwannc +
   1226  17265  erwannc +    data = g_new0 (HasSnapshotAsyncData, 1);
   1227  17265  erwannc +    data->file = file;
   1228  17265  erwannc +    data->cancel = cancel;
   1229  17265  erwannc +    data->callback = callback;
   1230  17265  erwannc +    data->callback_user_data = user_data;
   1231  17265  erwannc +
   1232  17265  erwannc +    res = g_simple_async_result_new (G_OBJECT (file),
   1233  17265  erwannc +                                     has_snapshot_ready_callback,
   1234  17265  erwannc +                                     data,
   1235  17265  erwannc +                                    (gpointer) nautilus_file_real_get_snapshot_version);
   1236  17265  erwannc +    g_simple_async_result_run_in_thread (res, nautilus_file_real_get_snapshot_version,
   1237  17265  erwannc +                                         G_PRIORITY_DEFAULT, cancel);
   1238  17265  erwannc +}
   1239  17265  erwannc +
   1240  17265  erwannc +
   1241  15715  erwannc  void
   1242  15715  erwannc  nautilus_file_mark_gone (NautilusFile *file)
   1243  15715  erwannc  {
   1244  17265  erwannc @@ -6593,6 +7219,12 @@ invalidate_thumbnail (NautilusFile *file
   1245  16819  erwannc  	file->details->thumbnail_is_up_to_date = FALSE;
   1246  16819  erwannc  }
   1247  16819  erwannc  
   1248  16819  erwannc +static void
   1249  16819  erwannc +invalidate_restore_info (NautilusFile *file)
   1250  16819  erwannc +{
   1251  16819  erwannc +	file->details->restore_info_is_up_to_date = FALSE;
   1252  16819  erwannc +}
   1253  16819  erwannc +
   1254  16819  erwannc  void
   1255  16819  erwannc  nautilus_file_invalidate_extension_info_internal (NautilusFile *file)
   1256  16819  erwannc  {
   1257  17265  erwannc @@ -6647,6 +7279,9 @@ nautilus_file_invalidate_attributes_inte
   1258  16819  erwannc  	if (request.thumbnail) {
   1259  16819  erwannc  		invalidate_thumbnail (file);
   1260  16819  erwannc  	}
   1261  16819  erwannc +	if (request.restore_info) {
   1262  16819  erwannc +		invalidate_restore_info (file);
   1263  16819  erwannc +	}
   1264  16819  erwannc  
   1265  16819  erwannc  	/* FIXME bugzilla.gnome.org 45075: implement invalidating metadata */
   1266  16819  erwannc  }
   1267  17265  erwannc @@ -6727,7 +7362,8 @@ nautilus_file_get_all_attributes (void)
   1268  16819  erwannc  		NAUTILUS_FILE_ATTRIBUTE_LARGE_TOP_LEFT_TEXT |
   1269  16819  erwannc  		NAUTILUS_FILE_ATTRIBUTE_EXTENSION_INFO |
   1270  16819  erwannc  		NAUTILUS_FILE_ATTRIBUTE_THUMBNAIL |
   1271  16819  erwannc -		NAUTILUS_FILE_ATTRIBUTE_MOUNT;
   1272  16819  erwannc +		NAUTILUS_FILE_ATTRIBUTE_MOUNT | 
   1273  16819  erwannc +		NAUTILUS_FILE_ATTRIBUTE_RESTORE_INFO ;
   1274  16819  erwannc  }
   1275  16819  erwannc  
   1276  16819  erwannc  void
   1277  17265  erwannc @@ -7201,6 +7837,7 @@ nautilus_file_class_init (NautilusFileCl
   1278  15715  erwannc  	attribute_link_target_q = g_quark_from_static_string ("link_target");
   1279  15715  erwannc  	attribute_volume_q = g_quark_from_static_string ("volume");
   1280  15715  erwannc  	attribute_free_space_q = g_quark_from_static_string ("free_space");
   1281  15715  erwannc +	attribute_restore_info_q = g_quark_from_static_string ("restore_info");
   1282  15715  erwannc  	
   1283  15715  erwannc  	G_OBJECT_CLASS (class)->finalize = finalize;
   1284  15715  erwannc  	G_OBJECT_CLASS (class)->constructor = nautilus_file_constructor;
   1285  17265  erwannc diff -Nrup SUNWgnome-file-mgr-2.24.2/nautilus-2.24.2/libnautilus-private/nautilus-file.h nautilus-2.24.2/libnautilus-private/nautilus-file.h
   1286  17265  erwannc --- SUNWgnome-file-mgr-2.24.2/nautilus-2.24.2/libnautilus-private/nautilus-file.h	2008-10-06 19:22:21.000000000 +0200
   1287  17265  erwannc +++ nautilus-2.24.2/libnautilus-private/nautilus-file.h	2009-01-23 22:36:11.644493045 +0100
   1288  15715  erwannc @@ -174,6 +174,7 @@ gboolean                nautilus_file_is
   1289  15715  erwannc  									 const char                     *mime_type);
   1290  15715  erwannc  gboolean                nautilus_file_is_launchable                     (NautilusFile                   *file);
   1291  15715  erwannc  gboolean                nautilus_file_is_symbolic_link                  (NautilusFile                   *file);
   1292  15715  erwannc +gboolean                nautilus_file_is_in_snapshot			(NautilusFile                   *file);
   1293  15715  erwannc  gboolean                nautilus_file_is_mountpoint                     (NautilusFile                   *file);
   1294  15715  erwannc  GMount *                nautilus_file_get_mount                         (NautilusFile                   *file);
   1295  15715  erwannc  char *                  nautilus_file_get_volume_free_space             (NautilusFile                   *file);
   1296  17265  erwannc @@ -229,6 +230,26 @@ char *                  nautilus_file_ge
   1297  15715  erwannc  
   1298  15715  erwannc  NautilusFile *          nautilus_file_get_trash_original_file           (NautilusFile                   *file);
   1299  15715  erwannc  
   1300  16819  erwannc +char *			nautilus_file_get_num_snapshot_version		(NautilusFile			*file,
   1301  17265  erwannc +									 GCancellable			*cancel,
   1302  17265  erwannc +                                                                         gboolean                        stop_at_first);
   1303  16819  erwannc +char *			nautilus_file_get_restore_info_async		(NautilusFile			*file);
   1304  15715  erwannc +
   1305  17265  erwannc +typedef enum {
   1306  17265  erwannc +	NO,
   1307  17265  erwannc +	YES,
   1308  17265  erwannc +	UNKNOWN_STATE
   1309  17265  erwannc +} HasSnapshotResult;
   1310  17265  erwannc +
   1311  17265  erwannc +HasSnapshotResult       nautilus_file_has_snapshot_version              (NautilusFile                   *file);
   1312  17265  erwannc +char *                  nautilus_file_get_snapshot_dir                  (NautilusFile                   *file);
   1313  17265  erwannc +typedef void (*FileHasSnapshotCallback)	(gpointer user_data);
   1314  17265  erwannc +
   1315  17265  erwannc +void                    nautilus_file_get_snapshot_version              (NautilusFile                   *file,
   1316  17265  erwannc +                                                                         FileHasSnapshotCallback        callback,
   1317  17265  erwannc +                                                                         GCancellable *cancel,
   1318  17265  erwannc +                                                                         gpointer                       user_data);
   1319  17265  erwannc +
   1320  15715  erwannc  /* Permissions. */
   1321  15715  erwannc  gboolean                nautilus_file_can_get_permissions               (NautilusFile                   *file);
   1322  15715  erwannc  gboolean                nautilus_file_can_set_permissions               (NautilusFile                   *file);
   1323  16819  erwannc diff -x '*.out' -x '*.*~' -x '*.orig' -x '*.rej' -rupN nautilus-2.24.2/libnautilus-private/nautilus-global-preferences.c ../nautilus-full-async/libnautilus-private/nautilus-global-preferences.c
   1324  16819  erwannc --- nautilus-2.24.2/libnautilus-private/nautilus-global-preferences.c	2008-12-02 14:18:12.722038641 +0100
   1325  16819  erwannc +++ ../nautilus-full-async/libnautilus-private/nautilus-global-preferences.c	2008-12-02 11:43:13.510836937 +0100
   1326  16342  erwannc @@ -235,6 +235,10 @@ typedef struct
   1327  16342  erwannc   * YOU SHOULD EDIT THE SCHEMAS FILE TO CHANGE DEFAULTS.
   1328  16342  erwannc   */
   1329  16342  erwannc  static const PreferenceDefault preference_defaults[] = {
   1330  16342  erwannc + 	{ NAUTILUS_PREFERENCES_ENABLE_TIME_SLIDER,
   1331  16342  erwannc + 	  PREFERENCE_BOOLEAN,
   1332  16342  erwannc + 	  GINT_TO_POINTER (TRUE)
   1333  16342  erwannc + 	},
   1334  16342  erwannc  	{ NAUTILUS_PREFERENCES_SHOW_HIDDEN_FILES,
   1335  16342  erwannc  	  PREFERENCE_BOOLEAN,
   1336  16342  erwannc  	  GINT_TO_POINTER (FALSE)
   1337  17150  erwannc diff -x '*.out' -x '*.*~' -x '*.orig' -x '*.rej' -rupN nautilus-2.24.2/libnautilus-private/nautilus-global-preferences.h ../nautilus-compiled/libnautilus-private/nautilus-global-preferences.h
   1338  17150  erwannc --- nautilus-2.24.2/libnautilus-private/nautilus-global-preferences.h	2009-01-09 22:51:35.144174122 +0100
   1339  17150  erwannc +++ ../nautilus-compiled/libnautilus-private/nautilus-global-preferences.h	2009-01-09 22:17:26.115872917 +0100
   1340  16342  erwannc @@ -70,6 +70,7 @@ G_BEGIN_DECLS
   1341  16342  erwannc  #define NAUTILUS_PREFERENCES_SHOW_BACKUP_FILES  		"/desktop/gnome/file_views/show_backup_files"
   1342  16342  erwannc  #define NAUTILUS_PREFERENCES_SHOW_ADVANCED_PERMISSIONS		"preferences/show_advanced_permissions"
   1343  16342  erwannc  #define NAUTILUS_PREFERENCES_DATE_FORMAT			"preferences/date_format"
   1344  16342  erwannc +#define NAUTILUS_PREFERENCES_ENABLE_TIME_SLIDER			"preferences/enable_time_slider"
   1345  16342  erwannc  
   1346  16342  erwannc  typedef enum
   1347  16342  erwannc  {
   1348  17265  erwannc diff -Nrup SUNWgnome-file-mgr-2.24.2/nautilus-2.24.2/libnautilus-private/nautilus-zfs.c nautilus-2.24.2/libnautilus-private/nautilus-zfs.c
   1349  17265  erwannc --- SUNWgnome-file-mgr-2.24.2/nautilus-2.24.2/libnautilus-private/nautilus-zfs.c	1970-01-01 01:00:00.000000000 +0100
   1350  17265  erwannc +++ nautilus-2.24.2/libnautilus-private/nautilus-zfs.c	2009-01-23 22:36:11.647280942 +0100
   1351  17265  erwannc @@ -0,0 +1,985 @@
   1352  15280  erwannc +/* 
   1353  15280  erwannc + * Copyright (C) 2008 Sun Microsystems (Erwann Chenede)
   1354  15280  erwannc + *
   1355  15280  erwannc + */
   1356  15280  erwannc +
   1357  15280  erwannc +
   1358  15264  erwannc +#include <stdio.h>
   1359  15264  erwannc +#include <strings.h>
   1360  15264  erwannc +#include <stdlib.h>
   1361  15264  erwannc +#include <unistd.h>
   1362  15264  erwannc +#include "nautilus-zfs.h"
   1363  15264  erwannc +#include <time.h>
   1364  15264  erwannc +#include <locale.h>
   1365  15264  erwannc +#include <langinfo.h>
   1366  15264  erwannc +#include <stdint.h>
   1367  15264  erwannc +#include <glib.h>
   1368  15715  erwannc +#include <glib/gi18n.h>
   1369  15264  erwannc +#include <glib/gstdio.h>
   1370  15264  erwannc +#include <eel/eel-glib-extensions.h>
   1371  15611  erwannc +#include <sys/mnttab.h>
   1372  17150  erwannc +#include <sys/mkdev.h>
   1373  16819  erwannc +#include  "nautilus-global-preferences.h"
   1374  15715  erwannc +#define ZFS_SNAPSHOT_DIR ".zfs/snapshot/"
   1375  15715  erwannc +
   1376  15264  erwannc +static void ts_set_snapshot_used_space (zfs_handle_t *zhp, ZfsDataSet *snap)
   1377  15264  erwannc +{
   1378  15264  erwannc +  gchar buf[ZFS_MAXNAMELEN];
   1379  15264  erwannc +  if (zfs_prop_get(zhp, ZFS_PROP_USED, buf, sizeof (buf), NULL, NULL, 0, B_FALSE) == 0)
   1380  15264  erwannc +    {
   1381  15264  erwannc +      char unit[10];
   1382  15264  erwannc +      char format_float[5] = "%f%s";
   1383  15264  erwannc +      char format_int[5] = "%d%s";
   1384  15264  erwannc +      char *format = format_int;
   1385  15264  erwannc +      int   used_space_int = 0;
   1386  15264  erwannc +      gboolean success = FALSE;
   1387  15264  erwannc +
   1388  15264  erwannc +      snap->used_space_str = g_strdup (buf);
   1389  15264  erwannc +
   1390  15264  erwannc +      if (strchr (buf, '.'))
   1391  15264  erwannc +	{
   1392  15264  erwannc +	  format = format_float;
   1393  15264  erwannc +	  if (sscanf(buf, format,&snap->used_space,unit) == 2)
   1394  15280  erwannc +	    success = TRUE;
   1395  15264  erwannc +	}
   1396  15264  erwannc +      else
   1397  15264  erwannc +	{
   1398  15264  erwannc +	  if (sscanf(buf, format,&used_space_int,unit) == 2)
   1399  15264  erwannc +	    {
   1400  15264  erwannc +	      success = TRUE;
   1401  15264  erwannc +	      snap->used_space = (float) used_space_int;
   1402  15264  erwannc +	    }
   1403  15264  erwannc +	}
   1404  15264  erwannc +      if (strcmp (buf, "0") == 0)
   1405  15264  erwannc +	{
   1406  15280  erwannc +	  g_free (snap->used_space_str);
   1407  15264  erwannc +	  snap->used_space_str = g_strdup ("0 K");
   1408  15264  erwannc +	  success = TRUE;
   1409  15264  erwannc +	}
   1410  15264  erwannc +
   1411  15264  erwannc +      if (success)
   1412  15264  erwannc +	{
   1413  15264  erwannc +	  if (strcmp (unit, "M") == 0)
   1414  15264  erwannc +	    snap->used_space *= 1024; 
   1415  15264  erwannc +	  if (strcmp (unit, "G") == 0)
   1416  15264  erwannc +	    snap->used_space *= 1024 * 1024; 
   1417  15264  erwannc +	}
   1418  15264  erwannc +      else
   1419  15721  erwannc +	{
   1420  15721  erwannc +	  g_free (snap->used_space_str);
   1421  15721  erwannc +	  /* SUN_BRANDING */
   1422  15721  erwannc +	  snap->used_space_str = g_strdup (_("Unknown"));
   1423  15721  erwannc +	}
   1424  15264  erwannc +    }
   1425  15264  erwannc +  else
   1426  15721  erwannc +    {
   1427  15721  erwannc +      g_free (snap->used_space_str);
   1428  15721  erwannc +      /* SUN_BRANDING */
   1429  15721  erwannc +      snap->used_space_str = g_strdup (_("Unknown"));
   1430  15721  erwannc +    }
   1431  15264  erwannc +}
   1432  15264  erwannc +
   1433  15264  erwannc +static void ts_set_snapshot_mtime_and_time_diff (zfs_handle_t *zhp, ZfsDataSet *snap)
   1434  15264  erwannc +{
   1435  15264  erwannc +  GDate now;
   1436  15264  erwannc +  GDate then;
   1437  15264  erwannc +  time_t time_now;
   1438  15264  erwannc +  gint days_diff;
   1439  15264  erwannc +  const gchar *format;
   1440  15264  erwannc +  gchar *locale_format = NULL;
   1441  15264  erwannc +  gchar buf[ZFS_MAXNAMELEN];
   1442  15264  erwannc +  gchar *date_str = NULL;
   1443  15264  erwannc +
   1444  15715  erwannc +  if (zfs_prop_get(zhp, ZFS_PROP_CREATION, buf, sizeof (buf), NULL, NULL, 0, B_TRUE) == 0)
   1445  15264  erwannc +    {
   1446  15264  erwannc +      struct tm tms;
   1447  15264  erwannc +
   1448  15715  erwannc +      sscanf (buf, "%llu", &snap->mtime);
   1449  15264  erwannc +      memset(&tms, 0, sizeof(tms));
   1450  15715  erwannc +      localtime_r (&snap->mtime, &tms);
   1451  15264  erwannc +
   1452  15264  erwannc +      g_date_set_time_t (&then, snap->mtime);
   1453  15264  erwannc +
   1454  15264  erwannc +      time_now = time (NULL);
   1455  15264  erwannc +      g_date_set_time_t (&now, time_now);
   1456  15264  erwannc +
   1457  15264  erwannc +      days_diff = g_date_get_julian (&now) - g_date_get_julian (&then);
   1458  15264  erwannc +
   1459  15264  erwannc +      /* Translators: %H means "hours" and %M means "minutes" */
   1460  15264  erwannc +      if (days_diff == 0)
   1461  15715  erwannc +	/* SUN_BRANDING */
   1462  15715  erwannc +	format = _("Today at %H:%M");
   1463  15264  erwannc +      else if (days_diff == 1)
   1464  15715  erwannc +	/* SUN_BRANDING */
   1465  15715  erwannc +	format = _("Yesterday at %H:%M");
   1466  15264  erwannc +      else
   1467  15264  erwannc +	{
   1468  15264  erwannc +	  if (days_diff > 1 && days_diff < 7)
   1469  15715  erwannc +	    /* SUN_BRANDING */
   1470  15715  erwannc +	    format = _("%A at %H:%M"); /* Days from last week */
   1471  15264  erwannc +	  else
   1472  15264  erwannc +	    {
   1473  15264  erwannc +	      /* format = "%x";*/ /* Any other date */ 
   1474  17150  erwannc +	      format = _("%a %b %e %Y @ %Hh%M");
   1475  15715  erwannc +	      /* SUN_BRANDING */
   1476  17150  erwannc +	      /* date_str = g_strdup_printf (_("%d days ago"), days_diff); */
   1477  15264  erwannc +	    }
   1478  15264  erwannc +	}
   1479  15264  erwannc +      if (format)
   1480  15264  erwannc +	{
   1481  15264  erwannc +	  locale_format = g_locale_from_utf8 (format, -1, NULL, NULL, NULL);
   1482  15264  erwannc +	  if (locale_format != NULL &&
   1483  15264  erwannc +	      strftime (buf, sizeof (buf), locale_format, &tms) != 0)
   1484  15264  erwannc +	    {      
   1485  15264  erwannc +	      date_str = g_locale_to_utf8 (buf, -1, NULL, NULL, NULL);
   1486  15264  erwannc +	    }
   1487  15264  erwannc +	}
   1488  15264  erwannc +
   1489  15264  erwannc +      if (date_str == NULL)
   1490  15715  erwannc +	/* SUN_BRANDING */
   1491  15715  erwannc +	date_str = g_strdup (_("Unknown"));
   1492  15264  erwannc +
   1493  15264  erwannc +      g_free (locale_format);
   1494  17150  erwannc +      snap->mtime_str = date_str;
   1495  15264  erwannc +    }
   1496  15264  erwannc +
   1497  15264  erwannc +}
   1498  15264  erwannc +
   1499  16819  erwannc +void print_snap_list (char *dir, GList *snap_list)
   1500  15264  erwannc +{
   1501  15264  erwannc +  GList *tmp;
   1502  15264  erwannc +  printf ("list of snapshots for %s :\n", dir);
   1503  15264  erwannc +  for (tmp = snap_list; tmp->next; tmp = tmp->next)
   1504  15264  erwannc +    {
   1505  15264  erwannc +      ZfsDataSet *snap = (ZfsDataSet*) tmp->data;
   1506  15264  erwannc +      printf (" name: %s\n mountpoint: %s\n mtime_str :%s\n space used : %s\n size in kilobytes : %f\n",
   1507  15264  erwannc +	      snap->name, snap->mountpoint, snap->mtime_str, snap->used_space_str, snap->used_space);
   1508  15264  erwannc +
   1509  15264  erwannc +    }
   1510  15264  erwannc +  printf ("\n");
   1511  15264  erwannc +}
   1512  15264  erwannc +
   1513  15264  erwannc +static GString *
   1514  15264  erwannc +dump_zds (ZfsDataSet *zds)
   1515  15264  erwannc +{
   1516  15264  erwannc +  GString *msg;
   1517  15264  erwannc +  gchar *type;
   1518  15264  erwannc +
   1519  15264  erwannc +  if (!zds)
   1520  15264  erwannc +    return NULL;
   1521  15264  erwannc +
   1522  15264  erwannc +  msg = g_string_new ("");
   1523  15264  erwannc +  g_string_printf (msg, 
   1524  15264  erwannc +		   "\tname: %s\n"
   1525  15264  erwannc +		   "\tmountpoint: %s\n"
   1526  15264  erwannc +		   "\ttype: %s\n",
   1527  15264  erwannc +		   zds->name,zds->mountpoint, zfs_type_to_name(zds->type));
   1528  15264  erwannc +  if (zds->snapshots)
   1529  15264  erwannc +    {
   1530  15264  erwannc +      GList *tmp;
   1531  15264  erwannc +      g_string_append_printf(msg,"\tsnapshots :\n");
   1532  15264  erwannc +      for (tmp=zds->snapshots;tmp;tmp = tmp->next)
   1533  15264  erwannc +	{ 
   1534  15264  erwannc +	  ZfsDataSet *tmp_zds= (ZfsDataSet*) tmp->data;
   1535  15264  erwannc +	  g_string_append_printf (msg,"\t\tname: %s\n\t\tpath: %s\n",
   1536  15264  erwannc +				  tmp_zds->name,
   1537  15264  erwannc +				  tmp_zds->mountpoint);
   1538  15264  erwannc +	}
   1539  15264  erwannc +    }
   1540  15264  erwannc +  g_string_append_printf (msg, "\n");
   1541  15264  erwannc +  return msg;
   1542  15264  erwannc +}
   1543  15264  erwannc +
   1544  15264  erwannc +
   1545  15264  erwannc +static void
   1546  15264  erwannc +dump_sds (SearchDataSet *sds)
   1547  15264  erwannc +{
   1548  15264  erwannc +  GString *msg;
   1549  15264  erwannc +  gchar *type;
   1550  15264  erwannc +  GList *tmp;
   1551  15264  erwannc +
   1552  15264  erwannc +  if (!sds)
   1553  15264  erwannc +    {
   1554  15264  erwannc +      printf ("Search DataSet is empty\n");
   1555  15264  erwannc +      return;
   1556  15264  erwannc +    }
   1557  15264  erwannc +
   1558  15264  erwannc +  msg = g_string_new ("");
   1559  15264  erwannc +  g_string_printf (msg, "DDS Dump:\n"
   1560  15264  erwannc +		   "\tsearched_path: %s\n",
   1561  15264  erwannc +		   sds->searched_path);
   1562  15264  erwannc +
   1563  15264  erwannc +  g_string_append_printf (msg, "Zfs Data set :\n");
   1564  15264  erwannc +  for (tmp=sds->datasets;tmp;tmp=tmp->next)
   1565  15264  erwannc +    {
   1566  15264  erwannc +      GString * zds_dump = dump_zds ((ZfsDataSet *)tmp->data);
   1567  15264  erwannc +      g_string_append_printf (msg,"%s",zds_dump->str); 
   1568  15264  erwannc +      g_string_free (zds_dump, TRUE);
   1569  15264  erwannc +    }
   1570  15264  erwannc +  g_string_append_printf (msg, "\n");
   1571  15264  erwannc +  printf ("%s", msg->str);
   1572  15264  erwannc +  g_string_free (msg, TRUE);
   1573  15264  erwannc +}
   1574  15264  erwannc +
   1575  15264  erwannc +static ZfsDataSet*
   1576  15264  erwannc +ts_new_zfs_dataset (SearchDataSet* sds)
   1577  15264  erwannc +{
   1578  15264  erwannc +	ZfsDataSet *zds;
   1579  15264  erwannc +	zds = g_new0 (ZfsDataSet, 1);
   1580  15264  erwannc +	zds->search_dataset = sds;
   1581  15264  erwannc +	return zds;
   1582  15264  erwannc +}
   1583  15264  erwannc +
   1584  17150  erwannc +void
   1585  15264  erwannc +ts_free_zfs_dataset (ZfsDataSet* zds)
   1586  15264  erwannc +{
   1587  15264  erwannc +	if (!zds)
   1588  15264  erwannc +	  return;
   1589  15264  erwannc +	if (zds->name)
   1590  15264  erwannc +	  g_free (zds->name);
   1591  15264  erwannc +	if (zds->mountpoint)
   1592  15264  erwannc +	  g_free (zds->mountpoint);
   1593  15264  erwannc +	if (zds->mtime_str)
   1594  15264  erwannc +	  g_free (zds->mtime_str);
   1595  15264  erwannc +	if (zds->used_space_str)
   1596  15264  erwannc +	  g_free (zds->used_space_str);
   1597  15264  erwannc +
   1598  15264  erwannc +	if (zds->snapshots)
   1599  15264  erwannc +	  {
   1600  15264  erwannc +	    GList *tmp;
   1601  15264  erwannc +	    for (tmp = zds->snapshots;tmp;tmp = tmp->next)
   1602  15264  erwannc +	      ts_free_zfs_dataset ((ZfsDataSet*)tmp->data);
   1603  15264  erwannc +	  }
   1604  15264  erwannc +	g_free (zds);
   1605  15264  erwannc +}
   1606  15264  erwannc +
   1607  15264  erwannc +static SearchDataSet *
   1608  16819  erwannc +ts_new_search_dataset (GCancellable *cancel)
   1609  15264  erwannc +{
   1610  15264  erwannc +	SearchDataSet *sds;
   1611  15264  erwannc +	sds = g_new0 (SearchDataSet, 1);
   1612  16819  erwannc +	sds->cancel = cancel;
   1613  15264  erwannc +	return sds;
   1614  15264  erwannc +}
   1615  15264  erwannc +static void
   1616  15264  erwannc +ts_free_search_dataset (SearchDataSet *sds)
   1617  15264  erwannc +{
   1618  15264  erwannc +	if (!sds)
   1619  15264  erwannc +	  return;
   1620  15264  erwannc +	if (sds->searched_path)
   1621  17150  erwannc +	  g_free (sds->searched_path);
   1622  17150  erwannc +	if (sds->mountpoint)
   1623  17150  erwannc +	  g_free (sds->mountpoint);
   1624  15264  erwannc +	if (sds->datasets)
   1625  15264  erwannc +	  {
   1626  15264  erwannc +	    GList *tmp;
   1627  15264  erwannc +	    for (tmp = sds->datasets;tmp;tmp = tmp->next)
   1628  15264  erwannc +	      ts_free_zfs_dataset ((ZfsDataSet*)tmp->data);
   1629  15264  erwannc +	  }
   1630  15264  erwannc +	g_free (sds);
   1631  15264  erwannc +}
   1632  15264  erwannc +
   1633  17150  erwannc +static char* construct_check_snapshot_path (SearchDataSet *sds, char* mountpoint, const char *name, char *searched_path)
   1634  15264  erwannc +{
   1635  15611  erwannc +  gchar *result = NULL;
   1636  17150  erwannc +  gchar **split;
   1637  17150  erwannc +  gchar **split2;
   1638  15611  erwannc +
   1639  15611  erwannc +  gchar *snap_name = NULL;
   1640  15611  erwannc +  gchar *remaining_path = NULL;
   1641  17150  erwannc +  
   1642  17150  erwannc +  /* get the snapshot name part pool@snap-name we are only interested in snap-name split[1] */
   1643  17150  erwannc +  split = g_strsplit (name,"@",2);
   1644  17150  erwannc +  /* get the path after the mountpoint */
   1645  17150  erwannc +  split2 = g_strsplit (searched_path, mountpoint, 2);
   1646  15611  erwannc +
   1647  15611  erwannc +  if (split && split[1])
   1648  15611  erwannc +      snap_name = split[1];
   1649  15611  erwannc +
   1650  15611  erwannc +  if (split2 && split2[1])
   1651  15611  erwannc +      remaining_path = split2[1];
   1652  15264  erwannc +  
   1653  15611  erwannc +/*  printf ("mountpoint : %s \nname : %s \nsearched_path: %s\n", mountpoint, name, searched_path);
   1654  15264  erwannc +  printf ("split %s at @ = [%s] [%s]\n", name, split[0],split[1]); 
   1655  15611  erwannc +  printf ("split %s at [%s] = [%s] [%s]\n", searched_path, mountpoint, split2[0],split2[1]); 
   1656  15611  erwannc +  printf ("%s/.zfs/snapshot/%s/%s\n\n", mountpoint, split[1], split2[1]);*/
   1657  15264  erwannc +
   1658  15611  erwannc +  if (snap_name && remaining_path)
   1659  15611  erwannc +    result = g_strdup_printf ("%s/.zfs/snapshot/%s/%s", mountpoint, snap_name, remaining_path);
   1660  17150  erwannc +  
   1661  15264  erwannc +  g_strfreev (split);
   1662  15264  erwannc +  g_strfreev (split2);
   1663  17150  erwannc +  
   1664  17150  erwannc +  /* don't test for file presence if searched path is the same as the mount point */
   1665  17150  erwannc +  if (sds->searched_path_match_mp)
   1666  17150  erwannc +      return result;
   1667  17150  erwannc +      
   1668  15611  erwannc +  if (result && g_file_test (result, G_FILE_TEST_IS_DIR))
   1669  17150  erwannc +      {
   1670  17150  erwannc +	char real_dir[PATH_MAX+1]; 
   1671  17150  erwannc +	if (!realpath(result, real_dir))
   1672  17150  erwannc +	  {
   1673  17150  erwannc +	    g_free (result);
   1674  17150  erwannc +	    result = NULL;
   1675  17150  erwannc +	  }
   1676  17150  erwannc +	else
   1677  17150  erwannc +	  {
   1678  17150  erwannc +	    g_free (result);
   1679  17150  erwannc +	    result = g_strdup (real_dir);
   1680  17150  erwannc +	  }
   1681  17150  erwannc +	return result;
   1682  17150  erwannc +      }
   1683  15264  erwannc +
   1684  15264  erwannc +  g_free (result);
   1685  15264  erwannc +  return NULL;
   1686  15264  erwannc +}
   1687  15264  erwannc +
   1688  15264  erwannc +static int
   1689  15264  erwannc +snapshot_callback (zfs_handle_t *zhp, void *data)
   1690  15264  erwannc +{
   1691  15264  erwannc +  ZfsDataSet *main_zds = (ZfsDataSet*) data;
   1692  15264  erwannc +
   1693  15264  erwannc +  /* only add snapshot dir that exist */
   1694  15264  erwannc +
   1695  16819  erwannc +  if (zfs_get_type (zhp) == ZFS_TYPE_SNAPSHOT && !g_cancellable_is_cancelled (main_zds->search_dataset->cancel)) 
   1696  15264  erwannc +    {
   1697  15264  erwannc +      const char* name = zfs_get_name (zhp);
   1698  17150  erwannc +      char *snap_path = construct_check_snapshot_path (main_zds->search_dataset,
   1699  17150  erwannc +						       main_zds->mountpoint, 
   1700  15264  erwannc +						       name, 
   1701  15264  erwannc +						       main_zds->search_dataset->searched_path);
   1702  15264  erwannc +      if (snap_path)
   1703  15264  erwannc +	{
   1704  15264  erwannc +	  ZfsDataSet *zds = ts_new_zfs_dataset (main_zds->search_dataset);
   1705  15264  erwannc +	  zds->name = g_strdup (name);
   1706  15264  erwannc +	  zds->type = ZFS_TYPE_SNAPSHOT;
   1707  15264  erwannc +	  zds->mountpoint = snap_path;
   1708  15264  erwannc +	  ts_set_snapshot_mtime_and_time_diff (zhp, zds);
   1709  15264  erwannc +	  ts_set_snapshot_used_space (zhp, zds);
   1710  15264  erwannc +	  main_zds->snapshots = g_list_append (main_zds->snapshots,zds);
   1711  15264  erwannc +	}
   1712  15264  erwannc +    }
   1713  15264  erwannc +  zfs_close (zhp);
   1714  15264  erwannc +  return 0;
   1715  15264  erwannc +}
   1716  15264  erwannc +
   1717  15611  erwannc +
   1718  15611  erwannc +static struct mnttab *
   1719  15611  erwannc +mygetmntent(FILE *f)
   1720  15611  erwannc +{
   1721  15611  erwannc +  static struct mnttab mt;
   1722  15611  erwannc +  int status;
   1723  15611  erwannc +
   1724  15611  erwannc +  if ((status = getmntent(f, &mt)) == 0)
   1725  15611  erwannc +    return (&mt);
   1726  15611  erwannc +
   1727  15611  erwannc +  return (NULL);
   1728  15611  erwannc +}
   1729  15611  erwannc +
   1730  15611  erwannc +static char *
   1731  15611  erwannc +is_fs_mounted (const char *fs_name)
   1732  15611  erwannc +{
   1733  15611  erwannc +  FILE		   *mnttab;
   1734  15611  erwannc +  struct mnttab    *mntp;
   1735  15611  erwannc +
   1736  15611  erwannc +
   1737  15611  erwannc +  mnttab = fopen (MNTTAB,"r");
   1738  15611  erwannc +
   1739  15611  erwannc +  while ((mntp = mygetmntent(mnttab)) != NULL) 
   1740  15611  erwannc +    {
   1741  15611  erwannc +      if (mntp->mnt_fstype == (char *)0 || strcmp(mntp->mnt_fstype, "zfs") != 0)
   1742  15611  erwannc +	continue;
   1743  15611  erwannc +      if (strcmp (mntp->mnt_special, fs_name) == 0)
   1744  15611  erwannc +	{
   1745  15611  erwannc +	  fclose (mnttab);
   1746  15611  erwannc +	  return g_strdup (mntp->mnt_mountp);
   1747  15611  erwannc +	}
   1748  15611  erwannc +  }
   1749  15611  erwannc +  fclose (mnttab);
   1750  15611  erwannc +  return NULL;
   1751  15611  erwannc +}
   1752  15611  erwannc +
   1753  15264  erwannc +static int
   1754  15264  erwannc +zfs_callback (zfs_handle_t *zhp, void *data)
   1755  15264  erwannc +{
   1756  15264  erwannc +  char buf[ZFS_MAXPROPLEN];
   1757  15264  erwannc +  SearchDataSet *sds = (SearchDataSet*) data;
   1758  15264  erwannc +
   1759  17150  erwannc +  if (sds->match_found)
   1760  17150  erwannc +    {
   1761  17150  erwannc +      zfs_close (zhp);
   1762  17150  erwannc +      return 0;
   1763  17150  erwannc +    }
   1764  17150  erwannc +
   1765  16819  erwannc +  if (zfs_get_type (zhp) & sds->type & !g_cancellable_is_cancelled (sds->cancel))
   1766  15264  erwannc +    {
   1767  16819  erwannc +/*      struct timespec ts;
   1768  16819  erwannc +      ts.tv_sec = 3;
   1769  16819  erwannc +      ts.tv_nsec = 100000000; 
   1770  16819  erwannc +      nanosleep (&ts, NULL);*/
   1771  16819  erwannc +
   1772  15264  erwannc +      if (sds->prop >= ZFS_PROP_TYPE && sds->prop < ZFS_NUM_PROPS) 
   1773  15264  erwannc +	{
   1774  15264  erwannc +	  zfs_prop_get(zhp, sds->prop, buf, sizeof (buf), NULL, NULL,  0, TRUE);
   1775  17150  erwannc +	  
   1776  17150  erwannc +	  if (strcmp (sds->mountpoint, buf) == 0)
   1777  15264  erwannc +	    {
   1778  15264  erwannc +	      ZfsDataSet *zds = ts_new_zfs_dataset (sds);
   1779  15264  erwannc +	      zds->type = zfs_get_type (zhp);
   1780  15264  erwannc +	      zds->name = g_strdup (zfs_get_name(zhp));
   1781  15264  erwannc +	      zds->mountpoint = g_strdup (buf);
   1782  15264  erwannc +	      zfs_iter_snapshots (zhp, snapshot_callback, zds);
   1783  15264  erwannc +	      sds->datasets = g_list_append (sds->datasets, zds);
   1784  17150  erwannc +	      sds->match_found = TRUE;
   1785  15264  erwannc +	    }
   1786  15611  erwannc +	  else if (strcmp ("legacy", buf) == 0)
   1787  15611  erwannc +	    { /* parse /etc/mnttab to get the mount point */
   1788  15611  erwannc +	      char *mountp = is_fs_mounted (zfs_get_name(zhp));
   1789  15611  erwannc +	      if (mountp)
   1790  15611  erwannc +		{
   1791  17150  erwannc +		  if (strcmp (sds->mountpoint, mountp) == 0)
   1792  15611  erwannc +		    {
   1793  15611  erwannc +		      ZfsDataSet *zds = ts_new_zfs_dataset (sds);
   1794  15611  erwannc +		      zds->type = zfs_get_type (zhp);
   1795  15611  erwannc +		      zds->name = g_strdup (zfs_get_name(zhp));
   1796  15611  erwannc +		      zds->mountpoint = mountp;
   1797  15611  erwannc +		      zfs_iter_snapshots (zhp, snapshot_callback, zds);
   1798  15611  erwannc +		      sds->datasets = g_list_append (sds->datasets, zds);
   1799  17150  erwannc +		      sds->match_found = TRUE;
   1800  15611  erwannc +		    }
   1801  15611  erwannc +		  else
   1802  15611  erwannc +		    g_free (mountp);
   1803  15611  erwannc +		}
   1804  15611  erwannc +	    }
   1805  15264  erwannc +	}
   1806  17150  erwannc +      if (!sds->match_found)
   1807  17150  erwannc +	zfs_iter_filesystems (zhp, zfs_callback, sds); 
   1808  15264  erwannc +    }
   1809  15264  erwannc +  zfs_close (zhp);
   1810  15264  erwannc +  return 0;
   1811  15264  erwannc +}
   1812  15264  erwannc +
   1813  15264  erwannc +static SearchDataSet *
   1814  17150  erwannc +ts_get_data_from_mountpoint (const char* searched_path, const char *mountpoint, GCancellable *cancel)
   1815  15264  erwannc +{
   1816  15264  erwannc +  static libzfs_handle_t *zfs_handle = NULL;
   1817  15264  erwannc +  SearchDataSet *sds;
   1818  15264  erwannc +
   1819  16819  erwannc +  sds = ts_new_search_dataset (cancel);
   1820  15264  erwannc +
   1821  15264  erwannc +  sds->prop = ZFS_PROP_MOUNTPOINT;
   1822  15264  erwannc +  sds->type = ZFS_TYPE_FILESYSTEM;
   1823  17150  erwannc +  sds->searched_path = g_strdup (searched_path);
   1824  17150  erwannc +  sds->mountpoint = g_strdup (mountpoint);
   1825  15264  erwannc +
   1826  17150  erwannc +  if (strcmp (searched_path, mountpoint) == 0)
   1827  17150  erwannc +    sds->searched_path_match_mp = TRUE;
   1828  17150  erwannc +
   1829  15264  erwannc +  if (!zfs_handle)
   1830  15264  erwannc +    {
   1831  15264  erwannc +      if ((zfs_handle = libzfs_init()) == NULL) {
   1832  17150  erwannc +	g_warning ("internal error: failed to initialize ZFS library\n");
   1833  15264  erwannc +	ts_free_search_dataset (sds);
   1834  15264  erwannc +	return NULL;
   1835  15264  erwannc +      }
   1836  15264  erwannc +    }
   1837  15264  erwannc +  zfs_iter_root (zfs_handle, zfs_callback, sds);
   1838  15264  erwannc +
   1839  15264  erwannc +  return sds;
   1840  15264  erwannc +}
   1841  15264  erwannc +static gint
   1842  15264  erwannc +snap_sort_by_age (gconstpointer a,
   1843  15264  erwannc +		  gconstpointer b)
   1844  15264  erwannc +{
   1845  15264  erwannc +  const ZfsDataSet *snap1 = a;
   1846  15264  erwannc +  const ZfsDataSet *snap2 = b;
   1847  15264  erwannc +
   1848  15264  erwannc +  if (snap1->mtime == snap2->mtime)
   1849  15264  erwannc +    return 0;
   1850  15264  erwannc +  if (snap1->mtime < snap2->mtime)
   1851  15264  erwannc +    return -1;
   1852  15264  erwannc +  if (snap1->mtime > snap2->mtime)
   1853  15264  erwannc +    return 1;
   1854  15264  erwannc +
   1855  15264  erwannc +}
   1856  15264  erwannc +
   1857  17150  erwannc +char* 
   1858  17150  erwannc +ts_get_zfs_filesystem (char *dir)
   1859  17150  erwannc +{
   1860  17150  erwannc +  char real_dir[PATH_MAX+1]; 
   1861  17150  erwannc +  char filesystem[PATH_MAX+1];
   1862  17150  erwannc +  gboolean  found_fs= FALSE;
   1863  17150  erwannc +  struct stat64 dir_stat64;
   1864  17150  erwannc +
   1865  17150  erwannc +  if (!realpath(dir, real_dir))
   1866  17150  erwannc +    {
   1867  17150  erwannc +      return NULL;
   1868  17150  erwannc +    }
   1869  17150  erwannc +    if (stat64 (real_dir, &dir_stat64) == 0)
   1870  17150  erwannc +    { /* check is fs is zfs */
   1871  17150  erwannc +      if (strcmp (dir_stat64.st_fstype, "zfs") == 0)
   1872  17150  erwannc +	{
   1873  17150  erwannc +	  FILE		    *fp;
   1874  17150  erwannc +	  struct extmnttab   mtab;
   1875  17150  erwannc +	  int		     status;
   1876  17150  erwannc +
   1877  17150  erwannc +	  /* get mount point */
   1878  17150  erwannc +
   1879  17150  erwannc +	  fp = fopen (MNTTAB,"r");
   1880  17150  erwannc +
   1881  17150  erwannc +	  resetmnttab(fp);
   1882  17150  erwannc +	  while ((status = getextmntent(fp, &mtab, sizeof (struct extmnttab))) == 0) 
   1883  17150  erwannc +	    {
   1884  17150  erwannc +	      dev_t dev = NODEV;
   1885  17150  erwannc +	      dev = makedev(mtab.mnt_major, mtab.mnt_minor);
   1886  17150  erwannc +	      if (dev == dir_stat64.st_dev)
   1887  17150  erwannc +		{
   1888  17150  erwannc +		  strcpy (filesystem, mtab.mnt_special);
   1889  17150  erwannc +		  found_fs = TRUE;
   1890  17150  erwannc +		  break;
   1891  17150  erwannc +		}
   1892  17150  erwannc +	    }
   1893  17150  erwannc +	  (void) fclose(fp);
   1894  17150  erwannc +	}
   1895  17150  erwannc +    }
   1896  17150  erwannc +    if (found_fs)
   1897  17150  erwannc +      return g_strdup(filesystem);
   1898  17150  erwannc +
   1899  17150  erwannc +    return NULL;
   1900  17150  erwannc +}
   1901  17150  erwannc +
   1902  17150  erwannc +static char * get_zfs_mountpoint (char *dir)
   1903  17150  erwannc +{
   1904  17150  erwannc +  char real_dir[PATH_MAX+1]; 
   1905  17150  erwannc +  char mountpoint[PATH_MAX+1];
   1906  17150  erwannc +  gboolean  found_mount_point = FALSE;
   1907  17150  erwannc +  struct stat64 dir_stat64;
   1908  17150  erwannc +
   1909  17150  erwannc +  if (!realpath(dir, real_dir))
   1910  17150  erwannc +    {
   1911  17150  erwannc +      return NULL;
   1912  17150  erwannc +    }
   1913  17150  erwannc +    if (stat64 (real_dir, &dir_stat64) == 0)
   1914  17150  erwannc +    { /* check is fs is zfs */
   1915  17150  erwannc +      if (strcmp (dir_stat64.st_fstype, "zfs") == 0)
   1916  17150  erwannc +	{
   1917  17150  erwannc +	  FILE		    *fp;
   1918  17150  erwannc +	  struct extmnttab   mtab;
   1919  17150  erwannc +	  int		     status;
   1920  17150  erwannc +
   1921  17150  erwannc +	  /* get mount point */
   1922  17150  erwannc +
   1923  17150  erwannc +	  fp = fopen (MNTTAB,"r");
   1924  17150  erwannc +
   1925  17150  erwannc +	  resetmnttab(fp);
   1926  17150  erwannc +	  while ((status = getextmntent(fp, &mtab, sizeof (struct extmnttab))) == 0) 
   1927  17150  erwannc +	    {
   1928  17150  erwannc +	      dev_t dev = NODEV;
   1929  17150  erwannc +	      dev = makedev(mtab.mnt_major, mtab.mnt_minor);
   1930  17150  erwannc +	      if (dev == dir_stat64.st_dev)
   1931  17150  erwannc +		{
   1932  17150  erwannc +		  strcpy (mountpoint, mtab.mnt_mountp);
   1933  17150  erwannc +		  found_mount_point = TRUE;
   1934  17150  erwannc +		  break;
   1935  17150  erwannc +		}
   1936  17150  erwannc +	    }
   1937  17150  erwannc +	  (void) fclose(fp);
   1938  17150  erwannc +	}
   1939  17150  erwannc +    }
   1940  17150  erwannc +    if (found_mount_point)
   1941  17150  erwannc +      return g_strdup(mountpoint);
   1942  17150  erwannc +
   1943  17150  erwannc +    return NULL;
   1944  17150  erwannc +}
   1945  17150  erwannc +
   1946  17150  erwannc +
   1947  17150  erwannc +char *ts_get_snapshot_dir (char *dir)
   1948  17150  erwannc +{
   1949  17150  erwannc +  char *zfs_dir = get_zfs_mountpoint (dir);
   1950  17150  erwannc +  if (zfs_dir)
   1951  17150  erwannc +    {
   1952  17150  erwannc +      char *snapshot_dir = g_strdup_printf ("%s/.zfs/snapshot", zfs_dir);
   1953  17150  erwannc +      g_free (zfs_dir);
   1954  17150  erwannc +      return snapshot_dir;
   1955  17150  erwannc +    }
   1956  17150  erwannc +  else
   1957  17150  erwannc +    return NULL;
   1958  17150  erwannc +}
   1959  17150  erwannc +
   1960  17150  erwannc +
   1961  17150  erwannc +
   1962  16819  erwannc +static void ts_get_snapshots_for_dir (GSimpleAsyncResult *res,
   1963  16819  erwannc +				      GObject            *object,
   1964  16819  erwannc +				      GCancellable       *cancellable)
   1965  15264  erwannc +{
   1966  17150  erwannc +  char *mountpoint = NULL; 
   1967  17150  erwannc +  char real_dir[PATH_MAX+1]; 
   1968  15264  erwannc +  SearchDataSet *sds;
   1969  15264  erwannc +  GList* snap_result = NULL;
   1970  16819  erwannc +  GFile *file = G_FILE (object);
   1971  16819  erwannc +  char *dir = g_file_get_path (file);
   1972  15264  erwannc +
   1973  17150  erwannc +  mountpoint = get_zfs_mountpoint (dir);
   1974  17150  erwannc +  
   1975  17150  erwannc +
   1976  17150  erwannc +  if (!mountpoint)
   1977  16819  erwannc +    {
   1978  16819  erwannc +      g_simple_async_result_set_op_res_gpointer (res, snap_result, (GDestroyNotify) NULL);
   1979  16819  erwannc +      g_free (dir);
   1980  16819  erwannc +      return;
   1981  16819  erwannc +    }
   1982  15264  erwannc +
   1983  17150  erwannc +  realpath(dir, real_dir);
   1984  15264  erwannc +
   1985  17150  erwannc +  sds = ts_get_data_from_mountpoint (real_dir, mountpoint, cancellable);
   1986  17150  erwannc +
   1987  17150  erwannc +  g_free (mountpoint);
   1988  17150  erwannc +
   1989  16819  erwannc +  if (g_cancellable_is_cancelled (cancellable))
   1990  16819  erwannc +    {
   1991  16819  erwannc +      /* printf ("ts_get_snapshots_for_dir %s cancelled\n", dir); */
   1992  16819  erwannc +      if (sds)
   1993  16819  erwannc +	{
   1994  16819  erwannc +	  ts_free_search_dataset (sds);
   1995  16819  erwannc +	  sds = NULL;
   1996  16819  erwannc +	}
   1997  16819  erwannc +    }
   1998  16819  erwannc +
   1999  15264  erwannc +  if (sds)
   2000  15264  erwannc +    {
   2001  15264  erwannc +      GList *tmp;
   2002  15264  erwannc +      for (tmp=sds->datasets;tmp;tmp=tmp->next)
   2003  15264  erwannc +	{
   2004  15264  erwannc +	  ZfsDataSet *zds = (ZfsDataSet*) tmp->data;
   2005  15264  erwannc +	  if (zds->snapshots)
   2006  15264  erwannc +	    {
   2007  15264  erwannc +	      snap_result = g_list_concat (snap_result, zds->snapshots);
   2008  15264  erwannc +	      zds->snapshots = NULL;
   2009  15264  erwannc +	    }
   2010  15264  erwannc +	}
   2011  15264  erwannc +      ts_free_search_dataset (sds);
   2012  15264  erwannc +    }
   2013  15280  erwannc +
   2014  15264  erwannc +  if (snap_result) 
   2015  15264  erwannc +    {
   2016  15611  erwannc +      snap_result = g_list_sort (snap_result, (GCompareFunc)snap_sort_by_age);
   2017  15264  erwannc +      /* print_snap_list (dir, snap_result);  */
   2018  15264  erwannc +    }
   2019  15264  erwannc +
   2020  16819  erwannc +  g_free (dir);
   2021  16819  erwannc +  g_simple_async_result_set_op_res_gpointer (res, snap_result, (GDestroyNotify) NULL);
   2022  15264  erwannc +}
   2023  15264  erwannc +
   2024  16819  erwannc +
   2025  16819  erwannc +GList *ts_get_snapshots_for_dir_async (GFile *file, 
   2026  16819  erwannc +				       GAsyncReadyCallback result_ready, 
   2027  16819  erwannc +				       GCancellable *cancel,
   2028  16819  erwannc +				       gpointer  user_data)
   2029  16819  erwannc +{
   2030  16819  erwannc +   GSimpleAsyncResult *res;
   2031  16819  erwannc +
   2032  16819  erwannc +   res = g_simple_async_result_new (G_OBJECT (file), result_ready, user_data, (gpointer) ts_get_snapshots_for_dir);
   2033  16819  erwannc +   g_simple_async_result_run_in_thread (res, ts_get_snapshots_for_dir, G_PRIORITY_DEFAULT, cancel);
   2034  16819  erwannc +   return NULL;
   2035  16819  erwannc +}
   2036  16819  erwannc +
   2037  16819  erwannc +
   2038  15264  erwannc +void ts_free_snapshots (GList *snaps)
   2039  15264  erwannc +{
   2040  15264  erwannc +  if (snaps)
   2041  15264  erwannc +    {
   2042  15264  erwannc +      GList *tmp;
   2043  15264  erwannc +      for (tmp=snaps;tmp;tmp=tmp->next)
   2044  15264  erwannc +	ts_free_zfs_dataset ((ZfsDataSet*) tmp->data);
   2045  15264  erwannc +      g_list_free (snaps);
   2046  15264  erwannc +    }
   2047  15264  erwannc +}
   2048  15264  erwannc +
   2049  15715  erwannc +gboolean ts_is_in_snapshot (char * str)
   2050  15715  erwannc +{
   2051  15715  erwannc +  if (str != NULL)
   2052  15715  erwannc +    {
   2053  15715  erwannc +      if (g_strrstr (str, ZFS_SNAPSHOT_DIR))
   2054  15715  erwannc +	return TRUE;
   2055  15715  erwannc +    }
   2056  15715  erwannc +  return FALSE;
   2057  15715  erwannc +}
   2058  15715  erwannc +
   2059  15715  erwannc +char* ts_remove_snapshot_dir (char *str)
   2060  15715  erwannc +{
   2061  15715  erwannc +  if (ts_is_in_snapshot (str))
   2062  15715  erwannc +    {
   2063  15715  erwannc +      char *snap_root;
   2064  15715  erwannc +      char *zfs, *iter, point;
   2065  15715  erwannc +      int count = 0;
   2066  15715  erwannc +
   2067  15715  erwannc +      /*remove .zfs/snapshot/blah/ */
   2068  15715  erwannc +      zfs = g_strrstr (str, ZFS_SNAPSHOT_DIR);
   2069  15715  erwannc +      iter = zfs;
   2070  15715  erwannc +
   2071  15715  erwannc +      if (iter)
   2072  15715  erwannc +	{
   2073  15715  erwannc +	  iter += sizeof (ZFS_SNAPSHOT_DIR);
   2074  15715  erwannc +	  while (*iter != '/' && *iter != '\0')
   2075  15715  erwannc +	    iter++;
   2076  15715  erwannc +
   2077  15715  erwannc +	  if (*iter == '/')
   2078  15715  erwannc +	    iter++;
   2079  15715  erwannc +
   2080  15715  erwannc +	  point = *zfs;
   2081  15715  erwannc +	  *zfs = '\0';
   2082  15715  erwannc +	  snap_root = g_strdup_printf ("%s%s", str, iter);
   2083  15715  erwannc +
   2084  15715  erwannc +	  *zfs = point;
   2085  15715  erwannc +	  return snap_root;
   2086  15715  erwannc +	}
   2087  15715  erwannc +    }
   2088  15715  erwannc +  return NULL;
   2089  15715  erwannc +}
   2090  15715  erwannc +
   2091  15715  erwannc +
   2092  16819  erwannc +static gboolean restore_col_enabled = FALSE;
   2093  15715  erwannc +
   2094  16819  erwannc +gboolean 
   2095  16819  erwannc +ts_is_restore_column_enabled ()
   2096  16819  erwannc +{
   2097  16819  erwannc +  return restore_col_enabled;
   2098  16819  erwannc +}
   2099  16819  erwannc +
   2100  16819  erwannc +void ts_is_restore_column_enabled_init ();
   2101  16819  erwannc +
   2102  16819  erwannc +static void
   2103  16819  erwannc +visible_columns_changed (gpointer callback_data)
   2104  16819  erwannc +{
   2105  16819  erwannc +  ts_is_restore_column_enabled_init ();
   2106  16819  erwannc +}
   2107  16819  erwannc +
   2108  16819  erwannc +
   2109  16819  erwannc +void ts_is_restore_column_enabled_init ()
   2110  16819  erwannc +{
   2111  16819  erwannc +  char **visible_columns;
   2112  16819  erwannc +  static gboolean init = FALSE;
   2113  16819  erwannc +  int i = 0;
   2114  16819  erwannc +
   2115  16819  erwannc +  if (!init)
   2116  16819  erwannc +    {
   2117  16819  erwannc +      eel_preferences_add_callback (NAUTILUS_PREFERENCES_LIST_VIEW_DEFAULT_VISIBLE_COLUMNS,
   2118  16819  erwannc +				    visible_columns_changed, NULL);
   2119  16819  erwannc +      init = TRUE;
   2120  16819  erwannc +    }
   2121  16819  erwannc +  
   2122  16819  erwannc +  restore_col_enabled = FALSE;
   2123  16819  erwannc +
   2124  16819  erwannc +  visible_columns = eel_preferences_get_string_array (NAUTILUS_PREFERENCES_LIST_VIEW_DEFAULT_VISIBLE_COLUMNS);
   2125  16819  erwannc +
   2126  16819  erwannc +  while (visible_columns[i])
   2127  16819  erwannc +    {
   2128  16819  erwannc +      if (strcmp (visible_columns [i], "restore_info") == 0)
   2129  16819  erwannc +	{
   2130  16819  erwannc +	  restore_col_enabled = TRUE;
   2131  16819  erwannc +	  break;
   2132  16819  erwannc +	}
   2133  16819  erwannc +      i++;
   2134  16819  erwannc +    }
   2135  16819  erwannc +  g_strfreev (visible_columns);
   2136  16819  erwannc +}
   2137  17150  erwannc +
   2138  17150  erwannc +
   2139  17150  erwannc +static GList * get_dir_entries (char *dir_path)
   2140  17150  erwannc +{
   2141  17150  erwannc +  const char *entry_name;
   2142  17150  erwannc +  GDir *dir;
   2143  17150  erwannc +  GList *dir_entries = NULL;
   2144  17150  erwannc +  dir = g_dir_open (dir_path, 0, NULL);
   2145  17150  erwannc +
   2146  17150  erwannc +  while ((entry_name = g_dir_read_name (dir)) != NULL)
   2147  17150  erwannc +    dir_entries = g_list_prepend (dir_entries, g_strdup (entry_name));
   2148  17150  erwannc +
   2149  17150  erwannc +  g_dir_close (dir);
   2150  17150  erwannc +
   2151  17150  erwannc +  return dir_entries;
   2152  17150  erwannc +}
   2153  17150  erwannc +
   2154  17150  erwannc +static void free_dir_entries (GList *entries)
   2155  17150  erwannc +{
   2156  17150  erwannc +  g_list_foreach (entries, (GFunc)g_free, NULL);
   2157  17150  erwannc +  g_list_free (entries);
   2158  17150  erwannc +}
   2159  17150  erwannc +
   2160  17150  erwannc +static gboolean are_entries_identical (GList *old, GList *new)
   2161  17150  erwannc +{
   2162  17150  erwannc +  if (g_list_length (old) != g_list_length (new))
   2163  17150  erwannc +    return FALSE;
   2164  17150  erwannc +
   2165  17150  erwannc +  for (old; old; old = old->next)
   2166  17150  erwannc +    {
   2167  17150  erwannc +      gboolean found = FALSE;
   2168  17150  erwannc +      for (new; new; new = new->next)
   2169  17150  erwannc +	{
   2170  17150  erwannc +	  if (strcmp (old->data, new->data) == 0)
   2171  17150  erwannc +	    {
   2172  17150  erwannc +	      found = TRUE;
   2173  17150  erwannc +	      break;
   2174  17150  erwannc +	    }
   2175  17150  erwannc +	}
   2176  17150  erwannc +      if (!found)
   2177  17150  erwannc +	return FALSE;
   2178  17150  erwannc +    }
   2179  17150  erwannc +  return TRUE;
   2180  17150  erwannc +}
   2181  17150  erwannc +
   2182  17150  erwannc +void monitor_zfs_snap_directory_cancel (ZfsSnapDirMonitor *monitor_data)
   2183  17150  erwannc +{
   2184  17150  erwannc +  if (monitor_data)
   2185  17150  erwannc +    {
   2186  17150  erwannc +      /* printf ("in monitor_zfs_snap_directory_cancel %s\n", monitor_data->path); */
   2187  17150  erwannc +      g_source_remove (monitor_data->timeout_id);
   2188  17150  erwannc +      free_dir_entries (monitor_data->entries);
   2189  17150  erwannc +      g_free (monitor_data->path);
   2190  17150  erwannc +      g_free (monitor_data);
   2191  17150  erwannc +    }
   2192  17150  erwannc +}
   2193  17150  erwannc +
   2194  17150  erwannc +static gboolean        
   2195  17150  erwannc +monitor_snap_dir (ZfsSnapDirMonitor *monitor_data)
   2196  17150  erwannc +{
   2197  17150  erwannc +  GList *new_entries;
   2198  17150  erwannc +
   2199  17150  erwannc +  if (!g_file_test (monitor_data->path, G_FILE_TEST_IS_DIR))
   2200  17150  erwannc +    {
   2201  17150  erwannc +      monitor_zfs_snap_directory_cancel (monitor_data);
   2202  17150  erwannc +      return TRUE;
   2203  17150  erwannc +    }
   2204  17150  erwannc +
   2205  17150  erwannc +  new_entries = get_dir_entries (monitor_data->path);
   2206  17150  erwannc +
   2207  17150  erwannc +  if (are_entries_identical (monitor_data->entries, new_entries))
   2208  17150  erwannc +    {
   2209  17150  erwannc +      free_dir_entries (new_entries);
   2210  17150  erwannc +    }
   2211  17150  erwannc +  else
   2212  17150  erwannc +    {
   2213  17150  erwannc +      free_dir_entries (monitor_data->entries);
   2214  17150  erwannc +      monitor_data->entries = new_entries;
   2215  17150  erwannc +      monitor_data->change_callback (monitor_data, monitor_data->user_data);
   2216  17150  erwannc +    }
   2217  17150  erwannc +  return TRUE;
   2218  17150  erwannc +}
   2219  17150  erwannc +
   2220  17150  erwannc +  
   2221  17150  erwannc +ZfsSnapDirMonitor *monitor_zfs_snap_directory (char *path, 
   2222  17150  erwannc +					       ZfsDirChangeCallback change_callback,
   2223  17150  erwannc +					       gpointer data)
   2224  17150  erwannc +{
   2225  17150  erwannc +  ZfsSnapDirMonitor *monitor_data = g_new0 (ZfsSnapDirMonitor, 1);
   2226  17150  erwannc +
   2227  17150  erwannc +  /* printf ("start monitoring %s\n", path); */
   2228  17150  erwannc +
   2229  17150  erwannc +  monitor_data->path = g_strdup (path);
   2230  17150  erwannc +  monitor_data->entries = get_dir_entries (path);
   2231  17150  erwannc +  monitor_data->change_callback = change_callback;
   2232  17150  erwannc +  monitor_data->user_data = data;
   2233  17150  erwannc +
   2234  17150  erwannc +  monitor_data->timeout_id = g_timeout_add_seconds (5, (GSourceFunc)monitor_snap_dir, monitor_data);
   2235  17150  erwannc +  return monitor_data;
   2236  17150  erwannc +}
   2237  17150  erwannc +
   2238  17265  erwannc +char *
   2239  17265  erwannc +ts_get_not_zfs_snapshot_dir (GFile *file)
   2240  17265  erwannc +{
   2241  17265  erwannc +  char tmp_path[PATH_MAX + 1];
   2242  17265  erwannc +  gboolean found = FALSE;
   2243  17265  erwannc +  gboolean end_path = FALSE;
   2244  17265  erwannc +  GFile *d = g_file_get_parent(file);
   2245  17265  erwannc +  GFile *tmp;
   2246  17265  erwannc +  char *full_path = g_file_get_path (file);
   2247  17265  erwannc +  char *stripped_path = g_file_get_path (d);
   2248  17265  erwannc +  struct stat64 dir_stat64;
   2249  17265  erwannc +
   2250  17265  erwannc +  if (!full_path)
   2251  17265  erwannc +     return NULL;
   2252  17265  erwannc +
   2253  17265  erwannc +  if (stat64 (full_path, &dir_stat64) == 0)
   2254  17265  erwannc +    { /* check is fs is zfs if so don't try to check for nfs mounted .zfs dir*/
   2255  17265  erwannc +      if (strcmp (dir_stat64.st_fstype, "zfs") == 0)
   2256  17265  erwannc +        end_path = TRUE;
   2257  17265  erwannc +    }
   2258  17265  erwannc +
   2259  17265  erwannc +  while (!found && !end_path)
   2260  17265  erwannc +    {
   2261  17265  erwannc +      g_sprintf (tmp_path, "%s/.zfs/snapshot", stripped_path);
   2262  17265  erwannc +      if (g_file_test (tmp_path, G_FILE_TEST_IS_DIR))
   2263  17265  erwannc +        {
   2264  17265  erwannc +          GList *entries = get_dir_entries (tmp_path);
   2265  17265  erwannc +          if (entries != NULL)
   2266  17265  erwannc +            {
   2267  17265  erwannc +              char *after_snap_path = full_path + strlen (stripped_path) + 1;
   2268  17265  erwannc +
   2269  17265  erwannc +              for (entries; entries; entries = entries->next)
   2270  17265  erwannc +                {
   2271  17265  erwannc +                  char test_path[PATH_MAX +1];
   2272  17265  erwannc +                  g_sprintf (test_path, "%s/%s/%s", tmp_path, 
   2273  17265  erwannc +                             entries->data,
   2274  17265  erwannc +                             after_snap_path);
   2275  17265  erwannc +                  if (g_file_test (test_path, G_FILE_TEST_EXISTS))
   2276  17265  erwannc +                    {
   2277  17265  erwannc +                      found = TRUE;
   2278  17265  erwannc +                      break;
   2279  17265  erwannc +                    }
   2280  17265  erwannc +                }
   2281  17265  erwannc +              free_dir_entries (entries);
   2282  17265  erwannc +            }
   2283  17265  erwannc +        }
   2284  17265  erwannc +      tmp = d;
   2285  17265  erwannc +      d = g_file_get_parent (tmp);
   2286  17265  erwannc +      g_object_unref (tmp);
   2287  17265  erwannc +      g_free (stripped_path);
   2288  17265  erwannc +      if (d == NULL)
   2289  17265  erwannc +        {
   2290  17265  erwannc +          end_path = TRUE;
   2291  17265  erwannc +        }
   2292  17265  erwannc +      else
   2293  17265  erwannc +        {
   2294  17265  erwannc +          stripped_path = g_file_get_path (d);
   2295  17265  erwannc +        }
   2296  17265  erwannc +    }
   2297  17265  erwannc +
   2298  17265  erwannc +  g_free (full_path);
   2299  17265  erwannc +
   2300  17265  erwannc +  if (stripped_path)
   2301  17265  erwannc +    g_free (stripped_path);
   2302  17265  erwannc +
   2303  17265  erwannc +  if (found)
   2304  17265  erwannc +    return g_strdup (tmp_path);
   2305  17265  erwannc +  else
   2306  17265  erwannc +    return NULL;
   2307  17265  erwannc +
   2308  17265  erwannc +}
   2309  17265  erwannc +
   2310  17265  erwannc +
   2311  17265  erwannc +
   2312  17265  erwannc +
   2313  17265  erwannc +
   2314  17265  erwannc +
   2315  17265  erwannc +
   2316  17265  erwannc +
   2317  17265  erwannc +
   2318  17265  erwannc +
   2319  17265  erwannc +
   2320  17265  erwannc +
   2321  17265  erwannc +
   2322  17265  erwannc +
   2323  17265  erwannc +
   2324  17265  erwannc +
   2325  17265  erwannc +
   2326  17265  erwannc +
   2327  17265  erwannc +
   2328  17265  erwannc +
   2329  17265  erwannc +
   2330  17265  erwannc +
   2331  17265  erwannc +
   2332  17265  erwannc +
   2333  17265  erwannc +
   2334  17265  erwannc +
   2335  17265  erwannc +
   2336  17265  erwannc +
   2337  17265  erwannc +
   2338  17265  erwannc +
   2339  17265  erwannc +
   2340  17265  erwannc diff -Nrup SUNWgnome-file-mgr-2.24.2/nautilus-2.24.2/libnautilus-private/nautilus-zfs.h nautilus-2.24.2/libnautilus-private/nautilus-zfs.h
   2341  17265  erwannc --- SUNWgnome-file-mgr-2.24.2/nautilus-2.24.2/libnautilus-private/nautilus-zfs.h	1970-01-01 01:00:00.000000000 +0100
   2342  17265  erwannc +++ nautilus-2.24.2/libnautilus-private/nautilus-zfs.h	2009-01-23 22:36:12.513678737 +0100
   2343  17265  erwannc @@ -0,0 +1,69 @@
   2344  15280  erwannc +/* #include <config.h> */
   2345  16819  erwannc +#ifndef NAUTILUS_ZFS_H
   2346  16819  erwannc +#define NAUTILUS_ZFS_H
   2347  16819  erwannc +
   2348  15264  erwannc +#include <glib.h>
   2349  15264  erwannc +#include <libzfs.h>
   2350  16819  erwannc +#include <gio/gio.h>
   2351  15264  erwannc +
   2352  15264  erwannc +typedef struct 
   2353  15264  erwannc +{
   2354  16819  erwannc +  zfs_type_t	type;
   2355  16819  erwannc +  zfs_prop_t	prop;
   2356  17150  erwannc +  char	       *searched_path;
   2357  17150  erwannc +  char         *mountpoint;
   2358  17150  erwannc +  GList        *datasets;
   2359  16819  erwannc +  GCancellable *cancel;
   2360  17150  erwannc +  gboolean	match_found;
   2361  17150  erwannc +  gboolean	searched_path_match_mp;
   2362  15264  erwannc +
   2363  15264  erwannc +} SearchDataSet;
   2364  15264  erwannc +
   2365  15264  erwannc +typedef struct
   2366  15264  erwannc +{
   2367  16819  erwannc +  char		  *name;	
   2368  16819  erwannc +  char		  *mountpoint;	
   2369  16819  erwannc +  char		  *mtime_str;
   2370  16819  erwannc +  time_t	   mtime;
   2371  16819  erwannc +  float		   used_space;
   2372  16819  erwannc +  char		  *used_space_str;
   2373  16819  erwannc +  zfs_type_t	   type;
   2374  16819  erwannc +  GList		  *snapshots;
   2375  16819  erwannc +  SearchDataSet	  *search_dataset;
   2376  15264  erwannc +} ZfsDataSet;
   2377  15264  erwannc +
   2378  16819  erwannc +
   2379  17150  erwannc +GList *ts_get_snapshots_for_dir_async	(GFile *file, 
   2380  17150  erwannc +					 GAsyncReadyCallback result_ready, 
   2381  17150  erwannc +					 GCancellable *cancel,
   2382  17150  erwannc +					 gpointer  user_data);
   2383  17150  erwannc +void ts_free_snapshots			(GList *snaps);
   2384  17150  erwannc +void ts_free_zfs_dataset		(ZfsDataSet* zds);
   2385  15264  erwannc +
   2386  17150  erwannc +gboolean ts_is_in_snapshot		(char * str);
   2387  17150  erwannc +char* ts_remove_snapshot_dir		(char *str);
   2388  17150  erwannc +char *ts_get_snapshot_dir		(char *dir);
   2389  17150  erwannc +char *ts_get_zfs_filesystem		(char *dir);
   2390  17265  erwannc +char * ts_get_not_zfs_snapshot_dir      (GFile *file);
   2391  17150  erwannc +gboolean ts_is_restore_column_enabled	();
   2392  17150  erwannc +void ts_is_restore_column_enabled_init	();
   2393  17150  erwannc +void print_snap_list			(char *dir, GList *snap_list);
   2394  15715  erwannc +
   2395  17150  erwannc +typedef void (*ZfsDirChangeCallback)	(gpointer monitor_data, 
   2396  17150  erwannc +					 gpointer user_data);
   2397  17150  erwannc +
   2398  17150  erwannc +typedef struct 
   2399  17150  erwannc +{
   2400  17150  erwannc +  char	*		path;
   2401  17150  erwannc +  GList			*entries;
   2402  17150  erwannc +  guint			timeout_id;
   2403  17150  erwannc +  ZfsDirChangeCallback	change_callback;
   2404  17150  erwannc +  gpointer		user_data;
   2405  17150  erwannc +} ZfsSnapDirMonitor;
   2406  17150  erwannc +
   2407  17150  erwannc +void monitor_zfs_snap_directory_cancel (ZfsSnapDirMonitor *monitor_data);
   2408  17150  erwannc +ZfsSnapDirMonitor *monitor_zfs_snap_directory (char		    *path, 
   2409  17150  erwannc +					       ZfsDirChangeCallback change_callback,
   2410  17150  erwannc +					       gpointer		    data);
   2411  16819  erwannc +#endif /* NAUTILUS_ZFS_H */
   2412  16819  erwannc +
   2413  17265  erwannc diff -Nrup SUNWgnome-file-mgr-2.24.2/nautilus-2.24.2/src/Makefile.am nautilus-2.24.2/src/Makefile.am
   2414  17265  erwannc --- SUNWgnome-file-mgr-2.24.2/nautilus-2.24.2/src/Makefile.am	2008-10-06 19:22:18.000000000 +0200
   2415  17265  erwannc +++ nautilus-2.24.2/src/Makefile.am	2009-01-23 22:36:10.638397062 +0100
   2416  15264  erwannc @@ -137,6 +137,10 @@ nautilus_SOURCES = \
   2417  15264  erwannc  	nautilus-x-content-bar.h		\
   2418  15264  erwannc  	nautilus-zoom-control.c			\
   2419  15264  erwannc  	nautilus-zoom-control.h			\
   2420  15264  erwannc +	nautilus-zfs-bar.c			\
   2421  15264  erwannc +	nautilus-zfs-bar.h			\
   2422  15264  erwannc +	timescale.h				\
   2423  15264  erwannc +	timescale.c				\
   2424  15264  erwannc  	$(NULL)
   2425  15264  erwannc  
   2426  15264  erwannc  nautilus_file_management_properties_SOURCES= \
   2427  17265  erwannc diff -Nrup SUNWgnome-file-mgr-2.24.2/nautilus-2.24.2/src/file-manager/fm-actions.h nautilus-2.24.2/src/file-manager/fm-actions.h
   2428  17265  erwannc --- SUNWgnome-file-mgr-2.24.2/nautilus-2.24.2/src/file-manager/fm-actions.h	2008-10-06 19:22:18.000000000 +0200
   2429  17265  erwannc +++ nautilus-2.24.2/src/file-manager/fm-actions.h	2009-01-23 22:36:10.668828089 +0100
   2430  17265  erwannc @@ -52,6 +52,9 @@
   2431  15264  erwannc  #define FM_ACTION_LOCATION_PASTE_FILES_INTO "LocationPasteFilesInto"
   2432  15264  erwannc  #define FM_ACTION_NEW_LAUNCHER "New Launcher"
   2433  15264  erwannc  #define FM_ACTION_RENAME "Rename"
   2434  15264  erwannc +#define FM_ACTION_RESTORE_TO "Restore to"
   2435  17265  erwannc +#define FM_ACTION_HAS_SNAPSHOT "View Snap"
   2436  17150  erwannc +#define FM_ACTION_SNAP_NOW "Snap Now"
   2437  15264  erwannc  #define FM_ACTION_DUPLICATE "Duplicate"
   2438  15264  erwannc  #define FM_ACTION_CREATE_LINK "Create Link"
   2439  15264  erwannc  #define FM_ACTION_SELECT_ALL "Select All"
   2440  17265  erwannc diff -Nrup SUNWgnome-file-mgr-2.24.2/nautilus-2.24.2/src/file-manager/fm-directory-view.c nautilus-2.24.2/src/file-manager/fm-directory-view.c
   2441  17265  erwannc --- SUNWgnome-file-mgr-2.24.2/nautilus-2.24.2/src/file-manager/fm-directory-view.c	2009-01-23 22:38:49.626517597 +0100
   2442  17265  erwannc +++ nautilus-2.24.2/src/file-manager/fm-directory-view.c	2009-01-23 22:36:10.670123633 +0100
   2443  17265  erwannc @@ -968,6 +968,77 @@ real_trash (FMDirectoryView *view)
   2444  15611  erwannc  }
   2445  15611  erwannc  
   2446  15611  erwannc  static void
   2447  17150  erwannc +action_snap_now (GtkAction *action,
   2448  17150  erwannc +		 gpointer callback_data)
   2449  17150  erwannc +{
   2450  17150  erwannc +  FMDirectoryView *view = FM_DIRECTORY_VIEW (callback_data);
   2451  17150  erwannc +  GList *selection = fm_directory_view_get_selection_for_file_transfer (view);
   2452  17150  erwannc +  GFile *file = nautilus_file_get_location (NAUTILUS_FILE (selection->data));
   2453  17150  erwannc +  char *path = g_file_get_path (file);
   2454  17150  erwannc +  char *fs = ts_get_zfs_filesystem (path);
   2455  17150  erwannc +  char *cmd = g_strdup_printf ("/usr/lib/time-slider-snapshot %s %s", path, fs);
   2456  17150  erwannc +  gdk_spawn_command_line_on_screen (gtk_widget_get_screen (GTK_WIDGET (callback_data)),
   2457  17150  erwannc +				    cmd, NULL);
   2458  17150  erwannc +  
   2459  17150  erwannc +  g_free (cmd);
   2460  17150  erwannc +  g_free (fs);
   2461  17150  erwannc +  g_free (path);
   2462  17150  erwannc +  g_object_unref (file);
   2463  17150  erwannc +}
   2464  17150  erwannc +
   2465  17150  erwannc +static void
   2466  15611  erwannc +action_restore_to_desktop_callback (GtkAction *action,
   2467  15611  erwannc +				    gpointer callback_data)
   2468  15611  erwannc +{
   2469  15611  erwannc +  GList *locations = NULL;
   2470  15611  erwannc +  GList *node;
   2471  15611  erwannc +  FMDirectoryView *view = FM_DIRECTORY_VIEW (callback_data);
   2472  15611  erwannc +  char *desktop_directory = nautilus_get_desktop_directory_uri();
   2473  15611  erwannc +  GList *selection = fm_directory_view_get_selection_for_file_transfer (view);
   2474  15611  erwannc +
   2475  15611  erwannc +  if (selection == NULL)
   2476  15611  erwannc +    return;
   2477  15611  erwannc +
   2478  15611  erwannc +  if (desktop_directory == NULL)
   2479  15611  erwannc +    return;
   2480  15611  erwannc +
   2481  15611  erwannc +
   2482  15611  erwannc +  for (node = selection; node != NULL; node = node->next) 
   2483  15611  erwannc +    {		
   2484  15611  erwannc +      locations = g_list_prepend (locations,
   2485  15611  erwannc +				  nautilus_file_get_uri ((NautilusFile *) node->data));
   2486  15611  erwannc +    }
   2487  15611  erwannc +  
   2488  15611  erwannc +  fm_directory_view_move_copy_items (locations, NULL, desktop_directory,
   2489  15611  erwannc +				     GDK_ACTION_COPY, 0, 0, view);
   2490  15611  erwannc +
   2491  15611  erwannc +  nautilus_file_list_free (selection);
   2492  15611  erwannc +}
   2493  15611  erwannc +
   2494  15611  erwannc +static void
   2495  17265  erwannc +action_show_snapshot_versions_callback (GtkAction *action,
   2496  17265  erwannc +                                        gpointer callback_data)
   2497  17265  erwannc +{
   2498  17265  erwannc +  FMDirectoryView *view = FM_DIRECTORY_VIEW (callback_data);
   2499  17265  erwannc +  GList *selection = fm_directory_view_get_selection_for_file_transfer (view);
   2500  17265  erwannc +  GFile *file = nautilus_file_get_location (NAUTILUS_FILE (selection->data));
   2501  17265  erwannc +  char *dir = nautilus_file_get_snapshot_dir (NAUTILUS_FILE (selection->data));
   2502  17265  erwannc +  char *file_path = g_file_get_path (file);
   2503  17265  erwannc +  char real_file_path [PATH_MAX + 1];
   2504  17265  erwannc +  if (realpath (file_path, real_file_path))
   2505  17265  erwannc +    {
   2506  17265  erwannc +      char *cmd = g_strdup_printf ("/usr/lib/time-slider-version '%s' '%s'", dir,
   2507  17265  erwannc +                                   real_file_path);
   2508  17265  erwannc +      gdk_spawn_command_line_on_screen (gtk_widget_get_screen (GTK_WIDGET (callback_data)),
   2509  17265  erwannc +                                        cmd, NULL);
   2510  17265  erwannc +      g_free (cmd);
   2511  17265  erwannc +    }
   2512  17265  erwannc +
   2513  17265  erwannc +  g_free (file_path);
   2514  17265  erwannc +  g_object_unref (file);
   2515  17265  erwannc +}
   2516  17265  erwannc +
   2517  17265  erwannc +static void
   2518  15611  erwannc  action_trash_callback (GtkAction *action,
   2519  15611  erwannc  		       gpointer callback_data)
   2520  15611  erwannc  {
   2521  17265  erwannc @@ -6697,6 +6768,24 @@ static const GtkActionEntry directory_vi
   2522  15611  erwannc    /* label, accelerator */       "RenameSelectAll", "<shift>F2",
   2523  15611  erwannc    /* tooltip */                  NULL,
   2524  15611  erwannc                                   G_CALLBACK (action_rename_select_all_callback) },
   2525  15611  erwannc +  /* name, stock id */         { "Restore to", NULL,
   2526  15715  erwannc +  /* SUN_BRANDING */
   2527  15611  erwannc +  /* label, accelerator */       N_("Restore to Desktop"), NULL,
   2528  15715  erwannc +  /* SUN_BRANDING */
   2529  15611  erwannc +  /* tooltip */                  N_("Move each selected item to the Desktop"),
   2530  15611  erwannc +                                 G_CALLBACK (action_restore_to_desktop_callback) },
   2531  17265  erwannc +  /* name, stock id */         { "View Snap", NULL,
   2532  17265  erwannc +  /* SUN_BRANDING */
   2533  17265  erwannc +  /* label, accelerator */       N_("View versions"), NULL,
   2534  17265  erwannc +  /* SUN_BRANDING */
   2535  17265  erwannc +  /* tooltip */                  N_("View the versions of this file available in ZFS snapshots"),
   2536  17265  erwannc +                                 G_CALLBACK (action_show_snapshot_versions_callback) },
   2537  17150  erwannc +  /* name, stock id */         { "Snap Now", NULL,
   2538  17150  erwannc +  /* SUN_BRANDING */
   2539  17150  erwannc +  /* label, accelerator */       N_("Snapshot now"), NULL,
   2540  17150  erwannc +  /* SUN_BRANDING */
   2541  17150  erwannc +  /* tooltip */                  N_("Take a ZFS snapshot of this directory now"),
   2542  17150  erwannc +                                 G_CALLBACK (action_snap_now) },
   2543  15611  erwannc    /* name, stock id */         { "Trash", NULL,
   2544  15611  erwannc    /* label, accelerator */       N_("Mo_ve to Trash"), NULL,
   2545  15611  erwannc    /* tooltip */                  N_("Move each selected item to the Trash"),
   2546  17265  erwannc @@ -7723,6 +7812,41 @@ can_delete_all (GList *files)
   2547  17265  erwannc  	return TRUE;
   2548  17265  erwannc  }
   2549  17265  erwannc  
   2550  17265  erwannc +typedef struct {
   2551  17265  erwannc +  NautilusFile              *file;
   2552  17265  erwannc +  GCancellable              *cancel;
   2553  17265  erwannc +  GtkAction                 *action;
   2554  17265  erwannc +} HasSnapshotData;
   2555  17265  erwannc +
   2556  17265  erwannc +static void
   2557  17265  erwannc +has_snapshot_ready_callback (gpointer user_data)
   2558  17265  erwannc +{
   2559  17265  erwannc +  GValue name = {0,};
   2560  17265  erwannc +  HasSnapshotData *data = (HasSnapshotData*) user_data;
   2561  17265  erwannc +  HasSnapshotResult result = nautilus_file_has_snapshot_version (data->file);
   2562  17265  erwannc +
   2563  17265  erwannc +  switch (result)
   2564  17265  erwannc +    {
   2565  17265  erwannc +    case UNKNOWN_STATE:
   2566  17265  erwannc +    case NO:
   2567  17265  erwannc +      gtk_action_set_sensitive (data->action, FALSE);
   2568  17265  erwannc +      g_value_init (&name, G_TYPE_STRING);
   2569  17265  erwannc +      /* SUN_BRANDING */
   2570  17265  erwannc +      g_value_set_static_string (&name, _("No versions"));
   2571  17265  erwannc +      g_object_set_property (G_OBJECT (data->action), "label", &name);
   2572  17265  erwannc +      break;
   2573  17265  erwannc +    case YES:
   2574  17265  erwannc +      gtk_action_set_sensitive (data->action, TRUE);
   2575  17265  erwannc +      g_value_init (&name, G_TYPE_STRING);
   2576  17265  erwannc +      /* SUN_BRANDING */
   2577  17265  erwannc +      g_value_set_static_string (&name, _("Explore versions"));
   2578  17265  erwannc +      g_object_set_property (G_OBJECT (data->action), "label", &name);
   2579  17265  erwannc +      break;
   2580  17265  erwannc +    }
   2581  17265  erwannc +  g_free (data);
   2582  17265  erwannc + }
   2583  17265  erwannc +
   2584  17265  erwannc +
   2585  17265  erwannc  static void
   2586  17265  erwannc  real_update_menus (FMDirectoryView *view)
   2587  17265  erwannc  {
   2588  17265  erwannc @@ -8028,6 +8152,79 @@ real_update_menus (FMDirectoryView *view
   2589  15611  erwannc  					      FM_ACTION_COPY);
   2590  15611  erwannc  	gtk_action_set_sensitive (action, can_copy_files);
   2591  15611  erwannc  
   2592  15611  erwannc +	action = gtk_action_group_get_action (view->details->dir_action_group,
   2593  15611  erwannc +					      FM_ACTION_RESTORE_TO);
   2594  15611  erwannc +	gtk_action_set_visible (action, can_copy_files && 
   2595  15611  erwannc +				  nautilus_directory_is_in_snapshot (view->details->model));
   2596  17150  erwannc +	
   2597  17150  erwannc +	action = gtk_action_group_get_action (view->details->dir_action_group,
   2598  17150  erwannc +					      FM_ACTION_SNAP_NOW);
   2599  15611  erwannc +
   2600  17150  erwannc +	if (selection_count == 1 && nautilus_file_is_directory (NAUTILUS_FILE (selection->data)))
   2601  17150  erwannc +	    {
   2602  17150  erwannc +	      GFile *file = nautilus_file_get_location (NAUTILUS_FILE (selection->data));
   2603  17150  erwannc +	      char *path = g_file_get_path (file);
   2604  17150  erwannc +	      char *fs = ts_get_zfs_filesystem (path);
   2605  17150  erwannc +	      if (fs)
   2606  17150  erwannc +		{
   2607  17150  erwannc +		  gtk_action_set_visible (action, TRUE);
   2608  17150  erwannc +		  g_free (fs);
   2609  17150  erwannc +		}
   2610  17150  erwannc +	      g_free (path);
   2611  17150  erwannc +	      g_object_unref (file);
   2612  17150  erwannc +	    }
   2613  17150  erwannc +	else
   2614  17150  erwannc +	  gtk_action_set_visible (action, FALSE);
   2615  17150  erwannc +
   2616  17265  erwannc +	action = gtk_action_group_get_action (view->details->dir_action_group,
   2617  17265  erwannc +					      FM_ACTION_HAS_SNAPSHOT);
   2618  17150  erwannc +
   2619  17265  erwannc +  if (selection_count == 1)
   2620  17265  erwannc +    {
   2621  17265  erwannc +      GValue name = { 0, };
   2622  17265  erwannc +      int result = nautilus_file_has_snapshot_version (NAUTILUS_FILE (selection->data));
   2623  17265  erwannc +
   2624  17265  erwannc +      switch (result)
   2625  17265  erwannc +        {
   2626  17265  erwannc +        case NO:
   2627  17265  erwannc +          gtk_action_set_visible (action, FALSE);
   2628  17265  erwannc +          break;
   2629  17265  erwannc +        case YES:
   2630  17265  erwannc +          gtk_action_set_visible (action, TRUE);
   2631  17265  erwannc +          gtk_action_set_sensitive (action, TRUE);
   2632  17265  erwannc +          g_value_init (&name,G_TYPE_STRING);
   2633  17265  erwannc +          /* SUN_BRANDING */
   2634  17265  erwannc +          g_value_set_static_string (&name, _("Explore versions"));
   2635  17265  erwannc +          g_object_set_property (G_OBJECT (action), "label", &name);
   2636  17265  erwannc +          break;
   2637  17265  erwannc +        case UNKNOWN_STATE:
   2638  17265  erwannc +          gtk_action_set_visible (action, TRUE);
   2639  17265  erwannc +          gtk_action_set_sensitive (action, FALSE);
   2640  17265  erwannc +          g_value_init (&name,G_TYPE_STRING);
   2641  17265  erwannc +          /* SUN_BRANDING */
   2642  17265  erwannc +          g_value_set_static_string (&name, _("Scanning for versions"));
   2643  17265  erwannc +          g_object_set_property (G_OBJECT (action), "label", &name);
   2644  17265  erwannc +          break;
   2645  17265  erwannc +        }
   2646  17265  erwannc +
   2647  17265  erwannc +
   2648  17265  erwannc +      if (result == UNKNOWN_STATE)
   2649  17265  erwannc +        {
   2650  17265  erwannc +          HasSnapshotData *data = g_new0 (HasSnapshotData, 1);
   2651  17265  erwannc +          data->action = action;
   2652  17265  erwannc +          data->file = NAUTILUS_FILE (selection->data);
   2653  17265  erwannc +          data->cancel = g_cancellable_new ();
   2654  17265  erwannc +          nautilus_file_get_snapshot_version (NAUTILUS_FILE (selection->data),
   2655  17265  erwannc +                                              has_snapshot_ready_callback,
   2656  17265  erwannc +                                              data->cancel,
   2657  17265  erwannc +                                              data);
   2658  17265  erwannc +        }
   2659  17265  erwannc +    }
   2660  17265  erwannc +  else
   2661  17265  erwannc +    gtk_action_set_visible (action, FALSE);
   2662  17265  erwannc +
   2663  17265  erwannc +
   2664  17265  erwannc +
   2665  15611  erwannc  	real_update_paste_menu (view, selection, selection_count);
   2666  15611  erwannc  
   2667  15611  erwannc  	action = gtk_action_group_get_action (view->details->dir_action_group,
   2668  17265  erwannc diff -Nrup SUNWgnome-file-mgr-2.24.2/nautilus-2.24.2/src/file-manager/nautilus-directory-view-ui.xml nautilus-2.24.2/src/file-manager/nautilus-directory-view-ui.xml
   2669  17265  erwannc --- SUNWgnome-file-mgr-2.24.2/nautilus-2.24.2/src/file-manager/nautilus-directory-view-ui.xml	2008-10-06 19:22:18.000000000 +0200
   2670  17265  erwannc +++ nautilus-2.24.2/src/file-manager/nautilus-directory-view-ui.xml	2009-01-23 22:36:10.677724357 +0100
   2671  17265  erwannc @@ -64,6 +64,9 @@
   2672  15264  erwannc  			<menuitem name="Duplicate" action="Duplicate"/>
   2673  15264  erwannc  			<menuitem name="Create Link" action="Create Link"/>
   2674  15264  erwannc  			<menuitem name="Rename" action="Rename"/>
   2675  15264  erwannc +			<menuitem name="Restore to" action="Restore to"/>
   2676  17150  erwannc +			<menuitem name="Snapshot now" action="Snap Now"/>
   2677  17265  erwannc +			<menuitem name="Scanning...." action="View Snap"/>
   2678  15264  erwannc  		</placeholder>
   2679  15264  erwannc  		<placeholder name="Dangerous File Items Placeholder">
   2680  15264  erwannc  			<menuitem name="Trash" action="Trash"/>
   2681  17265  erwannc @@ -147,6 +150,9 @@
   2682  15264  erwannc  	<placeholder name="File Actions">
   2683  15264  erwannc  		<menuitem name="Create Link" action="Create Link"/>
   2684  15264  erwannc  		<menuitem name="Rename" action="Rename"/>
   2685  15264  erwannc +		<menuitem name="Restore to" action="Restore to"/>
   2686  17150  erwannc +		<menuitem name="Snapshot now" action="Snap Now"/>
   2687  17265  erwannc +		<menuitem name="Scanning...." action="View Snap"/>
   2688  15264  erwannc  	</placeholder>
   2689  15264  erwannc  	<separator name="Dangerous separator"/>
   2690  15264  erwannc  	<placeholder name="Dangerous File Actions">
   2691  17265  erwannc @@ -184,6 +190,7 @@
   2692  15264  erwannc  	</placeholder>
   2693  15264  erwannc  	<separator name="Location After Clipboard Separator"/>
   2694  15264  erwannc  	<placeholder name="Dangerous File Actions">
   2695  15264  erwannc +		<menuitem name="Restore" action="Restore"/>
   2696  15264  erwannc  		<menuitem name="Trash" action="LocationTrash"/>
   2697  15264  erwannc  		<menuitem name="Delete" action="LocationDelete"/>
   2698  15264  erwannc  		<menuitem name="Restore From Trash" action="LocationRestoreFromTrash"/>
   2699  17265  erwannc diff -Nrup SUNWgnome-file-mgr-2.24.2/nautilus-2.24.2/src/nautilus-actions.h nautilus-2.24.2/src/nautilus-actions.h
   2700  17265  erwannc --- SUNWgnome-file-mgr-2.24.2/nautilus-2.24.2/src/nautilus-actions.h	2008-10-06 19:22:18.000000000 +0200
   2701  17265  erwannc +++ nautilus-2.24.2/src/nautilus-actions.h	2009-01-23 22:36:10.788601269 +0100
   2702  15264  erwannc @@ -28,6 +28,7 @@
   2703  15264  erwannc  
   2704  15264  erwannc  #define NAUTILUS_ACTION_STOP "Stop"
   2705  15264  erwannc  #define NAUTILUS_ACTION_RELOAD "Reload"
   2706  15264  erwannc +#define NAUTILUS_ACTION_RESTORE "Restore"
   2707  15264  erwannc  #define NAUTILUS_ACTION_BACK "Back"
   2708  15264  erwannc  #define NAUTILUS_ACTION_UP "Up"
   2709  15264  erwannc  #define NAUTILUS_ACTION_UP_ACCEL "UpAccel"
   2710  17265  erwannc diff -Nrup SUNWgnome-file-mgr-2.24.2/nautilus-2.24.2/src/nautilus-file-management-properties.c nautilus-2.24.2/src/nautilus-file-management-properties.c
   2711  17265  erwannc --- SUNWgnome-file-mgr-2.24.2/nautilus-2.24.2/src/nautilus-file-management-properties.c	2008-10-06 19:22:18.000000000 +0200
   2712  17265  erwannc +++ nautilus-2.24.2/src/nautilus-file-management-properties.c	2009-01-23 22:36:10.640141631 +0100
   2713  16342  erwannc @@ -73,6 +73,7 @@
   2714  16342  erwannc  #define NAUTILUS_FILE_MANAGEMENT_PROPERTIES_TREE_VIEW_FOLDERS_WIDGET "treeview_folders_checkbutton"
   2715  16342  erwannc  #define NAUTILUS_FILE_MANAGEMENT_PROPERTIES_MEDIA_AUTOMOUNT_OPEN "media_automount_open_checkbutton"
   2716  16342  erwannc  #define NAUTILUS_FILE_MANAGEMENT_PROPERTIES_MEDIA_AUTORUN_NEVER "media_autorun_never_checkbutton"
   2717  16342  erwannc +#define NAUTILUS_FILE_MANAGEMENT_PROPERTIES_ENABLE_TIME_SLIDER "time_slider_enabled_checkbutton"
   2718  16342  erwannc  
   2719  16342  erwannc  /* int enums */
   2720  16342  erwannc  #define NAUTILUS_FILE_MANAGEMENT_PROPERTIES_THUMBNAIL_LIMIT_WIDGET "preview_image_size_combobox"
   2721  16342  erwannc @@ -725,6 +726,9 @@ nautilus_file_management_properties_dial
   2722  16342  erwannc  	eel_preferences_glade_connect_bool (xml_dialog,
   2723  16342  erwannc  					    NAUTILUS_FILE_MANAGEMENT_PROPERTIES_TREE_VIEW_FOLDERS_WIDGET,
   2724  16342  erwannc  					    NAUTILUS_PREFERENCES_TREE_SHOW_ONLY_DIRECTORIES);
   2725  16342  erwannc +	eel_preferences_glade_connect_bool (xml_dialog,
   2726  16342  erwannc +					    NAUTILUS_FILE_MANAGEMENT_PROPERTIES_ENABLE_TIME_SLIDER,
   2727  16342  erwannc +					    NAUTILUS_PREFERENCES_ENABLE_TIME_SLIDER);
   2728  16342  erwannc  
   2729  16342  erwannc  	eel_preferences_glade_connect_string_enum_combo_box (xml_dialog,
   2730  16342  erwannc  							     NAUTILUS_FILE_MANAGEMENT_PROPERTIES_DEFAULT_VIEW_WIDGET,
   2731  17265  erwannc diff -Nrup SUNWgnome-file-mgr-2.24.2/nautilus-2.24.2/src/nautilus-file-management-properties.glade nautilus-2.24.2/src/nautilus-file-management-properties.glade
   2732  17265  erwannc --- SUNWgnome-file-mgr-2.24.2/nautilus-2.24.2/src/nautilus-file-management-properties.glade	2008-10-06 19:22:18.000000000 +0200
   2733  17265  erwannc +++ nautilus-2.24.2/src/nautilus-file-management-properties.glade	2009-01-23 22:36:10.778222728 +0100
   2734  16342  erwannc @@ -1,2041 +1,1167 @@
   2735  16342  erwannc -<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
   2736  16342  erwannc -<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
   2737  16342  erwannc -
   2738  16342  erwannc +<?xml version="1.0" encoding="UTF-8" standalone="no"?>
   2739  16342  erwannc +<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
   2740  16342  erwannc +<!--*- mode: xml -*-->
   2741  16342  erwannc  <glade-interface>
   2742  16342  erwannc -
   2743  16342  erwannc -<widget class="GtkDialog" id="file_management_dialog">
   2744  16342  erwannc -  <property name="border_width">5</property>
   2745  16342  erwannc -  <property name="title" translatable="yes">File Management Preferences</property>
   2746  16342  erwannc -  <property name="type">GTK_WINDOW_TOPLEVEL</property>
   2747  16342  erwannc -  <property name="window_position">GTK_WIN_POS_CENTER</property>
   2748  16342  erwannc -  <property name="modal">False</property>
   2749  16342  erwannc -  <property name="resizable">True</property>
   2750  16342  erwannc -  <property name="destroy_with_parent">False</property>
   2751  16342  erwannc -  <property name="decorated">True</property>
   2752  16342  erwannc -  <property name="skip_taskbar_hint">False</property>
   2753  16342  erwannc -  <property name="skip_pager_hint">False</property>
   2754  16342  erwannc -  <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
   2755  16342  erwannc -  <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
   2756  16342  erwannc -  <property name="focus_on_map">True</property>
   2757  16342  erwannc -  <property name="urgency_hint">False</property>
   2758  16342  erwannc -  <property name="has_separator">False</property>
   2759  16342  erwannc -
   2760  16342  erwannc -  <child internal-child="vbox">
   2761  16342  erwannc -    <widget class="GtkVBox" id="dialog-vbox1">
   2762  16342  erwannc -      <property name="visible">True</property>
   2763  16342  erwannc -      <property name="homogeneous">False</property>
   2764  16342  erwannc -      <property name="spacing">2</property>
   2765  16342  erwannc -
   2766  16342  erwannc -      <child internal-child="action_area">
   2767  16342  erwannc -	<widget class="GtkHButtonBox" id="dialog-action_area1">
   2768  16342  erwannc -	  <property name="visible">True</property>
   2769  16342  erwannc -	  <property name="layout_style">GTK_BUTTONBOX_END</property>
   2770  16342  erwannc -
   2771  16342  erwannc -	  <child>
   2772  16342  erwannc -	    <widget class="GtkButton" id="helpbutton1">
   2773  16342  erwannc -	      <property name="visible">True</property>
   2774  16342  erwannc -	      <property name="can_default">True</property>
   2775  16342  erwannc -	      <property name="can_focus">True</property>
   2776  16342  erwannc -	      <property name="label">gtk-help</property>
   2777  16342  erwannc -	      <property name="use_stock">True</property>
   2778  16342  erwannc -	      <property name="relief">GTK_RELIEF_NORMAL</property>
   2779  16342  erwannc -	      <property name="focus_on_click">True</property>
   2780  16342  erwannc -	      <property name="response_id">-11</property>
   2781  16342  erwannc -	    </widget>
   2782  16342  erwannc -	  </child>
   2783  16342  erwannc -
   2784  16342  erwannc -	  <child>
   2785  16342  erwannc -	    <widget class="GtkButton" id="closebutton1">
   2786  16342  erwannc -	      <property name="visible">True</property>
   2787  16342  erwannc -	      <property name="can_default">True</property>
   2788  16342  erwannc -	      <property name="can_focus">True</property>
   2789  16342  erwannc -	      <property name="label">gtk-close</property>
   2790  16342  erwannc -	      <property name="use_stock">True</property>
   2791  16342  erwannc -	      <property name="relief">GTK_RELIEF_NORMAL</property>
   2792  16342  erwannc -	      <property name="focus_on_click">True</property>
   2793  16342  erwannc -	      <property name="response_id">-7</property>
   2794  16342  erwannc -	    </widget>
   2795  16342  erwannc -	  </child>
   2796  16342  erwannc -	</widget>
   2797  16342  erwannc -	<packing>
   2798  16342  erwannc -	  <property name="padding">0</property>
   2799  16342  erwannc -	  <property name="expand">False</property>
   2800  16342  erwannc -	  <property name="fill">True</property>
   2801  16342  erwannc -	  <property name="pack_type">GTK_PACK_END</property>
   2802  16342  erwannc -	</packing>
   2803  16342  erwannc -      </child>
   2804  16342  erwannc -
   2805  16342  erwannc -      <child>
   2806  16342  erwannc -	<widget class="GtkNotebook" id="notebook1">
   2807  16342  erwannc -	  <property name="border_width">5</property>
   2808  16342  erwannc -	  <property name="visible">True</property>
   2809  16342  erwannc -	  <property name="can_focus">True</property>
   2810  16342  erwannc -	  <property name="show_tabs">True</property>
   2811  16342  erwannc -	  <property name="show_border">True</property>
   2812  16342  erwannc -	  <property name="tab_pos">GTK_POS_TOP</property>
   2813  16342  erwannc -	  <property name="scrollable">False</property>
   2814  16342  erwannc -	  <property name="enable_popup">False</property>
   2815  16342  erwannc -
   2816  16342  erwannc -	  <child>
   2817  16342  erwannc -	    <widget class="GtkVBox" id="vbox1">
   2818  16342  erwannc -	      <property name="border_width">12</property>
   2819  16342  erwannc -	      <property name="visible">True</property>
   2820  16342  erwannc -	      <property name="homogeneous">False</property>
   2821  16342  erwannc -	      <property name="spacing">18</property>
   2822  16342  erwannc -
   2823  16342  erwannc -	      <child>
   2824  16342  erwannc -		<widget class="GtkVBox" id="vbox2">
   2825  16342  erwannc -		  <property name="visible">True</property>
   2826  16342  erwannc -		  <property name="homogeneous">False</property>
   2827  16342  erwannc -		  <property name="spacing">6</property>
   2828  16342  erwannc -
   2829  16342  erwannc -		  <child>
   2830  16342  erwannc -		    <widget class="GtkLabel" id="label4">
   2831  16342  erwannc -		      <property name="visible">True</property>
   2832  16342  erwannc -		      <property name="label" translatable="yes">&lt;b&gt;Default View&lt;/b&gt;</property>
   2833  16342  erwannc -		      <property name="use_underline">False</property>
   2834  16342  erwannc -		      <property name="use_markup">True</property>
   2835  16342  erwannc -		      <property name="justify">GTK_JUSTIFY_LEFT</property>
   2836  16342  erwannc -		      <property name="wrap">False</property>
   2837  16342  erwannc -		      <property name="selectable">False</property>
   2838  16342  erwannc -		      <property name="xalign">0</property>
   2839  16342  erwannc -		      <property name="yalign">0.5</property>
   2840  16342  erwannc -		      <property name="xpad">0</property>
   2841  16342  erwannc -		      <property name="ypad">0</property>
   2842  16342  erwannc -		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
   2843  16342  erwannc -		      <property name="width_chars">-1</property>
   2844  16342  erwannc -		      <property name="single_line_mode">False</property>
   2845  16342  erwannc -		      <property name="angle">0</property>
   2846  16342  erwannc -		    </widget>
   2847  16342  erwannc -		    <packing>
   2848  16342  erwannc -		      <property name="padding">0</property>
   2849  16342  erwannc -		      <property name="expand">False</property>
   2850  16342  erwannc -		      <property name="fill">False</property>
   2851  16342  erwannc -		    </packing>
   2852  16342  erwannc -		  </child>
   2853  16342  erwannc -
   2854  16342  erwannc -		  <child>
   2855  16342  erwannc -		    <widget class="GtkAlignment" id="alignment2">
   2856  16342  erwannc -		      <property name="visible">True</property>
   2857  16342  erwannc -		      <property name="xalign">0.5</property>
   2858  16342  erwannc -		      <property name="yalign">0.5</property>
   2859  16342  erwannc -		      <property name="xscale">1</property>
   2860  16342  erwannc -		      <property name="yscale">1</property>
   2861  16342  erwannc -		      <property name="top_padding">0</property>
   2862  16342  erwannc -		      <property name="bottom_padding">0</property>
   2863  16342  erwannc -		      <property name="left_padding">12</property>
   2864  16342  erwannc -		      <property name="right_padding">0</property>
   2865  16342  erwannc -
   2866  16342  erwannc -		      <child>
   2867  16342  erwannc -			<widget class="GtkVBox" id="vbox14">
   2868  16342  erwannc -			  <property name="visible">True</property>
   2869  16342  erwannc -			  <property name="homogeneous">False</property>
   2870  16342  erwannc -			  <property name="spacing">6</property>
   2871  16342  erwannc -
   2872  16342  erwannc -			  <child>
   2873  16342  erwannc -			    <widget class="GtkHBox" id="hbox34">
   2874  16342  erwannc -			      <property name="visible">True</property>
   2875  16342  erwannc -			      <property name="homogeneous">False</property>
   2876  16342  erwannc -			      <property name="spacing">12</property>
   2877  16342  erwannc -
   2878  16342  erwannc -			      <child>
   2879  16342  erwannc -				<widget class="GtkLabel" id="views_label_0">
   2880  16342  erwannc -				  <property name="visible">True</property>
   2881  16342  erwannc -				  <property name="label" translatable="yes">View _new folders using:</property>
   2882  16342  erwannc -				  <property name="use_underline">True</property>
   2883  16342  erwannc -				  <property name="use_markup">False</property>
   2884  16342  erwannc -				  <property name="justify">GTK_JUSTIFY_LEFT</property>
   2885  16342  erwannc -				  <property name="wrap">False</property>
   2886  16342  erwannc -				  <property name="selectable">False</property>
   2887  16342  erwannc -				  <property name="xalign">0</property>
   2888  16342  erwannc -				  <property name="yalign">0.5</property>
   2889  16342  erwannc -				  <property name="xpad">0</property>
   2890  16342  erwannc -				  <property name="ypad">0</property>
   2891  16342  erwannc -				  <property name="mnemonic_widget">default_view_combobox</property>
   2892  16342  erwannc -				  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
   2893  16342  erwannc -				  <property name="width_chars">-1</property>
   2894  16342  erwannc -				  <property name="single_line_mode">False</property>
   2895  16342  erwannc -				  <property name="angle">0</property>
   2896  16342  erwannc -				</widget>
   2897  16342  erwannc -				<packing>
   2898  16342  erwannc -				  <property name="padding">0</property>
   2899  16342  erwannc -				  <property name="expand">False</property>
   2900  16342  erwannc -				  <property name="fill">False</property>
   2901  16342  erwannc -				</packing>
   2902  16342  erwannc -			      </child>
   2903  16342  erwannc -
   2904  16342  erwannc -			      <child>
   2905  16342  erwannc -				<widget class="GtkComboBox" id="default_view_combobox">
   2906  16342  erwannc -				  <property name="visible">True</property>
   2907  16342  erwannc -				  <property name="items" translatable="yes">Icon View
   2908  16342  erwannc +  <widget class="GtkDialog" id="file_management_dialog">
   2909  16342  erwannc +    <property name="border_width">5</property>
   2910  16342  erwannc +    <property name="title" translatable="yes">File Management Preferences</property>
   2911  16342  erwannc +    <property name="window_position">GTK_WIN_POS_CENTER</property>
   2912  16342  erwannc +    <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
   2913  16342  erwannc +    <property name="has_separator">False</property>
   2914  16342  erwannc +    <child internal-child="vbox">
   2915  16342  erwannc +      <widget class="GtkVBox" id="dialog-vbox1">
   2916  16342  erwannc +        <property name="visible">True</property>
   2917  16342  erwannc +        <property name="spacing">2</property>
   2918  16342  erwannc +        <child>
   2919  16342  erwannc +          <widget class="GtkNotebook" id="notebook1">
   2920  16342  erwannc +            <property name="visible">True</property>
   2921  16342  erwannc +            <property name="can_focus">True</property>
   2922  16342  erwannc +            <property name="border_width">5</property>
   2923  16342  erwannc +            <child>
   2924  16342  erwannc +              <widget class="GtkVBox" id="vbox1">
   2925  16342  erwannc +                <property name="visible">True</property>
   2926  16342  erwannc +                <property name="border_width">12</property>
   2927  16342  erwannc +                <property name="spacing">18</property>
   2928  16342  erwannc +                <child>
   2929  16342  erwannc +                  <widget class="GtkVBox" id="vbox2">
   2930  16342  erwannc +                    <property name="visible">True</property>
   2931  16342  erwannc +                    <property name="spacing">6</property>
   2932  16342  erwannc +                    <child>
   2933  16342  erwannc +                      <widget class="GtkLabel" id="label4">
   2934  16342  erwannc +                        <property name="visible">True</property>
   2935  16342  erwannc +                        <property name="xalign">0</property>
   2936  16342  erwannc +                        <property name="label" translatable="yes">&lt;b&gt;Default View&lt;/b&gt;</property>
   2937  16342  erwannc +                        <property name="use_markup">True</property>
   2938  16342  erwannc +                      </widget>
   2939  16342  erwannc +                      <packing>
   2940  16342  erwannc +                        <property name="expand">False</property>
   2941  16342  erwannc +                        <property name="fill">False</property>
   2942  16342  erwannc +                      </packing>
   2943  16342  erwannc +                    </child>
   2944  16342  erwannc +                    <child>
   2945  16342  erwannc +                      <widget class="GtkAlignment" id="alignment2">
   2946  16342  erwannc +                        <property name="visible">True</property>
   2947  16342  erwannc +                        <property name="left_padding">12</property>
   2948  16342  erwannc +                        <child>
   2949  16342  erwannc +                          <widget class="GtkVBox" id="vbox14">
   2950  16342  erwannc +                            <property name="visible">True</property>
   2951  16342  erwannc +                            <property name="spacing">6</property>
   2952  16342  erwannc +                            <child>
   2953  16342  erwannc +                              <widget class="GtkHBox" id="hbox34">
   2954  16342  erwannc +                                <property name="visible">True</property>
   2955  16342  erwannc +                                <property name="spacing">12</property>
   2956  16342  erwannc +                                <child>
   2957  16342  erwannc +                                  <widget class="GtkLabel" id="views_label_0">
   2958  16342  erwannc +                                    <property name="visible">True</property>
   2959  16342  erwannc +                                    <property name="xalign">0</property>
   2960  16342  erwannc +                                    <property name="label" translatable="yes">View _new folders using:</property>
   2961  16342  erwannc +                                    <property name="use_underline">True</property>
   2962  16342  erwannc +                                    <property name="mnemonic_widget">default_view_combobox</property>
   2963  16342  erwannc +                                  </widget>
   2964  16342  erwannc +                                  <packing>
   2965  16342  erwannc +                                    <property name="expand">False</property>
   2966  16342  erwannc +                                    <property name="fill">False</property>
   2967  16342  erwannc +                                  </packing>
   2968  16342  erwannc +                                </child>
   2969  16342  erwannc +                                <child>
   2970  16342  erwannc +                                  <widget class="GtkComboBox" id="default_view_combobox">
   2971  16342  erwannc +                                    <property name="visible">True</property>
   2972  16342  erwannc +                                    <property name="items" translatable="yes">Icon View
   2973  16342  erwannc  List View
   2974  16342  erwannc  Compact View</property>
   2975  16342  erwannc -				  <property name="add_tearoffs">False</property>
   2976  16342  erwannc -				  <property name="focus_on_click">True</property>
   2977  16342  erwannc -				</widget>
   2978  16342  erwannc -				<packing>
   2979  16342  erwannc -				  <property name="padding">0</property>
   2980  16342  erwannc -				  <property name="expand">True</property>
   2981  16342  erwannc -				  <property name="fill">True</property>
   2982  16342  erwannc -				</packing>
   2983  16342  erwannc -			      </child>
   2984  16342  erwannc -			    </widget>
   2985  16342  erwannc -			    <packing>
   2986  16342  erwannc -			      <property name="padding">0</property>
   2987  16342  erwannc -			      <property name="expand">True</property>
   2988  16342  erwannc -			      <property name="fill">True</property>
   2989  16342  erwannc -			    </packing>
   2990  16342  erwannc -			  </child>
   2991  16342  erwannc -
   2992  16342  erwannc -			  <child>
   2993  16342  erwannc -			    <widget class="GtkHBox" id="hbox11">
   2994  16342  erwannc -			      <property name="visible">True</property>
   2995  16342  erwannc -			      <property name="homogeneous">False</property>
   2996  16342  erwannc -			      <property name="spacing">12</property>
   2997  16342  erwannc -
   2998  16342  erwannc -			      <child>
   2999  16342  erwannc -				<widget class="GtkLabel" id="views_label_1">
   3000  16342  erwannc -				  <property name="visible">True</property>
   3001  16342  erwannc -				  <property name="label" translatable="yes">_Arrange items:</property>
   3002  16342  erwannc -				  <property name="use_underline">True</property>
   3003  16342  erwannc -				  <property name="use_markup">False</property>
   3004  16342  erwannc -				  <property name="justify">GTK_JUSTIFY_LEFT</property>
   3005  16342  erwannc -				  <property name="wrap">False</property>
   3006  16342  erwannc -				  <property name="selectable">False</property>
   3007  16342  erwannc -				  <property name="xalign">0</property>
   3008  16342  erwannc -				  <property name="yalign">0.5</property>
   3009  16342  erwannc -				  <property name="xpad">0</property>
   3010  16342  erwannc -				  <property name="ypad">0</property>
   3011  16342  erwannc -				  <property name="mnemonic_widget">sort_order_combobox</property>
   3012  16342  erwannc -				  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
   3013  16342  erwannc -				  <property name="width_chars">-1</property>
   3014  16342  erwannc -				  <property name="single_line_mode">False</property>
   3015  16342  erwannc -				  <property name="angle">0</property>
   3016  16342  erwannc -				</widget>
   3017  16342  erwannc -				<packing>
   3018  16342  erwannc -				  <property name="padding">0</property>
   3019  16342  erwannc -				  <property name="expand">False</property>
   3020  16342  erwannc -				  <property name="fill">False</property>
   3021  16342  erwannc -				</packing>
   3022  16342  erwannc -			      </child>
   3023  16342  erwannc -
   3024  16342  erwannc -			      <child>
   3025  16342  erwannc -				<widget class="GtkComboBox" id="sort_order_combobox">
   3026  16342  erwannc -				  <property name="visible">True</property>
   3027  16342  erwannc -				  <property name="items" translatable="yes">By Name
   3028  16342  erwannc +                                  </widget>
   3029  16342  erwannc +                                  <packing>
   3030  16342  erwannc +                                    <property name="position">1</property>
   3031  16342  erwannc +                                  </packing>
   3032  16342  erwannc +                                </child>
   3033  16342  erwannc +                              </widget>
   3034  16342  erwannc +                            </child>
   3035  16342  erwannc +                            <child>
   3036  16342  erwannc +                              <widget class="GtkHBox" id="hbox11">
   3037  16342  erwannc +                                <property name="visible">True</property>
   3038  16342  erwannc +                                <property name="spacing">12</property>
   3039  16342  erwannc +                                <child>
   3040  16342  erwannc +                                  <widget class="GtkLabel" id="views_label_1">
   3041  16342  erwannc +                                    <property name="visible">True</property>
   3042  16342  erwannc +                                    <property name="xalign">0</property>
   3043  16342  erwannc +                                    <property name="label" translatable="yes">_Arrange items:</property>
   3044  16342  erwannc +                                    <property name="use_underline">True</property>
   3045  16342  erwannc +                                    <property name="mnemonic_widget">sort_order_combobox</property>
   3046  16342  erwannc +                                  </widget>
   3047  16342  erwannc +                                  <packing>
   3048  16342  erwannc +                                    <property name="expand">False</property>
   3049  16342  erwannc +                                    <property name="fill">False</property>
   3050  16342  erwannc +                                  </packing>
   3051  16342  erwannc +                                </child>
   3052  16342  erwannc +                                <child>
   3053  16342  erwannc +                                  <widget class="GtkComboBox" id="sort_order_combobox">
   3054  16342  erwannc +                                    <property name="visible">True</property>
   3055  16342  erwannc +                                    <property name="items" translatable="yes">By Name
   3056  16342  erwannc  By Size
   3057  16342  erwannc  By Type
   3058  16342  erwannc  By Modification Date
   3059  16342  erwannc  By Emblems</property>
   3060  16342  erwannc -				  <property name="add_tearoffs">False</property>
   3061  16342  erwannc -				  <property name="focus_on_click">True</property>
   3062  16342  erwannc -				</widget>
   3063  16342  erwannc -				<packing>
   3064  16342  erwannc -				  <property name="padding">0</property>
   3065  16342  erwannc -				  <property name="expand">True</property>
   3066  16342  erwannc -				  <property name="fill">True</property>
   3067  16342  erwannc -				</packing>
   3068  16342  erwannc -			      </child>
   3069  16342  erwannc -			    </widget>
   3070  16342  erwannc -			    <packing>
   3071  16342  erwannc -			      <property name="padding">0</property>
   3072  16342  erwannc -			      <property name="expand">True</property>
   3073  16342  erwannc -			      <property name="fill">True</property>
   3074  16342  erwannc -			    </packing>
   3075  16342  erwannc -			  </child>
   3076  16342  erwannc -
   3077  16342  erwannc -			  <child>
   3078  16342  erwannc -			    <widget class="GtkCheckButton" id="sort_folders_first_checkbutton">
   3079  16342  erwannc -			      <property name="visible">True</property>
   3080  16342  erwannc -			      <property name="can_focus">True</property>
   3081  16342  erwannc -			      <property name="label" translatable="yes">Sort _folders before files</property>
   3082  16342  erwannc -			      <property name="use_underline">True</property>
   3083  16342  erwannc -			      <property name="relief">GTK_RELIEF_NORMAL</property>
   3084  16342  erwannc -			      <property name="focus_on_click">True</property>
   3085  16342  erwannc -			      <property name="active">False</property>
   3086  16342  erwannc -			      <property name="inconsistent">False</property>
   3087  16342  erwannc -			      <property name="draw_indicator">True</property>
   3088  16342  erwannc -			    </widget>
   3089  16342  erwannc -			    <packing>
   3090  16342  erwannc -			      <property name="padding">0</property>
   3091  16342  erwannc -			      <property name="expand">False</property>
   3092  16342  erwannc -			      <property name="fill">False</property>
   3093  16342  erwannc -			    </packing>
   3094  16342  erwannc -			  </child>
   3095  16342  erwannc -
   3096  16342  erwannc -			  <child>
   3097  16342  erwannc -			    <widget class="GtkCheckButton" id="hidden_files_checkbutton">
   3098  16342  erwannc -			      <property name="visible">True</property>
   3099  16342  erwannc -			      <property name="can_focus">True</property>
   3100  16342  erwannc -			      <property name="label" translatable="yes">Show hidden and _backup files</property>
   3101  16342  erwannc -			      <property name="use_underline">True</property>
   3102  16342  erwannc -			      <property name="relief">GTK_RELIEF_NORMAL</property>
   3103  16342  erwannc -			      <property name="focus_on_click">True</property>
   3104  16342  erwannc -			      <property name="active">False</property>
   3105  16342  erwannc -			      <property name="inconsistent">False</property>
   3106  16342  erwannc -			      <property name="draw_indicator">True</property>
   3107  16342  erwannc -			    </widget>
   3108  16342  erwannc -			    <packing>
   3109  16342  erwannc -			      <property name="padding">0</property>
   3110  16342  erwannc -			      <property name="expand">False</property>
   3111  16342  erwannc -			      <property name="fill">False</property>
   3112  16342  erwannc -			    </packing>
   3113  16342  erwannc -			  </child>
   3114  16342  erwannc -			</widget>
   3115  16342  erwannc -		      </child>
   3116  16342  erwannc -		    </widget>
   3117  16342  erwannc -		    <packing>
   3118  16342  erwannc -		      <property name="padding">0</property>
   3119  16342  erwannc -		      <property name="expand">True</property>
   3120  16342  erwannc -		      <property name="fill">True</property>
   3121  16342  erwannc -		    </packing>
   3122  16342  erwannc -		  </child>
   3123  16342  erwannc -		</widget>
   3124  16342  erwannc -		<packing>
   3125  16342  erwannc -		  <property name="padding">0</property>
   3126  16342  erwannc -		  <property name="expand">False</property>
   3127  16342  erwannc -		  <property name="fill">True</property>
   3128  16342  erwannc -		</packing>
   3129  16342  erwannc -	      </child>
   3130  16342  erwannc -
   3131  16342  erwannc -	      <child>
   3132  16342  erwannc -		<widget class="GtkVBox" id="vbox3">
   3133  16342  erwannc -		  <property name="visible">True</property>
   3134  16342  erwannc -		  <property name="homogeneous">False</property>
   3135  16342  erwannc -		  <property name="spacing">6</property>
   3136  16342  erwannc -
   3137  16342  erwannc -		  <child>
   3138  16342  erwannc -		    <widget class="GtkLabel" id="label5">
   3139  16342  erwannc -		      <property name="visible">True</property>
   3140  16342  erwannc -		      <property name="label" translatable="yes">&lt;b&gt;Icon View Defaults&lt;/b&gt;</property>
   3141  16342  erwannc -		      <property name="use_underline">False</property>
   3142  16342  erwannc -		      <property name="use_markup">True</property>
   3143  16342  erwannc -		      <property name="justify">GTK_JUSTIFY_LEFT</property>
   3144  16342  erwannc -		      <property name="wrap">False</property>
   3145  16342  erwannc -		      <property name="selectable">False</property>
   3146  16342  erwannc -		      <property name="xalign">0</property>
   3147  16342  erwannc -		      <property name="yalign">0.5</property>
   3148  16342  erwannc -		      <property name="xpad">0</property>
   3149  16342  erwannc -		      <property name="ypad">0</property>
   3150  16342  erwannc -		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
   3151  16342  erwannc -		      <property name="width_chars">-1</property>
   3152  16342  erwannc -		      <property name="single_line_mode">False</property>
   3153  16342  erwannc -		      <property name="angle">0</property>
   3154  16342  erwannc -		    </widget>
   3155  16342  erwannc -		    <packing>
   3156  16342  erwannc -		      <property name="padding">0</property>
   3157  16342  erwannc -		      <property name="expand">False</property>
   3158  16342  erwannc -		      <property name="fill">False</property>
   3159  16342  erwannc -		    </packing>
   3160  16342  erwannc -		  </child>
   3161  16342  erwannc -
   3162  16342  erwannc -		  <child>
   3163  16342  erwannc -		    <widget class="GtkAlignment" id="alignment1">
   3164  16342  erwannc -		      <property name="visible">True</property>
   3165  16342  erwannc -		      <property name="xalign">0.5</property>
   3166  16342  erwannc -		      <property name="yalign">0.5</property>
   3167  16342  erwannc -		      <property name="xscale">1</property>
   3168  16342  erwannc -		      <property name="yscale">1</property>
   3169  16342  erwannc -		      <property name="top_padding">0</property>
   3170  16342  erwannc -		      <property name="bottom_padding">0</property>
   3171  16342  erwannc -		      <property name="left_padding">12</property>
   3172  16342  erwannc -		      <property name="right_padding">0</property>
   3173  16342  erwannc -
   3174  16342  erwannc -		      <child>
   3175  16342  erwannc -			<widget class="GtkVBox" id="vbox16">
   3176  16342  erwannc -			  <property name="visible">True</property>
   3177  16342  erwannc -			  <property name="homogeneous">False</property>
   3178  16342  erwannc -			  <property name="spacing">6</property>
   3179  16342  erwannc -
   3180  16342  erwannc -			  <child>
   3181  16342  erwannc -			    <widget class="GtkHBox" id="hbox35">
   3182  16342  erwannc -			      <property name="visible">True</property>
   3183  16342  erwannc -			      <property name="homogeneous">False</property>
   3184  16342  erwannc -			      <property name="spacing">12</property>
   3185  16342  erwannc -
   3186  16342  erwannc -			      <child>
   3187  16342  erwannc -				<widget class="GtkLabel" id="views_label_2">
   3188  16342  erwannc -				  <property name="visible">True</property>
   3189  16342  erwannc -				  <property name="label" translatable="yes">Default _zoom level:</property>
   3190  16342  erwannc -				  <property name="use_underline">True</property>
   3191  16342  erwannc -				  <property name="use_markup">False</property>
   3192  16342  erwannc -				  <property name="justify">GTK_JUSTIFY_LEFT</property>
   3193  16342  erwannc -				  <property name="wrap">False</property>
   3194  16342  erwannc -				  <property name="selectable">False</property>
   3195  16342  erwannc -				  <property name="xalign">0</property>
   3196  16342  erwannc -				  <property name="yalign">0.5</property>
   3197  16342  erwannc -				  <property name="xpad">0</property>
   3198  16342  erwannc -				  <property name="ypad">0</property>
   3199  16342  erwannc -				  <property name="mnemonic_widget">icon_view_zoom_combobox</property>
   3200  16342  erwannc -				  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
   3201  16342  erwannc -				  <property name="width_chars">-1</property>
   3202  16342  erwannc -				  <property name="single_line_mode">False</property>
   3203  16342  erwannc -				  <property name="angle">0</property>
   3204  16342  erwannc -				</widget>
   3205  16342  erwannc -				<packing>
   3206  16342  erwannc -				  <property name="padding">0</property>
   3207  16342  erwannc -				  <property name="expand">False</property>
   3208  16342  erwannc -				  <property name="fill">False</property>
   3209  16342  erwannc -				</packing>
   3210  16342  erwannc -			      </child>
   3211  16342  erwannc -
   3212  16342  erwannc -			      <child>
   3213  16342  erwannc -				<widget class="GtkComboBox" id="icon_view_zoom_combobox">
   3214  16342  erwannc -				  <property name="visible">True</property>
   3215  16342  erwannc -				  <property name="items" translatable="yes">33%
   3216  16342  erwannc +                                  </widget>
   3217  16342  erwannc +                                  <packing>
   3218  16342  erwannc +                                    <property name="position">1</property>
   3219  16342  erwannc +                                  </packing>
   3220  16342  erwannc +                                </child>
   3221  16342  erwannc +                              </widget>
   3222  16342  erwannc +                              <packing>
   3223  16342  erwannc +                                <property name="position">1</property>
   3224  16342  erwannc +                              </packing>
   3225  16342  erwannc +                            </child>
   3226  16342  erwannc +                            <child>
   3227  16342  erwannc +                              <widget class="GtkCheckButton" id="sort_folders_first_checkbutton">
   3228  16342  erwannc +                                <property name="visible">True</property>
   3229  16342  erwannc +                                <property name="can_focus">True</property>
   3230  16342  erwannc +                                <property name="label" translatable="yes">Sort _folders before files</property>
   3231  16342  erwannc +                                <property name="use_underline">True</property>
   3232  16342  erwannc +                                <property name="response_id">0</property>
   3233  16342  erwannc +                                <property name="draw_indicator">True</property>
   3234  16342  erwannc +                              </widget>
   3235  16342  erwannc +                              <packing>
   3236  16342  erwannc +                                <property name="expand">False</property>
   3237  16342  erwannc +                                <property name="fill">False</property>
   3238  16342  erwannc +                                <property name="position">2</property>
   3239  16342  erwannc +                              </packing>
   3240  16342  erwannc +                            </child>
   3241  16342  erwannc +                            <child>
   3242  16342  erwannc +                              <widget class="GtkCheckButton" id="hidden_files_checkbutton">
   3243  16342  erwannc +                                <property name="visible">True</property>
   3244  16342  erwannc +                                <property name="can_focus">True</property>
   3245  16342  erwannc +                                <property name="label" translatable="yes">Show hidden and _backup files</property>
   3246  16342  erwannc +                                <property name="use_underline">True</property>
   3247  16342  erwannc +                                <property name="response_id">0</property>
   3248  16342  erwannc +                                <property name="draw_indicator">True</property>
   3249  16342  erwannc +                              </widget>
   3250  16342  erwannc +                              <packing>
   3251  16342  erwannc +                                <property name="expand">False</property>
   3252  16342  erwannc +                                <property name="fill">False</property>
   3253  16342  erwannc +                                <property name="position">3</property>
   3254  16342  erwannc +                              </packing>
   3255  16342  erwannc +                            </child>
   3256  16342  erwannc +                          </widget>
   3257  16342  erwannc +                        </child>
   3258  16342  erwannc +                      </widget>
   3259  16342  erwannc +                      <packing>
   3260  16342  erwannc +                        <property name="position">1</property>
   3261  16342  erwannc +                      </packing>
   3262  16342  erwannc +                    </child>
   3263  16342  erwannc +                  </widget>
   3264  16342  erwannc +                  <packing>
   3265  16342  erwannc +                    <property name="expand">False</property>
   3266  16342  erwannc +                  </packing>
   3267  16342  erwannc +                </child>
   3268  16342  erwannc +                <child>
   3269  16342  erwannc +                  <widget class="GtkVBox" id="vbox3">
   3270  16342  erwannc +                    <property name="visible">True</property>
   3271  16342  erwannc +                    <property name="spacing">6</property>
   3272  16342  erwannc +                    <child>
   3273  16342  erwannc +                      <widget class="GtkLabel" id="label5">
   3274  16342  erwannc +                        <property name="visible">True</property>
   3275  16342  erwannc +                        <property name="xalign">0</property>
   3276  16342  erwannc +                        <property name="label" translatable="yes">&lt;b&gt;Icon View Defaults&lt;/b&gt;</property>
   3277  16342  erwannc +                        <property name="use_markup">True</property>
   3278  16342  erwannc +                      </widget>
   3279  16342  erwannc +                      <packing>
   3280  16342  erwannc +                        <property name="expand">False</property>
   3281  16342  erwannc +                        <property name="fill">False</property>
   3282  16342  erwannc +                      </packing>
   3283  16342  erwannc +                    </child>
   3284  16342  erwannc +                    <child>
   3285  16342  erwannc +                      <widget class="GtkAlignment" id="alignment1">
   3286  16342  erwannc +                        <property name="visible">True</property>
   3287  16342  erwannc +                        <property name="left_padding">12</property>
   3288  16342  erwannc +                        <child>
   3289  16342  erwannc +                          <widget class="GtkVBox" id="vbox16">
   3290  16342  erwannc +                            <property name="visible">True</property>
   3291  16342  erwannc +                            <property name="spacing">6</property>
   3292  16342  erwannc +                            <child>
   3293  16342  erwannc +                              <widget class="GtkHBox" id="hbox35">
   3294  16342  erwannc +                                <property name="visible">True</property>
   3295  16342  erwannc +                                <property name="spacing">12</property>
   3296  16342  erwannc +                                <child>
   3297  16342  erwannc +                                  <widget class="GtkLabel" id="views_label_2">
   3298  16342  erwannc +                                    <property name="visible">True</property>
   3299  16342  erwannc +                                    <property name="xalign">0</property>
   3300  16342  erwannc +                                    <property name="label" translatable="yes">Default _zoom level:</property>
   3301  16342  erwannc +                                    <property name="use_underline">True</property>
   3302  16342  erwannc +                                    <property name="mnemonic_widget">icon_view_zoom_combobox</property>
   3303  16342  erwannc +                                  </widget>
   3304  16342  erwannc +                                  <packing>
   3305  16342  erwannc +                                    <property name="expand">False</property>
   3306  16342  erwannc +                                    <property name="fill">False</property>
   3307  16342  erwannc +                                  </packing>
   3308  16342  erwannc +                                </child>
   3309  16342  erwannc +                                <child>
   3310  16342  erwannc +                                  <widget class="GtkComboBox" id="icon_view_zoom_combobox">
   3311  16342  erwannc +                                    <property name="visible">True</property>
   3312  16342  erwannc +                                    <property name="items" translatable="yes">33%
   3313  16342  erwannc  50%
   3314  16342  erwannc  66%
   3315  16342  erwannc  100%
   3316  16342  erwannc  150%
   3317  16342  erwannc  200%
   3318  16342  erwannc  400%</property>
   3319  16342  erwannc -				  <property name="add_tearoffs">False</property>
   3320  16342  erwannc -				  <property name="focus_on_click">True</property>
   3321  16342  erwannc -				</widget>
   3322  16342  erwannc -				<packing>
   3323  16342  erwannc -				  <property name="padding">0</property>
   3324  16342  erwannc -				  <property name="expand">True</property>
   3325  16342  erwannc -				  <property name="fill">True</property>
   3326  16342  erwannc -				</packing>
   3327  16342  erwannc -			      </child>
   3328  16342  erwannc -			    </widget>
   3329  16342  erwannc -			    <packing>
   3330  16342  erwannc -			      <property name="padding">0</property>
   3331  16342  erwannc -			      <property name="expand">True</property>
   3332  16342  erwannc -			      <property name="fill">True</property>
   3333  16342  erwannc -			    </packing>
   3334  16342  erwannc -			  </child>
   3335  16342  erwannc -
   3336  16342  erwannc -			  <child>
   3337  16342  erwannc -			    <widget class="GtkCheckButton" id="compact_layout_checkbutton">
   3338  16342  erwannc -			      <property name="visible">True</property>
   3339  16342  erwannc -			      <property name="can_focus">True</property>
   3340  16342  erwannc -			      <property name="label" translatable="yes">_Use compact layout</property>
   3341  16342  erwannc -			      <property name="use_underline">True</property>
   3342  16342  erwannc -			      <property name="relief">GTK_RELIEF_NORMAL</property>
   3343  16342  erwannc -			      <property name="focus_on_click">True</property>
   3344  16342  erwannc -			      <property name="active">False</property>
   3345  16342  erwannc -			      <property name="inconsistent">False</property>
   3346  16342  erwannc -			      <property name="draw_indicator">True</property>
   3347  16342  erwannc -			    </widget>
   3348  16342  erwannc -			    <packing>
   3349  16342  erwannc -			      <property name="padding">0</property>
   3350  16342  erwannc -			      <property name="expand">False</property>
   3351  16342  erwannc -			      <property name="fill">False</property>
   3352  16342  erwannc -			    </packing>
   3353  16342  erwannc -			  </child>
   3354  16342  erwannc -
   3355  16342  erwannc -			  <child>
   3356  16342  erwannc -			    <widget class="GtkCheckButton" id="labels_beside_icons_checkbutton">
   3357  16342  erwannc -			      <property name="visible">True</property>
   3358  16342  erwannc -			      <property name="can_focus">True</property>
   3359  16342  erwannc -			      <property name="label" translatable="yes">_Text beside icons</property>
   3360  16342  erwannc -			      <property name="use_underline">True</property>
   3361  16342  erwannc -			      <property name="relief">GTK_RELIEF_NORMAL</property>
   3362  16342  erwannc -			      <property name="focus_on_click">True</property>
   3363  16342  erwannc -			      <property name="active">False</property>
   3364  16342  erwannc -			      <property name="inconsistent">False</property>
   3365  16342  erwannc -			      <property name="draw_indicator">True</property>
   3366  16342  erwannc -			    </widget>
   3367  16342  erwannc -			    <packing>
   3368  16342  erwannc -			      <property name="padding">0</property>
   3369  16342  erwannc -			      <property name="expand">False</property>
   3370  16342  erwannc -			      <property name="fill">False</property>
   3371  16342  erwannc -			    </packing>
   3372  16342  erwannc -			  </child>
   3373  16342  erwannc -			</widget>
   3374  16342  erwannc -		      </child>
   3375  16342  erwannc -		    </widget>
   3376  16342  erwannc -		    <packing>
   3377  16342  erwannc -		      <property name="padding">0</property>
   3378  16342  erwannc -		      <property name="expand">True</property>
   3379  16342  erwannc -		      <property name="fill">True</property>
   3380  16342  erwannc -		    </packing>
   3381  16342  erwannc -		  </child>
   3382  16342  erwannc -		</widget>
   3383  16342  erwannc -		<packing>
   3384  16342  erwannc -		  <property name="padding">0</property>
   3385  16342  erwannc -		  <property name="expand">False</property>
   3386  16342  erwannc -		  <property name="fill">True</property>
   3387  16342  erwannc -		</packing>
   3388  16342  erwannc -	      </child>
   3389  16342  erwannc -
   3390  16342  erwannc -	      <child>
   3391  16342  erwannc -		<widget class="GtkVBox" id="vbox">
   3392  16342  erwannc -		  <property name="visible">True</property>
   3393  16342  erwannc -		  <property name="homogeneous">False</property>
   3394  16342  erwannc -		  <property name="spacing">6</property>
   3395  16342  erwannc -
   3396  16342  erwannc -		  <child>
   3397  16342  erwannc -		    <widget class="GtkLabel" id="label">
   3398  16342  erwannc -		      <property name="visible">True</property>
   3399  16342  erwannc -		      <property name="label" translatable="yes">&lt;b&gt;Compact View Defaults&lt;/b&gt;</property>
   3400  16342  erwannc -		      <property name="use_underline">False</property>
   3401  16342  erwannc -		      <property name="use_markup">True</property>
   3402  16342  erwannc -		      <property name="justify">GTK_JUSTIFY_LEFT</property>
   3403  16342  erwannc -		      <property name="wrap">False</property>
   3404  16342  erwannc -		      <property name="selectable">False</property>
   3405  16342  erwannc -		      <property name="xalign">0</property>
   3406  16342  erwannc -		      <property name="yalign">0.5</property>
   3407  16342  erwannc -		      <property name="xpad">0</property>
   3408  16342  erwannc -		      <property name="ypad">0</property>
   3409  16342  erwannc -		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
   3410  16342  erwannc -		      <property name="width_chars">-1</property>
   3411  16342  erwannc -		      <property name="single_line_mode">False</property>
   3412  16342  erwannc -		      <property name="angle">0</property>
   3413  16342  erwannc -		    </widget>
   3414  16342  erwannc -		    <packing>
   3415  16342  erwannc -		      <property name="padding">0</property>
   3416  16342  erwannc -		      <property name="expand">False</property>
   3417  16342  erwannc -		      <property name="fill">False</property>
   3418  16342  erwannc -		    </packing>
   3419  16342  erwannc -		  </child>
   3420  16342  erwannc -
   3421  16342  erwannc -		  <child>
   3422  16342  erwannc -		    <widget class="GtkAlignment" id="alignment">
   3423  16342  erwannc -		      <property name="visible">True</property>
   3424  16342  erwannc -		      <property name="xalign">0.5</property>
   3425  16342  erwannc -		      <property name="yalign">0.5</property>
   3426  16342  erwannc -		      <property name="xscale">1</property>
   3427  16342  erwannc -		      <property name="yscale">1</property>
   3428  16342  erwannc -		      <property name="top_padding">0</property>
   3429  16342  erwannc -		      <property name="bottom_padding">0</property>
   3430  16342  erwannc -		      <property name="left_padding">12</property>
   3431  16342  erwannc -		      <property name="right_padding">0</property>
   3432  16342  erwannc -
   3433  16342  erwannc -		      <child>
   3434  16342  erwannc -			<widget class="GtkVBox" id="vbox">
   3435  16342  erwannc -			  <property name="visible">True</property>
   3436  16342  erwannc -			  <property name="homogeneous">False</property>
   3437  16342  erwannc -			  <property name="spacing">6</property>
   3438  16342  erwannc -
   3439  16342  erwannc -			  <child>
   3440  16342  erwannc -			    <widget class="GtkHBox" id="hbox">
   3441  16342  erwannc -			      <property name="visible">True</property>
   3442  16342  erwannc -			      <property name="homogeneous">False</property>
   3443  16342  erwannc -			      <property name="spacing">12</property>
   3444  16342  erwannc -
   3445  16342  erwannc -			      <child>
   3446  16342  erwannc -				<widget class="GtkLabel" id="views_label_4">
   3447  16342  erwannc -				  <property name="visible">True</property>
   3448  16342  erwannc -				  <property name="label" translatable="yes">_Default zoom level:</property>
   3449  16342  erwannc -				  <property name="use_underline">True</property>
   3450  16342  erwannc -				  <property name="use_markup">False</property>
   3451  16342  erwannc -				  <property name="justify">GTK_JUSTIFY_LEFT</property>
   3452  16342  erwannc -				  <property name="wrap">False</property>
   3453  16342  erwannc -				  <property name="selectable">False</property>
   3454  16342  erwannc -				  <property name="xalign">0</property>
   3455  16342  erwannc -				  <property name="yalign">0.5</property>
   3456  16342  erwannc -				  <property name="xpad">0</property>
   3457  16342  erwannc -				  <property name="ypad">0</property>
   3458  16342  erwannc -				  <property name="mnemonic_widget">compact_view_zoom_combobox</property>
   3459  16342  erwannc -				  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
   3460  16342  erwannc -				  <property name="width_chars">-1</property>
   3461  16342  erwannc -				  <property name="single_line_mode">False</property>
   3462  16342  erwannc -				  <property name="angle">0</property>
   3463  16342  erwannc -				</widget>
   3464  16342  erwannc -				<packing>
   3465  16342  erwannc -				  <property name="padding">0</property>
   3466  16342