[Xfce4-commits] <thunar:master> Hide shortcut pane header when there are not items.
Nick Schermer
noreply at xfce.org
Thu Dec 6 22:40:01 CET 2012
Updating branch refs/heads/master
to d80feccc552979036dc8a127033e3c97466b5215 (commit)
from 56842953b63f8435c8a068d5cc444629595efcdd (commit)
commit d80feccc552979036dc8a127033e3c97466b5215
Author: Nick Schermer <nick at xfce.org>
Date: Thu Dec 6 22:38:57 2012 +0100
Hide shortcut pane header when there are not items.
thunar/thunar-shortcuts-model.c | 101 ++++++++++++++++++++++++++++++++++++---
thunar/thunar-shortcuts-view.c | 2 +-
2 files changed, 95 insertions(+), 8 deletions(-)
diff --git a/thunar/thunar-shortcuts-model.c b/thunar/thunar-shortcuts-model.c
index ac099f0..2ff7e89 100644
--- a/thunar/thunar-shortcuts-model.c
+++ b/thunar/thunar-shortcuts-model.c
@@ -114,6 +114,7 @@ static gboolean thunar_shortcuts_model_drag_data_get (GtkTreeDrag
GtkSelectionData *selection_data);
static gboolean thunar_shortcuts_model_drag_data_delete (GtkTreeDragSource *source,
GtkTreePath *path);
+static void thunar_shortcuts_model_header_visibility (ThunarShortcutsModel *model);
static void thunar_shortcuts_model_shortcut_places (ThunarShortcutsModel *model);
static void thunar_shortcuts_model_shortcut_network (ThunarShortcutsModel *model);
static gboolean thunar_shortcuts_model_devices_load (gpointer data);
@@ -393,6 +394,9 @@ thunar_shortcuts_model_set_property (GObject *object,
gtk_tree_path_free (path);
}
}
+
+ /* update header visibility */
+ thunar_shortcuts_model_header_visibility (model);
break;
default:
@@ -553,10 +557,7 @@ thunar_shortcuts_model_get_value (GtkTreeModel *tree_model,
case THUNAR_SHORTCUTS_MODEL_COLUMN_VISIBLE:
g_value_init (value, G_TYPE_BOOLEAN);
- if (shortcut->device == NULL)
- g_value_set_boolean (value, !shortcut->hidden);
- else
- g_value_set_boolean (value, !thunar_device_get_hidden (shortcut->device));
+ g_value_set_boolean (value, !shortcut->hidden);
break;
case THUNAR_SHORTCUTS_MODEL_COLUMN_NAME:
@@ -817,6 +818,66 @@ thunar_shortcuts_model_drag_data_delete (GtkTreeDragSource *source,
+static void
+thunar_shortcuts_model_header_visibility (ThunarShortcutsModel *model)
+{
+ GList *lp;
+ ThunarShortcut *shortcut;
+ ThunarShortcut *header;
+ guint n_children = 0;
+ GList *lp_header = NULL;
+ gint idx_header = 0;
+ gint i;
+ GtkTreePath *path;
+ GtkTreeIter iter;
+
+ _thunar_return_if_fail (THUNAR_IS_SHORTCUTS_MODEL (model));
+
+ for (lp = model->shortcuts, i = 0; lp != NULL; lp = lp->next, i++)
+ {
+ shortcut = lp->data;
+
+ if ((shortcut->group & THUNAR_SHORTCUT_GROUP_HEADER) != 0)
+ {
+ if (lp_header != NULL)
+ {
+ update_header:
+
+ header = lp_header->data;
+ if (header->hidden != (n_children == 0))
+ {
+ /* set new visibility */
+ header->hidden = (n_children == 0);
+
+ /* notify view */
+ path = gtk_tree_path_new_from_indices (idx_header, -1);
+ GTK_TREE_ITER_INIT (iter, model->stamp, lp_header);
+ gtk_tree_model_row_changed (GTK_TREE_MODEL (model), path, &iter);
+ gtk_tree_path_free (path);
+ }
+
+ if (lp == NULL)
+ return;
+ }
+
+ /* reset for new */
+ idx_header = i;
+ lp_header = lp;
+ n_children = 0;
+ }
+ else if (!shortcut->hidden)
+ {
+ n_children++;
+ }
+ }
+
+ _thunar_assert (lp == NULL);
+ if (lp_header != NULL)
+ goto update_header;
+}
+
+
+
static gboolean
thunar_shortcuts_model_devices_load (gpointer data)
{
@@ -849,7 +910,7 @@ thunar_shortcuts_model_devices_load (gpointer data)
devices = thunar_device_monitor_get_devices (model->device_monitor);
for (lp = devices; lp != NULL; lp = lp->next)
{
- thunar_shortcuts_model_device_added (model->device_monitor, lp->data, model);
+ thunar_shortcuts_model_device_added (NULL, lp->data, model);
g_object_unref (G_OBJECT (lp->data));
}
g_list_free (devices);
@@ -861,6 +922,8 @@ thunar_shortcuts_model_devices_load (gpointer data)
g_signal_connect (model->device_monitor, "device-removed", G_CALLBACK (thunar_shortcuts_model_device_removed), model);
g_signal_connect (model->device_monitor, "device-changed", G_CALLBACK (thunar_shortcuts_model_device_changed), model);
+ thunar_shortcuts_model_header_visibility (model);
+
model->devices_monitor_idle_id = 0;
return FALSE;
@@ -1175,6 +1238,7 @@ thunar_shortcuts_model_load_line (GFile *file_path,
shortcut->gicon = g_themed_icon_new ("folder-remote");
shortcut->location = g_object_ref (file_path);
shortcut->sort_id = row_num;
+ shortcut->hidden = thunar_shortcuts_model_get_hidden (model, shortcut);
shortcut->name = g_strdup (name);
/* append the shortcut to the list */
@@ -1198,6 +1262,9 @@ thunar_shortcuts_model_load (gpointer data)
thunar_shortcuts_model_load_line,
model);
+ /* update the visibility */
+ thunar_shortcuts_model_header_visibility (model);
+
GDK_THREADS_LEAVE ();
model->bookmarks_idle_id = 0;
@@ -1406,8 +1473,8 @@ thunar_shortcuts_model_device_added (ThunarDeviceMonitor *device_monitor,
{
ThunarShortcut *shortcut;
- _thunar_return_if_fail (THUNAR_DEVICE_MONITOR (device_monitor));
- _thunar_return_if_fail (model->device_monitor == device_monitor);
+ _thunar_return_if_fail (device_monitor == NULL || THUNAR_DEVICE_MONITOR (device_monitor));
+ _thunar_return_if_fail (device_monitor == NULL || model->device_monitor == device_monitor);
_thunar_return_if_fail (THUNAR_IS_DEVICE (device));
_thunar_return_if_fail (THUNAR_IS_SHORTCUTS_MODEL (model));
@@ -1433,6 +1500,11 @@ thunar_shortcuts_model_device_added (ThunarDeviceMonitor *device_monitor,
/* insert in the model */
thunar_shortcuts_model_add_shortcut (model, shortcut);
+
+ /* header visibility if call is from monitor */
+ if (device_monitor != NULL
+ && !shortcut->hidden)
+ thunar_shortcuts_model_header_visibility (model);
}
@@ -1475,6 +1547,7 @@ thunar_shortcuts_model_device_changed (ThunarDeviceMonitor *device_monitor,
gint idx;
GtkTreePath *path;
ThunarShortcut *shortcut;
+ gboolean update_header = FALSE;
_thunar_return_if_fail (THUNAR_DEVICE_MONITOR (device_monitor));
_thunar_return_if_fail (model->device_monitor == device_monitor);
@@ -1498,6 +1571,13 @@ thunar_shortcuts_model_device_changed (ThunarDeviceMonitor *device_monitor,
g_free (shortcut->tooltip);
shortcut->tooltip = NULL;
+ /* hidden state */
+ if (shortcut->hidden != thunar_device_get_hidden (device))
+ {
+ shortcut->hidden = thunar_device_get_hidden (device);
+ update_header = TRUE;
+ }
+
/* generate an iterator for the path */
GTK_TREE_ITER_INIT (iter, model->stamp, lp);
@@ -1506,6 +1586,10 @@ thunar_shortcuts_model_device_changed (ThunarDeviceMonitor *device_monitor,
gtk_tree_model_row_changed (GTK_TREE_MODEL (model), path, &iter);
gtk_tree_path_free (path);
}
+
+ /* header visibility */
+ if (update_header)
+ thunar_shortcuts_model_header_visibility (model);
}
@@ -2125,4 +2209,7 @@ thunar_shortcuts_model_set_hidden (ThunarShortcutsModel *model,
/* store new list */
g_object_set (G_OBJECT (model->preferences), "hidden-bookmarks", bookmarks, NULL);
g_strfreev (bookmarks);
+
+ /* header visibility */
+ thunar_shortcuts_model_header_visibility (model);
}
diff --git a/thunar/thunar-shortcuts-view.c b/thunar/thunar-shortcuts-view.c
index d690260..1d57020 100644
--- a/thunar/thunar-shortcuts-view.c
+++ b/thunar/thunar-shortcuts-view.c
@@ -468,7 +468,7 @@ thunar_shortcuts_view_button_press_event (GtkWidget *widget,
/* release the path */
gtk_tree_path_free (path);
}
- else
+ else if (event->button == 3)
{
thunar_shortcuts_view_context_menu_visibility (view, event, model);
result = TRUE;
More information about the Xfce4-commits
mailing list