forked from AuroraMiddleware/gtk
Remove gtk_places_sidebar_set_show_cwd(), implement that in the file chooser
This removes more idiosyncratic API from the sidebar. Signed-off-by: Federico Mena Quintero <federico@gnome.org>
This commit is contained in:
parent
c4f40a92ca
commit
42d239f6d5
@ -1318,7 +1318,6 @@ shortcuts_pane_create (GtkFileChooserDefault *impl,
|
|||||||
GtkSizeGroup *size_group)
|
GtkSizeGroup *size_group)
|
||||||
{
|
{
|
||||||
impl->places_sidebar = gtk_places_sidebar_new ();
|
impl->places_sidebar = gtk_places_sidebar_new ();
|
||||||
gtk_places_sidebar_set_show_cwd (GTK_PLACES_SIDEBAR (impl->places_sidebar), TRUE);
|
|
||||||
|
|
||||||
g_signal_connect (impl->places_sidebar, "open-location",
|
g_signal_connect (impl->places_sidebar, "open-location",
|
||||||
G_CALLBACK (places_sidebar_open_location_cb),
|
G_CALLBACK (places_sidebar_open_location_cb),
|
||||||
@ -3804,6 +3803,63 @@ set_startup_mode (GtkFileChooserDefault *impl)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
shortcut_exists (GtkFileChooserDefault *impl, GFile *needle)
|
||||||
|
{
|
||||||
|
GSList *haystack;
|
||||||
|
GSList *l;
|
||||||
|
gboolean exists;
|
||||||
|
|
||||||
|
exists = FALSE;
|
||||||
|
|
||||||
|
haystack = gtk_places_sidebar_list_shortcuts (GTK_PLACES_SIDEBAR (impl->places_sidebar));
|
||||||
|
for (l = haystack; l; l = l->next)
|
||||||
|
{
|
||||||
|
GFile *hay;
|
||||||
|
|
||||||
|
hay = G_FILE (l->data);
|
||||||
|
if (g_file_equal (hay, needle))
|
||||||
|
{
|
||||||
|
exists = TRUE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
g_slist_free_full (haystack, g_object_unref);
|
||||||
|
|
||||||
|
return exists;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
add_cwd_to_sidebar_if_needed (GtkFileChooserDefault *impl)
|
||||||
|
{
|
||||||
|
char *cwd;
|
||||||
|
GFile *cwd_file;
|
||||||
|
GFile *home_file;
|
||||||
|
|
||||||
|
cwd = g_get_current_dir ();
|
||||||
|
cwd_file = g_file_new_for_path (cwd);
|
||||||
|
g_free (cwd);
|
||||||
|
|
||||||
|
if (shortcut_exists (impl, cwd_file))
|
||||||
|
goto out;
|
||||||
|
|
||||||
|
home_file = g_file_new_for_path (g_get_home_dir ());
|
||||||
|
|
||||||
|
/* We only add an item for $CWD if it is different from $HOME. This way,
|
||||||
|
* applications which get launched from a shell in a terminal (by someone who
|
||||||
|
* knows what they are doing) will get an item for $CWD in the places sidebar,
|
||||||
|
* and "normal" applications launched from the desktop shell (whose $CWD is
|
||||||
|
* $HOME) won't get any extra clutter in the sidebar.
|
||||||
|
*/
|
||||||
|
if (!g_file_equal (home_file, cwd_file))
|
||||||
|
gtk_places_sidebar_add_shortcut (GTK_PLACES_SIDEBAR (impl->places_sidebar), cwd_file);
|
||||||
|
|
||||||
|
g_object_unref (home_file);
|
||||||
|
|
||||||
|
out:
|
||||||
|
g_object_unref (cwd_file);
|
||||||
|
}
|
||||||
|
|
||||||
/* GtkWidget::map method */
|
/* GtkWidget::map method */
|
||||||
static void
|
static void
|
||||||
gtk_file_chooser_default_map (GtkWidget *widget)
|
gtk_file_chooser_default_map (GtkWidget *widget)
|
||||||
@ -3818,6 +3874,8 @@ gtk_file_chooser_default_map (GtkWidget *widget)
|
|||||||
|
|
||||||
settings_load (impl);
|
settings_load (impl);
|
||||||
|
|
||||||
|
add_cwd_to_sidebar_if_needed (impl);
|
||||||
|
|
||||||
if (impl->operation_mode == OPERATION_MODE_BROWSE)
|
if (impl->operation_mode == OPERATION_MODE_BROWSE)
|
||||||
{
|
{
|
||||||
switch (impl->reload_state)
|
switch (impl->reload_state)
|
||||||
|
@ -139,7 +139,6 @@ struct _GtkPlacesSidebar {
|
|||||||
guint show_properties : 1;
|
guint show_properties : 1;
|
||||||
guint show_trash : 1;
|
guint show_trash : 1;
|
||||||
guint trash_is_full : 1;
|
guint trash_is_full : 1;
|
||||||
guint show_cwd : 1;
|
|
||||||
guint accept_uri_drops : 1;
|
guint accept_uri_drops : 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -799,55 +798,8 @@ update_places (GtkPlacesSidebar *sidebar)
|
|||||||
g_object_unref (icon);
|
g_object_unref (icon);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* compute the $HOME URI here; we'll use it when we generate the $CWD item as well as the $HOME item */
|
|
||||||
|
|
||||||
home_uri = get_home_directory_uri ();
|
|
||||||
|
|
||||||
/* cwd */
|
|
||||||
if (sidebar->show_cwd) {
|
|
||||||
char *cwd;
|
|
||||||
GFile *home_file;
|
|
||||||
|
|
||||||
cwd = g_get_current_dir ();
|
|
||||||
root = g_file_new_for_path (cwd);
|
|
||||||
g_free (cwd);
|
|
||||||
|
|
||||||
home_file = g_file_new_for_uri (home_uri);
|
|
||||||
|
|
||||||
if (!g_file_equal (home_file, root)) {
|
|
||||||
GFileInfo *info;
|
|
||||||
|
|
||||||
info = g_file_query_info (root,
|
|
||||||
"standard::display-name,standard::icon",
|
|
||||||
G_FILE_QUERY_INFO_NONE,
|
|
||||||
NULL,
|
|
||||||
NULL); /* NULL-GError */
|
|
||||||
|
|
||||||
/* FIXME: we are getting file info synchronously. We may want to do it async at some point. */
|
|
||||||
if (info) {
|
|
||||||
bookmark_name = g_strdup (g_file_info_get_display_name (info));
|
|
||||||
icon = g_file_info_get_icon (info); /* FIXME: use symbolic icon */
|
|
||||||
mount_uri = g_file_get_uri (root);
|
|
||||||
tooltip = g_file_get_parse_name (root);
|
|
||||||
|
|
||||||
add_place (sidebar, PLACES_BUILT_IN,
|
|
||||||
SECTION_COMPUTER,
|
|
||||||
bookmark_name, icon, mount_uri,
|
|
||||||
NULL, NULL, NULL, 0,
|
|
||||||
tooltip);
|
|
||||||
|
|
||||||
g_free (mount_uri);
|
|
||||||
g_free (tooltip);
|
|
||||||
g_free (bookmark_name);
|
|
||||||
|
|
||||||
g_object_unref (info);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
g_object_unref (home_file);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* home folder */
|
/* home folder */
|
||||||
|
home_uri = get_home_directory_uri ();
|
||||||
icon = g_themed_icon_new (ICON_NAME_HOME);
|
icon = g_themed_icon_new (ICON_NAME_HOME);
|
||||||
add_place (sidebar, PLACES_BUILT_IN,
|
add_place (sidebar, PLACES_BUILT_IN,
|
||||||
SECTION_COMPUTER,
|
SECTION_COMPUTER,
|
||||||
@ -4060,15 +4012,6 @@ gtk_places_sidebar_set_trash_is_full (GtkPlacesSidebar *sidebar, gboolean is_ful
|
|||||||
check_popup_sensitivity (sidebar);
|
check_popup_sensitivity (sidebar);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
gtk_places_sidebar_set_show_cwd (GtkPlacesSidebar *sidebar, gboolean show_cwd)
|
|
||||||
{
|
|
||||||
g_return_if_fail (GTK_IS_PLACES_SIDEBAR (sidebar));
|
|
||||||
|
|
||||||
sidebar->show_cwd = !!show_cwd;
|
|
||||||
update_places (sidebar);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
gtk_places_sidebar_set_accept_uri_drops (GtkPlacesSidebar *sidebar, gboolean accept_uri_drops)
|
gtk_places_sidebar_set_accept_uri_drops (GtkPlacesSidebar *sidebar, gboolean accept_uri_drops)
|
||||||
{
|
{
|
||||||
|
@ -68,8 +68,6 @@ void gtk_places_sidebar_set_show_properties (GtkPlacesSidebar *sidebar, gboolean
|
|||||||
void gtk_places_sidebar_set_show_trash (GtkPlacesSidebar *sidebar, gboolean show_trash);
|
void gtk_places_sidebar_set_show_trash (GtkPlacesSidebar *sidebar, gboolean show_trash);
|
||||||
void gtk_places_sidebar_set_trash_is_full (GtkPlacesSidebar *sidebar, gboolean is_full);
|
void gtk_places_sidebar_set_trash_is_full (GtkPlacesSidebar *sidebar, gboolean is_full);
|
||||||
|
|
||||||
void gtk_places_sidebar_set_show_cwd (GtkPlacesSidebar *sidebar, gboolean show_cwd);
|
|
||||||
|
|
||||||
void gtk_places_sidebar_set_accept_uri_drops (GtkPlacesSidebar *sidebar, gboolean accept_uri_drops);
|
void gtk_places_sidebar_set_accept_uri_drops (GtkPlacesSidebar *sidebar, gboolean accept_uri_drops);
|
||||||
|
|
||||||
void gtk_places_sidebar_add_shortcut (GtkPlacesSidebar *sidebar, GFile *location);
|
void gtk_places_sidebar_add_shortcut (GtkPlacesSidebar *sidebar, GFile *location);
|
||||||
|
Loading…
Reference in New Issue
Block a user