[Xfce4-commits] <thunar:jannis/new-shortcuts-pane> Select the shortcut row when the corresponding folder is opened.
Jannis Pohlmann
noreply at xfce.org
Tue Jun 7 14:02:01 CEST 2011
Updating branch refs/heads/jannis/new-shortcuts-pane
to 5847cb1b9c13ef66a65859463c5ce172a49cc3b4 (commit)
from ea597b830327563d42c5c0f1a7a0a212d0ac5229 (commit)
commit 5847cb1b9c13ef66a65859463c5ce172a49cc3b4
Author: Jannis Pohlmann <jannis at xfce.org>
Date: Tue Jun 7 14:00:33 2011 +0200
Select the shortcut row when the corresponding folder is opened.
thunar/thunar-shortcut-row.c | 18 +++++
thunar/thunar-shortcut-row.h | 2 +
thunar/thunar-shortcuts-view.c | 134 ++++++++++++++++++++++++++++++----------
3 files changed, 121 insertions(+), 33 deletions(-)
diff --git a/thunar/thunar-shortcut-row.c b/thunar/thunar-shortcut-row.c
index 3acab7b..4a70625 100644
--- a/thunar/thunar-shortcut-row.c
+++ b/thunar/thunar-shortcut-row.c
@@ -1221,6 +1221,15 @@ thunar_shortcut_row_set_file (ThunarShortcutRow *row,
+GFile *
+thunar_shortcut_row_get_file (ThunarShortcutRow *row)
+{
+ _thunar_return_val_if_fail (THUNAR_IS_SHORTCUT_ROW (row), NULL);
+ return row->file;
+}
+
+
+
void
thunar_shortcut_row_set_volume (ThunarShortcutRow *row,
GVolume *volume)
@@ -1246,6 +1255,15 @@ thunar_shortcut_row_set_volume (ThunarShortcutRow *row,
+GVolume *
+thunar_shortcut_row_get_volume (ThunarShortcutRow *row)
+{
+ _thunar_return_val_if_fail (THUNAR_IS_SHORTCUT_ROW (row), NULL);
+ return row->volume;
+}
+
+
+
void
thunar_shortcut_row_set_icon_size (ThunarShortcutRow *row,
ThunarIconSize icon_size)
diff --git a/thunar/thunar-shortcut-row.h b/thunar/thunar-shortcut-row.h
index 3acbccf..c824aad 100644
--- a/thunar/thunar-shortcut-row.h
+++ b/thunar/thunar-shortcut-row.h
@@ -50,8 +50,10 @@ void thunar_shortcut_row_set_label (ThunarShortcutRow *row,
const gchar *label);
void thunar_shortcut_row_set_file (ThunarShortcutRow *row,
GFile *file);
+GFile *thunar_shortcut_row_get_file (ThunarShortcutRow *row);
void thunar_shortcut_row_set_volume (ThunarShortcutRow *row,
GVolume *volume);
+GVolume *thunar_shortcut_row_get_volume (ThunarShortcutRow *row);
void thunar_shortcut_row_set_icon_size (ThunarShortcutRow *row,
ThunarIconSize icon_size);
diff --git a/thunar/thunar-shortcuts-view.c b/thunar/thunar-shortcuts-view.c
index 2fb9aed..8a35a0e 100644
--- a/thunar/thunar-shortcuts-view.c
+++ b/thunar/thunar-shortcuts-view.c
@@ -74,37 +74,40 @@ typedef void (*ThunarShortcutsViewForeachRowFunc) (ThunarShortcutsView *view,
-static void thunar_shortcuts_view_constructed (GObject *object);
-static void thunar_shortcuts_view_finalize (GObject *object);
-static void thunar_shortcuts_view_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec);
-static void thunar_shortcuts_view_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec);
-static void thunar_shortcuts_view_row_inserted (ThunarShortcutsView *view,
- GtkTreePath *path,
- GtkTreeIter *iter,
- GtkTreeModel *model);
-static GtkWidget *thunar_shortcuts_view_get_expander_at (ThunarShortcutsView *view,
- gint index);
-static void thunar_shortcuts_view_row_activated (ThunarShortcutsView *view,
- ThunarFile *file,
- ThunarShortcutRow *row);
-static void thunar_shortcuts_view_row_state_changed (ThunarShortcutsView *view,
- GtkStateType previous_state,
- ThunarShortcutRow *row);
-static void thunar_shortcuts_view_open (ThunarShortcutsView *view,
- ThunarFile *file,
- gboolean new_window);
-static void thunar_shortcuts_view_foreach_row (ThunarShortcutsView *view,
- ThunarShortcutsViewForeachRowFunc func,
- gpointer user_data);
-static void thunar_shortcuts_view_unselect_rows (ThunarShortcutsView *view,
- ThunarShortcutRow *row,
- gpointer user_data);
+static void thunar_shortcuts_view_constructed (GObject *object);
+static void thunar_shortcuts_view_finalize (GObject *object);
+static void thunar_shortcuts_view_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec);
+static void thunar_shortcuts_view_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec);
+static void thunar_shortcuts_view_row_inserted (ThunarShortcutsView *view,
+ GtkTreePath *path,
+ GtkTreeIter *iter,
+ GtkTreeModel *model);
+static GtkWidget *thunar_shortcuts_view_get_expander_at (ThunarShortcutsView *view,
+ gint index);
+static void thunar_shortcuts_view_row_activated (ThunarShortcutsView *view,
+ ThunarFile *file,
+ ThunarShortcutRow *row);
+static void thunar_shortcuts_view_row_state_changed (ThunarShortcutsView *view,
+ GtkStateType previous_state,
+ ThunarShortcutRow *row);
+static void thunar_shortcuts_view_open (ThunarShortcutsView *view,
+ ThunarFile *file,
+ gboolean new_window);
+static void thunar_shortcuts_view_foreach_row (ThunarShortcutsView *view,
+ ThunarShortcutsViewForeachRowFunc func,
+ gpointer user_data);
+static void thunar_shortcuts_view_unselect_rows (ThunarShortcutsView *view,
+ ThunarShortcutRow *row,
+ gpointer user_data);
+static void thunar_shortcuts_view_update_selection_by_file (ThunarShortcutsView *view,
+ ThunarShortcutRow *row,
+ gpointer user_data);
@@ -544,8 +547,69 @@ thunar_shortcuts_view_unselect_rows (ThunarShortcutsView *view,
_thunar_return_if_fail (THUNAR_IS_SHORTCUT_ROW (selected_row));
/* reset the row state if it is not the selected row */
- if (row != selected_row)
- gtk_widget_set_state (GTK_WIDGET (row), GTK_STATE_NORMAL);
+ if (row != selected_row &&
+ gtk_widget_get_state (GTK_WIDGET (row)) == GTK_STATE_SELECTED)
+ {
+ gtk_widget_set_state (GTK_WIDGET (row), GTK_STATE_NORMAL);
+ }
+}
+
+
+
+static void
+thunar_shortcuts_view_update_selection_by_file (ThunarShortcutsView *view,
+ ThunarShortcutRow *row,
+ gpointer user_data)
+{
+ ThunarFile *file = THUNAR_FILE (user_data);
+ gboolean select_row = FALSE;
+ GVolume *row_volume;
+ GMount *mount;
+ GFile *mount_point;
+ GFile *row_file;
+
+ _thunar_return_if_fail (THUNAR_IS_SHORTCUTS_VIEW (view));
+ _thunar_return_if_fail (THUNAR_IS_SHORTCUT_ROW (row));
+ _thunar_return_if_fail (THUNAR_IS_FILE (file));
+
+ /* get the file and volume of the view */
+ row_file = thunar_shortcut_row_get_file (row);
+ row_volume = thunar_shortcut_row_get_volume (row);
+
+ /* check if we have a volume */
+ if (row_volume != NULL)
+ {
+ /* get the mount point */
+ mount = g_volume_get_mount (row_volume);
+ if (mount != NULL)
+ {
+ mount_point = g_mount_get_root (mount);
+
+ /* select the row if the mount point and the selected file are equal */
+ if (g_file_equal (file->gfile, mount_point))
+ select_row = TRUE;
+
+ /* release mount point and mount */
+ g_object_unref (mount_point);
+ g_object_unref (mount);
+ }
+ }
+ else if (row_file != NULL)
+ {
+ /* select the row if the bookmark and the selected file are equal */
+ if (g_file_equal (file->gfile, row_file))
+ select_row = TRUE;
+ }
+
+ /* apply the selection / unselection */
+ if (select_row)
+ {
+ gtk_widget_set_state (GTK_WIDGET (row), GTK_STATE_SELECTED);
+ }
+ else if (gtk_widget_get_state (GTK_WIDGET (row)) == GTK_STATE_SELECTED)
+ {
+ gtk_widget_set_state (GTK_WIDGET (row), GTK_STATE_NORMAL);
+ }
}
@@ -638,6 +702,10 @@ thunar_shortcuts_view_select_by_file (ThunarShortcutsView *view,
{
_thunar_return_if_fail (THUNAR_IS_SHORTCUTS_VIEW (view));
_thunar_return_if_fail (THUNAR_IS_FILE (file));
+
+ thunar_shortcuts_view_foreach_row (view,
+ thunar_shortcuts_view_update_selection_by_file,
+ file);
}
More information about the Xfce4-commits
mailing list