[gtk+/wip/csoriano/gtkpathbar_rework: 35/39] gtkpathbar: allow more destinations as root
- From: Carlos Soriano Sánchez <csoriano src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/wip/csoriano/gtkpathbar_rework: 35/39] gtkpathbar: allow more destinations as root
- Date: Tue, 14 Apr 2015 14:58:56 +0000 (UTC)
commit 78146c7bb8c1e268b5e8aee413094dd73ac4b72e
Author: Carlos Soriano <csoriano gnome org>
Date: Wed Mar 4 13:23:52 2015 +0100
gtkpathbar: allow more destinations as root
Like the Home folder etc. Matching what Nautilus does.
gtk/gtkpathbar.c | 40 +++++-----------------------------------
1 files changed, 5 insertions(+), 35 deletions(-)
---
diff --git a/gtk/gtkpathbar.c b/gtk/gtkpathbar.c
index f195998..97d2f5a 100644
--- a/gtk/gtkpathbar.c
+++ b/gtk/gtkpathbar.c
@@ -43,7 +43,6 @@ struct _GtkPathBarPrivate
GList *button_list;
GList *first_scrolled_button;
- GList *fake_root;
GtkWidget *up_slider_button;
GtkWidget *down_slider_button;
guint settings_signal_id;
@@ -89,6 +88,7 @@ struct _ButtonData
{
GtkWidget *button;
ButtonType type;
+ gboolean is_root;
char *dir_name;
GFile *file;
GtkWidget *image;
@@ -97,11 +97,6 @@ struct _ButtonData
guint ignore_changes : 1;
guint file_is_hidden : 1;
};
-/* This macro is used to check if a button can be used as a fake root.
- * All buttons in front of a fake root are automatically hidden when in a
- * directory below a fake root and replaced with the "<" arrow button.
- */
-#define BUTTON_IS_FAKE_ROOT(button) ((button)->type == HOME_BUTTON)
G_DEFINE_TYPE_WITH_PRIVATE (GtkPathBar, gtk_path_bar, GTK_TYPE_CONTAINER)
@@ -1047,8 +1042,6 @@ gtk_path_bar_scroll_up (GtkPathBar *path_bar)
{
if (list->prev && gtk_widget_get_child_visible (BUTTON_DATA (list->prev->data)->button))
{
- if (list->prev == path_bar->priv->fake_root)
- path_bar->priv->fake_root = NULL;
path_bar->priv->first_scrolled_button = list;
return;
}
@@ -1170,7 +1163,7 @@ reload_icons (GtkPathBar *path_bar)
gboolean current_dir;
button_data = BUTTON_DATA (list->data);
- if (button_data->type != NORMAL_BUTTON)
+ if (button_data->type != NORMAL_BUTTON || button_data->is_root)
{
current_dir = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button_data->button));
gtk_path_bar_update_button_appearance (path_bar, button_data, current_dir);
@@ -1230,7 +1223,6 @@ gtk_path_bar_clear_buttons (GtkPathBar *path_bar)
gtk_container_remove (GTK_CONTAINER (path_bar), BUTTON_DATA
(path_bar->priv->button_list->data)->button);
}
path_bar->priv->first_scrolled_button = NULL;
- path_bar->priv->fake_root = NULL;
}
static void
@@ -1479,6 +1471,7 @@ gtk_path_bar_setup_button_type (ButtonData *button_data,
else if (gtk_path_bar_is_home_directory (location))
{
button_data->type = HOME_BUTTON;
+ button_data->is_root = TRUE;
}
else if (gtk_path_bar_is_desktop_directory (location))
{
@@ -1488,6 +1481,7 @@ gtk_path_bar_setup_button_type (ButtonData *button_data,
{
button_data->dir_name = g_mount_get_name (mount);
button_data->type = MOUNT_BUTTON;
+ button_data->is_root = TRUE;
g_object_unref (mount);
}
@@ -1591,7 +1585,6 @@ gtk_path_bar_check_parent_path (GtkPathBar *path_bar,
{
GList *list;
GList *current_path = NULL;
- gboolean need_new_fake_root = FALSE;
for (list = path_bar->priv->button_list; list; list = list->next)
{
@@ -1603,28 +1596,10 @@ gtk_path_bar_check_parent_path (GtkPathBar *path_bar,
current_path = list;
break;
}
- if (list == path_bar->priv->fake_root)
- need_new_fake_root = TRUE;
}
if (current_path)
{
- if (need_new_fake_root)
- {
- path_bar->priv->fake_root = NULL;
- for (list = current_path; list; list = list->next)
- {
- ButtonData *button_data;
-
- button_data = list->data;
- if (BUTTON_IS_FAKE_ROOT (button_data))
- {
- path_bar->priv->fake_root = list;
- break;
- }
- }
- }
-
for (list = path_bar->priv->button_list; list; list = list->next)
{
gtk_path_bar_update_button_appearance (path_bar,
@@ -1650,7 +1625,6 @@ struct SetFileInfo
GFile *parent_file;
GtkPathBar *path_bar;
GList *new_buttons;
- GList *fake_root;
gboolean first_directory;
};
@@ -1664,7 +1638,6 @@ gtk_path_bar_set_file_finish (struct SetFileInfo *info,
gtk_path_bar_clear_buttons (info->path_bar);
info->path_bar->priv->button_list = g_list_reverse (info->new_buttons);
- info->path_bar->priv->fake_root = info->fake_root;
for (l = info->path_bar->priv->button_list; l; l = l->next)
{
@@ -1730,16 +1703,13 @@ gtk_path_bar_get_info_callback (GObject *source,
file_info->new_buttons = g_list_prepend (file_info->new_buttons, button_data);
- if (BUTTON_IS_FAKE_ROOT (button_data))
- file_info->fake_root = file_info->new_buttons;
-
/* We have assigned the info for the innermost button, i.e. the deepest directory.
* Now, go on to fetch the info for this directory's parent.
*/
file_info->file = file_info->parent_file;
file_info->first_directory = FALSE;
- if (!file_info->file)
+ if (!file_info->file || button_data->is_root)
{
/* No parent? Okay, we are done. */
gtk_path_bar_set_file_finish (file_info, TRUE);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]