[Xfce4-commits] <thunar:nick/multiple-file-properties> Finalize permission handing for multiple files.
Nick Schermer
noreply at xfce.org
Sun Sep 16 17:32:02 CEST 2012
Updating branch refs/heads/nick/multiple-file-properties
to 0156959702eaf110e64532d44876033fc41fc617 (commit)
from 97ee43c303a0dea76f42ea17e933e24d2d1ca8cf (commit)
commit 0156959702eaf110e64532d44876033fc41fc617
Author: Nick Schermer <nick at xfce.org>
Date: Sun Sep 16 17:30:39 2012 +0200
Finalize permission handing for multiple files.
thunar/thunar-deep-count-job.c | 3 +-
thunar/thunar-permissions-chooser.c | 67 ++++++++++++++++++++++------------
2 files changed, 45 insertions(+), 25 deletions(-)
diff --git a/thunar/thunar-deep-count-job.c b/thunar/thunar-deep-count-job.c
index 5a8f7ed..6613dfe 100644
--- a/thunar/thunar-deep-count-job.c
+++ b/thunar/thunar-deep-count-job.c
@@ -1,6 +1,7 @@
/* vi:set sw=2 sts=2 ts=2 et ai: */
/*-
- * Copyright (c) 2009 Jannis Pohlmann <jannis at xfce.org>.
+ * Copyright (c) 2009 Jannis Pohlmann <jannis at xfce.org>
+ * Copyright (c) 2012 Nick Schermer <nick at xfce.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/thunar/thunar-permissions-chooser.c b/thunar/thunar-permissions-chooser.c
index 5ebcc93..552b5c2 100644
--- a/thunar/thunar-permissions-chooser.c
+++ b/thunar/thunar-permissions-chooser.c
@@ -2,6 +2,7 @@
/*-
* Copyright (c) 2005-2006 Benedikt Meurer <benny at xfce.org>
* Copyright (c) 2009 Jannis Pohlmann <jannis at xfce.org>
+ * Copyright (c) 2012 Nick Schermer <nick at xfce.org>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
@@ -84,7 +85,7 @@ static void thunar_permissions_chooser_set_property (GObject
static gint thunar_permissions_chooser_ask_recursive (ThunarPermissionsChooser *chooser);
static void thunar_permissions_chooser_change_group (ThunarPermissionsChooser *chooser,
guint32 gid);
-static void thunar_permissions_chooser_change_mode (ThunarPermissionsChooser *chooser,
+static gboolean thunar_permissions_chooser_change_mode (ThunarPermissionsChooser *chooser,
ThunarFileMode dir_mask,
ThunarFileMode dir_mode,
ThunarFileMode file_mask,
@@ -194,8 +195,6 @@ static void
thunar_permissions_chooser_init (ThunarPermissionsChooser *chooser)
{
GtkCellRenderer *renderer_text;
- GtkListStore *store;
- GtkTreeIter iter;
GtkWidget *separator;
GtkWidget *button;
GtkWidget *label;
@@ -206,13 +205,6 @@ thunar_permissions_chooser_init (ThunarPermissionsChooser *chooser)
/* setup the chooser */
gtk_container_set_border_width (GTK_CONTAINER (chooser), 12);
- /* allocate the store for the permission combos */
- store = gtk_list_store_new (1, G_TYPE_STRING);
- gtk_list_store_insert_with_values (store, &iter, 0, 0, _("None"), -1); /* 0000 */
- gtk_list_store_insert_with_values (store, &iter, 1, 0, _("Write only"), -1); /* 0002 */
- gtk_list_store_insert_with_values (store, &iter, 2, 0, _("Read only"), -1); /* 0004 */
- gtk_list_store_insert_with_values (store, &iter, 3, 0, _("Read & Write"), -1); /* 0006 */
-
/* allocate the shared renderer for the various combo boxes */
renderer_text = gtk_cell_renderer_text_new ();
@@ -246,7 +238,7 @@ thunar_permissions_chooser_init (ThunarPermissionsChooser *chooser)
gtk_table_attach (GTK_TABLE (chooser->table), label, 0, 1, row, row + 1, GTK_FILL, GTK_FILL, 0, 0);
gtk_widget_show (label);
- chooser->access_combos[2] = gtk_combo_box_new_with_model (GTK_TREE_MODEL (store));
+ chooser->access_combos[2] = gtk_combo_box_new ();
gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (chooser->access_combos[2]), renderer_text, TRUE);
gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT (chooser->access_combos[2]), renderer_text, "text", 0);
exo_binding_new (G_OBJECT (chooser), "mutable", G_OBJECT (chooser->access_combos[2]), "sensitive");
@@ -287,7 +279,7 @@ thunar_permissions_chooser_init (ThunarPermissionsChooser *chooser)
gtk_table_attach (GTK_TABLE (chooser->table), label, 0, 1, row, row + 1, GTK_FILL, GTK_FILL, 0, 0);
gtk_widget_show (label);
- chooser->access_combos[1] = gtk_combo_box_new_with_model (GTK_TREE_MODEL (store));
+ chooser->access_combos[1] = gtk_combo_box_new ();
gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (chooser->access_combos[1]), renderer_text, TRUE);
gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT (chooser->access_combos[1]), renderer_text, "text", 0);
exo_binding_new (G_OBJECT (chooser), "mutable", G_OBJECT (chooser->access_combos[1]), "sensitive");
@@ -310,7 +302,7 @@ thunar_permissions_chooser_init (ThunarPermissionsChooser *chooser)
gtk_table_attach (GTK_TABLE (chooser->table), label, 0, 1, row, row + 1, GTK_FILL, GTK_FILL, 0, 0);
gtk_widget_show (label);
- chooser->access_combos[0] = gtk_combo_box_new_with_model (GTK_TREE_MODEL (store));
+ chooser->access_combos[0] = gtk_combo_box_new ();
gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (chooser->access_combos[0]), renderer_text, TRUE);
gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT (chooser->access_combos[0]), renderer_text, "text", 0);
exo_binding_new (G_OBJECT (chooser), "mutable", G_OBJECT (chooser->access_combos[0]), "sensitive");
@@ -406,9 +398,6 @@ thunar_permissions_chooser_init (ThunarPermissionsChooser *chooser)
image = gtk_image_new_from_stock (GTK_STOCK_CANCEL, GTK_ICON_SIZE_MENU);
gtk_container_add (GTK_CONTAINER (button), image);
gtk_widget_show (image);
-
- /* release the shared combo store */
- g_object_unref (G_OBJECT (store));
}
@@ -705,7 +694,7 @@ thunar_permissions_chooser_change_group (ThunarPermissionsChooser *chooser,
-static void
+static gboolean
thunar_permissions_chooser_change_mode (ThunarPermissionsChooser *chooser,
ThunarFileMode dir_mask,
ThunarFileMode dir_mode,
@@ -717,8 +706,8 @@ thunar_permissions_chooser_change_mode (ThunarPermissionsChooser *chooser,
gint response;
GList *file_list;
- _thunar_return_if_fail (THUNAR_IS_PERMISSIONS_CHOOSER (chooser));
- _thunar_return_if_fail (chooser->files != NULL);
+ _thunar_return_val_if_fail (THUNAR_IS_PERMISSIONS_CHOOSER (chooser), FALSE);
+ _thunar_return_val_if_fail (chooser->files != NULL, FALSE);
/* check if we should operate recursively */
if (thunar_permissions_chooser_has_directory (chooser))
@@ -736,7 +725,7 @@ thunar_permissions_chooser_change_mode (ThunarPermissionsChooser *chooser,
default: /* cancelled by the user */
thunar_permissions_chooser_file_changed (chooser);
- return;
+ return FALSE;
}
}
@@ -746,6 +735,8 @@ thunar_permissions_chooser_change_mode (ThunarPermissionsChooser *chooser,
thunar_permissions_chooser_job_start (chooser, job, recursive);
g_list_free_full (file_list, g_object_unref);
g_object_unref (job);
+
+ return TRUE;
}
@@ -759,13 +750,21 @@ thunar_permissions_chooser_access_changed (ThunarPermissionsChooser *chooser,
ThunarFileMode dir_mask;
ThunarFileMode dir_mode;
guint n;
+ gint active_mode;
+ GtkTreeModel *model;
+ GtkTreeIter iter;
_thunar_return_if_fail (THUNAR_IS_PERMISSIONS_CHOOSER (chooser));
_thunar_return_if_fail (GTK_IS_COMBO_BOX (combo));
+ /* leave if the active mode is varying */
+ active_mode = gtk_combo_box_get_active (GTK_COMBO_BOX (combo));
+ if (active_mode > 3)
+ return;
+
/* determine the new mode from the combo box */
for (n = 0; n < G_N_ELEMENTS (chooser->access_combos) && chooser->access_combos[n] != combo ; ++n);
- dir_mode = file_mode = (gtk_combo_box_get_active (GTK_COMBO_BOX (combo)) << 1) << (n * 3);
+ dir_mode = file_mode = (active_mode << 1) << (n * 3);
dir_mask = file_mask = 0006 << (n * 3);
/* keep exec bit in sync for folders */
@@ -778,7 +777,13 @@ thunar_permissions_chooser_access_changed (ThunarPermissionsChooser *chooser,
}
/* change the permissions */
- thunar_permissions_chooser_change_mode (chooser, dir_mask, dir_mode, file_mask, file_mode);
+ if (thunar_permissions_chooser_change_mode (chooser, dir_mask, dir_mode, file_mask, file_mode))
+ {
+ /* for better feedback remove the varying item */
+ model = gtk_combo_box_get_model (GTK_COMBO_BOX (combo));
+ if (gtk_tree_model_get_iter_from_string (model, &iter, "4"))
+ gtk_list_store_remove (GTK_LIST_STORE (model), &iter);
+ }
}
@@ -836,9 +841,9 @@ thunar_permissions_chooser_file_changed (ThunarPermissionsChooser *chooser)
gchar buffer[1024];
guint n;
guint n_files = 0;
-
gint modes[3] = { 0, };
gint file_modes[3];
+ GtkListStore *access_store;
_thunar_return_if_fail (THUNAR_IS_PERMISSIONS_CHOOSER (chooser));
@@ -872,7 +877,7 @@ thunar_permissions_chooser_file_changed (ThunarPermissionsChooser *chooser)
for (n = 0; n < 3; n++)
if (file_modes[n] != modes[n])
- modes[n] = -1;
+ modes[n] = 4;
}
n_files++;
@@ -978,8 +983,22 @@ thunar_permissions_chooser_file_changed (ThunarPermissionsChooser *chooser)
for (n = 0; n < G_N_ELEMENTS (chooser->access_combos); ++n)
{
g_signal_handlers_block_by_func (G_OBJECT (chooser->access_combos[n]), thunar_permissions_chooser_access_changed, chooser);
+
+ /* allocate the store for the permission combos */
+ access_store = gtk_list_store_new (1, G_TYPE_STRING);
+ gtk_list_store_insert_with_values (access_store, NULL, 0, 0, _("None"), -1); /* 0000 */
+ gtk_list_store_insert_with_values (access_store, NULL, 1, 0, _("Write only"), -1); /* 0002 */
+ gtk_list_store_insert_with_values (access_store, NULL, 2, 0, _("Read only"), -1); /* 0004 */
+ gtk_list_store_insert_with_values (access_store, NULL, 3, 0, _("Read & Write"), -1); /* 0006 */
+ if (modes[n] == 4)
+ gtk_list_store_insert_with_values (access_store, NULL, 4, 0, _("Varying (no change)"), -1);
+
+ gtk_combo_box_set_model (GTK_COMBO_BOX (chooser->access_combos[n]), GTK_TREE_MODEL (access_store));
gtk_combo_box_set_active (GTK_COMBO_BOX (chooser->access_combos[n]), modes[n]);
+
g_signal_handlers_unblock_by_func (G_OBJECT (chooser->access_combos[n]), thunar_permissions_chooser_access_changed, chooser);
+
+ g_object_unref (G_OBJECT (access_store));
}
/* update the program setting based on the mode (only visible for regular files, allowed for execution) */
More information about the Xfce4-commits
mailing list