Set the shortcuts tree as a drag destination.
2003-12-01 Federico Mena Quintero <federico@ximian.com> * gtk/gtkfilechooserdefault.c (create_shortcuts_tree): Set the shortcuts tree as a drag destination. (shortcuts_drag_data_received_cb): New callback. (get_file_info): Also fetch information on whether the file is a folder. (add_bookmark_button_clicked_cb): Use error_could_not_add_bookmark_dialog(). (error_could_not_add_bookmark_dialog): New function. (shortcuts_add_bookmark_from_path): New helper function. (add_bookmark_button_clicked_cb): Use shortcuts_add_bookmark_from_path(). (shortcuts_row_activated): We no longer need the changing_folder flag. (struct _GtkFileChooserDefault): Likewise.
This commit is contained in:
parent
08529cdee7
commit
3efec0d69e
13
ChangeLog
13
ChangeLog
@ -1,3 +1,16 @@
|
|||||||
|
2003-12-01 Federico Mena Quintero <federico@ximian.com>
|
||||||
|
|
||||||
|
* gtk/gtkfilechooserdefault.c (create_shortcuts_tree): Set the
|
||||||
|
shortcuts tree as a drag destination.
|
||||||
|
(shortcuts_drag_data_received_cb): New callback.
|
||||||
|
(get_file_info): Also fetch information on whether the file is a folder.
|
||||||
|
(add_bookmark_button_clicked_cb): Use error_could_not_add_bookmark_dialog().
|
||||||
|
(error_could_not_add_bookmark_dialog): New function.
|
||||||
|
(shortcuts_add_bookmark_from_path): New helper function.
|
||||||
|
(add_bookmark_button_clicked_cb): Use shortcuts_add_bookmark_from_path().
|
||||||
|
(shortcuts_row_activated): We no longer need the changing_folder flag.
|
||||||
|
(struct _GtkFileChooserDefault): Likewise.
|
||||||
|
|
||||||
Sun Nov 30 17:31:32 2003 Soeren Sandmann <sandmann@daimi.au.dk>
|
Sun Nov 30 17:31:32 2003 Soeren Sandmann <sandmann@daimi.au.dk>
|
||||||
|
|
||||||
* gtk/gtktoolbar.c (slide_idle_handler): return TRUE if there are
|
* gtk/gtktoolbar.c (slide_idle_handler): return TRUE if there are
|
||||||
|
@ -1,3 +1,16 @@
|
|||||||
|
2003-12-01 Federico Mena Quintero <federico@ximian.com>
|
||||||
|
|
||||||
|
* gtk/gtkfilechooserdefault.c (create_shortcuts_tree): Set the
|
||||||
|
shortcuts tree as a drag destination.
|
||||||
|
(shortcuts_drag_data_received_cb): New callback.
|
||||||
|
(get_file_info): Also fetch information on whether the file is a folder.
|
||||||
|
(add_bookmark_button_clicked_cb): Use error_could_not_add_bookmark_dialog().
|
||||||
|
(error_could_not_add_bookmark_dialog): New function.
|
||||||
|
(shortcuts_add_bookmark_from_path): New helper function.
|
||||||
|
(add_bookmark_button_clicked_cb): Use shortcuts_add_bookmark_from_path().
|
||||||
|
(shortcuts_row_activated): We no longer need the changing_folder flag.
|
||||||
|
(struct _GtkFileChooserDefault): Likewise.
|
||||||
|
|
||||||
Sun Nov 30 17:31:32 2003 Soeren Sandmann <sandmann@daimi.au.dk>
|
Sun Nov 30 17:31:32 2003 Soeren Sandmann <sandmann@daimi.au.dk>
|
||||||
|
|
||||||
* gtk/gtktoolbar.c (slide_idle_handler): return TRUE if there are
|
* gtk/gtktoolbar.c (slide_idle_handler): return TRUE if there are
|
||||||
|
@ -1,3 +1,16 @@
|
|||||||
|
2003-12-01 Federico Mena Quintero <federico@ximian.com>
|
||||||
|
|
||||||
|
* gtk/gtkfilechooserdefault.c (create_shortcuts_tree): Set the
|
||||||
|
shortcuts tree as a drag destination.
|
||||||
|
(shortcuts_drag_data_received_cb): New callback.
|
||||||
|
(get_file_info): Also fetch information on whether the file is a folder.
|
||||||
|
(add_bookmark_button_clicked_cb): Use error_could_not_add_bookmark_dialog().
|
||||||
|
(error_could_not_add_bookmark_dialog): New function.
|
||||||
|
(shortcuts_add_bookmark_from_path): New helper function.
|
||||||
|
(add_bookmark_button_clicked_cb): Use shortcuts_add_bookmark_from_path().
|
||||||
|
(shortcuts_row_activated): We no longer need the changing_folder flag.
|
||||||
|
(struct _GtkFileChooserDefault): Likewise.
|
||||||
|
|
||||||
Sun Nov 30 17:31:32 2003 Soeren Sandmann <sandmann@daimi.au.dk>
|
Sun Nov 30 17:31:32 2003 Soeren Sandmann <sandmann@daimi.au.dk>
|
||||||
|
|
||||||
* gtk/gtktoolbar.c (slide_idle_handler): return TRUE if there are
|
* gtk/gtktoolbar.c (slide_idle_handler): return TRUE if there are
|
||||||
|
@ -1,3 +1,16 @@
|
|||||||
|
2003-12-01 Federico Mena Quintero <federico@ximian.com>
|
||||||
|
|
||||||
|
* gtk/gtkfilechooserdefault.c (create_shortcuts_tree): Set the
|
||||||
|
shortcuts tree as a drag destination.
|
||||||
|
(shortcuts_drag_data_received_cb): New callback.
|
||||||
|
(get_file_info): Also fetch information on whether the file is a folder.
|
||||||
|
(add_bookmark_button_clicked_cb): Use error_could_not_add_bookmark_dialog().
|
||||||
|
(error_could_not_add_bookmark_dialog): New function.
|
||||||
|
(shortcuts_add_bookmark_from_path): New helper function.
|
||||||
|
(add_bookmark_button_clicked_cb): Use shortcuts_add_bookmark_from_path().
|
||||||
|
(shortcuts_row_activated): We no longer need the changing_folder flag.
|
||||||
|
(struct _GtkFileChooserDefault): Likewise.
|
||||||
|
|
||||||
Sun Nov 30 17:31:32 2003 Soeren Sandmann <sandmann@daimi.au.dk>
|
Sun Nov 30 17:31:32 2003 Soeren Sandmann <sandmann@daimi.au.dk>
|
||||||
|
|
||||||
* gtk/gtktoolbar.c (slide_idle_handler): return TRUE if there are
|
* gtk/gtktoolbar.c (slide_idle_handler): return TRUE if there are
|
||||||
|
@ -1,3 +1,16 @@
|
|||||||
|
2003-12-01 Federico Mena Quintero <federico@ximian.com>
|
||||||
|
|
||||||
|
* gtk/gtkfilechooserdefault.c (create_shortcuts_tree): Set the
|
||||||
|
shortcuts tree as a drag destination.
|
||||||
|
(shortcuts_drag_data_received_cb): New callback.
|
||||||
|
(get_file_info): Also fetch information on whether the file is a folder.
|
||||||
|
(add_bookmark_button_clicked_cb): Use error_could_not_add_bookmark_dialog().
|
||||||
|
(error_could_not_add_bookmark_dialog): New function.
|
||||||
|
(shortcuts_add_bookmark_from_path): New helper function.
|
||||||
|
(add_bookmark_button_clicked_cb): Use shortcuts_add_bookmark_from_path().
|
||||||
|
(shortcuts_row_activated): We no longer need the changing_folder flag.
|
||||||
|
(struct _GtkFileChooserDefault): Likewise.
|
||||||
|
|
||||||
Sun Nov 30 17:31:32 2003 Soeren Sandmann <sandmann@daimi.au.dk>
|
Sun Nov 30 17:31:32 2003 Soeren Sandmann <sandmann@daimi.au.dk>
|
||||||
|
|
||||||
* gtk/gtktoolbar.c (slide_idle_handler): return TRUE if there are
|
* gtk/gtktoolbar.c (slide_idle_handler): return TRUE if there are
|
||||||
|
@ -117,7 +117,6 @@ struct _GtkFileChooserDefault
|
|||||||
guint preview_widget_active : 1;
|
guint preview_widget_active : 1;
|
||||||
guint select_multiple : 1;
|
guint select_multiple : 1;
|
||||||
guint show_hidden : 1;
|
guint show_hidden : 1;
|
||||||
guint changing_folder : 1;
|
|
||||||
guint list_sort_ascending : 1;
|
guint list_sort_ascending : 1;
|
||||||
guint bookmarks_set : 1;
|
guint bookmarks_set : 1;
|
||||||
};
|
};
|
||||||
@ -138,6 +137,18 @@ enum {
|
|||||||
FILE_LIST_COL_NUM_COLUMNS
|
FILE_LIST_COL_NUM_COLUMNS
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* Identifiers for target types */
|
||||||
|
enum {
|
||||||
|
TEXT_URI_LIST
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Target types for DnD in the shortcuts list */
|
||||||
|
static GtkTargetEntry shortcuts_targets[] = {
|
||||||
|
{ "text/uri-list", 0, TEXT_URI_LIST }
|
||||||
|
};
|
||||||
|
|
||||||
|
static const int num_shortcuts_targets = sizeof (shortcuts_targets) / sizeof (shortcuts_targets[0]);
|
||||||
|
|
||||||
/* 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
|
||||||
@ -384,6 +395,30 @@ error_dialog (GtkFileChooserDefault *impl,
|
|||||||
g_error_free (error);
|
g_error_free (error);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Displays an error message about not being able to get information for a file.
|
||||||
|
* Frees the GError as well.
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
error_getting_info_dialog (GtkFileChooserDefault *impl,
|
||||||
|
const GtkFilePath *path,
|
||||||
|
GError *error)
|
||||||
|
{
|
||||||
|
error_dialog (impl,
|
||||||
|
_("Could not retrieve information about %s:\n%s"),
|
||||||
|
path, error);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Shows an error dialog about not being able to add a bookmark */
|
||||||
|
static void
|
||||||
|
error_could_not_add_bookmark_dialog (GtkFileChooserDefault *impl,
|
||||||
|
const GtkFilePath *path,
|
||||||
|
GError *error)
|
||||||
|
{
|
||||||
|
error_dialog (impl,
|
||||||
|
_("Could not add a bookmark for %s:\n%s"),
|
||||||
|
path, error);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
update_preview_widget_visibility (GtkFileChooserDefault *impl)
|
update_preview_widget_visibility (GtkFileChooserDefault *impl)
|
||||||
{
|
{
|
||||||
@ -437,11 +472,11 @@ get_file_info (GtkFileSystem *file_system, const GtkFilePath *path, GError **err
|
|||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
parent_folder = gtk_file_system_get_folder (file_system, parent_path,
|
parent_folder = gtk_file_system_get_folder (file_system, parent_path,
|
||||||
|
GTK_FILE_INFO_DISPLAY_NAME
|
||||||
#if 0
|
#if 0
|
||||||
GTK_FILE_INFO_DISPLAY_NAME | GTK_FILE_INFO_ICON,
|
| GTK_FILE_INFO_ICON
|
||||||
#else
|
|
||||||
GTK_FILE_INFO_DISPLAY_NAME,
|
|
||||||
#endif
|
#endif
|
||||||
|
| GTK_FILE_INFO_IS_FOLDER,
|
||||||
error);
|
error);
|
||||||
gtk_file_path_free (parent_path);
|
gtk_file_path_free (parent_path);
|
||||||
|
|
||||||
@ -515,19 +550,6 @@ shortcuts_insert_path (GtkFileChooserDefault *impl,
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Displays an error message about not being able to get information for a file.
|
|
||||||
* Frees the GError as well.
|
|
||||||
*/
|
|
||||||
static void
|
|
||||||
error_getting_info_dialog (GtkFileChooserDefault *impl,
|
|
||||||
const GtkFilePath *path,
|
|
||||||
GError *error)
|
|
||||||
{
|
|
||||||
error_dialog (impl,
|
|
||||||
_("Could not retrieve information about %s:\n%s"),
|
|
||||||
path, error);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Appends an item for the user's home directory to the shortcuts model */
|
/* Appends an item for the user's home directory to the shortcuts model */
|
||||||
static void
|
static void
|
||||||
shortcuts_append_home (GtkFileChooserDefault *impl)
|
shortcuts_append_home (GtkFileChooserDefault *impl)
|
||||||
@ -836,19 +858,42 @@ create_folder_tree (GtkFileChooserDefault *impl)
|
|||||||
return impl->tree_scrollwin;
|
return impl->tree_scrollwin;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Tries to add a bookmark from a path name */
|
||||||
|
static void
|
||||||
|
shortcuts_add_bookmark_from_path (GtkFileChooserDefault *impl,
|
||||||
|
const GtkFilePath *path)
|
||||||
|
{
|
||||||
|
GtkFileInfo *info;
|
||||||
|
GError *error;
|
||||||
|
|
||||||
|
error = NULL;
|
||||||
|
info = get_file_info (impl->file_system, path, &error);
|
||||||
|
|
||||||
|
if (!info)
|
||||||
|
error_getting_info_dialog (impl, path, error);
|
||||||
|
else if (!gtk_file_info_get_is_folder (info))
|
||||||
|
{
|
||||||
|
char *msg;
|
||||||
|
|
||||||
|
msg = g_strdup_printf (_("Could not add bookmark for %s because it is not a folder."),
|
||||||
|
gtk_file_path_get_string (path));
|
||||||
|
error_message (impl, msg);
|
||||||
|
g_free (msg);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
error = NULL;
|
||||||
|
if (!gtk_file_system_add_bookmark (impl->file_system, path, &error))
|
||||||
|
error_could_not_add_bookmark_dialog (impl, path, error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Callback used when the "Add bookmark" button is clicked */
|
/* Callback used when the "Add bookmark" button is clicked */
|
||||||
static void
|
static void
|
||||||
add_bookmark_button_clicked_cb (GtkButton *button,
|
add_bookmark_button_clicked_cb (GtkButton *button,
|
||||||
GtkFileChooserDefault *impl)
|
GtkFileChooserDefault *impl)
|
||||||
{
|
{
|
||||||
GError *error;
|
shortcuts_add_bookmark_from_path (impl, impl->current_folder);
|
||||||
|
|
||||||
error = NULL;
|
|
||||||
if (!gtk_file_system_add_bookmark (impl->file_system, impl->current_folder, &error))
|
|
||||||
error_dialog (impl,
|
|
||||||
_("Could not add bookmark for %s:\n%s"),
|
|
||||||
impl->current_folder,
|
|
||||||
error);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Callback used when the "Remove bookmark" button is clicked */
|
/* Callback used when the "Remove bookmark" button is clicked */
|
||||||
@ -937,6 +982,82 @@ bookmarks_check_remove_sensitivity (GtkFileChooserDefault *impl)
|
|||||||
gtk_widget_set_sensitive (impl->remove_bookmark_button, is_bookmark);
|
gtk_widget_set_sensitive (impl->remove_bookmark_button, is_bookmark);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Converts raw selection data from text/uri-list to a list of strings */
|
||||||
|
static GSList *
|
||||||
|
split_uris (const char *data)
|
||||||
|
{
|
||||||
|
GSList *uris;
|
||||||
|
const char *p, *start;
|
||||||
|
|
||||||
|
uris = NULL;
|
||||||
|
|
||||||
|
start = data;
|
||||||
|
|
||||||
|
for (p = start; *p != 0; p++)
|
||||||
|
if (*p == '\r' && *(p + 1) == '\n')
|
||||||
|
{
|
||||||
|
char *name;
|
||||||
|
|
||||||
|
name = g_strndup (start, p - start);
|
||||||
|
uris = g_slist_prepend (uris, name);
|
||||||
|
|
||||||
|
start = p + 2;
|
||||||
|
p = start;
|
||||||
|
}
|
||||||
|
|
||||||
|
uris = g_slist_reverse (uris);
|
||||||
|
return uris;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Callback used when we get the drag data for the bookmarks list. We add the
|
||||||
|
* received URIs as bookmarks if they are folders.
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
shortcuts_drag_data_received_cb (GtkWidget *widget,
|
||||||
|
GdkDragContext *context,
|
||||||
|
gint x,
|
||||||
|
gint y,
|
||||||
|
GtkSelectionData *selection_data,
|
||||||
|
guint info,
|
||||||
|
guint time_,
|
||||||
|
gpointer data)
|
||||||
|
{
|
||||||
|
GtkFileChooserDefault *impl;
|
||||||
|
GSList *uris, *l;
|
||||||
|
|
||||||
|
impl = GTK_FILE_CHOOSER_DEFAULT (data);
|
||||||
|
|
||||||
|
uris = split_uris (selection_data->data);
|
||||||
|
|
||||||
|
for (l = uris; l; l = l->next)
|
||||||
|
{
|
||||||
|
char *uri;
|
||||||
|
GtkFilePath *path;
|
||||||
|
|
||||||
|
uri = l->data;
|
||||||
|
path = gtk_file_system_uri_to_path (impl->file_system, uri);
|
||||||
|
|
||||||
|
if (path)
|
||||||
|
{
|
||||||
|
shortcuts_add_bookmark_from_path (impl, path);
|
||||||
|
gtk_file_path_free (path);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
char *msg;
|
||||||
|
|
||||||
|
msg = g_strdup_printf (_("Could not add a bookmark for %s because it is an invalid path name."),
|
||||||
|
uri);
|
||||||
|
error_message (impl, msg);
|
||||||
|
g_free (msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
g_free (uri);
|
||||||
|
}
|
||||||
|
|
||||||
|
g_slist_free (uris);
|
||||||
|
}
|
||||||
|
|
||||||
/* Creates the widgets for the shortcuts and bookmarks tree */
|
/* Creates the widgets for the shortcuts and bookmarks tree */
|
||||||
static GtkWidget *
|
static GtkWidget *
|
||||||
create_shortcuts_tree (GtkFileChooserDefault *impl)
|
create_shortcuts_tree (GtkFileChooserDefault *impl)
|
||||||
@ -968,15 +1089,24 @@ create_shortcuts_tree (GtkFileChooserDefault *impl)
|
|||||||
impl->shortcuts_tree = gtk_tree_view_new ();
|
impl->shortcuts_tree = gtk_tree_view_new ();
|
||||||
gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (impl->shortcuts_tree), FALSE);
|
gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (impl->shortcuts_tree), FALSE);
|
||||||
|
|
||||||
|
gtk_drag_dest_set (impl->shortcuts_tree,
|
||||||
|
GTK_DEST_DEFAULT_ALL,
|
||||||
|
shortcuts_targets,
|
||||||
|
num_shortcuts_targets,
|
||||||
|
GDK_ACTION_COPY);
|
||||||
|
|
||||||
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (impl->shortcuts_tree));
|
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (impl->shortcuts_tree));
|
||||||
gtk_tree_selection_set_mode (selection, GTK_SELECTION_BROWSE);
|
gtk_tree_selection_set_mode (selection, GTK_SELECTION_BROWSE);
|
||||||
gtk_tree_selection_set_select_function (selection,
|
gtk_tree_selection_set_select_function (selection,
|
||||||
shortcuts_select_func,
|
shortcuts_select_func,
|
||||||
impl, NULL);
|
impl, NULL);
|
||||||
|
|
||||||
g_signal_connect (impl->shortcuts_tree, "row_activated",
|
g_signal_connect (impl->shortcuts_tree, "row-activated",
|
||||||
G_CALLBACK (shortcuts_row_activated), impl);
|
G_CALLBACK (shortcuts_row_activated), impl);
|
||||||
|
|
||||||
|
g_signal_connect (impl->shortcuts_tree, "drag-data-received",
|
||||||
|
G_CALLBACK (shortcuts_drag_data_received_cb), impl);
|
||||||
|
|
||||||
gtk_container_add (GTK_CONTAINER (impl->shortcuts_scrollwin), impl->shortcuts_tree);
|
gtk_container_add (GTK_CONTAINER (impl->shortcuts_scrollwin), impl->shortcuts_tree);
|
||||||
gtk_widget_show (impl->shortcuts_tree);
|
gtk_widget_show (impl->shortcuts_tree);
|
||||||
|
|
||||||
@ -2232,9 +2362,7 @@ shortcuts_row_activated (GtkTreeView *tree_view,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
impl->changing_folder = TRUE;
|
|
||||||
_gtk_file_chooser_set_current_folder_path (GTK_FILE_CHOOSER (impl), model_path);
|
_gtk_file_chooser_set_current_folder_path (GTK_FILE_CHOOSER (impl), model_path);
|
||||||
impl->changing_folder = FALSE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
|
Loading…
Reference in New Issue
Block a user