1 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
4 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
5 <title>Migrating from GnomeVFS to GIO</title>
6 <meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
7 <link rel="home" href="index.html" title="GIO Reference Manual">
8 <link rel="up" href="migrating.html" title="Part III. Migrating to GIO">
9 <link rel="prev" href="ch27.html" title="Migrating from POSIX to GIO">
10 <link rel="next" href="ch28s02.html" title="Operations on multiple files">
11 <meta name="generator" content="GTK-Doc V1.18 (XML mode)">
12 <link rel="stylesheet" href="style.css" type="text/css">
14 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
15 <table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
16 <td><a accesskey="p" href="ch27.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
17 <td><a accesskey="u" href="migrating.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
18 <td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
19 <th width="100%" align="center">GIO Reference Manual</th>
20 <td><a accesskey="n" href="ch28s02.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
23 <div class="titlepage"><div><div><h2 class="title">
24 <a name="id919342"></a>Migrating from GnomeVFS to GIO</h2></div></div></div>
26 <dt><span class="section"><a href="ch28.html#id730943">Trash handling</a></span></dt>
27 <dt><span class="section"><a href="ch28s02.html">Operations on multiple files</a></span></dt>
28 <dt><span class="section"><a href="ch28s03.html">Mime monitoring</a></span></dt>
31 <a name="gnome-vfs-vs-gio"></a><p class="title"><b>Table 6. Comparison of GnomeVFS and GIO concepts</b></p>
32 <div class="table-contents"><table summary="Comparison of GnomeVFS and GIO concepts" border="1">
47 <td>GnomeVFSFileInfo</td>
51 <td>GnomeVFSResult</td>
52 <td>GError, with G_IO_ERROR values</td>
55 <td>GnomeVFSHandle & GnomeVFSAsyncHandle</td>
56 <td>GInputStream or GOutputStream</td>
59 <td>GnomeVFSDirectoryHandle</td>
60 <td>GFileEnumerator</td>
67 <td>GnomeVFSMonitor</td>
71 <td>GnomeVFSVolumeMonitor</td>
72 <td>GVolumeMonitor</td>
75 <td>GnomeVFSVolume</td>
79 <td>GnomeVFSDrive</td>
87 <td>GnomeVFSContext</td>
91 <td>gnome_vfs_async_cancel</td>
92 <td>g_cancellable_cancel</td>
97 <br class="table-break"><div class="section">
98 <div class="titlepage"><div><div><h2 class="title" style="clear: both">
99 <a name="id730943"></a>Trash handling</h2></div></div></div>
101 The handling of trashed files has been changed in GIO, compared
102 to gnome-vfs. gnome-vfs has a home-grown trash implementation that
103 predates the freedesktop.org <a class="ulink" href="http://www.freedesktop.org/wiki/Specifications/trash-spec" target="_top">Desktop Trash Can</a> specification
104 that is implemented in GIO. The location for storing trashed files
105 has changed from <code class="filename">$HOME/.Trash</code> to
106 <code class="filename">$HOME/.local/share/Trash</code> (or more correctly
107 <code class="filename">$XDG_DATA_HOME/Trash</code>), which means that
108 there is a need for migrating files that have been trashed by
109 gnome-vfs to the new location.
112 In gnome-vfs, the <code class="filename">trash://</code> scheme offering a
113 merged view of all trash directories was implemented in nautilus,
114 and trash-handling applications had to find and monitor all trash
115 directories themselves. With GIO, the <code class="filename">trash://</code>
116 implementation has been moved to gvfs and applications can simply
117 monitor that location:
119 <div class="informalexample">
120 <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
123 <td class="listing_lines" align="right"><pre>1
157 <td class="listing_code"><pre class="programlisting"><span class="keyword">static</span><span class="normal"> </span><span class="type">void</span>
158 <span class="function">file_changed</span><span class="normal"> </span><span class="symbol">(</span><span class="usertype">GFileMonitor</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">file_monitor</span><span class="symbol">,</span>
159 <span class="normal"> </span><span class="usertype">GFile</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">child</span><span class="symbol">,</span>
160 <span class="normal"> </span><span class="usertype">GFile</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">other_file</span><span class="symbol">,</span>
161 <span class="normal"> </span><span class="usertype">GFileMonitorEvent</span><span class="normal"> event_type</span><span class="symbol">,</span>
162 <span class="normal"> </span><span class="usertype">gpointer</span><span class="normal"> user_data</span><span class="symbol">)</span>
163 <span class="cbracket">{</span>
164 <span class="normal"> </span><span class="keyword">switch</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">event_type</span><span class="symbol">)</span>
165 <span class="normal"> </span><span class="cbracket">{</span>
166 <span class="normal"> </span><span class="keyword">case</span><span class="normal"> <a href="GFileMonitor.html#G-FILE-MONITOR-EVENT-DELETED:CAPS">G_FILE_MONITOR_EVENT_DELETED</a></span><span class="symbol">:</span>
167 <span class="normal"> </span><span class="function"><a href="./../glib/glib/glib-Warnings-and-Assertions.html#g-print">g_print</a></span><span class="normal"> </span><span class="symbol">(</span><span class="string">"'%s' removed from trash</span><span class="specialchar">\n</span><span class="string">"</span><span class="symbol">,</span><span class="normal"> </span><span class="function"><a href="GFile.html#g-file-get-basename">g_file_get_basename</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">child</span><span class="symbol">));</span>
168 <span class="normal"> </span><span class="keyword">break</span><span class="symbol">;</span>
169 <span class="normal"> </span><span class="keyword">case</span><span class="normal"> <a href="GFileMonitor.html#G-FILE-MONITOR-EVENT-CREATED:CAPS">G_FILE_MONITOR_EVENT_CREATED</a></span><span class="symbol">:</span>
170 <span class="normal"> </span><span class="function"><a href="./../glib/glib/glib-Warnings-and-Assertions.html#g-print">g_print</a></span><span class="normal"> </span><span class="symbol">(</span><span class="string">"'%s' added to trash</span><span class="specialchar">\n</span><span class="string">"</span><span class="symbol">,</span><span class="normal"> </span><span class="function"><a href="GFile.html#g-file-get-basename">g_file_get_basename</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">child</span><span class="symbol">));</span>
171 <span class="normal"> </span><span class="keyword">break</span><span class="symbol">;</span>
172 <span class="normal"> </span><span class="keyword">default</span><span class="symbol">:</span><span class="normal"> </span><span class="symbol">;</span>
173 <span class="normal"> </span><span class="cbracket">}</span>
174 <span class="cbracket">}</span>
176 <span class="keyword">static</span><span class="normal"> </span><span class="type">void</span>
177 <span class="function">start_monitoring_trash</span><span class="normal"> </span><span class="symbol">(</span><span class="type">void</span><span class="symbol">)</span>
178 <span class="cbracket">{</span>
179 <span class="normal"> </span><span class="usertype">GFile</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">file</span><span class="symbol">;</span>
180 <span class="normal"> </span><span class="usertype">GFileMonitor</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">monitor</span><span class="symbol">;</span>
182 <span class="normal"> file </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="GFile.html#g-file-new-for-uri">g_file_new_for_uri</a></span><span class="normal"> </span><span class="symbol">(</span><span class="string">"trash://"</span><span class="symbol">);</span>
183 <span class="normal"> monitor </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="GFile.html#g-file-monitor-directory">g_file_monitor_directory</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">file</span><span class="symbol">,</span><span class="normal"> </span><span class="number">0</span><span class="symbol">,</span><span class="normal"> <a href="./../glib/glib/glib-Standard-Macros.html#NULL:CAPS">NULL</a></span><span class="symbol">,</span><span class="normal"> <a href="./../glib/glib/glib-Standard-Macros.html#NULL:CAPS">NULL</a></span><span class="symbol">);</span>
184 <span class="normal"> </span><span class="function"><a href="./../gobject/gobject/gobject-The-Base-Object-Type.html#g-object-unref">g_object_unref</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">file</span><span class="symbol">);</span>
186 <span class="normal"> </span><span class="function"><a href="./../gobject/gobject/gobject-Signals.html#g-signal-connect">g_signal_connect</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">monitor</span><span class="symbol">,</span><span class="normal"> </span><span class="string">"changed"</span><span class="symbol">,</span><span class="normal"> </span><span class="function"><a href="./../gobject/gobject/gobject-Closures.html#G-CALLBACK:CAPS">G_CALLBACK</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">file_changed</span><span class="symbol">),</span><span class="normal"> <a href="./../glib/glib/glib-Standard-Macros.html#NULL:CAPS">NULL</a></span><span class="symbol">);</span>
188 <span class="normal"> </span><span class="comment">/* ... */</span>
190 <span class="cbracket">}</span></pre></td>
197 GIO exposes some useful metadata about trashed files. There are
198 trash::orig-path and trash::deletion-date attributes. The
199 standard::icon attribute of the <code class="filename">trash://</code>
200 itself provides a suitable icon for displaying the trash can on
201 the desktop. If you are using this icon, make sure to monitor
202 this attribute for changes, since the icon may be updated to
203 reflect that state of the trash can.
206 Moving a file to the trash is much simpler with GIO. Instead of
207 using <code class="function">gnome_vfs_find_directory()</code> with <code class="literal">GNOME_VFS_DIRECTORY_KIND_TRASH</code>
208 to find out where to move the trashed file, just use the <a class="link" href="GFile.html#g-file-trash" title="g_file_trash ()"><code class="function">g_file_trash()</code></a>
215 Generated by GTK-Doc V1.18</div>