Wed Oct 22 23:20:04 2003 Owen Taylor <otaylor@redhat.com>
* gtk/gtkfilechooser.[ch] gtk/gtkfilefilter.[ch]
gtk/gtkfilechooserwidget.[ch] gtk/gtkfilechooserdialog.[ch]:
gtk/gtkfilechooserutils.c gtk/gtkfilechooserprivate.[ch]:
Basic framework for the new file selector widget.
* gtk/gtkfilechooserdefault.[ch] gtk/gtkcellrenderersep.[ch]
gtk/gtkfilechooserentry.[ch] gtk/gtkfilesystemmodel.[ch]:
Initial implementation of the GtkFileChooser user interface.
* gtk/gtkfilesystemunix.[ch]: GtkFileSystem implementation
for Unix files.
* configure.in gtk/Makefile.am gtk/xdgmime: Build code
for freedesktop.org MIME system on Unix.
* tests/testfilechooser.c: Test program for GtkFileChooser
* tests/prop-editor.c: Add support for properties on interfaces.
2003-10-20 Federico Mena Quintero <federico@ximian.com>
* gtkfilesystem.c (gtk_file_info_free): Free the info itself.
* gtkfilechooserimpldefault.c (shortcuts_insert_path): Free the
GtkFileInfo.
2003-10-17 Federico Mena Quintero <federico@ximian.com>
* gtkfilesystemgnomevfs.c
(gtk_file_system_gnome_vfs_get_supports_bookmarks): Removed.
(gtk_file_system_gnome_vfs_set_bookmarks): Removed.
(gtk_file_system_gnome_vfs_add_bookmark): Implement.
(gtk_file_system_gnome_vfs_remove_bookmark): Implement.
* gtkfilechooserprivate.h (struct _GtkFileChooserIface): Replaced
the ::set_shortcut_folders() method with :;add_shortcut_folder()
and ::remove_shortcut_folder().
* gtkfilechooserutils.c (delegate_add_shortcut_folder): New function.
(delegate_remove_shortcut_folder): New function.
(delegate_list_shortcut_folders): New function.
* gtkfilechooserimpldefault.c (create_shortcuts_model): Insert the
Desktop directory as well.
(shortcuts_insert_path): Renamed from shortcuts_append_path; now
takes a position index instead of a parent node iter. Also takes
a GError argument.
(struct _GtkFileChooserImplDefault): Removed the shortcuts_folder
list. It is all kept in the model now.
(shortcuts_append_home): Save whether adding a shortcut for the
home directory was successful.
(shortcuts_append_desktop): Likewise for the desktop.
(shortcuts_append_file_system_roots): Count and save the number of
roots added.
(shortcuts_append_shortcut_folders): Removed.
(gtk_file_chooser_impl_default_add_shortcut_folder): Implement.
(shortcuts_append_bookmarks): Now that we don't have a bookmarks
parent node, don't expand the tree.
(add_bookmark_button_clicked_cb): Use gtk_file_system_add_bookmark().
(remove_bookmark_button_clicked_cb): Use gtk_file_system_remove_bookmark().
(gtk_file_chooser_impl_default_list_shortcut_folders): Get the
folders from the shortcuts model; we no longer keep a separate list.
* gtkfilesystem.h (struct _GtkFileSystemIface): Oops, there
shouldn't be shortcuts-related virtual methods here.
* gtkfilechooser.c (file_paths_to_strings): New helper function.
(gtk_file_chooser_get_filenames): Use file_paths_to_strings().
(gtk_file_chooser_get_uris): Likewise.
(gtk_file_chooser_set_shortcut_folders): Removed.
(gtk_file_chooser_list_shortcut_folders): Return a list of
strings, not of GtkFilePath*.
(gtk_file_chooser_list_shortcut_folder_uris): New function.
(gtk_file_chooser_add_shortcut_folder): New function.
(gtk_file_chooser_remove_shortcut_folder): New function.
(gtk_file_chooser_add_shortcut_folder_uri): New function.
(gtk_file_chooser_remove_shortcut_folder_uri): New function.
(_gtk_file_chooser_add_shortcut_folder): New function.
(_gtk_file_chooser_remove_shortcut_folder): New function.
* gtkfilechooser.h: New enum.
* gtkfilechooser.c (gtk_file_chooser_error_quark): New function.
* gtkfilesystem.c (gtk_file_system_get_supports_bookmarks): Removed.
(gtk_file_system_set_bookmarks): Removed.
(gtk_file_system_add_bookmark): New function.
(gtk_file_system_remove_bookmark): New function.
* gtkfilesystemunix.c
(gtk_file_system_unix_get_supports_bookmarks): Removed.
(gtk_file_system_unix_set_bookmarks): Removed.
(gtk_file_system_unix_add_bookmark): Just a stub for now.
(gtk_file_system_unix_remove_bookmark): Likewise.
* testfilechooser.c (main): Add a shortcut for testing purposes.
2003-10-14 Federico Mena Quintero <federico@ximian.com>
* gtkfilechooserimpldefault.c (create_shortcuts_tree): Added a
button to remove a bookmark.
(remove_bookmark_button_clicked_cb): New callback.
(shortcuts_append_bookmarks): Show/hide the bookmarks buttons
here, rather than in create_shortcuts_tree().
(shortcuts_append_path): Return whether the operation succeeded.
(shortcuts_selection_changed): Set the sensitivity of the button
used to remove a bookmark.
(shortcuts_append_bookmarks): Do not select the shortcuts folder
here; let the caller do it if needed.
(create_shortcuts_tree): Select the shortcuts folder here.
(bookmarks_changed_cb): Likewise.
(create_shortcuts_tree): Also set the sensitivity of the bookmarks
buttons.
(bookmarks_check_add_sensitivity): Renamed from
check_bookmarks_sensitivity().
(shortcuts_select_folder): Renamed from select_shortcuts_folder().
(bookmarks_check_add_sensitivity): The current_path may not be set
yet.
(shortcuts_append_bookmarks): Oops, remove all the bookmark rows,
not just the separator node.
(bookmarks_changed_cb): Set the sensitivity of the bookmarks
buttons.
2003-10-13 Federico Mena Quintero <federico@ximian.com>
* gtkfilechooserimpldefault.c (check_bookmarks_sensitivity): Walk
the whole shortcuts model, not just the bookmarks part --- there
is no need to add bookmarks for "stock" volume items.
(gtk_file_chooser_impl_default_set_property): Oops, hide/show the
tree/list as appropriate for the folder_mode property.
2003-10-12 Federico Mena Quintero <federico@ximian.com>
* gtkfilesystemgnomevfs.c (gtk_file_folder_gnome_vfs_get_info):
Read the file's information from gnome-vfs if we haven't finished
loading the directory yet.
* gtkfilechooserimpldefault.c (tree_selection_changed): Set the
sensitivity of the bookmarks button depending on whether the
current folder already exists in the bookmarks list.
(shortcuts_selection_changed): Re-select the appropriate shortcuts
folder if the user clicks on the separator row.
(set_list_model): New function; moved the code from
tree_selection_changed().
(tree_selection_changed): Use set_list_model().
(create_folder_tree): Show the tree model only if we are in folder
mode.
(create_file_list): Show the list model only if we are not in
folder mode.
2003-10-08 Federico Mena Quintero <federico@ximian.com>
* gtkfilechooserimpldefault.c (tree_selection_changed): Autosize
the columns after the model is set.
(shortcuts_append_path): Add optional indentation to items.
(shortcuts_append_bookmarks): Indent bookmark items.
(create_shortcuts_tree): Set the "xpad" attribute of the name
renderer to be fetched from the indent column.
(shortcuts_append_bookmarks): Use NULL for the name of the
bookmarks node, so that a separator gets drawn.
(create_shortcuts_tree): Create a GtkCellRendererSepText.
* gtkcellrendererseptext.[ch]: New files with a cell renderer that
can display text or a separator line.
* Makefile.am (libgtkfilechooser_la_SOURCES): Added
gtkcellrendererseptext.[ch].
2003-10-07 Federico Mena Quintero <federico@ximian.com>
* gtkfilesystem.h (struct _GtkFileSystemIface): Added methods for
::get_supports_bookmarks(), ::set_bookmarks(), ::list_bookmarks().
Added a ::bookmarks_changed() signal.
* gtkfilesystem.c (gtk_file_system_get_supports_bookmarks): New function.
(gtk_file_system_set_bookmarks): New function.
(gtk_file_system_list_bookmarks): New function.
(gtk_file_system_base_init): Create the "bookmarks-changed" signal.
(gtk_file_paths_copy): New function.
* gtkfilesystemunix.c (gtk_file_system_unix_get_supports_bookmarks): Implement.
(gtk_file_system_unix_set_bookmarks): Implement.
(gtk_file_system_unix_get_bookmarks): Implement.
* gtkfilesystemgnomevfs.c (struct _GtkFileSystemGnomeVFS): Added
fields for the bookmarks and the GConfClient.
(gtk_file_system_gnome_vfs_set_bookmarks): Implement.
(gtk_file_system_gnome_vfs_list_bookmarks): Implement.
* gtkfilechooserprivate.h (struct _GtkFileChooserIface): Added
methods for ::set_shortcut_folders(), ::list_shortcut_folders().
* gtkfilechooser.c (gtk_file_chooser_set_shortcut_folders): New
function.
(gtk_file_chooser_list_shortcut_folders): New function.
* gtkfilechooserimpldefault.c (create_shortcuts_model): Unref the
old shortcuts model if it exists. Create the nodes for the
app-specific shortcut folders.
(struct _GtkFileChooserImplDefault): Added a field for the
shortcut_folders.
(gtk_file_chooser_impl_default_set_shortcut_folders): Implement.
(select_shortcuts_folder): New helper function.
(gtk_file_chooser_impl_default_set_current_folder): Use
select_shortcuts_folder().
(shortcuts_append_path): Get the file info here, instead of the
caller.
(shortcuts_append_home): Use shortcuts_append_path().
(shortcuts_append_file_system_roots): Likewise.
(create_shortcuts_model): Add the app-specific shortcut folders
and the bookmarks.
(gtk_file_chooser_impl_default_list_shortcut_folders): Implement.
(create_shortcuts_tree): Added a button to let the user add the
current folder to the bookmarks.
(gtk_file_chooser_impl_default_set_property): Connect to
"bookmarks-changed" on the file system.
(shortcuts_append_bookmarks): New function.
* configure.ac: Depend on GConf.
2003-10-01 Federico Mena Quintero <federico@ximian.com>
* gtkfilechooserimpldefault.c (name_sort_func): Simplify with a
macro. This bloats the compiled code, but at least it makes the
human-readable code not egregiously ugly.
(size_sort_func): Likewise.
(mtime_sort_func): Likewise.
2003-10-01 Federico Mena Quintero <federico@ximian.com>
* gtkfilechooserimpldefault.c (tree_selection_changed): Use enum
values instead of plain numbers for the file lists's sort columns.
(create_file_list): Likewise.
(tree_selection_changed): Make the file list start up sorted by
name, and don't specify a default sorting function, so that there
is no unsorted order. This is for consistency with Nautilus.
(list_sort_column_changed_cb): Callback; we cache whether the sort
order for the file list's name column is ascending or not.
(compare_with_folders_first): New helper function to sort
directories before files.
(name_sort_func): Use compare_with_folders_first().
(size_sort_func): Likewise.
(mtime_sort_func): Likewise.
Of course this callback mess would be easy in a real language:
(set-sort-func sortable NAME_COLUMN
(make-comparer impl (lambda (a b) (strcmp (get-name a) (get-name b)))))
(set-sort-func sortable SIZE_COLUMN
(make-comparer impl (lambda (a b) (compare (get-size a) (get-size b)))))
... etc ...
(define (make-comparer impl f)
(lambda (a b)
(if (eq (is-dir? a) (is-dir? b))
(f a b)
(if (sort-ascending? impl)
(if (is-dir? a) -1 1)
(if (is-dir? a) 1 -1)))))
2003-09-30 Federico Mena Quintero <federico@ximian.com>
* gtkfilechooserimpldefault.c (struct _GtkFileChooserImplDefault):
Added fields for the shortcuts tree and its model.
(create_file_list): Don't call
gtk_tree_view_column_set_sort_column_id() twice.
(create_shortcuts_model): New function.
(list_icon_data_func): Use an ICON_SIZE macro instead of a
hardcoded value.
(list_row_activated): Use _gtk_file_chooser_set_current_folder_path()
to avoid converting the GtkFilePath to a URI string.
(gtk_file_chooser_impl_default_set_current_folder): Select the
appropriate item from the shortcuts list when the current folder
changes, to let the user know where he is.
(tree_selection_changed): Likewise.
* gtkfilesystem.h (struct _GtkFileSystemIface): Added methods for
::supports_shortcuts(), ::list_shortcuts(), ::set_shortcuts().
2003-09-10 Federico Mena Quintero <federico@ximian.com>
* gtkfilechooserimpldefault.c (create_file_list): Connect to
"row_activated" on the file list.
(list_row_activated): New function. Changes to folders or emits
the "file-activated" signal depending on what type of row was
activated.
(create_folder_tree): Renamed from create_directory_tree(), since
"folder" is the new politically-correct name.
* gtkfilechooserprivate.h (struct _GtkFileChooserIface): Added a
file-activated signal.
* gtkfilechooser.c (gtk_file_chooser_class_init): Register the
signal.
* gtkfilechooserutils.c (_gtk_file_chooser_set_delegate): Connect
to "file-activated" on the delegate.
(delegate_file_activated): New function.
* TODO: Added an API item about Clipart-like folders provided by
applications.
2003-09-09 Federico Mena Quintero <federico@ximian.com>
* gtkfilechooserimpldefault.c (set_cell_text_bold_if_folder): Use
the cell renderer's "text" and "weight" properties rather than
"markup".
2003-09-09 Federico Mena Quintero <federico@ximian.com>
* gtkfilechooserimpldefault.c (tree_selection_changed): Make the
list model read in directory information as well.
(set_cell_text_bold_if_folder): New utility function. Sets a
cell's text, making it bold if the file info is a folder.
(list_name_data_func): Use set_cell_text_bold_if_folder().
(list_mtime_data_func): Use set_cell_text_bold_if_folder().
(list_size_data_func): Don't set anything if the file info is a
folder.
2003-09-08 Federico Mena Quintero <federico@ximian.com>
* gtkfilesystem.c (gtk_file_info_free): Free the display_key.
* gtkfilechooserimpldefault.c (list_mtime_data_func): New
function.
(create_file_list): Add a modification time column; remove the
size column.
(mtime_sort_func): New callback.
(tree_selection_changed): Add a sorting function for the mtime
column. Have the model fetch the modification time as well.
(tree_selection_changed): Do allow the file list model to show
directories.
* testfilechooser.c (my_new_from_file_at_size): Do not try to read
non-regular files.
2003-09-05 Federico Mena Quintero <federico@ximian.com>
* gtkfilechooserimpldefault.c (create_filter): New function.
(create_directory_tree): New function.
(create_file_list): New function.
(create_filename_entry): New function.
(gtk_file_chooser_impl_default_constructor): Use the functions
above rather than creating the whole file chooser megawidget here,
for readability. This will also let us rearrange the user
interface more easily.
2003-09-03 Federico Mena Quintero <federico@ximian.com>
* TODO: Removed the "extra widget" bit, implemented with the
following:
* gtkfilechooser.h: Added gtk_file_chooser_{set,get}_extra_widget().
* gtkfilechooser.c (gtk_file_chooser_base_init): Install an
"extra-widget" interface property.
(gtk_file_chooser_set_extra_widget): Implemented.
(gtk_file_chooser_get_extra_widget): Implemented.
* gtkfilechooserutils.h (GtkFileChooserProp): Added
GTK_FILE_CHOOSER_PROP_EXTRA_WIDGET.
* gtkfilechooserutils.c (_gtk_file_chooser_install_properties):
Added the "extra-widget" property.
* gtkfilechooserimpldefault.c (struct _GtkFileChooserImplDefault):
Added an extra_widget field.
(gtk_file_chooser_impl_default_set_property): Handle the
"extra-widget" property.
(gtk_file_chooser_impl_default_get_property): Likewise.
(set_preview_widget): Fix the call gtk_container_remove(). Also,
we don't need to ref/sink/unref the preview widget, as that gets
already done by container_add/remove.
(set_extra_widget): New utility function.
* testfilechooser.c (main): Add an extra widget.
Wed Jul 23 17:52:01 2003 Owen Taylor <otaylor@redhat.com>
* testfilechooser.c: Add over-big test case for preview
(much of size from a modified copy of
gdk_pixbuf_new_from_file_at_size())
* gtkfilechooserutils.[ch] gtkfilechooser.c
gtkfilechooserprivate.h gtkfilechooserimpldefault.c:
Add get_preview_path() as a virtual function; implement
update-preview signal that was in the header file.
* gtkfilechooserimpldefault.c: Finish a simple preview
widget implementation.
Wed Jul 23 11:23:43 2003 Owen Taylor <otaylor@redhat.com>
* gtkfilefilter.[ch]: File filter objects.
* gtkfilechooser.[ch] gtkfilechooserutils.[ch]: Add
file filtering to API.
* gtkfilechooserimpldefault.c: Implement file filters.
* testfilechooser.c: Try out the filter functionality.
* gtkfilesystemmodel.c: Add
_gtk_file_system_model_set_filter() to set a callback
function for filtering.
* gtkfilechooserutils.c: Propagate property notification
to the receiver.
* fnmatch.c: Copy this from GTK+ temporarily to get
UTF-8 pattern matching functionality.
Wed Jul 16 16:50:31 2003 Owen Taylor <otaylor@redhat.com>
* configure.ac Makefile.am: auto-ize.
* xdgmime/: Add freedesktop.org MIME spec implementatin
by Jonathan Blandford.
* gtkfilesystem.[ch]: Add gtk_file_info_render_icon()
gtk_file_info_set/get_icon_type to do icon handling
based on MIME type. Add a simple icon caching system.
* gtkfilesystemgnomevfs.c: Implement ensure_types()
so that extending the set of types for a loaded
directory works. Set the MIME type to get the default
icon handling.
* gtkfilesystemunix.c: Look up the MIME type using
xdgmime.
* gtkfilechooserimpldefault.c: Display icons in the list.
Fri Jul 11 14:37:07 2003 Owen Taylor <otaylor@redhat.com>
* gtkfilechooser.[ch] gtkfilechooserprivate.h
gtkfilechooserimpldefault.c: Add
gtk_file_chooser_set_current_name() to set the current
entry contents.
* *.c: Consistently use '-' not '_' in property names and
signal names.
* gtkfilechooser.c: Document all exported functions.
Fri Apr 4 17:30:27 2003 Owen Taylor <otaylor@redhat.com>
* gtkfilechooserprivate.h gtkfilechooser.h: Move
interface definition into a private header so it
can refer to GtkFileSystem.
* *.[ch]: Switch over from using gchar *uri internally
to using GtkFilePath * internally, and add
conversion routines to GtkFileSystem.
* TODO README: Updates.