* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
+ * Public License along with this library; if not, see <http://www.gnu.org/licenses/>.
*
* Author: Alexander Larsson <alexl@redhat.com>
* David Zeuthen <davidz@redhat.com>
#include "gsimpleasyncresult.h"
#include "glibintl.h"
-#include "gioalias.h"
struct _GWin32Mount {
GObject parent;
/* why does all this stuff need to be duplicated? It is in volume already! */
char *name;
GIcon *icon;
+ GIcon *symbolic_icon;
char *mount_path;
gboolean can_eject;
_g_win32_volume_unset_mount (mount->volume, mount);
#endif
/* TODO: g_warn_if_fail (volume->volume == NULL); */
- g_object_unref (mount->icon);
+
+ if (mount->icon != NULL)
+ g_object_unref (mount->icon);
+ if (mount->symbolic_icon != NULL)
+ g_object_unref (mount->symbolic_icon);
+
g_free (mount->name);
g_free (mount->mount_path);
{
}
-gchar *
+static gchar *
_win32_get_displayname (const char *drive)
{
gunichar2 *wdrive = g_utf8_to_utf16 (drive, -1, NULL, NULL, NULL);
* _g_win32_mount_new:
* @volume_monitor: a #GVolumeMonitor.
* @path: a win32 path.
- * @volume: ususally NULL
+ * @volume: usually NULL
*
* Returns: a #GWin32Mount for the given win32 path.
**/
GWin32Mount *
_g_win32_mount_new (GVolumeMonitor *volume_monitor,
- const char *path,
- GWin32Volume *volume)
+ const char *path,
+ GWin32Volume *volume)
{
GWin32Mount *mount;
const gchar *drive = path; //fixme
}
void
-_g_win32_mount_unset_volume (GWin32Mount *mount,
- GWin32Volume *volume)
+_g_win32_mount_unset_volume (GWin32Mount *mount,
+ GWin32Volume *volume)
{
if (mount->volume == volume)
{
/* TODO: Emit changed in idle to avoid locking issues */
g_signal_emit_by_name (mount, "changed");
if (mount->volume_monitor != NULL)
- g_signal_emit_by_name (mount->volume_monitor, "mount_changed", mount);
+ g_signal_emit_by_name (mount->volume_monitor, "mount-changed", mount);
}
}
return g_file_new_for_path (win32_mount->mount_path);
}
-const char *
-_win32_drive_type_to_icon (int type)
+static const char *
+_win32_drive_type_to_icon (int type, gboolean use_symbolic)
{
switch (type)
{
- case DRIVE_REMOVABLE : return "gtk-floppy";
- case DRIVE_FIXED : return "gtk-harddisk";
- case DRIVE_REMOTE : return "gtk-network";
- case DRIVE_CDROM : return "gtk-cdrom";
- default : return "gtk-directory";
+ case DRIVE_REMOVABLE : return use_symbolic ? "drive-removable-media-symbolic" : "drive-removable-media";
+ case DRIVE_FIXED : return use_symbolic ? "drive-harddisk-symbolic" : "drive-harddisk";
+ case DRIVE_REMOTE : return use_symbolic ? "folder-remote-symbolic" : "folder-remote";
+ case DRIVE_CDROM : return use_symbolic ? "drive-optical-symbolic" : "drive-optical";
+ default : return use_symbolic ? "folder-symbolic" : "folder";
}
}
}
else
{
- win32_mount->icon = g_themed_icon_new_with_default_fallbacks (
- _win32_drive_type_to_icon (win32_mount->drive_type));
+ win32_mount->icon = g_themed_icon_new_with_default_fallbacks (_win32_drive_type_to_icon (win32_mount->drive_type, FALSE));
}
}
return g_object_ref (win32_mount->icon);
}
+static GIcon *
+g_win32_mount_get_symbolic_icon (GMount *mount)
+{
+ GWin32Mount *win32_mount = G_WIN32_MOUNT (mount);
+
+ g_return_val_if_fail (win32_mount->mount_path != NULL, NULL);
+
+ /* lazy creation */
+ if (!win32_mount->symbolic_icon)
+ {
+ win32_mount->symbolic_icon = g_themed_icon_new_with_default_fallbacks (_win32_drive_type_to_icon (win32_mount->drive_type, TRUE));
+ }
+
+ return g_object_ref (win32_mount->symbolic_icon);
+}
+
static char *
g_win32_mount_get_uuid (GMount *mount)
{
GString *error_string;
} UnmountEjectOp;
-static void
-eject_unmount_cb (GPid pid, gint status, gpointer user_data)
-{
- UnmountEjectOp *data = user_data;
- GSimpleAsyncResult *simple;
-
-#if 0
- if (WEXITSTATUS (status) != 0)
- {
- GError *error;
- error = g_error_new_literal (G_IO_ERROR,
- G_IO_ERROR_FAILED,
- data->error_string->str);
- simple = g_simple_async_result_new_from_error (G_OBJECT (data->win32_mount),
- data->callback,
- data->user_data,
- error);
- g_error_free (error);
- }
- else
- {
- simple = g_simple_async_result_new (G_OBJECT (data->win32_mount),
- data->callback,
- data->user_data,
- NULL);
- }
-
- g_simple_async_result_complete (simple);
- g_object_unref (simple);
-
- g_source_remove (data->error_channel_source_id);
- g_io_channel_unref (data->error_channel);
- g_string_free (data->error_string, TRUE);
- close (data->error_fd);
- g_spawn_close_pid (pid);
- g_free (data);
-#endif
-}
-
-static gboolean
-eject_unmount_read_error (GIOChannel *channel,
- GIOCondition condition,
- gpointer user_data)
-{
- char *str;
- gsize str_len;
- UnmountEjectOp *data = user_data;
-
- g_io_channel_read_to_end (channel, &str, &str_len, NULL);
- g_string_append (data->error_string, str);
- g_free (str);
- return TRUE;
-}
-
static void
-eject_unmount_do (GMount *mount,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data,
- char **argv)
+g_win32_mount_unmount (GMount *mount,
+ GMountUnmountFlags flags,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
{
- GWin32Mount *win32_mount = G_WIN32_MOUNT (mount);
-}
-
-static void
-g_win32_mount_unmount (GMount *mount,
- GMountUnmountFlags flags,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- GWin32Mount *win32_mount = G_WIN32_MOUNT (mount);
}
static gboolean
-g_win32_mount_unmount_finish (GMount *mount,
- GAsyncResult *result,
- GError **error)
+g_win32_mount_unmount_finish (GMount *mount,
+ GAsyncResult *result,
+ GError **error)
{
return FALSE;
}
static void
-g_win32_mount_eject (GMount *mount,
- GMountUnmountFlags flags,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
+g_win32_mount_eject (GMount *mount,
+ GMountUnmountFlags flags,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
{
- GWin32Mount *win32_mount = G_WIN32_MOUNT (mount);
}
static gboolean
-g_win32_mount_eject_finish (GMount *mount,
- GAsyncResult *result,
- GError **error)
+g_win32_mount_eject_finish (GMount *mount,
+ GAsyncResult *result,
+ GError **error)
{
return FALSE;
}
iface->get_root = g_win32_mount_get_root;
iface->get_name = g_win32_mount_get_name;
iface->get_icon = g_win32_mount_get_icon;
+ iface->get_symbolic_icon = g_win32_mount_get_symbolic_icon;
iface->get_uuid = g_win32_mount_get_uuid;
iface->get_drive = g_win32_mount_get_drive;
iface->get_volume = g_win32_mount_get_volume;