Added a "volumes-changed" signal. Added the following methods:
2003-12-16 Federico Mena Quintero <federico@ximian.com> * gtk/gtkfilesystem.h (struct _GtkFileSystemIface): Added a "volumes-changed" signal. Added the following methods: list_volumes volume_free volume_get_base_path volume_get_is_mounted volume_mount volume_get_display_name volume_render_icon * gtk/gtkfilesystem.c (gtk_file_system_base_init): Create the "volumes-changed" signal. (gtk_file_system_list_volumes): New function. (gtk_file_system_volume_free): New function. (gtk_file_system_volume_get_base_path): New function. (gtk_file_system_volume_get_is_mounted): New function. (gtk_file_system_volume_mount): New function. (gtk_file_system_volume_get_display_name): New function. (gtk_file_system_volume_render_icon): New function. * gtk/gtkfilesystemunix.c (gtk_file_system_unix_volume_free): Implement. (gtk_file_system_unix_volume_get_base_path): Implement. (gtk_file_system_unix_volume_get_is_mounted): Implement. (gtk_file_system_unix_volume_mount): Implement. (gtk_file_system_unix_volume_get_display_name): Implement. (gtk_file_system_unix_volume_render_icon): Implement. * gtk/gtkfilechooserdefault.c (struct _GtkFileChooserDefault): Added a field for the "volumes-changed" signal connection. (gtk_file_chooser_default_set_property): Connect to "volumes-changed" on the file system. (gtk_file_chooser_default_finalize): Disconnect from "volumes-changed". * gtk/gtkfilechooserdefault.c (shortcuts_remove_rows): New helper function. (shortcuts_get_index): New helper function. (shortcuts_insert_path): Can now insert volumes as well as paths. (shortcuts_append_paths): Don't take is_file_system_root. (shortcuts_add_volumes): New function. (shortcuts_append_file_system_roots): Removed. (create_shortcuts_model): Use shortcuts_add_volumes(). (remove_bookmark_button_clicked_cb): Check that the index is within range. (bookmarks_check_add_sensitivity): Take volumes into account. (shortcuts_get_selected_index): New helper function. (remove_bookmark_button_clicked_cb): Use shortcuts_get_selected_index(). (bookmarks_check_remove_sensitivity): Likewise. (shortcuts_select_func): Likewise. (shortcuts_row_activated_cb): Handle volumes as well as normal paths. (shortcuts_activate_volume): New function. (struct _GtkFileChooserDefault): Removed the bookmarks_set and bookmarks_iter fields. (shortcuts_append_bookmarks): Use shortcuts_remove_rows(). (bookmarks_changed_cb): Use shortcuts_add_bookmarks(). (remove_bookmark_rows): Removed. (shortcuts_add_bookmarks): New function; moved most of the code over from shortcuts_append_bookmarks(). (shortcuts_append_bookmarks): Add the separator node here, and then call shortcuts_add_bookmarks().
This commit is contained in:
parent
6b80f394a5
commit
8baf8571b5
65
ChangeLog
65
ChangeLog
@ -1,3 +1,68 @@
|
|||||||
|
2003-12-16 Federico Mena Quintero <federico@ximian.com>
|
||||||
|
|
||||||
|
* gtk/gtkfilesystem.h (struct _GtkFileSystemIface): Added a
|
||||||
|
"volumes-changed" signal. Added the following methods:
|
||||||
|
list_volumes
|
||||||
|
volume_free
|
||||||
|
volume_get_base_path
|
||||||
|
volume_get_is_mounted
|
||||||
|
volume_mount
|
||||||
|
volume_get_display_name
|
||||||
|
volume_render_icon
|
||||||
|
|
||||||
|
* gtk/gtkfilesystem.c (gtk_file_system_base_init): Create the
|
||||||
|
"volumes-changed" signal.
|
||||||
|
(gtk_file_system_list_volumes): New function.
|
||||||
|
(gtk_file_system_volume_free): New function.
|
||||||
|
(gtk_file_system_volume_get_base_path): New function.
|
||||||
|
(gtk_file_system_volume_get_is_mounted): New function.
|
||||||
|
(gtk_file_system_volume_mount): New function.
|
||||||
|
(gtk_file_system_volume_get_display_name): New function.
|
||||||
|
(gtk_file_system_volume_render_icon): New function.
|
||||||
|
|
||||||
|
* gtk/gtkfilesystemunix.c (gtk_file_system_unix_volume_free): Implement.
|
||||||
|
(gtk_file_system_unix_volume_get_base_path): Implement.
|
||||||
|
(gtk_file_system_unix_volume_get_is_mounted): Implement.
|
||||||
|
(gtk_file_system_unix_volume_mount): Implement.
|
||||||
|
(gtk_file_system_unix_volume_get_display_name): Implement.
|
||||||
|
(gtk_file_system_unix_volume_render_icon): Implement.
|
||||||
|
|
||||||
|
* gtk/gtkfilechooserdefault.c (struct _GtkFileChooserDefault):
|
||||||
|
Added a field for the "volumes-changed" signal connection.
|
||||||
|
(gtk_file_chooser_default_set_property): Connect to
|
||||||
|
"volumes-changed" on the file system.
|
||||||
|
(gtk_file_chooser_default_finalize): Disconnect from
|
||||||
|
"volumes-changed".
|
||||||
|
|
||||||
|
* gtk/gtkfilechooserdefault.c (shortcuts_remove_rows): New helper
|
||||||
|
function.
|
||||||
|
(shortcuts_get_index): New helper function.
|
||||||
|
(shortcuts_insert_path): Can now insert volumes as well as paths.
|
||||||
|
(shortcuts_append_paths): Don't take is_file_system_root.
|
||||||
|
(shortcuts_add_volumes): New function.
|
||||||
|
(shortcuts_append_file_system_roots): Removed.
|
||||||
|
(create_shortcuts_model): Use shortcuts_add_volumes().
|
||||||
|
(remove_bookmark_button_clicked_cb): Check that the index is
|
||||||
|
within range.
|
||||||
|
(bookmarks_check_add_sensitivity): Take volumes into account.
|
||||||
|
(shortcuts_get_selected_index): New helper function.
|
||||||
|
(remove_bookmark_button_clicked_cb): Use
|
||||||
|
shortcuts_get_selected_index().
|
||||||
|
(bookmarks_check_remove_sensitivity): Likewise.
|
||||||
|
(shortcuts_select_func): Likewise.
|
||||||
|
(shortcuts_row_activated_cb): Handle volumes as well as normal
|
||||||
|
paths.
|
||||||
|
(shortcuts_activate_volume): New function.
|
||||||
|
(struct _GtkFileChooserDefault): Removed the bookmarks_set and
|
||||||
|
bookmarks_iter fields.
|
||||||
|
(shortcuts_append_bookmarks): Use shortcuts_remove_rows().
|
||||||
|
(bookmarks_changed_cb): Use shortcuts_add_bookmarks().
|
||||||
|
(remove_bookmark_rows): Removed.
|
||||||
|
(shortcuts_add_bookmarks): New function; moved most of the code
|
||||||
|
over from shortcuts_append_bookmarks().
|
||||||
|
(shortcuts_append_bookmarks): Add the separator node here, and
|
||||||
|
then call shortcuts_add_bookmarks().
|
||||||
|
|
||||||
Tue Dec 16 15:01:10 2003 Manish Singh <yosh@gimp.org>
|
Tue Dec 16 15:01:10 2003 Manish Singh <yosh@gimp.org>
|
||||||
|
|
||||||
* gtk/gtkfilechooserwidget.c: fix preprocessor conditional confusion.
|
* gtk/gtkfilechooserwidget.c: fix preprocessor conditional confusion.
|
||||||
|
@ -1,3 +1,68 @@
|
|||||||
|
2003-12-16 Federico Mena Quintero <federico@ximian.com>
|
||||||
|
|
||||||
|
* gtk/gtkfilesystem.h (struct _GtkFileSystemIface): Added a
|
||||||
|
"volumes-changed" signal. Added the following methods:
|
||||||
|
list_volumes
|
||||||
|
volume_free
|
||||||
|
volume_get_base_path
|
||||||
|
volume_get_is_mounted
|
||||||
|
volume_mount
|
||||||
|
volume_get_display_name
|
||||||
|
volume_render_icon
|
||||||
|
|
||||||
|
* gtk/gtkfilesystem.c (gtk_file_system_base_init): Create the
|
||||||
|
"volumes-changed" signal.
|
||||||
|
(gtk_file_system_list_volumes): New function.
|
||||||
|
(gtk_file_system_volume_free): New function.
|
||||||
|
(gtk_file_system_volume_get_base_path): New function.
|
||||||
|
(gtk_file_system_volume_get_is_mounted): New function.
|
||||||
|
(gtk_file_system_volume_mount): New function.
|
||||||
|
(gtk_file_system_volume_get_display_name): New function.
|
||||||
|
(gtk_file_system_volume_render_icon): New function.
|
||||||
|
|
||||||
|
* gtk/gtkfilesystemunix.c (gtk_file_system_unix_volume_free): Implement.
|
||||||
|
(gtk_file_system_unix_volume_get_base_path): Implement.
|
||||||
|
(gtk_file_system_unix_volume_get_is_mounted): Implement.
|
||||||
|
(gtk_file_system_unix_volume_mount): Implement.
|
||||||
|
(gtk_file_system_unix_volume_get_display_name): Implement.
|
||||||
|
(gtk_file_system_unix_volume_render_icon): Implement.
|
||||||
|
|
||||||
|
* gtk/gtkfilechooserdefault.c (struct _GtkFileChooserDefault):
|
||||||
|
Added a field for the "volumes-changed" signal connection.
|
||||||
|
(gtk_file_chooser_default_set_property): Connect to
|
||||||
|
"volumes-changed" on the file system.
|
||||||
|
(gtk_file_chooser_default_finalize): Disconnect from
|
||||||
|
"volumes-changed".
|
||||||
|
|
||||||
|
* gtk/gtkfilechooserdefault.c (shortcuts_remove_rows): New helper
|
||||||
|
function.
|
||||||
|
(shortcuts_get_index): New helper function.
|
||||||
|
(shortcuts_insert_path): Can now insert volumes as well as paths.
|
||||||
|
(shortcuts_append_paths): Don't take is_file_system_root.
|
||||||
|
(shortcuts_add_volumes): New function.
|
||||||
|
(shortcuts_append_file_system_roots): Removed.
|
||||||
|
(create_shortcuts_model): Use shortcuts_add_volumes().
|
||||||
|
(remove_bookmark_button_clicked_cb): Check that the index is
|
||||||
|
within range.
|
||||||
|
(bookmarks_check_add_sensitivity): Take volumes into account.
|
||||||
|
(shortcuts_get_selected_index): New helper function.
|
||||||
|
(remove_bookmark_button_clicked_cb): Use
|
||||||
|
shortcuts_get_selected_index().
|
||||||
|
(bookmarks_check_remove_sensitivity): Likewise.
|
||||||
|
(shortcuts_select_func): Likewise.
|
||||||
|
(shortcuts_row_activated_cb): Handle volumes as well as normal
|
||||||
|
paths.
|
||||||
|
(shortcuts_activate_volume): New function.
|
||||||
|
(struct _GtkFileChooserDefault): Removed the bookmarks_set and
|
||||||
|
bookmarks_iter fields.
|
||||||
|
(shortcuts_append_bookmarks): Use shortcuts_remove_rows().
|
||||||
|
(bookmarks_changed_cb): Use shortcuts_add_bookmarks().
|
||||||
|
(remove_bookmark_rows): Removed.
|
||||||
|
(shortcuts_add_bookmarks): New function; moved most of the code
|
||||||
|
over from shortcuts_append_bookmarks().
|
||||||
|
(shortcuts_append_bookmarks): Add the separator node here, and
|
||||||
|
then call shortcuts_add_bookmarks().
|
||||||
|
|
||||||
Tue Dec 16 15:01:10 2003 Manish Singh <yosh@gimp.org>
|
Tue Dec 16 15:01:10 2003 Manish Singh <yosh@gimp.org>
|
||||||
|
|
||||||
* gtk/gtkfilechooserwidget.c: fix preprocessor conditional confusion.
|
* gtk/gtkfilechooserwidget.c: fix preprocessor conditional confusion.
|
||||||
|
@ -1,3 +1,68 @@
|
|||||||
|
2003-12-16 Federico Mena Quintero <federico@ximian.com>
|
||||||
|
|
||||||
|
* gtk/gtkfilesystem.h (struct _GtkFileSystemIface): Added a
|
||||||
|
"volumes-changed" signal. Added the following methods:
|
||||||
|
list_volumes
|
||||||
|
volume_free
|
||||||
|
volume_get_base_path
|
||||||
|
volume_get_is_mounted
|
||||||
|
volume_mount
|
||||||
|
volume_get_display_name
|
||||||
|
volume_render_icon
|
||||||
|
|
||||||
|
* gtk/gtkfilesystem.c (gtk_file_system_base_init): Create the
|
||||||
|
"volumes-changed" signal.
|
||||||
|
(gtk_file_system_list_volumes): New function.
|
||||||
|
(gtk_file_system_volume_free): New function.
|
||||||
|
(gtk_file_system_volume_get_base_path): New function.
|
||||||
|
(gtk_file_system_volume_get_is_mounted): New function.
|
||||||
|
(gtk_file_system_volume_mount): New function.
|
||||||
|
(gtk_file_system_volume_get_display_name): New function.
|
||||||
|
(gtk_file_system_volume_render_icon): New function.
|
||||||
|
|
||||||
|
* gtk/gtkfilesystemunix.c (gtk_file_system_unix_volume_free): Implement.
|
||||||
|
(gtk_file_system_unix_volume_get_base_path): Implement.
|
||||||
|
(gtk_file_system_unix_volume_get_is_mounted): Implement.
|
||||||
|
(gtk_file_system_unix_volume_mount): Implement.
|
||||||
|
(gtk_file_system_unix_volume_get_display_name): Implement.
|
||||||
|
(gtk_file_system_unix_volume_render_icon): Implement.
|
||||||
|
|
||||||
|
* gtk/gtkfilechooserdefault.c (struct _GtkFileChooserDefault):
|
||||||
|
Added a field for the "volumes-changed" signal connection.
|
||||||
|
(gtk_file_chooser_default_set_property): Connect to
|
||||||
|
"volumes-changed" on the file system.
|
||||||
|
(gtk_file_chooser_default_finalize): Disconnect from
|
||||||
|
"volumes-changed".
|
||||||
|
|
||||||
|
* gtk/gtkfilechooserdefault.c (shortcuts_remove_rows): New helper
|
||||||
|
function.
|
||||||
|
(shortcuts_get_index): New helper function.
|
||||||
|
(shortcuts_insert_path): Can now insert volumes as well as paths.
|
||||||
|
(shortcuts_append_paths): Don't take is_file_system_root.
|
||||||
|
(shortcuts_add_volumes): New function.
|
||||||
|
(shortcuts_append_file_system_roots): Removed.
|
||||||
|
(create_shortcuts_model): Use shortcuts_add_volumes().
|
||||||
|
(remove_bookmark_button_clicked_cb): Check that the index is
|
||||||
|
within range.
|
||||||
|
(bookmarks_check_add_sensitivity): Take volumes into account.
|
||||||
|
(shortcuts_get_selected_index): New helper function.
|
||||||
|
(remove_bookmark_button_clicked_cb): Use
|
||||||
|
shortcuts_get_selected_index().
|
||||||
|
(bookmarks_check_remove_sensitivity): Likewise.
|
||||||
|
(shortcuts_select_func): Likewise.
|
||||||
|
(shortcuts_row_activated_cb): Handle volumes as well as normal
|
||||||
|
paths.
|
||||||
|
(shortcuts_activate_volume): New function.
|
||||||
|
(struct _GtkFileChooserDefault): Removed the bookmarks_set and
|
||||||
|
bookmarks_iter fields.
|
||||||
|
(shortcuts_append_bookmarks): Use shortcuts_remove_rows().
|
||||||
|
(bookmarks_changed_cb): Use shortcuts_add_bookmarks().
|
||||||
|
(remove_bookmark_rows): Removed.
|
||||||
|
(shortcuts_add_bookmarks): New function; moved most of the code
|
||||||
|
over from shortcuts_append_bookmarks().
|
||||||
|
(shortcuts_append_bookmarks): Add the separator node here, and
|
||||||
|
then call shortcuts_add_bookmarks().
|
||||||
|
|
||||||
Tue Dec 16 15:01:10 2003 Manish Singh <yosh@gimp.org>
|
Tue Dec 16 15:01:10 2003 Manish Singh <yosh@gimp.org>
|
||||||
|
|
||||||
* gtk/gtkfilechooserwidget.c: fix preprocessor conditional confusion.
|
* gtk/gtkfilechooserwidget.c: fix preprocessor conditional confusion.
|
||||||
|
@ -1,3 +1,68 @@
|
|||||||
|
2003-12-16 Federico Mena Quintero <federico@ximian.com>
|
||||||
|
|
||||||
|
* gtk/gtkfilesystem.h (struct _GtkFileSystemIface): Added a
|
||||||
|
"volumes-changed" signal. Added the following methods:
|
||||||
|
list_volumes
|
||||||
|
volume_free
|
||||||
|
volume_get_base_path
|
||||||
|
volume_get_is_mounted
|
||||||
|
volume_mount
|
||||||
|
volume_get_display_name
|
||||||
|
volume_render_icon
|
||||||
|
|
||||||
|
* gtk/gtkfilesystem.c (gtk_file_system_base_init): Create the
|
||||||
|
"volumes-changed" signal.
|
||||||
|
(gtk_file_system_list_volumes): New function.
|
||||||
|
(gtk_file_system_volume_free): New function.
|
||||||
|
(gtk_file_system_volume_get_base_path): New function.
|
||||||
|
(gtk_file_system_volume_get_is_mounted): New function.
|
||||||
|
(gtk_file_system_volume_mount): New function.
|
||||||
|
(gtk_file_system_volume_get_display_name): New function.
|
||||||
|
(gtk_file_system_volume_render_icon): New function.
|
||||||
|
|
||||||
|
* gtk/gtkfilesystemunix.c (gtk_file_system_unix_volume_free): Implement.
|
||||||
|
(gtk_file_system_unix_volume_get_base_path): Implement.
|
||||||
|
(gtk_file_system_unix_volume_get_is_mounted): Implement.
|
||||||
|
(gtk_file_system_unix_volume_mount): Implement.
|
||||||
|
(gtk_file_system_unix_volume_get_display_name): Implement.
|
||||||
|
(gtk_file_system_unix_volume_render_icon): Implement.
|
||||||
|
|
||||||
|
* gtk/gtkfilechooserdefault.c (struct _GtkFileChooserDefault):
|
||||||
|
Added a field for the "volumes-changed" signal connection.
|
||||||
|
(gtk_file_chooser_default_set_property): Connect to
|
||||||
|
"volumes-changed" on the file system.
|
||||||
|
(gtk_file_chooser_default_finalize): Disconnect from
|
||||||
|
"volumes-changed".
|
||||||
|
|
||||||
|
* gtk/gtkfilechooserdefault.c (shortcuts_remove_rows): New helper
|
||||||
|
function.
|
||||||
|
(shortcuts_get_index): New helper function.
|
||||||
|
(shortcuts_insert_path): Can now insert volumes as well as paths.
|
||||||
|
(shortcuts_append_paths): Don't take is_file_system_root.
|
||||||
|
(shortcuts_add_volumes): New function.
|
||||||
|
(shortcuts_append_file_system_roots): Removed.
|
||||||
|
(create_shortcuts_model): Use shortcuts_add_volumes().
|
||||||
|
(remove_bookmark_button_clicked_cb): Check that the index is
|
||||||
|
within range.
|
||||||
|
(bookmarks_check_add_sensitivity): Take volumes into account.
|
||||||
|
(shortcuts_get_selected_index): New helper function.
|
||||||
|
(remove_bookmark_button_clicked_cb): Use
|
||||||
|
shortcuts_get_selected_index().
|
||||||
|
(bookmarks_check_remove_sensitivity): Likewise.
|
||||||
|
(shortcuts_select_func): Likewise.
|
||||||
|
(shortcuts_row_activated_cb): Handle volumes as well as normal
|
||||||
|
paths.
|
||||||
|
(shortcuts_activate_volume): New function.
|
||||||
|
(struct _GtkFileChooserDefault): Removed the bookmarks_set and
|
||||||
|
bookmarks_iter fields.
|
||||||
|
(shortcuts_append_bookmarks): Use shortcuts_remove_rows().
|
||||||
|
(bookmarks_changed_cb): Use shortcuts_add_bookmarks().
|
||||||
|
(remove_bookmark_rows): Removed.
|
||||||
|
(shortcuts_add_bookmarks): New function; moved most of the code
|
||||||
|
over from shortcuts_append_bookmarks().
|
||||||
|
(shortcuts_append_bookmarks): Add the separator node here, and
|
||||||
|
then call shortcuts_add_bookmarks().
|
||||||
|
|
||||||
Tue Dec 16 15:01:10 2003 Manish Singh <yosh@gimp.org>
|
Tue Dec 16 15:01:10 2003 Manish Singh <yosh@gimp.org>
|
||||||
|
|
||||||
* gtk/gtkfilechooserwidget.c: fix preprocessor conditional confusion.
|
* gtk/gtkfilechooserwidget.c: fix preprocessor conditional confusion.
|
||||||
|
@ -1,3 +1,68 @@
|
|||||||
|
2003-12-16 Federico Mena Quintero <federico@ximian.com>
|
||||||
|
|
||||||
|
* gtk/gtkfilesystem.h (struct _GtkFileSystemIface): Added a
|
||||||
|
"volumes-changed" signal. Added the following methods:
|
||||||
|
list_volumes
|
||||||
|
volume_free
|
||||||
|
volume_get_base_path
|
||||||
|
volume_get_is_mounted
|
||||||
|
volume_mount
|
||||||
|
volume_get_display_name
|
||||||
|
volume_render_icon
|
||||||
|
|
||||||
|
* gtk/gtkfilesystem.c (gtk_file_system_base_init): Create the
|
||||||
|
"volumes-changed" signal.
|
||||||
|
(gtk_file_system_list_volumes): New function.
|
||||||
|
(gtk_file_system_volume_free): New function.
|
||||||
|
(gtk_file_system_volume_get_base_path): New function.
|
||||||
|
(gtk_file_system_volume_get_is_mounted): New function.
|
||||||
|
(gtk_file_system_volume_mount): New function.
|
||||||
|
(gtk_file_system_volume_get_display_name): New function.
|
||||||
|
(gtk_file_system_volume_render_icon): New function.
|
||||||
|
|
||||||
|
* gtk/gtkfilesystemunix.c (gtk_file_system_unix_volume_free): Implement.
|
||||||
|
(gtk_file_system_unix_volume_get_base_path): Implement.
|
||||||
|
(gtk_file_system_unix_volume_get_is_mounted): Implement.
|
||||||
|
(gtk_file_system_unix_volume_mount): Implement.
|
||||||
|
(gtk_file_system_unix_volume_get_display_name): Implement.
|
||||||
|
(gtk_file_system_unix_volume_render_icon): Implement.
|
||||||
|
|
||||||
|
* gtk/gtkfilechooserdefault.c (struct _GtkFileChooserDefault):
|
||||||
|
Added a field for the "volumes-changed" signal connection.
|
||||||
|
(gtk_file_chooser_default_set_property): Connect to
|
||||||
|
"volumes-changed" on the file system.
|
||||||
|
(gtk_file_chooser_default_finalize): Disconnect from
|
||||||
|
"volumes-changed".
|
||||||
|
|
||||||
|
* gtk/gtkfilechooserdefault.c (shortcuts_remove_rows): New helper
|
||||||
|
function.
|
||||||
|
(shortcuts_get_index): New helper function.
|
||||||
|
(shortcuts_insert_path): Can now insert volumes as well as paths.
|
||||||
|
(shortcuts_append_paths): Don't take is_file_system_root.
|
||||||
|
(shortcuts_add_volumes): New function.
|
||||||
|
(shortcuts_append_file_system_roots): Removed.
|
||||||
|
(create_shortcuts_model): Use shortcuts_add_volumes().
|
||||||
|
(remove_bookmark_button_clicked_cb): Check that the index is
|
||||||
|
within range.
|
||||||
|
(bookmarks_check_add_sensitivity): Take volumes into account.
|
||||||
|
(shortcuts_get_selected_index): New helper function.
|
||||||
|
(remove_bookmark_button_clicked_cb): Use
|
||||||
|
shortcuts_get_selected_index().
|
||||||
|
(bookmarks_check_remove_sensitivity): Likewise.
|
||||||
|
(shortcuts_select_func): Likewise.
|
||||||
|
(shortcuts_row_activated_cb): Handle volumes as well as normal
|
||||||
|
paths.
|
||||||
|
(shortcuts_activate_volume): New function.
|
||||||
|
(struct _GtkFileChooserDefault): Removed the bookmarks_set and
|
||||||
|
bookmarks_iter fields.
|
||||||
|
(shortcuts_append_bookmarks): Use shortcuts_remove_rows().
|
||||||
|
(bookmarks_changed_cb): Use shortcuts_add_bookmarks().
|
||||||
|
(remove_bookmark_rows): Removed.
|
||||||
|
(shortcuts_add_bookmarks): New function; moved most of the code
|
||||||
|
over from shortcuts_append_bookmarks().
|
||||||
|
(shortcuts_append_bookmarks): Add the separator node here, and
|
||||||
|
then call shortcuts_add_bookmarks().
|
||||||
|
|
||||||
Tue Dec 16 15:01:10 2003 Manish Singh <yosh@gimp.org>
|
Tue Dec 16 15:01:10 2003 Manish Singh <yosh@gimp.org>
|
||||||
|
|
||||||
* gtk/gtkfilechooserwidget.c: fix preprocessor conditional confusion.
|
* gtk/gtkfilechooserwidget.c: fix preprocessor conditional confusion.
|
||||||
|
@ -85,12 +85,14 @@ struct _GtkFileChooserDefault
|
|||||||
|
|
||||||
gboolean has_home;
|
gboolean has_home;
|
||||||
gboolean has_desktop;
|
gboolean has_desktop;
|
||||||
int num_roots;
|
|
||||||
|
int num_volumes;
|
||||||
int num_shortcuts;
|
int num_shortcuts;
|
||||||
int num_bookmarks;
|
int num_bookmarks;
|
||||||
|
|
||||||
|
guint volumes_changed_id;
|
||||||
|
|
||||||
guint bookmarks_changed_id;
|
guint bookmarks_changed_id;
|
||||||
GtkTreeIter bookmarks_iter;
|
|
||||||
|
|
||||||
GtkFilePath *current_folder;
|
GtkFilePath *current_folder;
|
||||||
GtkFilePath *preview_path;
|
GtkFilePath *preview_path;
|
||||||
@ -122,7 +124,6 @@ struct _GtkFileChooserDefault
|
|||||||
guint select_multiple : 1;
|
guint select_multiple : 1;
|
||||||
guint show_hidden : 1;
|
guint show_hidden : 1;
|
||||||
guint list_sort_ascending : 1;
|
guint list_sort_ascending : 1;
|
||||||
guint bookmarks_set : 1;
|
|
||||||
guint changing_folder : 1;
|
guint changing_folder : 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -154,6 +155,16 @@ static GtkTargetEntry shortcuts_targets[] = {
|
|||||||
|
|
||||||
static const int num_shortcuts_targets = sizeof (shortcuts_targets) / sizeof (shortcuts_targets[0]);
|
static const int num_shortcuts_targets = sizeof (shortcuts_targets) / sizeof (shortcuts_targets[0]);
|
||||||
|
|
||||||
|
/* Interesting places in the shortcuts bar */
|
||||||
|
typedef enum {
|
||||||
|
SHORTCUTS_HOME,
|
||||||
|
SHORTCUTS_DESKTOP,
|
||||||
|
SHORTCUTS_VOLUMES,
|
||||||
|
SHORTCUTS_SHORTCUTS,
|
||||||
|
SHORTCUTS_SEPARATOR,
|
||||||
|
SHORTCUTS_BOOKMARKS
|
||||||
|
} ShortcutsIndex;
|
||||||
|
|
||||||
/* Standard icon size */
|
/* Standard icon size */
|
||||||
/* FIXME: maybe this should correspond to the font size in the tree views... */
|
/* FIXME: maybe this should correspond to the font size in the tree views... */
|
||||||
#define ICON_SIZE 20
|
#define ICON_SIZE 20
|
||||||
@ -354,6 +365,8 @@ gtk_file_chooser_default_finalize (GObject *object)
|
|||||||
{
|
{
|
||||||
GtkFileChooserDefault *impl = GTK_FILE_CHOOSER_DEFAULT (object);
|
GtkFileChooserDefault *impl = GTK_FILE_CHOOSER_DEFAULT (object);
|
||||||
|
|
||||||
|
g_signal_handler_disconnect (impl->file_system, impl->volumes_changed_id);
|
||||||
|
impl->volumes_changed_id = 0;
|
||||||
g_signal_handler_disconnect (impl->file_system, impl->bookmarks_changed_id);
|
g_signal_handler_disconnect (impl->file_system, impl->bookmarks_changed_id);
|
||||||
impl->bookmarks_changed_id = 0;
|
impl->bookmarks_changed_id = 0;
|
||||||
g_object_unref (impl->file_system);
|
g_object_unref (impl->file_system);
|
||||||
@ -494,60 +507,62 @@ get_file_info (GtkFileSystem *file_system, const GtkFilePath *path, GError **err
|
|||||||
return info;
|
return info;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Inserts a path in the shortcuts tree, making a copy of it. A position of -1
|
/* Inserts a path in the shortcuts tree, making a copy of it; alternatively,
|
||||||
* indicates the end of the tree. If the label is NULL, then the display name
|
* inserts a volume. A position of -1 indicates the end of the tree.
|
||||||
* of a GtkFileInfo is used.
|
|
||||||
*/
|
*/
|
||||||
static gboolean
|
static gboolean
|
||||||
shortcuts_insert_path (GtkFileChooserDefault *impl,
|
shortcuts_insert_path (GtkFileChooserDefault *impl,
|
||||||
int pos,
|
int pos,
|
||||||
|
gboolean is_volume,
|
||||||
|
GtkFileSystemVolume *volume,
|
||||||
const GtkFilePath *path,
|
const GtkFilePath *path,
|
||||||
gboolean is_root,
|
|
||||||
const char *label,
|
const char *label,
|
||||||
GError **error)
|
GError **error)
|
||||||
{
|
{
|
||||||
GtkFileInfo *info;
|
char *label_copy;
|
||||||
GtkFilePath *path_copy;
|
|
||||||
GdkPixbuf *pixbuf;
|
GdkPixbuf *pixbuf;
|
||||||
|
gpointer data;
|
||||||
GtkTreeIter iter;
|
GtkTreeIter iter;
|
||||||
|
|
||||||
/* FIXME: what if someone adds a shortcut to a root? get_file_info() will not
|
if (is_volume)
|
||||||
* work in that case, I think...
|
{
|
||||||
*/
|
data = volume;
|
||||||
|
label_copy = gtk_file_system_volume_get_display_name (impl->file_system, volume);
|
||||||
if (is_root)
|
pixbuf = gtk_file_system_volume_render_icon (impl->file_system,
|
||||||
info = gtk_file_system_get_root_info (impl->file_system,
|
volume,
|
||||||
path,
|
GTK_WIDGET (impl),
|
||||||
#if 0
|
ICON_SIZE,
|
||||||
GTK_FILE_INFO_DISPLAY_NAME | GTK_FILE_INFO_ICON,
|
NULL);
|
||||||
#else
|
}
|
||||||
GTK_FILE_INFO_DISPLAY_NAME,
|
|
||||||
#endif
|
|
||||||
error);
|
|
||||||
else
|
else
|
||||||
info = get_file_info (impl->file_system, path, error);
|
{
|
||||||
|
GtkFileInfo *info;
|
||||||
|
|
||||||
if (!info)
|
info = get_file_info (impl->file_system, path, error);
|
||||||
return FALSE;
|
if (!info)
|
||||||
#if 0
|
return FALSE;
|
||||||
pixbuf = gtk_file_info_render_icon (info, impl->shortcuts_tree, ICON_SIZE);
|
|
||||||
#endif
|
data = gtk_file_path_copy (path);
|
||||||
/* FIXME: NULL GError */
|
|
||||||
pixbuf = gtk_file_system_render_icon (impl->file_system, path, GTK_WIDGET (impl), ICON_SIZE, NULL);
|
if (label)
|
||||||
|
label_copy = g_strdup (label);
|
||||||
|
else
|
||||||
|
label_copy = g_strdup (gtk_file_info_get_display_name (info));
|
||||||
|
|
||||||
|
pixbuf = gtk_file_system_render_icon (impl->file_system, path, GTK_WIDGET (impl), ICON_SIZE, NULL);
|
||||||
|
|
||||||
|
gtk_file_info_free (info);
|
||||||
|
}
|
||||||
|
|
||||||
gtk_tree_store_insert (impl->shortcuts_model, &iter, NULL, pos);
|
gtk_tree_store_insert (impl->shortcuts_model, &iter, NULL, pos);
|
||||||
path_copy = gtk_file_path_copy (path);
|
|
||||||
|
|
||||||
if (!label)
|
|
||||||
label = gtk_file_info_get_display_name (info);
|
|
||||||
|
|
||||||
gtk_tree_store_set (impl->shortcuts_model, &iter,
|
gtk_tree_store_set (impl->shortcuts_model, &iter,
|
||||||
SHORTCUTS_COL_PIXBUF, pixbuf,
|
SHORTCUTS_COL_PIXBUF, pixbuf,
|
||||||
SHORTCUTS_COL_NAME, label,
|
SHORTCUTS_COL_NAME, label_copy,
|
||||||
SHORTCUTS_COL_PATH, path_copy,
|
SHORTCUTS_COL_PATH, data,
|
||||||
-1);
|
-1);
|
||||||
|
|
||||||
gtk_file_info_free (info);
|
g_free (label_copy);
|
||||||
|
|
||||||
if (pixbuf)
|
if (pixbuf)
|
||||||
g_object_unref (pixbuf);
|
g_object_unref (pixbuf);
|
||||||
@ -567,7 +582,7 @@ shortcuts_append_home (GtkFileChooserDefault *impl)
|
|||||||
home_path = gtk_file_system_filename_to_path (impl->file_system, home);
|
home_path = gtk_file_system_filename_to_path (impl->file_system, home);
|
||||||
|
|
||||||
error = NULL;
|
error = NULL;
|
||||||
impl->has_home = shortcuts_insert_path (impl, -1, home_path, FALSE, _("Home"), &error);
|
impl->has_home = shortcuts_insert_path (impl, -1, FALSE, NULL, home_path, _("Home"), &error);
|
||||||
if (!impl->has_home)
|
if (!impl->has_home)
|
||||||
error_getting_info_dialog (impl, home_path, error);
|
error_getting_info_dialog (impl, home_path, error);
|
||||||
|
|
||||||
@ -587,7 +602,7 @@ shortcuts_append_desktop (GtkFileChooserDefault *impl)
|
|||||||
path = gtk_file_system_filename_to_path (impl->file_system, name);
|
path = gtk_file_system_filename_to_path (impl->file_system, name);
|
||||||
g_free (name);
|
g_free (name);
|
||||||
|
|
||||||
impl->has_desktop = shortcuts_insert_path (impl, -1, path, FALSE, NULL, NULL);
|
impl->has_desktop = shortcuts_insert_path (impl, -1, FALSE, NULL, path, NULL, NULL);
|
||||||
/* We do not actually pop up an error dialog if there is no desktop directory
|
/* We do not actually pop up an error dialog if there is no desktop directory
|
||||||
* because some people may really not want to have one.
|
* because some people may really not want to have one.
|
||||||
*/
|
*/
|
||||||
@ -598,8 +613,7 @@ shortcuts_append_desktop (GtkFileChooserDefault *impl)
|
|||||||
/* Appends a list of GtkFilePath to the shortcuts model; returns how many were inserted */
|
/* Appends a list of GtkFilePath to the shortcuts model; returns how many were inserted */
|
||||||
static int
|
static int
|
||||||
shortcuts_append_paths (GtkFileChooserDefault *impl,
|
shortcuts_append_paths (GtkFileChooserDefault *impl,
|
||||||
GSList *paths,
|
GSList *paths)
|
||||||
gboolean is_file_system_root)
|
|
||||||
{
|
{
|
||||||
int num_inserted;
|
int num_inserted;
|
||||||
|
|
||||||
@ -613,7 +627,7 @@ shortcuts_append_paths (GtkFileChooserDefault *impl,
|
|||||||
path = paths->data;
|
path = paths->data;
|
||||||
error = NULL;
|
error = NULL;
|
||||||
|
|
||||||
if (shortcuts_insert_path (impl, -1, path, is_file_system_root, NULL, &error))
|
if (shortcuts_insert_path (impl, -1, FALSE, NULL, path, NULL, &error))
|
||||||
num_inserted++;
|
num_inserted++;
|
||||||
else
|
else
|
||||||
error_getting_info_dialog (impl, path, error);
|
error_getting_info_dialog (impl, path, error);
|
||||||
@ -622,62 +636,160 @@ shortcuts_append_paths (GtkFileChooserDefault *impl,
|
|||||||
return num_inserted;
|
return num_inserted;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Appends all the file system roots to the shortcuts model */
|
/* Returns the index for the corresponding item in the shortcuts bar */
|
||||||
static void
|
static int
|
||||||
shortcuts_append_file_system_roots (GtkFileChooserDefault *impl)
|
shortcuts_get_index (GtkFileChooserDefault *impl,
|
||||||
|
ShortcutsIndex where)
|
||||||
{
|
{
|
||||||
GSList *roots;
|
int n;
|
||||||
|
|
||||||
roots = gtk_file_system_list_roots (impl->file_system);
|
n = 0;
|
||||||
/* FIXME: handle the roots-changed signal on the file system */
|
|
||||||
|
|
||||||
impl->num_roots = shortcuts_append_paths (impl, roots, TRUE);
|
if (where == SHORTCUTS_HOME)
|
||||||
gtk_file_paths_free (roots);
|
goto out;
|
||||||
|
|
||||||
|
n += impl->has_home ? 1 : 0;
|
||||||
|
|
||||||
|
if (where == SHORTCUTS_DESKTOP)
|
||||||
|
goto out;
|
||||||
|
|
||||||
|
n += impl->has_desktop ? 1 : 0;
|
||||||
|
|
||||||
|
if (where == SHORTCUTS_VOLUMES)
|
||||||
|
goto out;
|
||||||
|
|
||||||
|
n += impl->num_volumes;
|
||||||
|
|
||||||
|
if (where == SHORTCUTS_SHORTCUTS)
|
||||||
|
goto out;
|
||||||
|
|
||||||
|
n += impl->num_shortcuts;
|
||||||
|
|
||||||
|
if (where == SHORTCUTS_SEPARATOR)
|
||||||
|
goto out;
|
||||||
|
|
||||||
|
n += 1;
|
||||||
|
|
||||||
|
if (where == SHORTCUTS_BOOKMARKS)
|
||||||
|
goto out;
|
||||||
|
|
||||||
|
g_assert_not_reached ();
|
||||||
|
|
||||||
|
out:
|
||||||
|
|
||||||
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Removes the bookmarks separator node and all the bookmarks from the tree
|
typedef void (* RemoveFunc) (GtkFileChooserDefault *impl, gpointer data);
|
||||||
* model.
|
|
||||||
*/
|
/* Removes the specified number of rows from the shortcuts list */
|
||||||
static void
|
static void
|
||||||
remove_bookmark_rows (GtkFileChooserDefault *impl)
|
shortcuts_remove_rows (GtkFileChooserDefault *impl,
|
||||||
|
int start_row,
|
||||||
|
int n_rows,
|
||||||
|
RemoveFunc remove_fn)
|
||||||
{
|
{
|
||||||
GtkTreePath *path;
|
GtkTreePath *path;
|
||||||
GtkTreeIter iter;
|
|
||||||
|
|
||||||
if (!impl->bookmarks_set)
|
path = gtk_tree_path_new_from_indices (start_row, -1);
|
||||||
return;
|
|
||||||
|
|
||||||
/* Ugh. Is there a better way to do this? */
|
for (; n_rows; n_rows--)
|
||||||
|
{
|
||||||
|
GtkTreeIter iter;
|
||||||
|
gpointer data;
|
||||||
|
|
||||||
path = gtk_tree_model_get_path (GTK_TREE_MODEL (impl->shortcuts_model), &impl->bookmarks_iter);
|
if (!gtk_tree_model_get_iter (GTK_TREE_MODEL (impl->shortcuts_model), &iter, path))
|
||||||
|
g_assert_not_reached ();
|
||||||
|
|
||||||
while (gtk_tree_model_get_iter (GTK_TREE_MODEL (impl->shortcuts_model), &iter, path))
|
if (remove_fn)
|
||||||
gtk_tree_store_remove (impl->shortcuts_model, &impl->bookmarks_iter);
|
{
|
||||||
|
gtk_tree_model_get (GTK_TREE_MODEL (impl->shortcuts_model), &iter, SHORTCUTS_COL_PATH, &data, -1);
|
||||||
|
(* remove_fn) (impl, data);
|
||||||
|
}
|
||||||
|
|
||||||
impl->bookmarks_set = FALSE;
|
gtk_tree_store_remove (impl->shortcuts_model, &iter);
|
||||||
|
}
|
||||||
|
|
||||||
|
gtk_tree_path_free (path);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Used from shortcuts_remove_rows() */
|
||||||
|
static void
|
||||||
|
volume_remove_cb (GtkFileChooserDefault *impl, gpointer data)
|
||||||
|
{
|
||||||
|
GtkFileSystemVolume *volume;
|
||||||
|
|
||||||
|
volume = data;
|
||||||
|
gtk_file_system_volume_free (impl->file_system, volume);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Adds all the file system volumes to the shortcuts model */
|
||||||
|
static void
|
||||||
|
shortcuts_add_volumes (GtkFileChooserDefault *impl)
|
||||||
|
{
|
||||||
|
int start_row;
|
||||||
|
GSList *list, *l;
|
||||||
|
int n;
|
||||||
|
|
||||||
|
start_row = shortcuts_get_index (impl, SHORTCUTS_VOLUMES);
|
||||||
|
shortcuts_remove_rows (impl, start_row, impl->num_volumes, volume_remove_cb);
|
||||||
|
impl->num_volumes = 0;
|
||||||
|
|
||||||
|
list = gtk_file_system_list_volumes (impl->file_system);
|
||||||
|
|
||||||
|
n = 0;
|
||||||
|
|
||||||
|
for (l = list; l; l = l->next)
|
||||||
|
{
|
||||||
|
GtkFileSystemVolume *volume;
|
||||||
|
|
||||||
|
volume = l->data;
|
||||||
|
|
||||||
|
shortcuts_insert_path (impl, start_row + n, TRUE, volume, NULL, NULL, NULL);
|
||||||
|
n++;
|
||||||
|
}
|
||||||
|
|
||||||
|
impl->num_volumes = n;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Used from shortcuts_remove_rows() */
|
||||||
|
static void
|
||||||
|
remove_bookmark_cb (GtkFileChooserDefault *impl, gpointer data)
|
||||||
|
{
|
||||||
|
GtkFilePath *path;
|
||||||
|
|
||||||
|
path = data;
|
||||||
|
gtk_file_path_free (path);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Updates the list of bookmarks */
|
||||||
|
static void
|
||||||
|
shortcuts_add_bookmarks (GtkFileChooserDefault *impl)
|
||||||
|
{
|
||||||
|
GSList *bookmarks;
|
||||||
|
|
||||||
|
shortcuts_remove_rows (impl,
|
||||||
|
shortcuts_get_index (impl, SHORTCUTS_BOOKMARKS),
|
||||||
|
impl->num_bookmarks,
|
||||||
|
remove_bookmark_cb);
|
||||||
|
|
||||||
|
bookmarks = gtk_file_system_list_bookmarks (impl->file_system);
|
||||||
|
impl->num_bookmarks = shortcuts_append_paths (impl, bookmarks);
|
||||||
|
gtk_file_paths_free (bookmarks);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Appends the bookmarks separator node and the bookmarks from the file system. */
|
/* Appends the bookmarks separator node and the bookmarks from the file system. */
|
||||||
static void
|
static void
|
||||||
shortcuts_append_bookmarks (GtkFileChooserDefault *impl)
|
shortcuts_append_bookmarks (GtkFileChooserDefault *impl)
|
||||||
{
|
{
|
||||||
GSList *bookmarks;
|
GtkTreeIter iter;
|
||||||
|
|
||||||
remove_bookmark_rows (impl);
|
gtk_tree_store_append (impl->shortcuts_model, &iter, NULL);
|
||||||
|
gtk_tree_store_set (impl->shortcuts_model, &iter,
|
||||||
gtk_tree_store_append (impl->shortcuts_model, &impl->bookmarks_iter, NULL);
|
|
||||||
gtk_tree_store_set (impl->shortcuts_model, &impl->bookmarks_iter,
|
|
||||||
SHORTCUTS_COL_PIXBUF, NULL,
|
SHORTCUTS_COL_PIXBUF, NULL,
|
||||||
SHORTCUTS_COL_NAME, NULL,
|
SHORTCUTS_COL_NAME, NULL,
|
||||||
SHORTCUTS_COL_PATH, NULL,
|
SHORTCUTS_COL_PATH, NULL,
|
||||||
-1);
|
-1);
|
||||||
impl->bookmarks_set = TRUE;
|
|
||||||
|
|
||||||
bookmarks = gtk_file_system_list_bookmarks (impl->file_system);
|
|
||||||
|
|
||||||
/* FIXME: How do we know if a bookmark is a file system root? */
|
|
||||||
impl->num_bookmarks = shortcuts_append_paths (impl, bookmarks, FALSE);
|
|
||||||
gtk_file_paths_free (bookmarks);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Creates the GtkTreeStore used as the shortcuts model */
|
/* Creates the GtkTreeStore used as the shortcuts model */
|
||||||
@ -691,13 +803,13 @@ create_shortcuts_model (GtkFileChooserDefault *impl)
|
|||||||
impl->shortcuts_model = gtk_tree_store_new (SHORTCUTS_COL_NUM_COLUMNS,
|
impl->shortcuts_model = gtk_tree_store_new (SHORTCUTS_COL_NUM_COLUMNS,
|
||||||
GDK_TYPE_PIXBUF, /* pixbuf */
|
GDK_TYPE_PIXBUF, /* pixbuf */
|
||||||
G_TYPE_STRING, /* name */
|
G_TYPE_STRING, /* name */
|
||||||
G_TYPE_POINTER); /* path */
|
G_TYPE_POINTER); /* path or volume */
|
||||||
|
|
||||||
if (impl->file_system)
|
if (impl->file_system)
|
||||||
{
|
{
|
||||||
shortcuts_append_home (impl);
|
shortcuts_append_home (impl);
|
||||||
shortcuts_append_desktop (impl);
|
shortcuts_append_desktop (impl);
|
||||||
shortcuts_append_file_system_roots (impl);
|
shortcuts_add_volumes (impl);
|
||||||
shortcuts_append_bookmarks (impl);
|
shortcuts_append_bookmarks (impl);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -904,20 +1016,51 @@ add_bookmark_button_clicked_cb (GtkButton *button,
|
|||||||
shortcuts_add_bookmark_from_path (impl, impl->current_folder);
|
shortcuts_add_bookmark_from_path (impl, impl->current_folder);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Returns the index of the selected row in the shortcuts list, or -1 if nothing
|
||||||
|
* is selected.
|
||||||
|
*/
|
||||||
|
static int
|
||||||
|
shortcuts_get_selected_index (GtkFileChooserDefault *impl)
|
||||||
|
{
|
||||||
|
GtkTreeSelection *selection;
|
||||||
|
GtkTreeIter iter;
|
||||||
|
GtkTreePath *path;
|
||||||
|
int *indices;
|
||||||
|
int idx;
|
||||||
|
|
||||||
|
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (impl->shortcuts_tree));
|
||||||
|
|
||||||
|
if (!gtk_tree_selection_get_selected (selection, NULL, &iter))
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
path = gtk_tree_model_get_path (GTK_TREE_MODEL (impl->shortcuts_model), &iter);
|
||||||
|
g_assert (path != NULL);
|
||||||
|
|
||||||
|
indices = gtk_tree_path_get_indices (path);
|
||||||
|
g_assert (gtk_tree_path_get_depth (path) == 1);
|
||||||
|
|
||||||
|
idx = *indices;
|
||||||
|
|
||||||
|
gtk_tree_path_free (path);
|
||||||
|
|
||||||
|
return idx;
|
||||||
|
}
|
||||||
|
|
||||||
/* Callback used when the "Remove bookmark" button is clicked */
|
/* Callback used when the "Remove bookmark" button is clicked */
|
||||||
static void
|
static void
|
||||||
remove_bookmark_button_clicked_cb (GtkButton *button,
|
remove_bookmark_button_clicked_cb (GtkButton *button,
|
||||||
GtkFileChooserDefault *impl)
|
GtkFileChooserDefault *impl)
|
||||||
{
|
{
|
||||||
GtkTreeSelection *selection;
|
|
||||||
GtkTreeIter iter;
|
GtkTreeIter iter;
|
||||||
GtkFilePath *path;
|
GtkFilePath *path;
|
||||||
|
int selected, start_row;
|
||||||
GError *error;
|
GError *error;
|
||||||
|
|
||||||
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (impl->shortcuts_tree));
|
selected = shortcuts_get_selected_index (impl);
|
||||||
|
|
||||||
if (!gtk_tree_selection_get_selected (selection, NULL, &iter))
|
start_row = shortcuts_get_index (impl, SHORTCUTS_BOOKMARKS);
|
||||||
return;
|
if (selected < start_row || selected >= start_row + impl->num_bookmarks)
|
||||||
|
g_assert_not_reached ();
|
||||||
|
|
||||||
gtk_tree_model_get (GTK_TREE_MODEL (impl->shortcuts_model), &iter, SHORTCUTS_COL_PATH, &path, -1);
|
gtk_tree_model_get (GTK_TREE_MODEL (impl->shortcuts_model), &iter, SHORTCUTS_COL_PATH, &path, -1);
|
||||||
|
|
||||||
@ -937,23 +1080,59 @@ bookmarks_check_add_sensitivity (GtkFileChooserDefault *impl)
|
|||||||
{
|
{
|
||||||
GtkTreeIter iter;
|
GtkTreeIter iter;
|
||||||
gboolean exists;
|
gboolean exists;
|
||||||
|
int volumes_idx;
|
||||||
|
int separator_idx;
|
||||||
|
|
||||||
exists = FALSE;
|
exists = FALSE;
|
||||||
|
|
||||||
if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (impl->shortcuts_model), &iter))
|
if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (impl->shortcuts_model), &iter))
|
||||||
do
|
{
|
||||||
{
|
int i;
|
||||||
GtkFilePath *path;
|
|
||||||
|
|
||||||
gtk_tree_model_get (GTK_TREE_MODEL (impl->shortcuts_model), &iter, SHORTCUTS_COL_PATH, &path, -1);
|
separator_idx = shortcuts_get_index (impl, SHORTCUTS_SEPARATOR);
|
||||||
|
volumes_idx = shortcuts_get_index (impl, SHORTCUTS_VOLUMES);
|
||||||
|
|
||||||
if (path && gtk_file_path_compare (path, impl->current_folder) == 0)
|
i = 0;
|
||||||
{
|
|
||||||
exists = TRUE;
|
do
|
||||||
break;
|
{
|
||||||
}
|
gpointer data;
|
||||||
}
|
|
||||||
while (gtk_tree_model_iter_next (GTK_TREE_MODEL (impl->shortcuts_model), &iter));
|
if (i == separator_idx)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
gtk_tree_model_get (GTK_TREE_MODEL (impl->shortcuts_model), &iter, SHORTCUTS_COL_PATH, &data, -1);
|
||||||
|
|
||||||
|
if (i >= volumes_idx && i < volumes_idx + impl->num_volumes)
|
||||||
|
{
|
||||||
|
GtkFileSystemVolume *volume;
|
||||||
|
GtkFilePath *base_path;
|
||||||
|
|
||||||
|
volume = data;
|
||||||
|
base_path = gtk_file_system_volume_get_base_path (impl->file_system, volume);
|
||||||
|
|
||||||
|
exists = strcmp (gtk_file_path_get_string (impl->current_folder),
|
||||||
|
gtk_file_path_get_string (base_path)) == 0;
|
||||||
|
g_free (base_path);
|
||||||
|
|
||||||
|
if (exists)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
GtkFilePath *path;
|
||||||
|
|
||||||
|
path = data;
|
||||||
|
|
||||||
|
if (path && gtk_file_path_compare (path, impl->current_folder) == 0)
|
||||||
|
{
|
||||||
|
exists = TRUE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
while (gtk_tree_model_iter_next (GTK_TREE_MODEL (impl->shortcuts_model), &iter));
|
||||||
|
}
|
||||||
|
|
||||||
gtk_widget_set_sensitive (impl->add_bookmark_button, !exists);
|
gtk_widget_set_sensitive (impl->add_bookmark_button, !exists);
|
||||||
}
|
}
|
||||||
@ -964,28 +1143,13 @@ bookmarks_check_add_sensitivity (GtkFileChooserDefault *impl)
|
|||||||
static void
|
static void
|
||||||
bookmarks_check_remove_sensitivity (GtkFileChooserDefault *impl)
|
bookmarks_check_remove_sensitivity (GtkFileChooserDefault *impl)
|
||||||
{
|
{
|
||||||
GtkTreeSelection *selection;
|
int selected, start_row;
|
||||||
GtkTreeIter iter;
|
|
||||||
gboolean is_bookmark;
|
gboolean is_bookmark;
|
||||||
|
|
||||||
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (impl->shortcuts_tree));
|
selected = shortcuts_get_selected_index (impl);
|
||||||
|
start_row = shortcuts_get_index (impl, SHORTCUTS_BOOKMARKS);
|
||||||
|
|
||||||
if (gtk_tree_selection_get_selected (selection, NULL, &iter))
|
is_bookmark = (selected >= start_row) && (selected < start_row + impl->num_bookmarks);
|
||||||
{
|
|
||||||
GtkTreePath *bookmarks_path;
|
|
||||||
GtkTreePath *sel_path;
|
|
||||||
|
|
||||||
bookmarks_path = gtk_tree_model_get_path (GTK_TREE_MODEL (impl->shortcuts_model),
|
|
||||||
&impl->bookmarks_iter);
|
|
||||||
sel_path = gtk_tree_model_get_path (GTK_TREE_MODEL (impl->shortcuts_model), &iter);
|
|
||||||
|
|
||||||
is_bookmark = (gtk_tree_path_compare (bookmarks_path, sel_path) < 0);
|
|
||||||
|
|
||||||
gtk_tree_path_free (bookmarks_path);
|
|
||||||
gtk_tree_path_free (sel_path);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
is_bookmark = FALSE;
|
|
||||||
|
|
||||||
gtk_widget_set_sensitive (impl->remove_bookmark_button, is_bookmark);
|
gtk_widget_set_sensitive (impl->remove_bookmark_button, is_bookmark);
|
||||||
}
|
}
|
||||||
@ -1435,12 +1599,19 @@ set_extra_widget (GtkFileChooserDefault *impl,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
volumes_changed_cb (GtkFileSystem *file_system,
|
||||||
|
GtkFileChooserDefault *impl)
|
||||||
|
{
|
||||||
|
shortcuts_add_volumes (impl);
|
||||||
|
}
|
||||||
|
|
||||||
/* Callback used when the set of bookmarks changes in the file system */
|
/* Callback used when the set of bookmarks changes in the file system */
|
||||||
static void
|
static void
|
||||||
bookmarks_changed_cb (GtkFileSystem *file_system,
|
bookmarks_changed_cb (GtkFileSystem *file_system,
|
||||||
GtkFileChooserDefault *impl)
|
GtkFileChooserDefault *impl)
|
||||||
{
|
{
|
||||||
shortcuts_append_bookmarks (impl);
|
shortcuts_add_bookmarks (impl);
|
||||||
|
|
||||||
bookmarks_check_add_sensitivity (impl);
|
bookmarks_check_add_sensitivity (impl);
|
||||||
bookmarks_check_remove_sensitivity (impl);
|
bookmarks_check_remove_sensitivity (impl);
|
||||||
@ -1467,6 +1638,8 @@ gtk_file_chooser_default_set_property (GObject *object,
|
|||||||
{
|
{
|
||||||
if (impl->file_system)
|
if (impl->file_system)
|
||||||
{
|
{
|
||||||
|
g_signal_handler_disconnect (impl->file_system, impl->volumes_changed_id);
|
||||||
|
impl->volumes_changed_id = 0;
|
||||||
g_signal_handler_disconnect (impl->file_system, impl->bookmarks_changed_id);
|
g_signal_handler_disconnect (impl->file_system, impl->bookmarks_changed_id);
|
||||||
impl->bookmarks_changed_id = 0;
|
impl->bookmarks_changed_id = 0;
|
||||||
g_object_unref (impl->file_system);
|
g_object_unref (impl->file_system);
|
||||||
@ -1475,6 +1648,9 @@ gtk_file_chooser_default_set_property (GObject *object,
|
|||||||
if (impl->file_system)
|
if (impl->file_system)
|
||||||
{
|
{
|
||||||
g_object_ref (impl->file_system);
|
g_object_ref (impl->file_system);
|
||||||
|
impl->volumes_changed_id = g_signal_connect (impl->file_system, "volumes-changed",
|
||||||
|
G_CALLBACK (volumes_changed_cb),
|
||||||
|
impl);
|
||||||
impl->bookmarks_changed_id = g_signal_connect (impl->file_system, "bookmarks-changed",
|
impl->bookmarks_changed_id = g_signal_connect (impl->file_system, "bookmarks-changed",
|
||||||
G_CALLBACK (bookmarks_changed_cb),
|
G_CALLBACK (bookmarks_changed_cb),
|
||||||
impl);
|
impl);
|
||||||
@ -2173,9 +2349,7 @@ static int
|
|||||||
shortcuts_get_pos_for_shortcut_folder (GtkFileChooserDefault *impl,
|
shortcuts_get_pos_for_shortcut_folder (GtkFileChooserDefault *impl,
|
||||||
int pos)
|
int pos)
|
||||||
{
|
{
|
||||||
return pos + ((impl->has_home ? 1 : 0)
|
return pos + shortcuts_get_index (impl, SHORTCUTS_SHORTCUTS);
|
||||||
+ (impl->has_desktop ? 1 : 0)
|
|
||||||
+ impl->num_roots);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
@ -2189,8 +2363,7 @@ gtk_file_chooser_default_add_shortcut_folder (GtkFileChooser *chooser,
|
|||||||
|
|
||||||
pos = shortcuts_get_pos_for_shortcut_folder (impl, impl->num_shortcuts);
|
pos = shortcuts_get_pos_for_shortcut_folder (impl, impl->num_shortcuts);
|
||||||
|
|
||||||
/* FIXME: how do we know if the path is a file system root? */
|
result = shortcuts_insert_path (impl, pos, FALSE, NULL, path, NULL, error);
|
||||||
result = shortcuts_insert_path (impl, pos, path, FALSE, NULL, error);
|
|
||||||
|
|
||||||
if (result)
|
if (result)
|
||||||
impl->num_shortcuts++;
|
impl->num_shortcuts++;
|
||||||
@ -2446,6 +2619,40 @@ tree_selection_changed (GtkTreeSelection *selection,
|
|||||||
_gtk_file_chooser_set_current_folder_path (GTK_FILE_CHOOSER (impl), file_path);
|
_gtk_file_chooser_set_current_folder_path (GTK_FILE_CHOOSER (impl), file_path);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Activates a volume by mounting it if necessary and then switching to its
|
||||||
|
* base path.
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
shortcuts_activate_volume (GtkFileChooserDefault *impl,
|
||||||
|
GtkFileSystemVolume *volume)
|
||||||
|
{
|
||||||
|
GtkFilePath *path;
|
||||||
|
|
||||||
|
if (!gtk_file_system_volume_get_is_mounted (impl->file_system, volume))
|
||||||
|
{
|
||||||
|
GError *error;
|
||||||
|
|
||||||
|
error = NULL;
|
||||||
|
if (!gtk_file_system_volume_mount (impl->file_system, volume, &error))
|
||||||
|
{
|
||||||
|
char *msg;
|
||||||
|
|
||||||
|
msg = g_strdup_printf ("Could not mount %s:\n%s",
|
||||||
|
gtk_file_system_volume_get_display_name (impl->file_system, volume),
|
||||||
|
error->message);
|
||||||
|
error_message (impl, msg);
|
||||||
|
g_free (msg);
|
||||||
|
g_error_free (error);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
path = gtk_file_system_volume_get_base_path (impl->file_system, volume);
|
||||||
|
_gtk_file_chooser_set_current_folder_path (GTK_FILE_CHOOSER (impl), path);
|
||||||
|
gtk_file_path_free (path);
|
||||||
|
}
|
||||||
|
|
||||||
/* Callback used when a row in the shortcuts list is activated */
|
/* Callback used when a row in the shortcuts list is activated */
|
||||||
static void
|
static void
|
||||||
shortcuts_row_activated_cb (GtkTreeView *tree_view,
|
shortcuts_row_activated_cb (GtkTreeView *tree_view,
|
||||||
@ -2454,22 +2661,34 @@ shortcuts_row_activated_cb (GtkTreeView *tree_view,
|
|||||||
GtkFileChooserDefault *impl)
|
GtkFileChooserDefault *impl)
|
||||||
{
|
{
|
||||||
GtkTreeIter iter;
|
GtkTreeIter iter;
|
||||||
GtkFilePath *model_path;
|
int selected, start_row;
|
||||||
|
gpointer data;
|
||||||
|
|
||||||
if (!gtk_tree_model_get_iter (GTK_TREE_MODEL (impl->shortcuts_model), &iter, path))
|
if (!gtk_tree_model_get_iter (GTK_TREE_MODEL (impl->shortcuts_model), &iter, path))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* Set the current folder */
|
selected = *gtk_tree_path_get_indices (path);
|
||||||
|
|
||||||
gtk_tree_model_get (GTK_TREE_MODEL (impl->shortcuts_model), &iter, SHORTCUTS_COL_PATH, &model_path, -1);
|
if (selected == shortcuts_get_index (impl, SHORTCUTS_SEPARATOR))
|
||||||
|
return;
|
||||||
|
|
||||||
if (!model_path)
|
gtk_tree_model_get (GTK_TREE_MODEL (impl->shortcuts_model), &iter, SHORTCUTS_COL_PATH, &data, -1);
|
||||||
|
|
||||||
|
start_row = shortcuts_get_index (impl, SHORTCUTS_VOLUMES);
|
||||||
|
if (selected >= start_row && selected < start_row + impl->num_volumes)
|
||||||
{
|
{
|
||||||
/* We are on the bookmarks separator node, so do nothing */
|
GtkFileSystemVolume *volume;
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
_gtk_file_chooser_set_current_folder_path (GTK_FILE_CHOOSER (impl), model_path);
|
volume = data;
|
||||||
|
shortcuts_activate_volume (impl, volume);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
GtkFilePath *file_path;
|
||||||
|
|
||||||
|
file_path = data;
|
||||||
|
_gtk_file_chooser_set_current_folder_path (GTK_FILE_CHOOSER (impl), file_path);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
@ -2480,16 +2699,8 @@ shortcuts_select_func (GtkTreeSelection *selection,
|
|||||||
gpointer data)
|
gpointer data)
|
||||||
{
|
{
|
||||||
GtkFileChooserDefault *impl = data;
|
GtkFileChooserDefault *impl = data;
|
||||||
GtkTreeIter iter;
|
|
||||||
GtkFilePath *model_path;
|
|
||||||
|
|
||||||
if (!gtk_tree_model_get_iter (GTK_TREE_MODEL (impl->shortcuts_model), &iter, path))
|
return (*gtk_tree_path_get_indices (path) != shortcuts_get_index (impl, SHORTCUTS_SEPARATOR));
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
gtk_tree_model_get (GTK_TREE_MODEL (impl->shortcuts_model), &iter, SHORTCUTS_COL_PATH, &model_path, -1);
|
|
||||||
|
|
||||||
/* Don't allow the separator node to be selected */
|
|
||||||
return model_path != NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -447,6 +447,13 @@ gtk_file_system_base_init (gpointer g_class)
|
|||||||
{
|
{
|
||||||
GType iface_type = G_TYPE_FROM_INTERFACE (g_class);
|
GType iface_type = G_TYPE_FROM_INTERFACE (g_class);
|
||||||
|
|
||||||
|
g_signal_new ("volumes-changed",
|
||||||
|
iface_type,
|
||||||
|
G_SIGNAL_RUN_LAST,
|
||||||
|
G_STRUCT_OFFSET (GtkFileSystemIface, volumes_changed),
|
||||||
|
NULL, NULL,
|
||||||
|
g_cclosure_marshal_VOID__VOID,
|
||||||
|
G_TYPE_NONE, 0);
|
||||||
g_signal_new ("roots-changed",
|
g_signal_new ("roots-changed",
|
||||||
iface_type,
|
iface_type,
|
||||||
G_SIGNAL_RUN_LAST,
|
G_SIGNAL_RUN_LAST,
|
||||||
@ -466,6 +473,14 @@ gtk_file_system_base_init (gpointer g_class)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GSList *
|
||||||
|
gtk_file_system_list_volumes (GtkFileSystem *file_system)
|
||||||
|
{
|
||||||
|
g_return_val_if_fail (GTK_IS_FILE_SYSTEM (file_system), NULL);
|
||||||
|
|
||||||
|
return GTK_FILE_SYSTEM_GET_IFACE (file_system)->list_volumes (file_system);
|
||||||
|
}
|
||||||
|
|
||||||
GSList *
|
GSList *
|
||||||
gtk_file_system_list_roots (GtkFileSystem *file_system)
|
gtk_file_system_list_roots (GtkFileSystem *file_system)
|
||||||
{
|
{
|
||||||
@ -512,6 +527,142 @@ gtk_file_system_create_folder(GtkFileSystem *file_system,
|
|||||||
return GTK_FILE_SYSTEM_GET_IFACE (file_system)->create_folder (file_system, path, error);
|
return GTK_FILE_SYSTEM_GET_IFACE (file_system)->create_folder (file_system, path, error);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gtk_file_system_volume_free:
|
||||||
|
* @file_system: a #GtkFileSystem
|
||||||
|
* @volume: a #GtkFileSystemVolume
|
||||||
|
*
|
||||||
|
* Frees a #GtkFileSystemVolume structure as returned by
|
||||||
|
* gtk_file_system_list_volumes().
|
||||||
|
**/
|
||||||
|
void
|
||||||
|
gtk_file_system_volume_free (GtkFileSystem *file_system,
|
||||||
|
GtkFileSystemVolume *volume)
|
||||||
|
{
|
||||||
|
g_return_if_fail (GTK_IS_FILE_SYSTEM (file_system));
|
||||||
|
g_return_if_fail (volume != NULL);
|
||||||
|
|
||||||
|
GTK_FILE_SYSTEM_GET_IFACE (file_system)->volume_free (file_system, volume);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gtk_file_system_volume_get_base_path:
|
||||||
|
* @file_system: a #GtkFileSystem
|
||||||
|
* @volume: a #GtkFileSystemVolume
|
||||||
|
*
|
||||||
|
* Queries the base path for a volume. For example, a CD-ROM device may yield a
|
||||||
|
* path of "/mnt/cdrom".
|
||||||
|
*
|
||||||
|
* Return value: a #GtkFilePath with the base mount path of the specified
|
||||||
|
* @volume.
|
||||||
|
**/
|
||||||
|
GtkFilePath *
|
||||||
|
gtk_file_system_volume_get_base_path (GtkFileSystem *file_system,
|
||||||
|
GtkFileSystemVolume *volume)
|
||||||
|
{
|
||||||
|
g_return_val_if_fail (GTK_IS_FILE_SYSTEM (file_system), NULL);
|
||||||
|
g_return_val_if_fail (volume != NULL, NULL);
|
||||||
|
|
||||||
|
return GTK_FILE_SYSTEM_GET_IFACE (file_system)->volume_get_base_path (file_system, volume);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gtk_file_system_volume_get_is_mounted:
|
||||||
|
* @file_system: a #GtkFileSystem
|
||||||
|
* @volume: a #GtkFileSystemVolume
|
||||||
|
*
|
||||||
|
* Queries whether a #GtkFileSystemVolume is mounted or not. If it is not, it
|
||||||
|
* can be mounted with gtk_file_system_volume_mount().
|
||||||
|
*
|
||||||
|
* Return value: TRUE if the @volume is mounted, FALSE otherwise.
|
||||||
|
**/
|
||||||
|
gboolean
|
||||||
|
gtk_file_system_volume_get_is_mounted (GtkFileSystem *file_system,
|
||||||
|
GtkFileSystemVolume *volume)
|
||||||
|
{
|
||||||
|
g_return_val_if_fail (GTK_IS_FILE_SYSTEM (file_system), FALSE);
|
||||||
|
g_return_val_if_fail (volume != NULL, FALSE);
|
||||||
|
|
||||||
|
return GTK_FILE_SYSTEM_GET_IFACE (file_system)->volume_get_is_mounted (file_system, volume);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gtk_file_system_volume_mount:
|
||||||
|
* @file_system: a #GtkFileSystem
|
||||||
|
* @volume: a #GtkFileSystemVolume
|
||||||
|
* @error: location to store error, or %NULL
|
||||||
|
*
|
||||||
|
* Tries to mount an unmounted volume. This may cause the "volumes-changed"
|
||||||
|
* signal in the @file_system to be emitted.
|
||||||
|
*
|
||||||
|
* Return value: TRUE if the @volume was mounted successfully, FALSE otherwise.
|
||||||
|
**/
|
||||||
|
gboolean
|
||||||
|
gtk_file_system_volume_mount (GtkFileSystem *file_system,
|
||||||
|
GtkFileSystemVolume *volume,
|
||||||
|
GError **error)
|
||||||
|
{
|
||||||
|
g_return_val_if_fail (GTK_IS_FILE_SYSTEM (file_system), FALSE);
|
||||||
|
g_return_val_if_fail (volume != NULL, FALSE);
|
||||||
|
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
|
||||||
|
|
||||||
|
return GTK_FILE_SYSTEM_GET_IFACE (file_system)->volume_mount (file_system, volume, error);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gtk_file_system_volume_get_display_name:
|
||||||
|
* @file_system: a #GtkFileSystem
|
||||||
|
* @volume: a #GtkFileSystemVolume
|
||||||
|
*
|
||||||
|
* Queries the human-readable name for a @volume. This string can be displayed
|
||||||
|
* in a list of volumes that can be accessed, for example.
|
||||||
|
*
|
||||||
|
* Return value: A string with the human-readable name for a #GtkFileSystemVolume.
|
||||||
|
**/
|
||||||
|
char *
|
||||||
|
gtk_file_system_volume_get_display_name (GtkFileSystem *file_system,
|
||||||
|
GtkFileSystemVolume *volume)
|
||||||
|
{
|
||||||
|
g_return_val_if_fail (GTK_IS_FILE_SYSTEM (file_system), NULL);
|
||||||
|
g_return_val_if_fail (volume != NULL, NULL);
|
||||||
|
|
||||||
|
return GTK_FILE_SYSTEM_GET_IFACE (file_system)->volume_get_display_name (file_system, volume);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gtk_file_system_volume_render_icon:
|
||||||
|
* @file_system: a #GtkFileSystem
|
||||||
|
* @volume: a #GtkFileSystemVolume
|
||||||
|
* @widget: Reference widget to render icons.
|
||||||
|
* @pixel_size: Size of the icon.
|
||||||
|
* @error: location to store error, or %NULL
|
||||||
|
*
|
||||||
|
* Renders an icon suitable for a file #GtkFileSystemVolume.
|
||||||
|
*
|
||||||
|
* Return value: A #GdkPixbuf containing an icon, or NULL if the icon could not
|
||||||
|
* be rendered. In the latter case, the @error value will be set as
|
||||||
|
* appropriate.
|
||||||
|
**/
|
||||||
|
GdkPixbuf *
|
||||||
|
gtk_file_system_volume_render_icon (GtkFileSystem *file_system,
|
||||||
|
GtkFileSystemVolume *volume,
|
||||||
|
GtkWidget *widget,
|
||||||
|
gint pixel_size,
|
||||||
|
GError **error)
|
||||||
|
{
|
||||||
|
g_return_val_if_fail (GTK_IS_FILE_SYSTEM (file_system), NULL);
|
||||||
|
g_return_val_if_fail (volume != NULL, NULL);
|
||||||
|
g_return_val_if_fail (GTK_IS_WIDGET (widget), NULL);
|
||||||
|
g_return_val_if_fail (pixel_size > 0, NULL);
|
||||||
|
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
|
||||||
|
|
||||||
|
return GTK_FILE_SYSTEM_GET_IFACE (file_system)->volume_render_icon (file_system,
|
||||||
|
volume,
|
||||||
|
widget,
|
||||||
|
pixel_size,
|
||||||
|
error);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gtk_file_system_get_parent:
|
* gtk_file_system_get_parent:
|
||||||
* @file_system: a #GtkFileSystem
|
* @file_system: a #GtkFileSystem
|
||||||
@ -680,7 +831,7 @@ gtk_file_system_render_icon (GtkFileSystem *file_system,
|
|||||||
{
|
{
|
||||||
g_return_val_if_fail (GTK_IS_FILE_SYSTEM (file_system), NULL);
|
g_return_val_if_fail (GTK_IS_FILE_SYSTEM (file_system), NULL);
|
||||||
g_return_val_if_fail (path != NULL, NULL);
|
g_return_val_if_fail (path != NULL, NULL);
|
||||||
g_return_val_if_fail (widget != NULL, NULL);
|
g_return_val_if_fail (GTK_IS_WIDGET (widget), NULL);
|
||||||
g_return_val_if_fail (pixel_size > 0, NULL);
|
g_return_val_if_fail (pixel_size > 0, NULL);
|
||||||
|
|
||||||
return GTK_FILE_SYSTEM_GET_IFACE (file_system)->render_icon (file_system, path, widget, pixel_size, error);
|
return GTK_FILE_SYSTEM_GET_IFACE (file_system)->render_icon (file_system, path, widget, pixel_size, error);
|
||||||
|
@ -36,11 +36,12 @@ G_BEGIN_DECLS
|
|||||||
|
|
||||||
typedef gint64 GtkFileTime;
|
typedef gint64 GtkFileTime;
|
||||||
|
|
||||||
typedef struct _GtkFileFolder GtkFileFolder;
|
typedef struct _GtkFileFolder GtkFileFolder;
|
||||||
typedef struct _GtkFileFolderIface GtkFileFolderIface;
|
typedef struct _GtkFileFolderIface GtkFileFolderIface;
|
||||||
typedef struct _GtkFileInfo GtkFileInfo;
|
typedef struct _GtkFileInfo GtkFileInfo;
|
||||||
typedef struct _GtkFileSystem GtkFileSystem;
|
typedef struct _GtkFileSystem GtkFileSystem;
|
||||||
typedef struct _GtkFileSystemIface GtkFileSystemIface;
|
typedef struct _GtkFileSystemIface GtkFileSystemIface;
|
||||||
|
typedef struct _GtkFileSystemVolume GtkFileSystemVolume;
|
||||||
|
|
||||||
typedef struct _GtkFilePath GtkFilePath;
|
typedef struct _GtkFilePath GtkFilePath;
|
||||||
|
|
||||||
@ -143,6 +144,7 @@ struct _GtkFileSystemIface
|
|||||||
|
|
||||||
/* Methods
|
/* Methods
|
||||||
*/
|
*/
|
||||||
|
GSList * (*list_volumes) (GtkFileSystem *file_system);
|
||||||
GSList * (*list_roots) (GtkFileSystem *file_system);
|
GSList * (*list_roots) (GtkFileSystem *file_system);
|
||||||
|
|
||||||
GtkFileInfo * (*get_root_info) (GtkFileSystem *file_system,
|
GtkFileInfo * (*get_root_info) (GtkFileSystem *file_system,
|
||||||
@ -158,6 +160,26 @@ struct _GtkFileSystemIface
|
|||||||
const GtkFilePath *path,
|
const GtkFilePath *path,
|
||||||
GError **error);
|
GError **error);
|
||||||
|
|
||||||
|
/* Volumes
|
||||||
|
*/
|
||||||
|
|
||||||
|
void (*volume_free) (GtkFileSystem *file_system,
|
||||||
|
GtkFileSystemVolume *volume);
|
||||||
|
GtkFilePath * (*volume_get_base_path) (GtkFileSystem *file_system,
|
||||||
|
GtkFileSystemVolume *volume);
|
||||||
|
gboolean (*volume_get_is_mounted) (GtkFileSystem *file_system,
|
||||||
|
GtkFileSystemVolume *volume);
|
||||||
|
gboolean (*volume_mount) (GtkFileSystem *file_system,
|
||||||
|
GtkFileSystemVolume *volume,
|
||||||
|
GError **error);
|
||||||
|
char * (*volume_get_display_name) (GtkFileSystem *file_system,
|
||||||
|
GtkFileSystemVolume *volume);
|
||||||
|
GdkPixbuf * (*volume_render_icon) (GtkFileSystem *file_system,
|
||||||
|
GtkFileSystemVolume *volume,
|
||||||
|
GtkWidget *widget,
|
||||||
|
gint pixel_size,
|
||||||
|
GError **error);
|
||||||
|
|
||||||
/* Path Manipulation
|
/* Path Manipulation
|
||||||
*/
|
*/
|
||||||
gboolean (*get_parent) (GtkFileSystem *file_system,
|
gboolean (*get_parent) (GtkFileSystem *file_system,
|
||||||
@ -203,18 +225,37 @@ struct _GtkFileSystemIface
|
|||||||
|
|
||||||
/* Signals
|
/* Signals
|
||||||
*/
|
*/
|
||||||
|
void (*volumes_changed) (GtkFileSystem *file_system);
|
||||||
void (*roots_changed) (GtkFileSystem *file_system);
|
void (*roots_changed) (GtkFileSystem *file_system);
|
||||||
void (*bookmarks_changed) (GtkFileSystem *file_system);
|
void (*bookmarks_changed) (GtkFileSystem *file_system);
|
||||||
};
|
};
|
||||||
|
|
||||||
GType gtk_file_system_get_type (void);
|
GType gtk_file_system_get_type (void);
|
||||||
|
|
||||||
|
GSList * gtk_file_system_list_volumes (GtkFileSystem *file_system);
|
||||||
GSList * gtk_file_system_list_roots (GtkFileSystem *file_system);
|
GSList * gtk_file_system_list_roots (GtkFileSystem *file_system);
|
||||||
GtkFileInfo * gtk_file_system_get_root_info (GtkFileSystem *file_system,
|
GtkFileInfo * gtk_file_system_get_root_info (GtkFileSystem *file_system,
|
||||||
const GtkFilePath *path,
|
const GtkFilePath *path,
|
||||||
GtkFileInfoType types,
|
GtkFileInfoType types,
|
||||||
GError **error);
|
GError **error);
|
||||||
|
|
||||||
|
void gtk_file_system_volume_free (GtkFileSystem *file_system,
|
||||||
|
GtkFileSystemVolume *volume);
|
||||||
|
GtkFilePath * gtk_file_system_volume_get_base_path (GtkFileSystem *file_system,
|
||||||
|
GtkFileSystemVolume *volume);
|
||||||
|
gboolean gtk_file_system_volume_get_is_mounted (GtkFileSystem *file_system,
|
||||||
|
GtkFileSystemVolume *volume);
|
||||||
|
gboolean gtk_file_system_volume_mount (GtkFileSystem *file_system,
|
||||||
|
GtkFileSystemVolume *volume,
|
||||||
|
GError **error);
|
||||||
|
char * gtk_file_system_volume_get_display_name (GtkFileSystem *file_system,
|
||||||
|
GtkFileSystemVolume *volume);
|
||||||
|
GdkPixbuf * gtk_file_system_volume_render_icon (GtkFileSystem *file_system,
|
||||||
|
GtkFileSystemVolume *volume,
|
||||||
|
GtkWidget *widget,
|
||||||
|
gint pixel_size,
|
||||||
|
GError **error);
|
||||||
|
|
||||||
gboolean gtk_file_system_get_parent (GtkFileSystem *file_system,
|
gboolean gtk_file_system_get_parent (GtkFileSystem *file_system,
|
||||||
const GtkFilePath *path,
|
const GtkFilePath *path,
|
||||||
GtkFilePath **parent,
|
GtkFilePath **parent,
|
||||||
|
@ -47,6 +47,11 @@ struct _GtkFileSystemUnix
|
|||||||
GObject parent_instance;
|
GObject parent_instance;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* Simple stub for our returned volumes */
|
||||||
|
typedef struct {
|
||||||
|
int dummy;
|
||||||
|
} Volume;
|
||||||
|
|
||||||
#define GTK_TYPE_FILE_FOLDER_UNIX (gtk_file_folder_unix_get_type ())
|
#define GTK_TYPE_FILE_FOLDER_UNIX (gtk_file_folder_unix_get_type ())
|
||||||
#define GTK_FILE_FOLDER_UNIX(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_FILE_FOLDER_UNIX, GtkFileFolderUnix))
|
#define GTK_FILE_FOLDER_UNIX(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_FILE_FOLDER_UNIX, GtkFileFolderUnix))
|
||||||
#define GTK_IS_FILE_FOLDER_UNIX(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_FILE_FOLDER_UNIX))
|
#define GTK_IS_FILE_FOLDER_UNIX(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_FILE_FOLDER_UNIX))
|
||||||
@ -78,6 +83,7 @@ static void gtk_file_system_unix_iface_init (GtkFileSystemIface *iface);
|
|||||||
static void gtk_file_system_unix_init (GtkFileSystemUnix *impl);
|
static void gtk_file_system_unix_init (GtkFileSystemUnix *impl);
|
||||||
static void gtk_file_system_unix_finalize (GObject *object);
|
static void gtk_file_system_unix_finalize (GObject *object);
|
||||||
|
|
||||||
|
static GSList * gtk_file_system_unix_list_volumes (GtkFileSystem *file_system);
|
||||||
static GSList * gtk_file_system_unix_list_roots (GtkFileSystem *file_system);
|
static GSList * gtk_file_system_unix_list_roots (GtkFileSystem *file_system);
|
||||||
static GtkFileInfo * gtk_file_system_unix_get_root_info (GtkFileSystem *file_system,
|
static GtkFileInfo * gtk_file_system_unix_get_root_info (GtkFileSystem *file_system,
|
||||||
const GtkFilePath *path,
|
const GtkFilePath *path,
|
||||||
@ -90,6 +96,24 @@ static GtkFileFolder *gtk_file_system_unix_get_folder (GtkFileSystem *fi
|
|||||||
static gboolean gtk_file_system_unix_create_folder (GtkFileSystem *file_system,
|
static gboolean gtk_file_system_unix_create_folder (GtkFileSystem *file_system,
|
||||||
const GtkFilePath *path,
|
const GtkFilePath *path,
|
||||||
GError **error);
|
GError **error);
|
||||||
|
|
||||||
|
static void gtk_file_system_unix_volume_free (GtkFileSystem *file_system,
|
||||||
|
GtkFileSystemVolume *volume);
|
||||||
|
static GtkFilePath *gtk_file_system_unix_volume_get_base_path (GtkFileSystem *file_system,
|
||||||
|
GtkFileSystemVolume *volume);
|
||||||
|
static gboolean gtk_file_system_unix_volume_get_is_mounted (GtkFileSystem *file_system,
|
||||||
|
GtkFileSystemVolume *volume);
|
||||||
|
static gboolean gtk_file_system_unix_volume_mount (GtkFileSystem *file_system,
|
||||||
|
GtkFileSystemVolume *volume,
|
||||||
|
GError **error);
|
||||||
|
static gchar * gtk_file_system_unix_volume_get_display_name (GtkFileSystem *file_system,
|
||||||
|
GtkFileSystemVolume *volume);
|
||||||
|
static GdkPixbuf * gtk_file_system_unix_volume_render_icon (GtkFileSystem *file_system,
|
||||||
|
GtkFileSystemVolume *volume,
|
||||||
|
GtkWidget *widget,
|
||||||
|
gint pixel_size,
|
||||||
|
GError **error);
|
||||||
|
|
||||||
static gboolean gtk_file_system_unix_get_parent (GtkFileSystem *file_system,
|
static gboolean gtk_file_system_unix_get_parent (GtkFileSystem *file_system,
|
||||||
const GtkFilePath *path,
|
const GtkFilePath *path,
|
||||||
GtkFilePath **parent,
|
GtkFilePath **parent,
|
||||||
@ -218,10 +242,17 @@ gtk_file_system_unix_class_init (GtkFileSystemUnixClass *class)
|
|||||||
static void
|
static void
|
||||||
gtk_file_system_unix_iface_init (GtkFileSystemIface *iface)
|
gtk_file_system_unix_iface_init (GtkFileSystemIface *iface)
|
||||||
{
|
{
|
||||||
|
iface->list_volumes = gtk_file_system_unix_list_volumes;
|
||||||
iface->list_roots = gtk_file_system_unix_list_roots;
|
iface->list_roots = gtk_file_system_unix_list_roots;
|
||||||
iface->get_folder = gtk_file_system_unix_get_folder;
|
iface->get_folder = gtk_file_system_unix_get_folder;
|
||||||
iface->get_root_info = gtk_file_system_unix_get_root_info;
|
iface->get_root_info = gtk_file_system_unix_get_root_info;
|
||||||
iface->create_folder = gtk_file_system_unix_create_folder;
|
iface->create_folder = gtk_file_system_unix_create_folder;
|
||||||
|
iface->volume_free = gtk_file_system_unix_volume_free;
|
||||||
|
iface->volume_get_base_path = gtk_file_system_unix_volume_get_base_path;
|
||||||
|
iface->volume_get_is_mounted = gtk_file_system_unix_volume_get_is_mounted;
|
||||||
|
iface->volume_mount = gtk_file_system_unix_volume_mount;
|
||||||
|
iface->volume_get_display_name = gtk_file_system_unix_volume_get_display_name;
|
||||||
|
iface->volume_render_icon = gtk_file_system_unix_volume_render_icon;
|
||||||
iface->get_parent = gtk_file_system_unix_get_parent;
|
iface->get_parent = gtk_file_system_unix_get_parent;
|
||||||
iface->make_path = gtk_file_system_unix_make_path;
|
iface->make_path = gtk_file_system_unix_make_path;
|
||||||
iface->parse = gtk_file_system_unix_parse;
|
iface->parse = gtk_file_system_unix_parse;
|
||||||
@ -246,6 +277,12 @@ gtk_file_system_unix_finalize (GObject *object)
|
|||||||
system_parent_class->finalize (object);
|
system_parent_class->finalize (object);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static GSList *
|
||||||
|
gtk_file_system_unix_list_volumes (GtkFileSystem *file_system)
|
||||||
|
{
|
||||||
|
return g_slist_append (NULL, gtk_file_path_new_dup ("/"));
|
||||||
|
}
|
||||||
|
|
||||||
static GSList *
|
static GSList *
|
||||||
gtk_file_system_unix_list_roots (GtkFileSystem *file_system)
|
gtk_file_system_unix_list_roots (GtkFileSystem *file_system)
|
||||||
{
|
{
|
||||||
@ -314,6 +351,59 @@ gtk_file_system_unix_create_folder (GtkFileSystem *file_system,
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gtk_file_system_unix_volume_free (GtkFileSystem *file_system,
|
||||||
|
GtkFileSystemVolume *volume)
|
||||||
|
{
|
||||||
|
GtkFilePath *path;
|
||||||
|
|
||||||
|
path = (GtkFilePath *) volume;
|
||||||
|
gtk_file_path_free (path);
|
||||||
|
}
|
||||||
|
|
||||||
|
static GtkFilePath *
|
||||||
|
gtk_file_system_unix_volume_get_base_path (GtkFileSystem *file_system,
|
||||||
|
GtkFileSystemVolume *volume)
|
||||||
|
{
|
||||||
|
return gtk_file_path_new_dup ("/");
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
gtk_file_system_unix_volume_get_is_mounted (GtkFileSystem *file_system,
|
||||||
|
GtkFileSystemVolume *volume)
|
||||||
|
{
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
gtk_file_system_unix_volume_mount (GtkFileSystem *file_system,
|
||||||
|
GtkFileSystemVolume *volume,
|
||||||
|
GError **error)
|
||||||
|
{
|
||||||
|
g_set_error (error,
|
||||||
|
GTK_FILE_SYSTEM_ERROR,
|
||||||
|
GTK_FILE_SYSTEM_ERROR_FAILED,
|
||||||
|
_("This file system does not support mounting"));
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static gchar *
|
||||||
|
gtk_file_system_unix_volume_get_display_name (GtkFileSystem *file_system,
|
||||||
|
GtkFileSystemVolume *volume)
|
||||||
|
{
|
||||||
|
return g_strdup (_("Filesystem")); /* Same as Nautilus */
|
||||||
|
}
|
||||||
|
|
||||||
|
static GdkPixbuf *
|
||||||
|
gtk_file_system_unix_volume_render_icon (GtkFileSystem *file_system,
|
||||||
|
GtkFileSystemVolume *volume,
|
||||||
|
GtkWidget *widget,
|
||||||
|
gint pixel_size,
|
||||||
|
GError **error)
|
||||||
|
{
|
||||||
|
return NULL; /* FIXME: We need a hard disk icon or something */
|
||||||
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
gtk_file_system_unix_get_parent (GtkFileSystem *file_system,
|
gtk_file_system_unix_get_parent (GtkFileSystem *file_system,
|
||||||
const GtkFilePath *path,
|
const GtkFilePath *path,
|
||||||
|
Loading…
Reference in New Issue
Block a user