summaryrefslogtreecommitdiff
path: root/src/nautilus-properties-window.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/nautilus-properties-window.c')
-rw-r--r--src/nautilus-properties-window.c8771
1 files changed, 4661 insertions, 4110 deletions
diff --git a/src/nautilus-properties-window.c b/src/nautilus-properties-window.c
index 2fb33c74e..1ef0dd782 100644
--- a/src/nautilus-properties-window.c
+++ b/src/nautilus-properties-window.c
@@ -1,24 +1,23 @@
-
/* fm-properties-window.c - window that lets user modify file properties
-
- Copyright (C) 2000 Eazel, Inc.
-
- The Gnome Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The Gnome Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the Gnome Library; see the file COPYING.LIB. If not,
- see <http://www.gnu.org/licenses/>.
-
- Authors: Darin Adler <darin@bentspoon.com>
-*/
+ *
+ * Copyright (C) 2000 Eazel, Inc.
+ *
+ * The Gnome Library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * The Gnome Library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with the Gnome Library; see the file COPYING.LIB. If not,
+ * see <http://www.gnu.org/licenses/>.
+ *
+ * Authors: Darin Adler <darin@bentspoon.com>
+ */
#include <config.h>
@@ -73,106 +72,113 @@
static GHashTable *windows;
static GHashTable *pending_lists;
-typedef struct {
- NautilusFile *file;
- char *owner;
- GtkWindow *window;
- unsigned int timeout;
- gboolean cancelled;
+typedef struct
+{
+ NautilusFile *file;
+ char *owner;
+ GtkWindow *window;
+ unsigned int timeout;
+ gboolean cancelled;
} OwnerChange;
-typedef struct {
- NautilusFile *file;
- char *group;
- GtkWindow *window;
- unsigned int timeout;
- gboolean cancelled;
+typedef struct
+{
+ NautilusFile *file;
+ char *group;
+ GtkWindow *window;
+ unsigned int timeout;
+ gboolean cancelled;
} GroupChange;
-struct NautilusPropertiesWindowDetails {
- GList *original_files;
- GList *target_files;
-
- GtkNotebook *notebook;
-
- GtkGrid *basic_grid;
+struct NautilusPropertiesWindowDetails
+{
+ GList *original_files;
+ GList *target_files;
+
+ GtkNotebook *notebook;
- GtkWidget *icon_button;
- GtkWidget *icon_image;
- GtkWidget *icon_chooser;
+ GtkGrid *basic_grid;
- GtkLabel *name_label;
- GtkWidget *name_field;
- unsigned int name_row;
- char *pending_name;
+ GtkWidget *icon_button;
+ GtkWidget *icon_image;
+ GtkWidget *icon_chooser;
- GtkLabel *directory_contents_title_field;
- GtkLabel *directory_contents_value_field;
- GtkWidget *directory_contents_spinner;
- guint update_directory_contents_timeout_id;
- guint update_files_timeout_id;
+ GtkLabel *name_label;
+ GtkWidget *name_field;
+ unsigned int name_row;
+ char *pending_name;
- GroupChange *group_change;
- OwnerChange *owner_change;
+ GtkLabel *directory_contents_title_field;
+ GtkLabel *directory_contents_value_field;
+ GtkWidget *directory_contents_spinner;
+ guint update_directory_contents_timeout_id;
+ guint update_files_timeout_id;
- GList *permission_buttons;
- GList *permission_combos;
- GList *change_permission_combos;
- GHashTable *initial_permissions;
- gboolean has_recursive_apply;
+ GroupChange *group_change;
+ OwnerChange *owner_change;
- GList *value_fields;
+ GList *permission_buttons;
+ GList *permission_combos;
+ GList *change_permission_combos;
+ GHashTable *initial_permissions;
+ gboolean has_recursive_apply;
- GList *mime_list;
+ GList *value_fields;
- gboolean deep_count_finished;
- GList *deep_count_files;
- guint deep_count_spinner_timeout_id;
+ GList *mime_list;
- guint total_count;
- goffset total_size;
+ gboolean deep_count_finished;
+ GList *deep_count_files;
+ guint deep_count_spinner_timeout_id;
- guint long_operation_underway;
+ guint total_count;
+ goffset total_size;
- GList *changed_files;
+ guint long_operation_underway;
- guint64 volume_capacity;
- guint64 volume_free;
- guint64 volume_used;
+ GList *changed_files;
+
+ guint64 volume_capacity;
+ guint64 volume_free;
+ guint64 volume_used;
};
-enum {
- COLUMN_NAME,
- COLUMN_VALUE,
- COLUMN_USE_ORIGINAL,
- COLUMN_ID,
- NUM_COLUMNS
+enum
+{
+ COLUMN_NAME,
+ COLUMN_VALUE,
+ COLUMN_USE_ORIGINAL,
+ COLUMN_ID,
+ NUM_COLUMNS
};
-typedef struct {
- GList *original_files;
- GList *target_files;
- GtkWidget *parent_widget;
- GtkWindow *parent_window;
- char *startup_id;
- char *pending_key;
- GHashTable *pending_files;
+typedef struct
+{
+ GList *original_files;
+ GList *target_files;
+ GtkWidget *parent_widget;
+ GtkWindow *parent_window;
+ char *startup_id;
+ char *pending_key;
+ GHashTable *pending_files;
} StartupData;
/* drag and drop definitions */
-enum {
- TARGET_URI_LIST,
- TARGET_GNOME_URI_LIST,
+enum
+{
+ TARGET_URI_LIST,
+ TARGET_GNOME_URI_LIST,
};
-static const GtkTargetEntry target_table[] = {
- { "text/uri-list", 0, TARGET_URI_LIST },
- { "x-special/gnome-icon-list", 0, TARGET_GNOME_URI_LIST },
+static const GtkTargetEntry target_table[] =
+{
+ { "text/uri-list", 0, TARGET_URI_LIST },
+ { "x-special/gnome-icon-list", 0, TARGET_GNOME_URI_LIST },
};
-#define DIRECTORY_CONTENTS_UPDATE_INTERVAL 200 /* milliseconds */
-#define FILES_UPDATE_INTERVAL 200 /* milliseconds */
+#define DIRECTORY_CONTENTS_UPDATE_INTERVAL 200 /* milliseconds */
+#define FILES_UPDATE_INTERVAL 200 /* milliseconds */
/*
* A timeout before changes through the user/group combo box will be applied.
@@ -182,1369 +188,1528 @@ static const GtkTargetEntry target_table[] = {
* Both combos react on changes by scheduling a new change and unscheduling
* or cancelling old pending changes.
*/
-#define CHOWN_CHGRP_TIMEOUT 300 /* milliseconds */
+#define CHOWN_CHGRP_TIMEOUT 300 /* milliseconds */
-static void schedule_directory_contents_update (NautilusPropertiesWindow *window);
+static void schedule_directory_contents_update (NautilusPropertiesWindow *window);
static void directory_contents_value_field_update (NautilusPropertiesWindow *window);
-static void file_changed_callback (NautilusFile *file,
- gpointer user_data);
-static void permission_button_update (NautilusPropertiesWindow *window,
- GtkToggleButton *button);
-static void permission_combo_update (NautilusPropertiesWindow *window,
- GtkComboBox *combo);
-static void value_field_update (NautilusPropertiesWindow *window,
- GtkLabel *field);
-static void properties_window_update (NautilusPropertiesWindow *window,
- GList *files);
-static void is_directory_ready_callback (NautilusFile *file,
- gpointer data);
-static void cancel_group_change_callback (GroupChange *change);
-static void cancel_owner_change_callback (OwnerChange *change);
-static void parent_widget_destroyed_callback (GtkWidget *widget,
- gpointer callback_data);
-static void select_image_button_callback (GtkWidget *widget,
- NautilusPropertiesWindow *properties_window);
-static void set_icon (const char *icon_path,
- NautilusPropertiesWindow *properties_window);
-static void remove_pending (StartupData *data,
- gboolean cancel_call_when_ready,
- gboolean cancel_timed_wait,
- gboolean cancel_destroy_handler);
-static void append_extension_pages (NautilusPropertiesWindow *window);
-
-static gboolean name_field_focus_out (NautilusEntry *name_field,
- GdkEventFocus *event,
- gpointer callback_data);
-static void name_field_activate (NautilusEntry *name_field,
- gpointer callback_data);
-static GtkLabel *attach_ellipsizing_value_label (GtkGrid *grid,
- GtkWidget *sibling,
- const char *initial_text);
-
-static GtkWidget* create_pie_widget (NautilusPropertiesWindow *window);
+static void file_changed_callback (NautilusFile *file,
+ gpointer user_data);
+static void permission_button_update (NautilusPropertiesWindow *window,
+ GtkToggleButton *button);
+static void permission_combo_update (NautilusPropertiesWindow *window,
+ GtkComboBox *combo);
+static void value_field_update (NautilusPropertiesWindow *window,
+ GtkLabel *field);
+static void properties_window_update (NautilusPropertiesWindow *window,
+ GList *files);
+static void is_directory_ready_callback (NautilusFile *file,
+ gpointer data);
+static void cancel_group_change_callback (GroupChange *change);
+static void cancel_owner_change_callback (OwnerChange *change);
+static void parent_widget_destroyed_callback (GtkWidget *widget,
+ gpointer callback_data);
+static void select_image_button_callback (GtkWidget *widget,
+ NautilusPropertiesWindow *properties_window);
+static void set_icon (const char *icon_path,
+ NautilusPropertiesWindow *properties_window);
+static void remove_pending (StartupData *data,
+ gboolean cancel_call_when_ready,
+ gboolean cancel_timed_wait,
+ gboolean cancel_destroy_handler);
+static void append_extension_pages (NautilusPropertiesWindow *window);
+
+static gboolean name_field_focus_out (NautilusEntry *name_field,
+ GdkEventFocus *event,
+ gpointer callback_data);
+static void name_field_activate (NautilusEntry *name_field,
+ gpointer callback_data);
+static GtkLabel *attach_ellipsizing_value_label (GtkGrid *grid,
+ GtkWidget *sibling,
+ const char *initial_text);
+
+static GtkWidget *create_pie_widget (NautilusPropertiesWindow *window);
G_DEFINE_TYPE (NautilusPropertiesWindow, nautilus_properties_window, GTK_TYPE_DIALOG);
static gboolean
is_multi_file_window (NautilusPropertiesWindow *window)
{
- GList *l;
- int count;
-
- count = 0;
-
- for (l = window->details->original_files; l != NULL; l = l->next) {
- if (!nautilus_file_is_gone (NAUTILUS_FILE (l->data))) {
- count++;
- if (count > 1) {
- return TRUE;
- }
- }
- }
+ GList *l;
+ int count;
- return FALSE;
+ count = 0;
+
+ for (l = window->details->original_files; l != NULL; l = l->next)
+ {
+ if (!nautilus_file_is_gone (NAUTILUS_FILE (l->data)))
+ {
+ count++;
+ if (count > 1)
+ {
+ return TRUE;
+ }
+ }
+ }
+
+ return FALSE;
}
static int
get_not_gone_original_file_count (NautilusPropertiesWindow *window)
{
- GList *l;
- int count;
+ GList *l;
+ int count;
- count = 0;
+ count = 0;
- for (l = window->details->original_files; l != NULL; l = l->next) {
- if (!nautilus_file_is_gone (NAUTILUS_FILE (l->data))) {
- count++;
- }
- }
+ for (l = window->details->original_files; l != NULL; l = l->next)
+ {
+ if (!nautilus_file_is_gone (NAUTILUS_FILE (l->data)))
+ {
+ count++;
+ }
+ }
- return count;
+ return count;
}
static NautilusFile *
-get_original_file (NautilusPropertiesWindow *window)
+get_original_file (NautilusPropertiesWindow *window)
{
- g_return_val_if_fail (!is_multi_file_window (window), NULL);
+ g_return_val_if_fail (!is_multi_file_window (window), NULL);
- if (window->details->original_files == NULL) {
- return NULL;
- }
+ if (window->details->original_files == NULL)
+ {
+ return NULL;
+ }
- return NAUTILUS_FILE (window->details->original_files->data);
+ return NAUTILUS_FILE (window->details->original_files->data);
}
static NautilusFile *
get_target_file_for_original_file (NautilusFile *file)
{
- NautilusFile *target_file;
- g_autoptr (GFile) location;
- g_autofree char *uri_to_display;
+ NautilusFile *target_file;
+ g_autoptr (GFile) location;
+ g_autofree char *uri_to_display;
- uri_to_display = nautilus_file_get_target_uri (file);
- location = g_file_new_for_uri (uri_to_display);
- target_file = nautilus_file_get (location);
+ uri_to_display = nautilus_file_get_target_uri (file);
+ location = g_file_new_for_uri (uri_to_display);
+ target_file = nautilus_file_get (location);
- return target_file;
+ return target_file;
}
static NautilusFile *
get_target_file (NautilusPropertiesWindow *window)
{
- return NAUTILUS_FILE (window->details->target_files->data);
+ return NAUTILUS_FILE (window->details->target_files->data);
}
static void
-add_prompt (GtkWidget *vbox, const char *prompt_text, gboolean pack_at_start)
-{
- GtkWidget *prompt;
-
- prompt = gtk_label_new (prompt_text);
- gtk_label_set_justify (GTK_LABEL (prompt), GTK_JUSTIFY_LEFT);
- gtk_label_set_line_wrap (GTK_LABEL (prompt), TRUE);
- gtk_widget_show (prompt);
- if (pack_at_start) {
- gtk_box_pack_start (GTK_BOX (vbox), prompt, FALSE, FALSE, 0);
- } else {
- gtk_box_pack_end (GTK_BOX (vbox), prompt, FALSE, FALSE, 0);
- }
+add_prompt (GtkWidget *vbox,
+ const char *prompt_text,
+ gboolean pack_at_start)
+{
+ GtkWidget *prompt;
+
+ prompt = gtk_label_new (prompt_text);
+ gtk_label_set_justify (GTK_LABEL (prompt), GTK_JUSTIFY_LEFT);
+ gtk_label_set_line_wrap (GTK_LABEL (prompt), TRUE);
+ gtk_widget_show (prompt);
+ if (pack_at_start)
+ {
+ gtk_box_pack_start (GTK_BOX (vbox), prompt, FALSE, FALSE, 0);
+ }
+ else
+ {
+ gtk_box_pack_end (GTK_BOX (vbox), prompt, FALSE, FALSE, 0);
+ }
}
static void
-add_prompt_and_separator (GtkWidget *vbox, const char *prompt_text)
+add_prompt_and_separator (GtkWidget *vbox,
+ const char *prompt_text)
{
- GtkWidget *separator_line;
+ GtkWidget *separator_line;
- add_prompt (vbox, prompt_text, FALSE);
+ add_prompt (vbox, prompt_text, FALSE);
- separator_line = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL);
- gtk_widget_show (separator_line);
- gtk_box_pack_end (GTK_BOX (vbox), separator_line, TRUE, TRUE, 2*ROW_PAD);
+ separator_line = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL);
+ gtk_widget_show (separator_line);
+ gtk_box_pack_end (GTK_BOX (vbox), separator_line, TRUE, TRUE, 2 * ROW_PAD);
}
static void
-get_image_for_properties_window (NautilusPropertiesWindow *window,
- char **icon_name,
- GdkPixbuf **icon_pixbuf)
-{
- NautilusIconInfo *icon, *new_icon;
- GList *l;
- gint icon_scale;
-
- icon = NULL;
- icon_scale = gtk_widget_get_scale_factor (GTK_WIDGET (window->details->notebook));
-
- for (l = window->details->original_files; l != NULL; l = l->next) {
- NautilusFile *file;
-
- file = NAUTILUS_FILE (l->data);
-
- if (!icon) {
- icon = nautilus_file_get_icon (file, NAUTILUS_CANVAS_ICON_SIZE_SMALL, icon_scale,
- NAUTILUS_FILE_ICON_FLAGS_USE_THUMBNAILS |
- NAUTILUS_FILE_ICON_FLAGS_IGNORE_VISITING);
- } else {
- new_icon = nautilus_file_get_icon (file, NAUTILUS_CANVAS_ICON_SIZE_SMALL, icon_scale,
- NAUTILUS_FILE_ICON_FLAGS_USE_THUMBNAILS |
- NAUTILUS_FILE_ICON_FLAGS_IGNORE_VISITING);
- if (!new_icon || new_icon != icon) {
- g_object_unref (icon);
- g_object_unref (new_icon);
- icon = NULL;
- break;
- }
- g_object_unref (new_icon);
- }
- }
-
- if (!icon) {
- icon = nautilus_icon_info_lookup_from_name ("text-x-generic",
- NAUTILUS_CANVAS_ICON_SIZE_STANDARD,
- icon_scale);
- }
-
- if (icon_name != NULL) {
- *icon_name = g_strdup (nautilus_icon_info_get_used_name (icon));
- }
-
- if (icon_pixbuf != NULL) {
- *icon_pixbuf = nautilus_icon_info_get_pixbuf_at_size (icon, NAUTILUS_CANVAS_ICON_SIZE_SMALL);
- }
-
- g_object_unref (icon);
+get_image_for_properties_window (NautilusPropertiesWindow *window,
+ char **icon_name,
+ GdkPixbuf **icon_pixbuf)
+{
+ NautilusIconInfo *icon, *new_icon;
+ GList *l;
+ gint icon_scale;
+
+ icon = NULL;
+ icon_scale = gtk_widget_get_scale_factor (GTK_WIDGET (window->details->notebook));
+
+ for (l = window->details->original_files; l != NULL; l = l->next)
+ {
+ NautilusFile *file;
+
+ file = NAUTILUS_FILE (l->data);
+
+ if (!icon)
+ {
+ icon = nautilus_file_get_icon (file, NAUTILUS_CANVAS_ICON_SIZE_SMALL, icon_scale,
+ NAUTILUS_FILE_ICON_FLAGS_USE_THUMBNAILS |
+ NAUTILUS_FILE_ICON_FLAGS_IGNORE_VISITING);
+ }
+ else
+ {
+ new_icon = nautilus_file_get_icon (file, NAUTILUS_CANVAS_ICON_SIZE_SMALL, icon_scale,
+ NAUTILUS_FILE_ICON_FLAGS_USE_THUMBNAILS |
+ NAUTILUS_FILE_ICON_FLAGS_IGNORE_VISITING);
+ if (!new_icon || new_icon != icon)
+ {
+ g_object_unref (icon);
+ g_object_unref (new_icon);
+ icon = NULL;
+ break;
+ }
+ g_object_unref (new_icon);
+ }
+ }
+
+ if (!icon)
+ {
+ icon = nautilus_icon_info_lookup_from_name ("text-x-generic",
+ NAUTILUS_CANVAS_ICON_SIZE_STANDARD,
+ icon_scale);
+ }
+
+ if (icon_name != NULL)
+ {
+ *icon_name = g_strdup (nautilus_icon_info_get_used_name (icon));
+ }
+
+ if (icon_pixbuf != NULL)
+ {
+ *icon_pixbuf = nautilus_icon_info_get_pixbuf_at_size (icon, NAUTILUS_CANVAS_ICON_SIZE_SMALL);
+ }
+
+ g_object_unref (icon);
}
static void
update_properties_window_icon (NautilusPropertiesWindow *window)
{
- GdkPixbuf *pixbuf;
- cairo_surface_t *surface;
- char *name;
+ GdkPixbuf *pixbuf;
+ cairo_surface_t *surface;
+ char *name;
- get_image_for_properties_window (window, &name, &pixbuf);
+ get_image_for_properties_window (window, &name, &pixbuf);
- if (name != NULL) {
- gtk_window_set_icon_name (GTK_WINDOW (window), name);
- } else {
- gtk_window_set_icon (GTK_WINDOW (window), pixbuf);
- }
+ if (name != NULL)
+ {
+ gtk_window_set_icon_name (GTK_WINDOW (window), name);
+ }
+ else
+ {
+ gtk_window_set_icon (GTK_WINDOW (window), pixbuf);
+ }
- surface = gdk_cairo_surface_create_from_pixbuf (pixbuf, gtk_widget_get_scale_factor (GTK_WIDGET (window)),
- gtk_widget_get_window (GTK_WIDGET (window)));
- gtk_image_set_from_surface (GTK_IMAGE (window->details->icon_image), surface);
+ surface = gdk_cairo_surface_create_from_pixbuf (pixbuf, gtk_widget_get_scale_factor (GTK_WIDGET (window)),
+ gtk_widget_get_window (GTK_WIDGET (window)));
+ gtk_image_set_from_surface (GTK_IMAGE (window->details->icon_image), surface);
- g_free (name);
- g_object_unref (pixbuf);
- cairo_surface_destroy (surface);
+ g_free (name);
+ g_object_unref (pixbuf);
+ cairo_surface_destroy (surface);
}
/* utility to test if a uri refers to a local image */
static gboolean
uri_is_local_image (const char *uri)
{
- GdkPixbuf *pixbuf;
- char *image_path;
-
- image_path = g_filename_from_uri (uri, NULL, NULL);
- if (image_path == NULL) {
- return FALSE;
- }
+ GdkPixbuf *pixbuf;
+ char *image_path;
+
+ image_path = g_filename_from_uri (uri, NULL, NULL);
+ if (image_path == NULL)
+ {
+ return FALSE;
+ }
- pixbuf = gdk_pixbuf_new_from_file (image_path, NULL);
- g_free (image_path);
-
- if (pixbuf == NULL) {
- return FALSE;
- }
- g_object_unref (pixbuf);
- return TRUE;
+ pixbuf = gdk_pixbuf_new_from_file (image_path, NULL);
+ g_free (image_path);
+
+ if (pixbuf == NULL)
+ {
+ return FALSE;
+ }
+ g_object_unref (pixbuf);
+ return TRUE;
}
static void
reset_icon (NautilusPropertiesWindow *properties_window)
{
- GList *l;
-
- for (l = properties_window->details->original_files; l != NULL; l = l->next) {
- NautilusFile *file;
-
- file = NAUTILUS_FILE (l->data);
-
- nautilus_file_set_metadata (file,
- NAUTILUS_METADATA_KEY_ICON_SCALE,
- NULL, NULL);
- nautilus_file_set_metadata (file,
- NAUTILUS_METADATA_KEY_CUSTOM_ICON,
- NULL, NULL);
- }
-}
-
-
-static void
-nautilus_properties_window_drag_data_received (GtkWidget *widget, GdkDragContext *context,
- int x, int y,
- GtkSelectionData *selection_data,
- guint info, guint time)
-{
- char **uris;
- gboolean exactly_one;
- GtkImage *image;
- GtkWindow *window;
-
- image = GTK_IMAGE (widget);
- window = GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (image)));
-
- uris = g_strsplit ((const gchar *) gtk_selection_data_get_data (selection_data), "\r\n", 0);
- exactly_one = uris[0] != NULL && (uris[1] == NULL || uris[1][0] == '\0');
-
-
- if (!exactly_one) {
- eel_show_error_dialog
- (_("You cannot assign more than one custom icon at a time!"),
- _("Please drop just one image to set a custom icon."),
- window);
- } else {
- if (uri_is_local_image (uris[0])) {
- set_icon (uris[0], NAUTILUS_PROPERTIES_WINDOW (window));
- } else {
- GFile *f;
-
- f = g_file_new_for_uri (uris[0]);
- if (!g_file_is_native (f)) {
- eel_show_error_dialog
- (_("The file that you dropped is not local."),
- _("You can only use local images as custom icons."),
- window);
-
- } else {
- eel_show_error_dialog
- (_("The file that you dropped is not an image."),
- _("You can only use local images as custom icons."),
- window);
- }
- g_object_unref (f);
- }
- }
- g_strfreev (uris);
+ GList *l;
+
+ for (l = properties_window->details->original_files; l != NULL; l = l->next)
+ {
+ NautilusFile *file;
+
+ file = NAUTILUS_FILE (l->data);
+
+ nautilus_file_set_metadata (file,
+ NAUTILUS_METADATA_KEY_ICON_SCALE,
+ NULL, NULL);
+ nautilus_file_set_metadata (file,
+ NAUTILUS_METADATA_KEY_CUSTOM_ICON,
+ NULL, NULL);
+ }
+}
+
+
+static void
+nautilus_properties_window_drag_data_received (GtkWidget *widget,
+ GdkDragContext *context,
+ int x,
+ int y,
+ GtkSelectionData *selection_data,
+ guint info,
+ guint time)
+{
+ char **uris;
+ gboolean exactly_one;
+ GtkImage *image;
+ GtkWindow *window;
+
+ image = GTK_IMAGE (widget);
+ window = GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (image)));
+
+ uris = g_strsplit ((const gchar *) gtk_selection_data_get_data (selection_data), "\r\n", 0);
+ exactly_one = uris[0] != NULL && (uris[1] == NULL || uris[1][0] == '\0');
+
+
+ if (!exactly_one)
+ {
+ eel_show_error_dialog
+ (_("You cannot assign more than one custom icon at a time!"),
+ _("Please drop just one image to set a custom icon."),
+ window);
+ }
+ else
+ {
+ if (uri_is_local_image (uris[0]))
+ {
+ set_icon (uris[0], NAUTILUS_PROPERTIES_WINDOW (window));
+ }
+ else
+ {
+ GFile *f;
+
+ f = g_file_new_for_uri (uris[0]);
+ if (!g_file_is_native (f))
+ {
+ eel_show_error_dialog
+ (_("The file that you dropped is not local."),
+ _("You can only use local images as custom icons."),
+ window);
+ }
+ else
+ {
+ eel_show_error_dialog
+ (_("The file that you dropped is not an image."),
+ _("You can only use local images as custom icons."),
+ window);
+ }
+ g_object_unref (f);
+ }
+ }
+ g_strfreev (uris);
}
static GtkWidget *
create_image_widget (NautilusPropertiesWindow *window,
- gboolean is_customizable)
+ gboolean is_customizable)
{
- GtkWidget *button;
- GtkWidget *image;
-
- image = gtk_image_new ();
- window->details->icon_image = image;
+ GtkWidget *button;
+ GtkWidget *image;
- update_properties_window_icon (window);
- gtk_widget_show (image);
+ image = gtk_image_new ();
+ window->details->icon_image = image;
- button = NULL;
- if (is_customizable) {
- button = gtk_button_new ();
- gtk_container_add (GTK_CONTAINER (button), image);
+ update_properties_window_icon (window);
+ gtk_widget_show (image);
- /* prepare the image to receive dropped objects to assign custom images */
- gtk_drag_dest_set (GTK_WIDGET (image),
- GTK_DEST_DEFAULT_MOTION | GTK_DEST_DEFAULT_HIGHLIGHT | GTK_DEST_DEFAULT_DROP,
- target_table, G_N_ELEMENTS (target_table),
- GDK_ACTION_COPY | GDK_ACTION_MOVE);
+ button = NULL;
+ if (is_customizable)
+ {
+ button = gtk_button_new ();
+ gtk_container_add (GTK_CONTAINER (button), image);
- g_signal_connect (image, "drag-data-received",
- G_CALLBACK (nautilus_properties_window_drag_data_received), NULL);
- g_signal_connect (button, "clicked",
- G_CALLBACK (select_image_button_callback), window);
- }
+ /* prepare the image to receive dropped objects to assign custom images */
+ gtk_drag_dest_set (GTK_WIDGET (image),
+ GTK_DEST_DEFAULT_MOTION | GTK_DEST_DEFAULT_HIGHLIGHT | GTK_DEST_DEFAULT_DROP,
+ target_table, G_N_ELEMENTS (target_table),
+ GDK_ACTION_COPY | GDK_ACTION_MOVE);
- window->details->icon_button = button;
+ g_signal_connect (image, "drag-data-received",
+ G_CALLBACK (nautilus_properties_window_drag_data_received), NULL);
+ g_signal_connect (button, "clicked",
+ G_CALLBACK (select_image_button_callback), window);
+ }
- return button != NULL ? button : image;
+ window->details->icon_button = button;
+
+ return button != NULL ? button : image;
}
static void
set_name_field (NautilusPropertiesWindow *window,
- const gchar *original_name,
- const gchar *name)
-{
- gboolean new_widget;
- gboolean use_label;
-
- /* There are four cases here:
- * 1) Changing the text of a label
- * 2) Changing the text of an entry
- * 3) Creating label (potentially replacing entry)
- * 4) Creating entry (potentially replacing label)
- */
- use_label = is_multi_file_window (window) || !nautilus_file_can_rename (get_original_file (window));
- new_widget = !window->details->name_field || (use_label ? NAUTILUS_IS_ENTRY (window->details->name_field) : GTK_IS_LABEL (window->details->name_field));
-
- if (new_widget) {
- if (window->details->name_field) {
- gtk_widget_destroy (window->details->name_field);
- }
-
- if (use_label) {
- window->details->name_field = GTK_WIDGET
- (attach_ellipsizing_value_label (window->details->basic_grid,
- GTK_WIDGET (window->details->name_label),
- name));
- } else {
- window->details->name_field = nautilus_entry_new ();
- gtk_entry_set_text (GTK_ENTRY (window->details->name_field), name);
- gtk_widget_show (window->details->name_field);
-
- gtk_grid_attach_next_to (window->details->basic_grid, window->details->name_field,
- GTK_WIDGET (window->details->name_label),
- GTK_POS_RIGHT, 1, 1);
- gtk_label_set_mnemonic_widget (GTK_LABEL (window->details->name_label), window->details->name_field);
-
- g_signal_connect_object (window->details->name_field, "focus-out-event",
- G_CALLBACK (name_field_focus_out), window, 0);
- g_signal_connect_object (window->details->name_field, "activate",
- G_CALLBACK (name_field_activate), window, 0);
- }
-
- gtk_widget_show (window->details->name_field);
- }
- /* Only replace text if the file's name has changed. */
- else if (original_name == NULL || strcmp (original_name, name) != 0) {
-
- if (use_label) {
- gtk_label_set_text (GTK_LABEL (window->details->name_field), name);
- } else {
- /* Only reset the text if it's different from what is
- * currently showing. This causes minimal ripples (e.g.
- * selection change).
- */
- gchar *displayed_name = gtk_editable_get_chars (GTK_EDITABLE (window->details->name_field), 0, -1);
- if (strcmp (displayed_name, name) != 0) {
- gtk_entry_set_text (GTK_ENTRY (window->details->name_field), name);
- }
- g_free (displayed_name);
- }
- }
+ const gchar *original_name,
+ const gchar *name)
+{
+ gboolean new_widget;
+ gboolean use_label;
+
+ /* There are four cases here:
+ * 1) Changing the text of a label
+ * 2) Changing the text of an entry
+ * 3) Creating label (potentially replacing entry)
+ * 4) Creating entry (potentially replacing label)
+ */
+ use_label = is_multi_file_window (window) || !nautilus_file_can_rename (get_original_file (window));
+ new_widget = !window->details->name_field || (use_label ? NAUTILUS_IS_ENTRY (window->details->name_field) : GTK_IS_LABEL (window->details->name_field));
+
+ if (new_widget)
+ {
+ if (window->details->name_field)
+ {
+ gtk_widget_destroy (window->details->name_field);
+ }
+
+ if (use_label)
+ {
+ window->details->name_field = GTK_WIDGET
+ (attach_ellipsizing_value_label (window->details->basic_grid,
+ GTK_WIDGET (window->details->name_label),
+ name));
+ }
+ else
+ {
+ window->details->name_field = nautilus_entry_new ();
+ gtk_entry_set_text (GTK_ENTRY (window->details->name_field), name);
+ gtk_widget_show (window->details->name_field);
+
+ gtk_grid_attach_next_to (window->details->basic_grid, window->details->name_field,
+ GTK_WIDGET (window->details->name_label),
+ GTK_POS_RIGHT, 1, 1);
+ gtk_label_set_mnemonic_widget (GTK_LABEL (window->details->name_label), window->details->name_field);
+
+ g_signal_connect_object (window->details->name_field, "focus-out-event",
+ G_CALLBACK (name_field_focus_out), window, 0);
+ g_signal_connect_object (window->details->name_field, "activate",
+ G_CALLBACK (name_field_activate), window, 0);
+ }
+
+ gtk_widget_show (window->details->name_field);
+ }
+ /* Only replace text if the file's name has changed. */
+ else if (original_name == NULL || strcmp (original_name, name) != 0)
+ {
+ if (use_label)
+ {
+ gtk_label_set_text (GTK_LABEL (window->details->name_field), name);
+ }
+ else
+ {
+ /* Only reset the text if it's different from what is
+ * currently showing. This causes minimal ripples (e.g.
+ * selection change).
+ */
+ gchar *displayed_name = gtk_editable_get_chars (GTK_EDITABLE (window->details->name_field), 0, -1);
+ if (strcmp (displayed_name, name) != 0)
+ {
+ gtk_entry_set_text (GTK_ENTRY (window->details->name_field), name);
+ }
+ g_free (displayed_name);
+ }
+ }
}
static void
update_name_field (NautilusPropertiesWindow *window)
{
- NautilusFile *file;
-
- gtk_label_set_text_with_mnemonic (window->details->name_label,
- ngettext ("_Name:", "_Names:",
- get_not_gone_original_file_count (window)));
-
- if (is_multi_file_window (window)) {
- /* Multifile property dialog, show all names */
- GString *str;
- char *name;
- gboolean first;
- GList *l;
-
- str = g_string_new ("");
-
- first = TRUE;
-
- for (l = window->details->target_files; l != NULL; l = l->next) {
- file = NAUTILUS_FILE (l->data);
-
- if (!nautilus_file_is_gone (file)) {
- if (!first) {
- g_string_append (str, ", ");
- }
- first = FALSE;
-
- name = nautilus_file_get_display_name (file);
- g_string_append (str, name);
- g_free (name);
- }
- }
- set_name_field (window, NULL, str->str);
- g_string_free (str, TRUE);
- } else {
- const char *original_name = NULL;
- char *current_name;
-
- file = get_original_file (window);
-
- if (file == NULL || nautilus_file_is_gone (file)) {
- current_name = g_strdup ("");
- } else {
- current_name = nautilus_file_get_display_name (file);
- }
-
- /* If the file name has changed since the original name was stored,
- * update the text in the text field, possibly (deliberately) clobbering
- * an edit in progress. If the name hasn't changed (but some other
- * aspect of the file might have), then don't clobber changes.
- */
- if (window->details->name_field) {
- original_name = (const char *) g_object_get_data (G_OBJECT (window->details->name_field), "original_name");
- }
-
- set_name_field (window, original_name, current_name);
-
- if (original_name == NULL ||
- g_strcmp0 (original_name, current_name) != 0) {
- g_object_set_data_full (G_OBJECT (window->details->name_field),
- "original_name",
- current_name,
- g_free);
- } else {
- g_free (current_name);
- }
- }
+ NautilusFile *file;
+
+ gtk_label_set_text_with_mnemonic (window->details->name_label,
+ ngettext ("_Name:", "_Names:",
+ get_not_gone_original_file_count (window)));
+
+ if (is_multi_file_window (window))
+ {
+ /* Multifile property dialog, show all names */
+ GString *str;
+ char *name;
+ gboolean first;
+ GList *l;
+
+ str = g_string_new ("");
+
+ first = TRUE;
+
+ for (l = window->details->target_files; l != NULL; l = l->next)
+ {
+ file = NAUTILUS_FILE (l->data);
+
+ if (!nautilus_file_is_gone (file))
+ {
+ if (!first)
+ {
+ g_string_append (str, ", ");
+ }
+ first = FALSE;
+
+ name = nautilus_file_get_display_name (file);
+ g_string_append (str, name);
+ g_free (name);
+ }
+ }
+ set_name_field (window, NULL, str->str);
+ g_string_free (str, TRUE);
+ }
+ else
+ {
+ const char *original_name = NULL;
+ char *current_name;
+
+ file = get_original_file (window);
+
+ if (file == NULL || nautilus_file_is_gone (file))
+ {
+ current_name = g_strdup ("");
+ }
+ else
+ {
+ current_name = nautilus_file_get_display_name (file);
+ }
+
+ /* If the file name has changed since the original name was stored,
+ * update the text in the text field, possibly (deliberately) clobbering
+ * an edit in progress. If the name hasn't changed (but some other
+ * aspect of the file might have), then don't clobber changes.
+ */
+ if (window->details->name_field)
+ {
+ original_name = (const char *) g_object_get_data (G_OBJECT (window->details->name_field), "original_name");
+ }
+
+ set_name_field (window, original_name, current_name);
+
+ if (original_name == NULL ||
+ g_strcmp0 (original_name, current_name) != 0)
+ {
+ g_object_set_data_full (G_OBJECT (window->details->name_field),
+ "original_name",
+ current_name,
+ g_free);
+ }
+ else
+ {
+ g_free (current_name);
+ }
+ }
}
static void
name_field_restore_original_name (NautilusEntry *name_field)
{
- const char *original_name;
- char *displayed_name;
+ const char *original_name;
+ char *displayed_name;
- original_name = (const char *) g_object_get_data (G_OBJECT (name_field),
- "original_name");
+ original_name = (const char *) g_object_get_data (G_OBJECT (name_field),
+ "original_name");
- if (!original_name) {
- return;
- }
+ if (!original_name)
+ {
+ return;
+ }
- displayed_name = gtk_editable_get_chars (GTK_EDITABLE (name_field), 0, -1);
+ displayed_name = gtk_editable_get_chars (GTK_EDITABLE (name_field), 0, -1);
- if (strcmp (original_name, displayed_name) != 0) {
- gtk_entry_set_text (GTK_ENTRY (name_field), original_name);
- }
- nautilus_entry_select_all (name_field);
+ if (strcmp (original_name, displayed_name) != 0)
+ {
+ gtk_entry_set_text (GTK_ENTRY (name_field), original_name);
+ }
+ nautilus_entry_select_all (name_field);
- g_free (displayed_name);
+ g_free (displayed_name);
}
static void
-rename_callback (NautilusFile *file, GFile *res_loc, GError *error, gpointer callback_data)
+rename_callback (NautilusFile *file,
+ GFile *res_loc,
+ GError *error,
+ gpointer callback_data)
{
- NautilusPropertiesWindow *window;
+ NautilusPropertiesWindow *window;
- window = NAUTILUS_PROPERTIES_WINDOW (callback_data);
+ window = NAUTILUS_PROPERTIES_WINDOW (callback_data);
- /* Complain to user if rename failed. */
- if (error != NULL) {
- nautilus_report_error_renaming_file (file,
- window->details->pending_name,
- error,
- GTK_WINDOW (window));
- if (window->details->name_field != NULL) {
- name_field_restore_original_name (NAUTILUS_ENTRY (window->details->name_field));
- }
- }
+ /* Complain to user if rename failed. */
+ if (error != NULL)
+ {
+ nautilus_report_error_renaming_file (file,
+ window->details->pending_name,
+ error,
+ GTK_WINDOW (window));
+ if (window->details->name_field != NULL)
+ {
+ name_field_restore_original_name (NAUTILUS_ENTRY (window->details->name_field));
+ }
+ }
- g_object_unref (window);
+ g_object_unref (window);
}
static void
-set_pending_name (NautilusPropertiesWindow *window, const char *name)
+set_pending_name (NautilusPropertiesWindow *window,
+ const char *name)
{
- g_free (window->details->pending_name);
- window->details->pending_name = g_strdup (name);
+ g_free (window->details->pending_name);
+ window->details->pending_name = g_strdup (name);
}
static void
-name_field_done_editing (NautilusEntry *name_field, NautilusPropertiesWindow *window)
-{
- NautilusFile *file;
- char *new_name;
- const char *original_name;
-
- g_return_if_fail (NAUTILUS_IS_ENTRY (name_field));
-
- /* Don't apply if the dialog has more than one file */
- if (is_multi_file_window (window)) {
- return;
- }
-
- file = get_original_file (window);
-
- /* This gets called when the window is closed, which might be
- * caused by the file having been deleted.
- */
- if (file == NULL || nautilus_file_is_gone (file)) {
- return;
- }
-
- new_name = gtk_editable_get_chars (GTK_EDITABLE (name_field), 0, -1);
-
- /* Special case: silently revert text if new text is empty. */
- if (strlen (new_name) == 0) {
- name_field_restore_original_name (NAUTILUS_ENTRY (name_field));
- } else {
- original_name = (const char *) g_object_get_data (G_OBJECT (window->details->name_field),
- "original_name");
- /* Don't rename if not changed since we read the display name.
- This is needed so that we don't save the display name to the
- file when nothing is changed */
- if (strcmp (new_name, original_name) != 0) {
- set_pending_name (window, new_name);
- g_object_ref (window);
- nautilus_file_rename (file, new_name,
- rename_callback, window);
- }
- }
-
- g_free (new_name);
+name_field_done_editing (NautilusEntry *name_field,
+ NautilusPropertiesWindow *window)
+{
+ NautilusFile *file;
+ char *new_name;
+ const char *original_name;
+
+ g_return_if_fail (NAUTILUS_IS_ENTRY (name_field));
+
+ /* Don't apply if the dialog has more than one file */
+ if (is_multi_file_window (window))
+ {
+ return;
+ }
+
+ file = get_original_file (window);
+
+ /* This gets called when the window is closed, which might be
+ * caused by the file having been deleted.
+ */
+ if (file == NULL || nautilus_file_is_gone (file))
+ {
+ return;
+ }
+
+ new_name = gtk_editable_get_chars (GTK_EDITABLE (name_field), 0, -1);
+
+ /* Special case: silently revert text if new text is empty. */
+ if (strlen (new_name) == 0)
+ {
+ name_field_restore_original_name (NAUTILUS_ENTRY (name_field));
+ }
+ else
+ {
+ original_name = (const char *) g_object_get_data (G_OBJECT (window->details->name_field),
+ "original_name");
+ /* Don't rename if not changed since we read the display name.
+ * This is needed so that we don't save the display name to the
+ * file when nothing is changed */
+ if (strcmp (new_name, original_name) != 0)
+ {
+ set_pending_name (window, new_name);
+ g_object_ref (window);
+ nautilus_file_rename (file, new_name,
+ rename_callback, window);
+ }
+ }
+
+ g_free (new_name);
}
static gboolean
name_field_focus_out (NautilusEntry *name_field,
- GdkEventFocus *event,
- gpointer callback_data)
+ GdkEventFocus *event,
+ gpointer callback_data)
{
- g_assert (NAUTILUS_IS_PROPERTIES_WINDOW (callback_data));
+ g_assert (NAUTILUS_IS_PROPERTIES_WINDOW (callback_data));
- if (gtk_widget_get_sensitive (GTK_WIDGET (name_field))) {
- name_field_done_editing (name_field, NAUTILUS_PROPERTIES_WINDOW (callback_data));
- }
+ if (gtk_widget_get_sensitive (GTK_WIDGET (name_field)))
+ {
+ name_field_done_editing (name_field, NAUTILUS_PROPERTIES_WINDOW (callback_data));
+ }
- return FALSE;
+ return FALSE;
}
static void
-name_field_activate (NautilusEntry *name_field, gpointer callback_data)
+name_field_activate (NautilusEntry *name_field,
+ gpointer callback_data)
{
- g_assert (NAUTILUS_IS_ENTRY (name_field));
- g_assert (NAUTILUS_IS_PROPERTIES_WINDOW (callback_data));
+ g_assert (NAUTILUS_IS_ENTRY (name_field));
+ g_assert (NAUTILUS_IS_PROPERTIES_WINDOW (callback_data));
- /* Accept changes. */
- name_field_done_editing (name_field, NAUTILUS_PROPERTIES_WINDOW (callback_data));
+ /* Accept changes. */
+ name_field_done_editing (name_field, NAUTILUS_PROPERTIES_WINDOW (callback_data));
- nautilus_entry_select_all_at_idle (name_field);
+ nautilus_entry_select_all_at_idle (name_field);
}
static void
update_properties_window_title (NautilusPropertiesWindow *window)
{
- char *name, *title;
- NautilusFile *file;
+ char *name, *title;
+ NautilusFile *file;
+
+ g_return_if_fail (GTK_IS_WINDOW (window));
- g_return_if_fail (GTK_IS_WINDOW (window));
+ title = g_strdup_printf (_("Properties"));
- title = g_strdup_printf (_("Properties"));
+ if (!is_multi_file_window (window))
+ {
+ file = get_original_file (window);
- if (!is_multi_file_window (window)) {
- file = get_original_file (window);
+ if (file != NULL)
+ {
+ g_free (title);
+ name = nautilus_file_get_display_name (file);
+ if (nautilus_file_is_directory (file))
+ {
+ /* To translators: %s is the name of the folder. */
+ title = g_strdup_printf (C_("folder", "%s Properties"), name);
+ }
+ else
+ {
+ /* To translators: %s is the name of the file. */
+ title = g_strdup_printf (C_("file", "%s Properties"), name);
+ }
- if (file != NULL) {
- g_free (title);
- name = nautilus_file_get_display_name (file);
- if (nautilus_file_is_directory (file)) {
- /* To translators: %s is the name of the folder. */
- title = g_strdup_printf (C_("folder", "%s Properties"), name);
- } else {
- /* To translators: %s is the name of the file. */
- title = g_strdup_printf (C_("file", "%s Properties"), name);
- }
+ g_free (name);
+ }
+ }
- g_free (name);
- }
- }
-
- gtk_window_set_title (GTK_WINDOW (window), title);
+ gtk_window_set_title (GTK_WINDOW (window), title);
- g_free (title);
+ g_free (title);
}
static void
clear_extension_pages (NautilusPropertiesWindow *window)
{
- int i;
- int num_pages;
- GtkWidget *page;
+ int i;
+ int num_pages;
+ GtkWidget *page;
- num_pages = gtk_notebook_get_n_pages
- (GTK_NOTEBOOK (window->details->notebook));
+ num_pages = gtk_notebook_get_n_pages
+ (GTK_NOTEBOOK (window->details->notebook));
- for (i = 0; i < num_pages; i++) {
- page = gtk_notebook_get_nth_page
- (GTK_NOTEBOOK (window->details->notebook), i);
+ for (i = 0; i < num_pages; i++)
+ {
+ page = gtk_notebook_get_nth_page
+ (GTK_NOTEBOOK (window->details->notebook), i);
- if (g_object_get_data (G_OBJECT (page), "is-extension-page")) {
- gtk_notebook_remove_page
- (GTK_NOTEBOOK (window->details->notebook), i);
- num_pages--;
- i--;
- }
- }
+ if (g_object_get_data (G_OBJECT (page), "is-extension-page"))
+ {
+ gtk_notebook_remove_page
+ (GTK_NOTEBOOK (window->details->notebook), i);
+ num_pages--;
+ i--;
+ }
+ }
}
static void
refresh_extension_pages (NautilusPropertiesWindow *window)
{
- clear_extension_pages (window);
- append_extension_pages (window);
+ clear_extension_pages (window);
+ append_extension_pages (window);
}
static void
remove_from_dialog (NautilusPropertiesWindow *window,
- NautilusFile *file)
+ NautilusFile *file)
{
- int index;
- GList *original_link;
- GList *target_link;
- NautilusFile *original_file;
- NautilusFile *target_file;
+ int index;
+ GList *original_link;
+ GList *target_link;
+ NautilusFile *original_file;
+ NautilusFile *target_file;
- index = g_list_index (window->details->target_files, file);
- if (index == -1) {
- index = g_list_index (window->details->original_files, file);
- g_return_if_fail (index != -1);
- }
+ index = g_list_index (window->details->target_files, file);
+ if (index == -1)
+ {
+ index = g_list_index (window->details->original_files, file);
+ g_return_if_fail (index != -1);
+ }
- original_link = g_list_nth (window->details->original_files, index);
- target_link = g_list_nth (window->details->target_files, index);
+ original_link = g_list_nth (window->details->original_files, index);
+ target_link = g_list_nth (window->details->target_files, index);
- g_return_if_fail (original_link && target_link);
+ g_return_if_fail (original_link && target_link);
- original_file = NAUTILUS_FILE (original_link->data);
- target_file = NAUTILUS_FILE (target_link->data);
-
- window->details->original_files = g_list_remove_link (window->details->original_files, original_link);
- g_list_free (original_link);
+ original_file = NAUTILUS_FILE (original_link->data);
+ target_file = NAUTILUS_FILE (target_link->data);
- window->details->target_files = g_list_remove_link (window->details->target_files, target_link);
- g_list_free (target_link);
+ window->details->original_files = g_list_remove_link (window->details->original_files, original_link);
+ g_list_free (original_link);
- g_hash_table_remove (window->details->initial_permissions, target_file);
+ window->details->target_files = g_list_remove_link (window->details->target_files, target_link);
+ g_list_free (target_link);
- g_signal_handlers_disconnect_by_func (original_file,
- G_CALLBACK (file_changed_callback),
- window);
- g_signal_handlers_disconnect_by_func (target_file,
- G_CALLBACK (file_changed_callback),
- window);
+ g_hash_table_remove (window->details->initial_permissions, target_file);
- nautilus_file_monitor_remove (original_file, &window->details->original_files);
- nautilus_file_monitor_remove (target_file, &window->details->target_files);
+ g_signal_handlers_disconnect_by_func (original_file,
+ G_CALLBACK (file_changed_callback),
+ window);
+ g_signal_handlers_disconnect_by_func (target_file,
+ G_CALLBACK (file_changed_callback),
+ window);
- nautilus_file_unref (original_file);
- nautilus_file_unref (target_file);
-
+ nautilus_file_monitor_remove (original_file, &window->details->original_files);
+ nautilus_file_monitor_remove (target_file, &window->details->target_files);
+
+ nautilus_file_unref (original_file);
+ nautilus_file_unref (target_file);
}
static gboolean
-mime_list_equal (GList *a, GList *b)
+mime_list_equal (GList *a,
+ GList *b)
{
- while (a && b) {
- if (strcmp (a->data, b->data)) {
- return FALSE;
- }
- a = a->next;
- b = b->next;
- }
+ while (a && b)
+ {
+ if (strcmp (a->data, b->data))
+ {
+ return FALSE;
+ }
+ a = a->next;
+ b = b->next;
+ }
- return (a == b);
+ return (a == b);
}
static GList *
get_mime_list (NautilusPropertiesWindow *window)
{
- GList *ret;
- GList *l;
-
- ret = NULL;
- for (l = window->details->target_files; l != NULL; l = l->next) {
- ret = g_list_append (ret, nautilus_file_get_mime_type (NAUTILUS_FILE (l->data)));
- }
- ret = g_list_reverse (ret);
- return ret;
+ GList *ret;
+ GList *l;
+
+ ret = NULL;
+ for (l = window->details->target_files; l != NULL; l = l->next)
+ {
+ ret = g_list_append (ret, nautilus_file_get_mime_type (NAUTILUS_FILE (l->data)));
+ }
+ ret = g_list_reverse (ret);
+ return ret;
}
static gboolean
start_spinner_callback (NautilusPropertiesWindow *window)
{
- gtk_widget_show (window->details->directory_contents_spinner);
- gtk_spinner_start (GTK_SPINNER (window->details->directory_contents_spinner));
- window->details->deep_count_spinner_timeout_id = 0;
+ gtk_widget_show (window->details->directory_contents_spinner);
+ gtk_spinner_start (GTK_SPINNER (window->details->directory_contents_spinner));
+ window->details->deep_count_spinner_timeout_id = 0;
- return FALSE;
+ return FALSE;
}
static void
schedule_start_spinner (NautilusPropertiesWindow *window)
{
- if (window->details->deep_count_spinner_timeout_id == 0) {
- window->details->deep_count_spinner_timeout_id
- = g_timeout_add_seconds (1,
- (GSourceFunc)start_spinner_callback,
- window);
- }
+ if (window->details->deep_count_spinner_timeout_id == 0)
+ {
+ window->details->deep_count_spinner_timeout_id
+ = g_timeout_add_seconds (1,
+ (GSourceFunc) start_spinner_callback,
+ window);
+ }
}
static void
stop_spinner (NautilusPropertiesWindow *window)
{
- gtk_spinner_stop (GTK_SPINNER (window->details->directory_contents_spinner));
- gtk_widget_hide (window->details->directory_contents_spinner);
- if (window->details->deep_count_spinner_timeout_id > 0) {
- g_source_remove (window->details->deep_count_spinner_timeout_id);
- window->details->deep_count_spinner_timeout_id = 0;
- }
+ gtk_spinner_stop (GTK_SPINNER (window->details->directory_contents_spinner));
+ gtk_widget_hide (window->details->directory_contents_spinner);
+ if (window->details->deep_count_spinner_timeout_id > 0)
+ {
+ g_source_remove (window->details->deep_count_spinner_timeout_id);
+ window->details->deep_count_spinner_timeout_id = 0;
+ }
}
static void
stop_deep_count_for_file (NautilusPropertiesWindow *window,
- NautilusFile *file)
+ NautilusFile *file)
{
- if (g_list_find (window->details->deep_count_files, file)) {
- g_signal_handlers_disconnect_by_func (file,
- G_CALLBACK (schedule_directory_contents_update),
- window);
- nautilus_file_unref (file);
- window->details->deep_count_files = g_list_remove (window->details->deep_count_files, file);
- }
+ if (g_list_find (window->details->deep_count_files, file))
+ {
+ g_signal_handlers_disconnect_by_func (file,
+ G_CALLBACK (schedule_directory_contents_update),
+ window);
+ nautilus_file_unref (file);
+ window->details->deep_count_files = g_list_remove (window->details->deep_count_files, file);
+ }
}
static void
start_deep_count_for_file (NautilusPropertiesWindow *window,
- NautilusFile *file)
-{
- if (!nautilus_file_is_directory (file)) {
- return;
- }
-
- if (!g_list_find (window->details->deep_count_files, file)) {
- nautilus_file_ref (file);
- window->details->deep_count_files = g_list_prepend (window->details->deep_count_files, file);
-
- nautilus_file_recompute_deep_counts (file);
- if (!window->details->deep_count_finished) {
- g_signal_connect_object (file,
- "updated-deep-count-in-progress",
- G_CALLBACK (schedule_directory_contents_update),
- window, G_CONNECT_SWAPPED);
- schedule_start_spinner (window);
- }
- }
+ NautilusFile *file)
+{
+ if (!nautilus_file_is_directory (file))
+ {
+ return;
+ }
+
+ if (!g_list_find (window->details->deep_count_files, file))
+ {
+ nautilus_file_ref (file);
+ window->details->deep_count_files = g_list_prepend (window->details->deep_count_files, file);
+
+ nautilus_file_recompute_deep_counts (file);
+ if (!window->details->deep_count_finished)
+ {
+ g_signal_connect_object (file,
+ "updated-deep-count-in-progress",
+ G_CALLBACK (schedule_directory_contents_update),
+ window, G_CONNECT_SWAPPED);
+ schedule_start_spinner (window);
+ }
+ }
}
static void
-properties_window_update (NautilusPropertiesWindow *window,
- GList *files)
-{
- GList *l;
- GList *mime_list;
- GList *tmp;
- NautilusFile *changed_file;
- gboolean dirty_original = FALSE;
- gboolean dirty_target = FALSE;
-
- if (files == NULL) {
- dirty_original = TRUE;
- dirty_target = TRUE;
- }
-
- for (tmp = files; tmp != NULL; tmp = tmp->next) {
- changed_file = NAUTILUS_FILE (tmp->data);
-
- if (changed_file && nautilus_file_is_gone (changed_file)) {
- /* Remove the file from the property dialog */
- remove_from_dialog (window, changed_file);
- changed_file = NULL;
-
- if (window->details->original_files == NULL) {
- return;
- }
- }
- if (changed_file == NULL ||
- g_list_find (window->details->original_files, changed_file)) {
- dirty_original = TRUE;
- }
- if (changed_file == NULL ||
- g_list_find (window->details->target_files, changed_file)) {
- dirty_target = TRUE;
- }
- if (changed_file != NULL) {
- start_deep_count_for_file (window, changed_file);
- }
- }
-
- if (dirty_original) {
- update_properties_window_title (window);
- update_properties_window_icon (window);
- update_name_field (window);
-
- /* If any of the value fields start to depend on the original
- * value, value_field_updates should be added here */
- }
-
- if (dirty_target) {
- for (l = window->details->permission_buttons; l != NULL; l = l->next) {
- permission_button_update (window, GTK_TOGGLE_BUTTON (l->data));
- }
-
- for (l = window->details->permission_combos; l != NULL; l = l->next) {
- permission_combo_update (window, GTK_COMBO_BOX (l->data));
- }
-
- for (l = window->details->value_fields; l != NULL; l = l->next) {
- value_field_update (window, GTK_LABEL (l->data));
- }
- }
-
- mime_list = get_mime_list (window);
-
- if (!window->details->mime_list) {
- window->details->mime_list = mime_list;
- } else {
- if (!mime_list_equal (window->details->mime_list, mime_list)) {
- refresh_extension_pages (window);
- }
-
- g_list_free_full (window->details->mime_list, g_free);
- window->details->mime_list = mime_list;
- }
+properties_window_update (NautilusPropertiesWindow *window,
+ GList *files)
+{
+ GList *l;
+ GList *mime_list;
+ GList *tmp;
+ NautilusFile *changed_file;
+ gboolean dirty_original = FALSE;
+ gboolean dirty_target = FALSE;
+
+ if (files == NULL)
+ {
+ dirty_original = TRUE;
+ dirty_target = TRUE;
+ }
+
+ for (tmp = files; tmp != NULL; tmp = tmp->next)
+ {
+ changed_file = NAUTILUS_FILE (tmp->data);
+
+ if (changed_file && nautilus_file_is_gone (changed_file))
+ {
+ /* Remove the file from the property dialog */
+ remove_from_dialog (window, changed_file);
+ changed_file = NULL;
+
+ if (window->details->original_files == NULL)
+ {
+ return;
+ }
+ }
+ if (changed_file == NULL ||
+ g_list_find (window->details->original_files, changed_file))
+ {
+ dirty_original = TRUE;
+ }
+ if (changed_file == NULL ||
+ g_list_find (window->details->target_files, changed_file))
+ {
+ dirty_target = TRUE;
+ }
+ if (changed_file != NULL)
+ {
+ start_deep_count_for_file (window, changed_file);
+ }
+ }
+
+ if (dirty_original)
+ {
+ update_properties_window_title (window);
+ update_properties_window_icon (window);
+ update_name_field (window);
+
+ /* If any of the value fields start to depend on the original
+ * value, value_field_updates should be added here */
+ }
+
+ if (dirty_target)
+ {
+ for (l = window->details->permission_buttons; l != NULL; l = l->next)
+ {
+ permission_button_update (window, GTK_TOGGLE_BUTTON (l->data));
+ }
+
+ for (l = window->details->permission_combos; l != NULL; l = l->next)
+ {
+ permission_combo_update (window, GTK_COMBO_BOX (l->data));
+ }
+
+ for (l = window->details->value_fields; l != NULL; l = l->next)
+ {
+ value_field_update (window, GTK_LABEL (l->data));
+ }
+ }
+
+ mime_list = get_mime_list (window);
+
+ if (!window->details->mime_list)
+ {
+ window->details->mime_list = mime_list;
+ }
+ else
+ {
+ if (!mime_list_equal (window->details->mime_list, mime_list))
+ {
+ refresh_extension_pages (window);
+ }
+
+ g_list_free_full (window->details->mime_list, g_free);
+ window->details->mime_list = mime_list;
+ }
}
static gboolean
update_files_callback (gpointer data)
{
- NautilusPropertiesWindow *window;
-
- window = NAUTILUS_PROPERTIES_WINDOW (data);
-
- window->details->update_files_timeout_id = 0;
-
- properties_window_update (window, window->details->changed_files);
-
- if (window->details->original_files == NULL) {
- /* Close the window if no files are left */
- gtk_widget_destroy (GTK_WIDGET (window));
- } else {
- nautilus_file_list_free (window->details->changed_files);
- window->details->changed_files = NULL;
- }
-
- return FALSE;
- }
+ NautilusPropertiesWindow *window;
+
+ window = NAUTILUS_PROPERTIES_WINDOW (data);
+
+ window->details->update_files_timeout_id = 0;
+
+ properties_window_update (window, window->details->changed_files);
+
+ if (window->details->original_files == NULL)
+ {
+ /* Close the window if no files are left */
+ gtk_widget_destroy (GTK_WIDGET (window));
+ }
+ else
+ {
+ nautilus_file_list_free (window->details->changed_files);
+ window->details->changed_files = NULL;
+ }
+
+ return FALSE;
+}
static void
schedule_files_update (NautilusPropertiesWindow *window)
- {
- g_assert (NAUTILUS_IS_PROPERTIES_WINDOW (window));
-
- if (window->details->update_files_timeout_id == 0) {
- window->details->update_files_timeout_id
- = g_timeout_add (FILES_UPDATE_INTERVAL,
- update_files_callback,
- window);
- }
- }
+{
+ g_assert (NAUTILUS_IS_PROPERTIES_WINDOW (window));
+
+ if (window->details->update_files_timeout_id == 0)
+ {
+ window->details->update_files_timeout_id
+ = g_timeout_add (FILES_UPDATE_INTERVAL,
+ update_files_callback,
+ window);
+ }
+}
static gboolean
-file_list_attributes_identical (GList *file_list, const char *attribute_name)
-{
- gboolean identical;
- char *first_attr;
- GList *l;
-
- first_attr = NULL;
- identical = TRUE;
-
- for (l = file_list; l != NULL; l = l->next) {
- NautilusFile *file;
-
- file = NAUTILUS_FILE (l->data);
-
- if (nautilus_file_is_gone (file)) {
- continue;
- }
-
- if (first_attr == NULL) {
- first_attr = nautilus_file_get_string_attribute_with_default (file, attribute_name);
- } else {
- char *attr;
- attr = nautilus_file_get_string_attribute_with_default (file, attribute_name);
- if (strcmp (attr, first_attr)) {
- identical = FALSE;
- g_free (attr);
- break;
- }
- g_free (attr);
- }
- }
-
- g_free (first_attr);
- return identical;
+file_list_attributes_identical (GList *file_list,
+ const char *attribute_name)
+{
+ gboolean identical;
+ char *first_attr;
+ GList *l;
+
+ first_attr = NULL;
+ identical = TRUE;
+
+ for (l = file_list; l != NULL; l = l->next)
+ {
+ NautilusFile *file;
+
+ file = NAUTILUS_FILE (l->data);
+
+ if (nautilus_file_is_gone (file))
+ {
+ continue;
+ }
+
+ if (first_attr == NULL)
+ {
+ first_attr = nautilus_file_get_string_attribute_with_default (file, attribute_name);
+ }
+ else
+ {
+ char *attr;
+ attr = nautilus_file_get_string_attribute_with_default (file, attribute_name);
+ if (strcmp (attr, first_attr))
+ {
+ identical = FALSE;
+ g_free (attr);
+ break;
+ }
+ g_free (attr);
+ }
+ }
+
+ g_free (first_attr);
+ return identical;
}
static char *
-file_list_get_string_attribute (GList *file_list,
- const char *attribute_name,
- const char *inconsistent_value)
-{
- if (file_list_attributes_identical (file_list, attribute_name)) {
- GList *l;
-
- for (l = file_list; l != NULL; l = l->next) {
- NautilusFile *file;
-
- file = NAUTILUS_FILE (l->data);
- if (!nautilus_file_is_gone (file)) {
- return nautilus_file_get_string_attribute_with_default
- (file,
- attribute_name);
- }
- }
- return g_strdup (_("unknown"));
- } else {
- return g_strdup (inconsistent_value);
- }
+file_list_get_string_attribute (GList *file_list,
+ const char *attribute_name,
+ const char *inconsistent_value)
+{
+ if (file_list_attributes_identical (file_list, attribute_name))
+ {
+ GList *l;
+
+ for (l = file_list; l != NULL; l = l->next)
+ {
+ NautilusFile *file;
+
+ file = NAUTILUS_FILE (l->data);
+ if (!nautilus_file_is_gone (file))
+ {
+ return nautilus_file_get_string_attribute_with_default
+ (file,
+ attribute_name);
+ }
+ }
+ return g_strdup (_("unknown"));
+ }
+ else
+ {
+ return g_strdup (inconsistent_value);
+ }
}
static gboolean
file_list_all_directories (GList *file_list)
{
- GList *l;
- for (l = file_list; l != NULL; l = l->next) {
- if (!nautilus_file_is_directory (NAUTILUS_FILE (l->data))) {
- return FALSE;
- }
- }
- return TRUE;
+ GList *l;
+ for (l = file_list; l != NULL; l = l->next)
+ {
+ if (!nautilus_file_is_directory (NAUTILUS_FILE (l->data)))
+ {
+ return FALSE;
+ }
+ }
+ return TRUE;
}
static void
-value_field_update_internal (GtkLabel *label,
- GList *file_list)
-{
- const char *attribute_name;
- char *attribute_value;
- char *inconsistent_string;
- char *mime_type, *tmp;
-
- g_assert (GTK_IS_LABEL (label));
-
- attribute_name = g_object_get_data (G_OBJECT (label), "file_attribute");
- inconsistent_string = g_object_get_data (G_OBJECT (label), "inconsistent_string");
- attribute_value = file_list_get_string_attribute (file_list,
- attribute_name,
- inconsistent_string);
- if (!strcmp (attribute_name, "detailed_type") && strcmp (attribute_value, inconsistent_string)) {
- mime_type = file_list_get_string_attribute (file_list,
- "mime_type",
- inconsistent_string);
- if (strcmp (mime_type, inconsistent_string)) {
- tmp = attribute_value;
- attribute_value = g_strdup_printf (C_("MIME type description (MIME type)", "%s (%s)"), attribute_value, mime_type);
- g_free (tmp);
- }
- g_free (mime_type);
- }
-
- gtk_label_set_text (label, attribute_value);
- g_free (attribute_value);
+value_field_update_internal (GtkLabel *label,
+ GList *file_list)
+{
+ const char *attribute_name;
+ char *attribute_value;
+ char *inconsistent_string;
+ char *mime_type, *tmp;
+
+ g_assert (GTK_IS_LABEL (label));
+
+ attribute_name = g_object_get_data (G_OBJECT (label), "file_attribute");
+ inconsistent_string = g_object_get_data (G_OBJECT (label), "inconsistent_string");
+ attribute_value = file_list_get_string_attribute (file_list,
+ attribute_name,
+ inconsistent_string);
+ if (!strcmp (attribute_name, "detailed_type") && strcmp (attribute_value, inconsistent_string))
+ {
+ mime_type = file_list_get_string_attribute (file_list,
+ "mime_type",
+ inconsistent_string);
+ if (strcmp (mime_type, inconsistent_string))
+ {
+ tmp = attribute_value;
+ attribute_value = g_strdup_printf (C_("MIME type description (MIME type)", "%s (%s)"), attribute_value, mime_type);
+ g_free (tmp);
+ }
+ g_free (mime_type);
+ }
+
+ gtk_label_set_text (label, attribute_value);
+ g_free (attribute_value);
}
static void
-value_field_update (NautilusPropertiesWindow *window, GtkLabel *label)
+value_field_update (NautilusPropertiesWindow *window,
+ GtkLabel *label)
{
- gboolean use_original;
+ gboolean use_original;
- use_original = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (label), "show_original"));
+ use_original = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (label), "show_original"));
- value_field_update_internal (label,
- (use_original ?
- window->details->original_files :
- window->details->target_files));
+ value_field_update_internal (label,
+ (use_original ?
+ window->details->original_files :
+ window->details->target_files));
}
static GtkLabel *
-attach_label (GtkGrid *grid,
- GtkWidget *sibling,
- const char *initial_text,
- gboolean ellipsize_text,
- gboolean selectable,
- gboolean mnemonic)
-{
- GtkWidget *label_field;
-
- if (ellipsize_text) {
- label_field = gtk_label_new (initial_text);
- gtk_label_set_ellipsize (GTK_LABEL (label_field),
- PANGO_ELLIPSIZE_END);
- } else if (mnemonic) {
- label_field = gtk_label_new_with_mnemonic (initial_text);
- } else {
- label_field = gtk_label_new (initial_text);
- }
-
- if (selectable) {
- gtk_label_set_selectable (GTK_LABEL (label_field), TRUE);
- }
-
- gtk_label_set_xalign (GTK_LABEL (label_field), 0);
- gtk_widget_show (label_field);
-
- if (ellipsize_text) {
- gtk_widget_set_hexpand (label_field, TRUE);
- gtk_label_set_max_width_chars (GTK_LABEL (label_field), 24);
- }
-
- if (sibling != NULL) {
- gtk_grid_attach_next_to (grid, label_field, sibling,
- GTK_POS_RIGHT, 1, 1);
- } else {
- gtk_container_add (GTK_CONTAINER (grid), label_field);
- }
-
- return GTK_LABEL (label_field);
-}
+attach_label (GtkGrid *grid,
+ GtkWidget *sibling,
+ const char *initial_text,
+ gboolean ellipsize_text,
+ gboolean selectable,
+ gboolean mnemonic)
+{
+ GtkWidget *label_field;
+
+ if (ellipsize_text)
+ {
+ label_field = gtk_label_new (initial_text);
+ gtk_label_set_ellipsize (GTK_LABEL (label_field),
+ PANGO_ELLIPSIZE_END);
+ }
+ else if (mnemonic)
+ {
+ label_field = gtk_label_new_with_mnemonic (initial_text);
+ }
+ else
+ {
+ label_field = gtk_label_new (initial_text);
+ }
+
+ if (selectable)
+ {
+ gtk_label_set_selectable (GTK_LABEL (label_field), TRUE);
+ }
+
+ gtk_label_set_xalign (GTK_LABEL (label_field), 0);
+ gtk_widget_show (label_field);
+
+ if (ellipsize_text)
+ {
+ gtk_widget_set_hexpand (label_field, TRUE);
+ gtk_label_set_max_width_chars (GTK_LABEL (label_field), 24);
+ }
+
+ if (sibling != NULL)
+ {
+ gtk_grid_attach_next_to (grid, label_field, sibling,
+ GTK_POS_RIGHT, 1, 1);
+ }
+ else
+ {
+ gtk_container_add (GTK_CONTAINER (grid), label_field);
+ }
+
+ return GTK_LABEL (label_field);
+}
static GtkLabel *
-attach_value_label (GtkGrid *grid,
- GtkWidget *sibling,
- const char *initial_text)
+attach_value_label (GtkGrid *grid,
+ GtkWidget *sibling,
+ const char *initial_text)
{
- return attach_label (grid, sibling, initial_text, FALSE, TRUE, FALSE);
+ return attach_label (grid, sibling, initial_text, FALSE, TRUE, FALSE);
}
static GtkLabel *
-attach_ellipsizing_value_label (GtkGrid *grid,
- GtkWidget *sibling,
- const char *initial_text)
+attach_ellipsizing_value_label (GtkGrid *grid,
+ GtkWidget *sibling,
+ const char *initial_text)
{
- return attach_label (grid, sibling, initial_text, TRUE, TRUE, FALSE);
+ return attach_label (grid, sibling, initial_text, TRUE, TRUE, FALSE);
}
-static GtkWidget*
+static GtkWidget *
attach_value_field_internal (NautilusPropertiesWindow *window,
- GtkGrid *grid,
- GtkWidget *sibling,
- const char *file_attribute_name,
- const char *inconsistent_string,
- gboolean show_original,
- gboolean ellipsize_text)
+ GtkGrid *grid,
+ GtkWidget *sibling,
+ const char *file_attribute_name,
+ const char *inconsistent_string,
+ gboolean show_original,
+ gboolean ellipsize_text)
{
- GtkLabel *value_field;
+ GtkLabel *value_field;
- if (ellipsize_text) {
- value_field = attach_ellipsizing_value_label (grid, sibling, "");
- } else {
- value_field = attach_value_label (grid, sibling, "");
- }
+ if (ellipsize_text)
+ {
+ value_field = attach_ellipsizing_value_label (grid, sibling, "");
+ }
+ else
+ {
+ value_field = attach_value_label (grid, sibling, "");
+ }
- /* Stash a copy of the file attribute name in this field for the callback's sake. */
- g_object_set_data_full (G_OBJECT (value_field), "file_attribute",
- g_strdup (file_attribute_name), g_free);
+ /* Stash a copy of the file attribute name in this field for the callback's sake. */
+ g_object_set_data_full (G_OBJECT (value_field), "file_attribute",
+ g_strdup (file_attribute_name), g_free);
- g_object_set_data_full (G_OBJECT (value_field), "inconsistent_string",
- g_strdup (inconsistent_string), g_free);
+ g_object_set_data_full (G_OBJECT (value_field), "inconsistent_string",
+ g_strdup (inconsistent_string), g_free);
- g_object_set_data (G_OBJECT (value_field), "show_original", GINT_TO_POINTER (show_original));
+ g_object_set_data (G_OBJECT (value_field), "show_original", GINT_TO_POINTER (show_original));
- window->details->value_fields = g_list_prepend (window->details->value_fields,
- value_field);
- return GTK_WIDGET(value_field);
-}
+ window->details->value_fields = g_list_prepend (window->details->value_fields,
+ value_field);
+ return GTK_WIDGET (value_field);
+}
-static GtkWidget*
+static GtkWidget *
attach_value_field (NautilusPropertiesWindow *window,
- GtkGrid *grid,
- GtkWidget *sibling,
- const char *file_attribute_name,
- const char *inconsistent_string,
- gboolean show_original)
+ GtkGrid *grid,
+ GtkWidget *sibling,
+ const char *file_attribute_name,
+ const char *inconsistent_string,
+ gboolean show_original)
{
- return attach_value_field_internal (window,
- grid, sibling,
- file_attribute_name,
- inconsistent_string,
- show_original,
- FALSE);
+ return attach_value_field_internal (window,
+ grid, sibling,
+ file_attribute_name,
+ inconsistent_string,
+ show_original,
+ FALSE);
}
-static GtkWidget*
+static GtkWidget *
attach_ellipsizing_value_field (NautilusPropertiesWindow *window,
- GtkGrid *grid,
- GtkWidget *sibling,
- const char *file_attribute_name,
- const char *inconsistent_string,
- gboolean show_original)
+ GtkGrid *grid,
+ GtkWidget *sibling,
+ const char *file_attribute_name,
+ const char *inconsistent_string,
+ gboolean show_original)
{
- return attach_value_field_internal (window,
- grid, sibling,
- file_attribute_name,
- inconsistent_string,
- show_original,
- TRUE);
+ return attach_value_field_internal (window,
+ grid, sibling,
+ file_attribute_name,
+ inconsistent_string,
+ show_original,
+ TRUE);
}
static void
group_change_free (GroupChange *change)
{
- nautilus_file_unref (change->file);
- g_free (change->group);
- g_object_unref (change->window);
+ nautilus_file_unref (change->file);
+ g_free (change->group);
+ g_object_unref (change->window);
- g_free (change);
+ g_free (change);
}
static void
group_change_callback (NautilusFile *file,
- GFile *res_loc,
- GError *error,
- GroupChange *change)
+ GFile *res_loc,
+ GError *error,
+ GroupChange *change)
{
- NautilusPropertiesWindow *window;
+ NautilusPropertiesWindow *window;
- g_assert (NAUTILUS_IS_PROPERTIES_WINDOW (change->window));
- g_assert (NAUTILUS_IS_FILE (change->file));
- g_assert (change->group != NULL);
+ g_assert (NAUTILUS_IS_PROPERTIES_WINDOW (change->window));
+ g_assert (NAUTILUS_IS_FILE (change->file));
+ g_assert (change->group != NULL);
- if (!change->cancelled) {
- /* Report the error if it's an error. */
- eel_timed_wait_stop ((EelCancelCallback) cancel_group_change_callback, change);
- nautilus_report_error_setting_group (change->file, error, change->window);
- }
+ if (!change->cancelled)
+ {
+ /* Report the error if it's an error. */
+ eel_timed_wait_stop ((EelCancelCallback) cancel_group_change_callback, change);
+ nautilus_report_error_setting_group (change->file, error, change->window);
+ }
- window = NAUTILUS_PROPERTIES_WINDOW(change->window);
- if (window->details->group_change == change) {
- window->details->group_change = NULL;
- }
+ window = NAUTILUS_PROPERTIES_WINDOW (change->window);
+ if (window->details->group_change == change)
+ {
+ window->details->group_change = NULL;
+ }
- group_change_free (change);
+ group_change_free (change);
}
static void
cancel_group_change_callback (GroupChange *change)
{
- g_assert (NAUTILUS_IS_FILE (change->file));
- g_assert (change->group != NULL);
+ g_assert (NAUTILUS_IS_FILE (change->file));
+ g_assert (change->group != NULL);
- change->cancelled = TRUE;
- nautilus_file_cancel (change->file, (NautilusFileOperationCallback) group_change_callback, change);
+ change->cancelled = TRUE;
+ nautilus_file_cancel (change->file, (NautilusFileOperationCallback) group_change_callback, change);
}
static gboolean
schedule_group_change_timeout (GroupChange *change)
{
- g_assert (NAUTILUS_IS_PROPERTIES_WINDOW (change->window));
- g_assert (NAUTILUS_IS_FILE (change->file));
- g_assert (change->group != NULL);
+ g_assert (NAUTILUS_IS_PROPERTIES_WINDOW (change->window));
+ g_assert (NAUTILUS_IS_FILE (change->file));
+ g_assert (change->group != NULL);
- change->timeout = 0;
+ change->timeout = 0;
- eel_timed_wait_start
- ((EelCancelCallback) cancel_group_change_callback,
- change,
- _("Cancel Group Change?"),
- change->window);
+ eel_timed_wait_start
+ ((EelCancelCallback) cancel_group_change_callback,
+ change,
+ _("Cancel Group Change?"),
+ change->window);
- nautilus_file_set_group
- (change->file, change->group,
- (NautilusFileOperationCallback) group_change_callback, change);
+ nautilus_file_set_group
+ (change->file, change->group,
+ (NautilusFileOperationCallback) group_change_callback, change);
- return FALSE;
+ return FALSE;
}
static void
schedule_group_change (NautilusPropertiesWindow *window,
- NautilusFile *file,
- const char *group)
+ NautilusFile *file,
+ const char *group)
{
- GroupChange *change;
+ GroupChange *change;
- g_assert (NAUTILUS_IS_PROPERTIES_WINDOW (window));
- g_assert (window->details->group_change == NULL);
- g_assert (NAUTILUS_IS_FILE (file));
+ g_assert (NAUTILUS_IS_PROPERTIES_WINDOW (window));
+ g_assert (window->details->group_change == NULL);
+ g_assert (NAUTILUS_IS_FILE (file));
- change = g_new0 (GroupChange, 1);
+ change = g_new0 (GroupChange, 1);
- change->file = nautilus_file_ref (file);
- change->group = g_strdup (group);
- change->window = g_object_ref (G_OBJECT (window));
- change->timeout =
- g_timeout_add (CHOWN_CHGRP_TIMEOUT,
- (GSourceFunc) schedule_group_change_timeout,
- change);
+ change->file = nautilus_file_ref (file);
+ change->group = g_strdup (group);
+ change->window = g_object_ref (G_OBJECT (window));
+ change->timeout =
+ g_timeout_add (CHOWN_CHGRP_TIMEOUT,
+ (GSourceFunc) schedule_group_change_timeout,
+ change);
- window->details->group_change = change;
+ window->details->group_change = change;
}
static void
unschedule_or_cancel_group_change (NautilusPropertiesWindow *window)
{
- GroupChange *change;
+ GroupChange *change;
- g_assert (NAUTILUS_IS_PROPERTIES_WINDOW (window));
+ g_assert (NAUTILUS_IS_PROPERTIES_WINDOW (window));
- change = window->details->group_change;
+ change = window->details->group_change;
- if (change != NULL) {
- if (change->timeout == 0) {
- /* The operation was started, cancel it and let the operation callback free the change */
- cancel_group_change_callback (change);
- eel_timed_wait_stop ((EelCancelCallback) cancel_group_change_callback, change);
- } else {
- g_source_remove (change->timeout);
- group_change_free (change);
- }
+ if (change != NULL)
+ {
+ if (change->timeout == 0)
+ {
+ /* The operation was started, cancel it and let the operation callback free the change */
+ cancel_group_change_callback (change);
+ eel_timed_wait_stop ((EelCancelCallback) cancel_group_change_callback, change);
+ }
+ else
+ {
+ g_source_remove (change->timeout);
+ group_change_free (change);
+ }
- window->details->group_change = NULL;
- }
+ window->details->group_change = NULL;
+ }
}
static void
-changed_group_callback (GtkComboBox *combo_box, NautilusFile *file)
+changed_group_callback (GtkComboBox *combo_box,
+ NautilusFile *file)
{
- NautilusPropertiesWindow *window;
- char *group;
- char *cur_group;
+ NautilusPropertiesWindow *window;
+ char *group;
+ char *cur_group;
- g_assert (GTK_IS_COMBO_BOX (combo_box));
- g_assert (NAUTILUS_IS_FILE (file));
+ g_assert (GTK_IS_COMBO_BOX (combo_box));
+ g_assert (NAUTILUS_IS_FILE (file));
- group = gtk_combo_box_text_get_active_text (GTK_COMBO_BOX_TEXT (combo_box));
- cur_group = nautilus_file_get_group_name (file);
+ group = gtk_combo_box_text_get_active_text (GTK_COMBO_BOX_TEXT (combo_box));
+ cur_group = nautilus_file_get_group_name (file);
- if (group != NULL && strcmp (group, cur_group) != 0) {
- /* Try to change file group. If this fails, complain to user. */
- window = NAUTILUS_PROPERTIES_WINDOW (gtk_widget_get_ancestor (GTK_WIDGET (combo_box), GTK_TYPE_WINDOW));
+ if (group != NULL && strcmp (group, cur_group) != 0)
+ {
+ /* Try to change file group. If this fails, complain to user. */
+ window = NAUTILUS_PROPERTIES_WINDOW (gtk_widget_get_ancestor (GTK_WIDGET (combo_box), GTK_TYPE_WINDOW));
- unschedule_or_cancel_group_change (window);
- schedule_group_change (window, file, group);
- }
- g_free (group);
- g_free (cur_group);
+ unschedule_or_cancel_group_change (window);
+ schedule_group_change (window, file, group);
+ }
+ g_free (group);
+ g_free (cur_group);
}
/* checks whether the given column at the first level
* of model has the specified entries in the given order. */
static gboolean
tree_model_entries_equal (GtkTreeModel *model,
- unsigned int column,
- GList *entries)
+ unsigned int column,
+ GList *entries)
{
- GtkTreeIter iter;
- gboolean empty_model;
+ GtkTreeIter iter;
+ gboolean empty_model;
- g_assert (GTK_IS_TREE_MODEL (model));
- g_assert (gtk_tree_model_get_column_type (model, column) == G_TYPE_STRING);
+ g_assert (GTK_IS_TREE_MODEL (model));
+ g_assert (gtk_tree_model_get_column_type (model, column) == G_TYPE_STRING);
- empty_model = !gtk_tree_model_get_iter_first (model, &iter);
+ empty_model = !gtk_tree_model_get_iter_first (model, &iter);
- if (!empty_model && entries != NULL) {
- GList *l;
+ if (!empty_model && entries != NULL)
+ {
+ GList *l;
- l = entries;
+ l = entries;
- do {
- char *val;
+ do
+ {
+ char *val;
- gtk_tree_model_get (model, &iter,
- column, &val,
- -1);
- if ((val == NULL && l->data != NULL) ||
- (val != NULL && l->data == NULL) ||
- (val != NULL && strcmp (val, l->data))) {
- g_free (val);
- return FALSE;
- }
+ gtk_tree_model_get (model, &iter,
+ column, &val,
+ -1);
+ if ((val == NULL && l->data != NULL) ||
+ (val != NULL && l->data == NULL) ||
+ (val != NULL && strcmp (val, l->data)))
+ {
+ g_free (val);
+ return FALSE;
+ }
- g_free (val);
- l = l->next;
- } while (gtk_tree_model_iter_next (model, &iter));
+ g_free (val);
+ l = l->next;
+ }
+ while (gtk_tree_model_iter_next (model, &iter));
- return l == NULL;
- } else {
- return (empty_model && entries == NULL) ||
- (!empty_model && entries != NULL);
- }
+ return l == NULL;
+ }
+ else
+ {
+ return (empty_model && entries == NULL) ||
+ (!empty_model && entries != NULL);
+ }
}
static char *
combo_box_get_active_entry (GtkComboBox *combo_box,
- unsigned int column)
+ unsigned int column)
{
- GtkTreeModel *model;
- GtkTreeIter iter;
- char *val;
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ char *val;
- g_assert (GTK_IS_COMBO_BOX (combo_box));
+ g_assert (GTK_IS_COMBO_BOX (combo_box));
- if (gtk_combo_box_get_active_iter (GTK_COMBO_BOX (combo_box), &iter)) {
- model = gtk_combo_box_get_model (combo_box);
- g_assert (GTK_IS_TREE_MODEL (model));
+ if (gtk_combo_box_get_active_iter (GTK_COMBO_BOX (combo_box), &iter))
+ {
+ model = gtk_combo_box_get_model (combo_box);
+ g_assert (GTK_IS_TREE_MODEL (model));
- gtk_tree_model_get (model, &iter,
- column, &val,
- -1);
- return val;
- }
+ gtk_tree_model_get (model, &iter,
+ column, &val,
+ -1);
+ return val;
+ }
- return NULL;
+ return NULL;
}
/* returns the index of the given entry in the the given column
@@ -1553,3418 +1718,3770 @@ combo_box_get_active_entry (GtkComboBox *combo_box,
* */
static int
tree_model_get_entry_index (GtkTreeModel *model,
- unsigned int column,
- const char *entry)
+ unsigned int column,
+ const char *entry)
{
- GtkTreeIter iter;
- int index;
- gboolean empty_model;
+ GtkTreeIter iter;
+ int index;
+ gboolean empty_model;
- g_assert (GTK_IS_TREE_MODEL (model));
- g_assert (gtk_tree_model_get_column_type (model, column) == G_TYPE_STRING);
+ g_assert (GTK_IS_TREE_MODEL (model));
+ g_assert (gtk_tree_model_get_column_type (model, column) == G_TYPE_STRING);
- empty_model = !gtk_tree_model_get_iter_first (model, &iter);
- if (!empty_model && entry != NULL) {
- index = 0;
+ empty_model = !gtk_tree_model_get_iter_first (model, &iter);
+ if (!empty_model && entry != NULL)
+ {
+ index = 0;
- do {
- char *val;
+ do
+ {
+ char *val;
- gtk_tree_model_get (model, &iter,
- column, &val,
- -1);
- if (val != NULL && !strcmp (val, entry)) {
- g_free (val);
- return index;
- }
+ gtk_tree_model_get (model, &iter,
+ column, &val,
+ -1);
+ if (val != NULL && !strcmp (val, entry))
+ {
+ g_free (val);
+ return index;
+ }
- g_free (val);
- index++;
- } while (gtk_tree_model_iter_next (model, &iter));
- }
+ g_free (val);
+ index++;
+ }
+ while (gtk_tree_model_iter_next (model, &iter));
+ }
- return -1;
+ return -1;
}
static void
-synch_groups_combo_box (GtkComboBox *combo_box, NautilusFile *file)
-{
- GList *groups;
- GList *node;
- GtkTreeModel *model;
- GtkListStore *store;
- const char *group_name;
- char *current_group_name;
- int group_index;
- int current_group_index;
-
- g_assert (GTK_IS_COMBO_BOX (combo_box));
- g_assert (NAUTILUS_IS_FILE (file));
-
- if (nautilus_file_is_gone (file)) {
- return;
- }
-
- groups = nautilus_file_get_settable_group_names (file);
-
- model = gtk_combo_box_get_model (combo_box);
- store = GTK_LIST_STORE (model);
- g_assert (GTK_IS_LIST_STORE (model));
-
- if (!tree_model_entries_equal (model, 0, groups)) {
- /* Clear the contents of ComboBox in a wacky way because there
- * is no function to clear all items and also no function to obtain
- * the number of items in a combobox.
- */
- gtk_list_store_clear (store);
-
- for (node = groups, group_index = 0; node != NULL; node = node->next, ++group_index) {
- group_name = (const char *)node->data;
- gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo_box), group_name);
- }
- }
-
- current_group_name = nautilus_file_get_group_name (file);
- current_group_index = tree_model_get_entry_index (model, 0, current_group_name);
-
- /* If current group wasn't in list, we prepend it (with a separator).
- * This can happen if the current group is an id with no matching
- * group in the groups file.
- */
- if (current_group_index < 0 && current_group_name != NULL) {
- if (groups != NULL) {
- /* add separator */
- gtk_combo_box_text_prepend_text (GTK_COMBO_BOX_TEXT (combo_box), "-");
- }
-
- gtk_combo_box_text_prepend_text (GTK_COMBO_BOX_TEXT (combo_box), current_group_name);
- current_group_index = 0;
- }
- gtk_combo_box_set_active (combo_box, current_group_index);
-
- g_free (current_group_name);
- g_list_free_full (groups, g_free);
+synch_groups_combo_box (GtkComboBox *combo_box,
+ NautilusFile *file)
+{
+ GList *groups;
+ GList *node;
+ GtkTreeModel *model;
+ GtkListStore *store;
+ const char *group_name;
+ char *current_group_name;
+ int group_index;
+ int current_group_index;
+
+ g_assert (GTK_IS_COMBO_BOX (combo_box));
+ g_assert (NAUTILUS_IS_FILE (file));
+
+ if (nautilus_file_is_gone (file))
+ {
+ return;
+ }
+
+ groups = nautilus_file_get_settable_group_names (file);
+
+ model = gtk_combo_box_get_model (combo_box);
+ store = GTK_LIST_STORE (model);
+ g_assert (GTK_IS_LIST_STORE (model));
+
+ if (!tree_model_entries_equal (model, 0, groups))
+ {
+ /* Clear the contents of ComboBox in a wacky way because there
+ * is no function to clear all items and also no function to obtain
+ * the number of items in a combobox.
+ */
+ gtk_list_store_clear (store);
+
+ for (node = groups, group_index = 0; node != NULL; node = node->next, ++group_index)
+ {
+ group_name = (const char *) node->data;
+ gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo_box), group_name);
+ }
+ }
+
+ current_group_name = nautilus_file_get_group_name (file);
+ current_group_index = tree_model_get_entry_index (model, 0, current_group_name);
+
+ /* If current group wasn't in list, we prepend it (with a separator).
+ * This can happen if the current group is an id with no matching
+ * group in the groups file.
+ */
+ if (current_group_index < 0 && current_group_name != NULL)
+ {
+ if (groups != NULL)
+ {
+ /* add separator */
+ gtk_combo_box_text_prepend_text (GTK_COMBO_BOX_TEXT (combo_box), "-");
+ }
+
+ gtk_combo_box_text_prepend_text (GTK_COMBO_BOX_TEXT (combo_box), current_group_name);
+ current_group_index = 0;
+ }
+ gtk_combo_box_set_active (combo_box, current_group_index);
+
+ g_free (current_group_name);
+ g_list_free_full (groups, g_free);
}
static gboolean
combo_box_row_separator_func (GtkTreeModel *model,
- GtkTreeIter *iter,
- gpointer data)
+ GtkTreeIter *iter,
+ gpointer data)
{
- gchar *text;
- gboolean ret;
+ gchar *text;
+ gboolean ret;
- gtk_tree_model_get (model, iter, 0, &text, -1);
+ gtk_tree_model_get (model, iter, 0, &text, -1);
- if (text == NULL) {
- return FALSE;
- }
+ if (text == NULL)
+ {
+ return FALSE;
+ }
- if (strcmp (text, "-") == 0) {
- ret = TRUE;
- } else {
- ret = FALSE;
- }
-
- g_free (text);
- return ret;
+ if (strcmp (text, "-") == 0)
+ {
+ ret = TRUE;
+ }
+ else
+ {
+ ret = FALSE;
+ }
+
+ g_free (text);
+ return ret;
}
static GtkComboBox *
-attach_combo_box (GtkGrid *grid,
- GtkWidget *sibling,
- gboolean three_columns)
+attach_combo_box (GtkGrid *grid,
+ GtkWidget *sibling,
+ gboolean three_columns)
{
- GtkWidget *combo_box;
+ GtkWidget *combo_box;
- if (!three_columns) {
- combo_box = gtk_combo_box_text_new ();
- } else {
- GtkTreeModel *model;
- GtkCellRenderer *renderer;
+ if (!three_columns)
+ {
+ combo_box = gtk_combo_box_text_new ();
+ }
+ else
+ {
+ GtkTreeModel *model;
+ GtkCellRenderer *renderer;
- model = GTK_TREE_MODEL (gtk_list_store_new (3, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING));
- combo_box = gtk_combo_box_new_with_model (model);
- g_object_unref (G_OBJECT (model));
+ model = GTK_TREE_MODEL (gtk_list_store_new (3, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING));
+ combo_box = gtk_combo_box_new_with_model (model);
+ g_object_unref (G_OBJECT (model));
- renderer = gtk_cell_renderer_text_new ();
- gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo_box), renderer, TRUE);
- gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT (combo_box), renderer,
- "text", 0);
-
- }
- gtk_widget_set_halign (combo_box, GTK_ALIGN_START);
- gtk_widget_show (combo_box);
+ renderer = gtk_cell_renderer_text_new ();
+ gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo_box), renderer, TRUE);
+ gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT (combo_box), renderer,
+ "text", 0);
+ }
+ gtk_widget_set_halign (combo_box, GTK_ALIGN_START);
+ gtk_widget_show (combo_box);
- gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (combo_box),
- combo_box_row_separator_func,
- NULL,
- NULL);
+ gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (combo_box),
+ combo_box_row_separator_func,
+ NULL,
+ NULL);
- gtk_grid_attach_next_to (grid, combo_box, sibling,
- GTK_POS_RIGHT, 1, 1);
+ gtk_grid_attach_next_to (grid, combo_box, sibling,
+ GTK_POS_RIGHT, 1, 1);
- return GTK_COMBO_BOX (combo_box);
-}
+ return GTK_COMBO_BOX (combo_box);
+}
-static GtkComboBox*
-attach_group_combo_box (GtkGrid *grid,
- GtkWidget *sibling,
- NautilusFile *file)
+static GtkComboBox *
+attach_group_combo_box (GtkGrid *grid,
+ GtkWidget *sibling,
+ NautilusFile *file)
{
- GtkComboBox *combo_box;
+ GtkComboBox *combo_box;
- combo_box = attach_combo_box (grid, sibling, FALSE);
+ combo_box = attach_combo_box (grid, sibling, FALSE);
- synch_groups_combo_box (combo_box, file);
+ synch_groups_combo_box (combo_box, file);
- /* Connect to signal to update menu when file changes. */
- g_signal_connect_object (file, "changed",
- G_CALLBACK (synch_groups_combo_box),
- combo_box, G_CONNECT_SWAPPED);
- g_signal_connect_data (combo_box, "changed",
- G_CALLBACK (changed_group_callback),
- nautilus_file_ref (file),
- (GClosureNotify)nautilus_file_unref, 0);
+ /* Connect to signal to update menu when file changes. */
+ g_signal_connect_object (file, "changed",
+ G_CALLBACK (synch_groups_combo_box),
+ combo_box, G_CONNECT_SWAPPED);
+ g_signal_connect_data (combo_box, "changed",
+ G_CALLBACK (changed_group_callback),
+ nautilus_file_ref (file),
+ (GClosureNotify) nautilus_file_unref, 0);
- return combo_box;
-}
+ return combo_box;
+}
static void
owner_change_free (OwnerChange *change)
{
- nautilus_file_unref (change->file);
- g_free (change->owner);
- g_object_unref (change->window);
+ nautilus_file_unref (change->file);
+ g_free (change->owner);
+ g_object_unref (change->window);
- g_free (change);
+ g_free (change);
}
static void
owner_change_callback (NautilusFile *file,
- GFile *result_location,
- GError *error,
- OwnerChange *change)
+ GFile *result_location,
+ GError *error,
+ OwnerChange *change)
{
- NautilusPropertiesWindow *window;
+ NautilusPropertiesWindow *window;
- g_assert (NAUTILUS_IS_PROPERTIES_WINDOW (change->window));
- g_assert (NAUTILUS_IS_FILE (change->file));
- g_assert (change->owner != NULL);
+ g_assert (NAUTILUS_IS_PROPERTIES_WINDOW (change->window));
+ g_assert (NAUTILUS_IS_FILE (change->file));
+ g_assert (change->owner != NULL);
- if (!change->cancelled) {
- /* Report the error if it's an error. */
- eel_timed_wait_stop ((EelCancelCallback) cancel_owner_change_callback, change);
- nautilus_report_error_setting_owner (file, error, change->window);
- }
+ if (!change->cancelled)
+ {
+ /* Report the error if it's an error. */
+ eel_timed_wait_stop ((EelCancelCallback) cancel_owner_change_callback, change);
+ nautilus_report_error_setting_owner (file, error, change->window);
+ }
- window = NAUTILUS_PROPERTIES_WINDOW(change->window);
- if (window->details->owner_change == change) {
- window->details->owner_change = NULL;
- }
+ window = NAUTILUS_PROPERTIES_WINDOW (change->window);
+ if (window->details->owner_change == change)
+ {
+ window->details->owner_change = NULL;
+ }
- owner_change_free (change);
+ owner_change_free (change);
}
static void
cancel_owner_change_callback (OwnerChange *change)
{
- g_assert (NAUTILUS_IS_FILE (change->file));
- g_assert (change->owner != NULL);
+ g_assert (NAUTILUS_IS_FILE (change->file));
+ g_assert (change->owner != NULL);
- change->cancelled = TRUE;
- nautilus_file_cancel (change->file, (NautilusFileOperationCallback) owner_change_callback, change);
+ change->cancelled = TRUE;
+ nautilus_file_cancel (change->file, (NautilusFileOperationCallback) owner_change_callback, change);
}
static gboolean
schedule_owner_change_timeout (OwnerChange *change)
{
- g_assert (NAUTILUS_IS_PROPERTIES_WINDOW (change->window));
- g_assert (NAUTILUS_IS_FILE (change->file));
- g_assert (change->owner != NULL);
+ g_assert (NAUTILUS_IS_PROPERTIES_WINDOW (change->window));
+ g_assert (NAUTILUS_IS_FILE (change->file));
+ g_assert (change->owner != NULL);
- change->timeout = 0;
+ change->timeout = 0;
- eel_timed_wait_start
- ((EelCancelCallback) cancel_owner_change_callback,
- change,
- _("Cancel Owner Change?"),
- change->window);
+ eel_timed_wait_start
+ ((EelCancelCallback) cancel_owner_change_callback,
+ change,
+ _("Cancel Owner Change?"),
+ change->window);
- nautilus_file_set_owner
- (change->file, change->owner,
- (NautilusFileOperationCallback) owner_change_callback, change);
+ nautilus_file_set_owner
+ (change->file, change->owner,
+ (NautilusFileOperationCallback) owner_change_callback, change);
- return FALSE;
+ return FALSE;
}
static void
schedule_owner_change (NautilusPropertiesWindow *window,
- NautilusFile *file,
- const char *owner)
+ NautilusFile *file,
+ const char *owner)
{
- OwnerChange *change;
+ OwnerChange *change;
- g_assert (NAUTILUS_IS_PROPERTIES_WINDOW (window));
- g_assert (window->details->owner_change == NULL);
- g_assert (NAUTILUS_IS_FILE (file));
+ g_assert (NAUTILUS_IS_PROPERTIES_WINDOW (window));
+ g_assert (window->details->owner_change == NULL);
+ g_assert (NAUTILUS_IS_FILE (file));
- change = g_new0 (OwnerChange, 1);
+ change = g_new0 (OwnerChange, 1);
- change->file = nautilus_file_ref (file);
- change->owner = g_strdup (owner);
- change->window = g_object_ref (G_OBJECT (window));
- change->timeout =
- g_timeout_add (CHOWN_CHGRP_TIMEOUT,
- (GSourceFunc) schedule_owner_change_timeout,
- change);
+ change->file = nautilus_file_ref (file);
+ change->owner = g_strdup (owner);
+ change->window = g_object_ref (G_OBJECT (window));
+ change->timeout =
+ g_timeout_add (CHOWN_CHGRP_TIMEOUT,
+ (GSourceFunc) schedule_owner_change_timeout,
+ change);
- window->details->owner_change = change;
+ window->details->owner_change = change;
}
static void
unschedule_or_cancel_owner_change (NautilusPropertiesWindow *window)
{
- OwnerChange *change;
+ OwnerChange *change;
- g_assert (NAUTILUS_IS_PROPERTIES_WINDOW (window));
+ g_assert (NAUTILUS_IS_PROPERTIES_WINDOW (window));
- change = window->details->owner_change;
+ change = window->details->owner_change;
- if (change != NULL) {
- g_assert (NAUTILUS_IS_FILE (change->file));
+ if (change != NULL)
+ {
+ g_assert (NAUTILUS_IS_FILE (change->file));
- if (change->timeout == 0) {
- /* The operation was started, cancel it and let the operation callback free the change */
- cancel_owner_change_callback (change);
- eel_timed_wait_stop ((EelCancelCallback) cancel_owner_change_callback, change);
- } else {
- g_source_remove (change->timeout);
- owner_change_free (change);
- }
+ if (change->timeout == 0)
+ {
+ /* The operation was started, cancel it and let the operation callback free the change */
+ cancel_owner_change_callback (change);
+ eel_timed_wait_stop ((EelCancelCallback) cancel_owner_change_callback, change);
+ }
+ else
+ {
+ g_source_remove (change->timeout);
+ owner_change_free (change);
+ }
- window->details->owner_change = NULL;
- }
+ window->details->owner_change = NULL;
+ }
}
static void
-changed_owner_callback (GtkComboBox *combo_box, NautilusFile* file)
+changed_owner_callback (GtkComboBox *combo_box,
+ NautilusFile *file)
{
- NautilusPropertiesWindow *window;
- char *new_owner;
- char *cur_owner;
+ NautilusPropertiesWindow *window;
+ char *new_owner;
+ char *cur_owner;
- g_assert (GTK_IS_COMBO_BOX (combo_box));
- g_assert (NAUTILUS_IS_FILE (file));
+ g_assert (GTK_IS_COMBO_BOX (combo_box));
+ g_assert (NAUTILUS_IS_FILE (file));
- new_owner = combo_box_get_active_entry (combo_box, 2);
- if (! new_owner)
- return;
- cur_owner = nautilus_file_get_owner_name (file);
+ new_owner = combo_box_get_active_entry (combo_box, 2);
+ if (!new_owner)
+ {
+ return;
+ }
+ cur_owner = nautilus_file_get_owner_name (file);
- if (strcmp (new_owner, cur_owner) != 0) {
- /* Try to change file owner. If this fails, complain to user. */
- window = NAUTILUS_PROPERTIES_WINDOW (gtk_widget_get_ancestor (GTK_WIDGET (combo_box), GTK_TYPE_WINDOW));
+ if (strcmp (new_owner, cur_owner) != 0)
+ {
+ /* Try to change file owner. If this fails, complain to user. */
+ window = NAUTILUS_PROPERTIES_WINDOW (gtk_widget_get_ancestor (GTK_WIDGET (combo_box), GTK_TYPE_WINDOW));
- unschedule_or_cancel_owner_change (window);
- schedule_owner_change (window, file, new_owner);
- }
- g_free (new_owner);
- g_free (cur_owner);
+ unschedule_or_cancel_owner_change (window);
+ schedule_owner_change (window, file, new_owner);
+ }
+ g_free (new_owner);
+ g_free (cur_owner);
}
static void
-synch_user_menu (GtkComboBox *combo_box, NautilusFile *file)
-{
- GList *users;
- GList *node;
- GtkTreeModel *model;
- GtkListStore *store;
- GtkTreeIter iter;
- char *user_name;
- char *owner_name;
- char *nice_owner_name;
- int user_index;
- int owner_index;
- char **name_array;
- char *combo_text;
-
- g_assert (GTK_IS_COMBO_BOX (combo_box));
- g_assert (NAUTILUS_IS_FILE (file));
-
- if (nautilus_file_is_gone (file)) {
- return;
- }
-
- users = nautilus_get_user_names ();
-
- model = gtk_combo_box_get_model (combo_box);
- store = GTK_LIST_STORE (model);
- g_assert (GTK_IS_LIST_STORE (model));
-
- if (!tree_model_entries_equal (model, 1, users)) {
- /* Clear the contents of ComboBox in a wacky way because there
- * is no function to clear all items and also no function to obtain
- * the number of items in a combobox.
- */
- gtk_list_store_clear (store);
-
- for (node = users, user_index = 0; node != NULL; node = node->next, ++user_index) {
- user_name = (char *)node->data;
-
- name_array = g_strsplit (user_name, "\n", 2);
- if (name_array[1] != NULL && *name_array[1] != 0) {
- combo_text = g_strdup_printf ("%s - %s", name_array[0], name_array[1]);
- } else {
- combo_text = g_strdup (name_array[0]);
- }
-
- gtk_list_store_append (store, &iter);
- gtk_list_store_set (store, &iter,
- 0, combo_text,
- 1, user_name,
- 2, name_array[0],
- -1);
-
- g_strfreev (name_array);
- g_free (combo_text);
- }
- }
-
- owner_name = nautilus_file_get_owner_name (file);
- owner_index = tree_model_get_entry_index (model, 2, owner_name);
- nice_owner_name = nautilus_file_get_string_attribute (file, "owner");
-
- /* If owner wasn't in list, we prepend it (with a separator).
- * This can happen if the owner is an id with no matching
- * identifier in the passwords file.
- */
- if (owner_index < 0 && owner_name != NULL) {
- if (users != NULL) {
- /* add separator */
- gtk_list_store_prepend (store, &iter);
- gtk_list_store_set (store, &iter,
- 0, "-",
- 1, NULL,
- 2, NULL,
- -1);
- }
-
- owner_index = 0;
-
- gtk_list_store_prepend (store, &iter);
- gtk_list_store_set (store, &iter,
- 0, nice_owner_name,
- 1, owner_name,
- 2, owner_name,
- -1);
- }
-
- gtk_combo_box_set_active (combo_box, owner_index);
-
- g_free (owner_name);
- g_free (nice_owner_name);
- g_list_free_full (users, g_free);
-}
-
-static GtkComboBox*
-attach_owner_combo_box (GtkGrid *grid,
- GtkWidget *sibling,
- NautilusFile *file)
-{
- GtkComboBox *combo_box;
-
- combo_box = attach_combo_box (grid, sibling, TRUE);
-
- synch_user_menu (combo_box, file);
-
- /* Connect to signal to update menu when file changes. */
- g_signal_connect_object (file, "changed",
- G_CALLBACK (synch_user_menu),
- combo_box, G_CONNECT_SWAPPED);
- g_signal_connect_data (combo_box, "changed",
- G_CALLBACK (changed_owner_callback),
- nautilus_file_ref (file),
- (GClosureNotify)nautilus_file_unref, 0);
-
- return combo_box;
+synch_user_menu (GtkComboBox *combo_box,
+ NautilusFile *file)
+{
+ GList *users;
+ GList *node;
+ GtkTreeModel *model;
+ GtkListStore *store;
+ GtkTreeIter iter;
+ char *user_name;
+ char *owner_name;
+ char *nice_owner_name;
+ int user_index;
+ int owner_index;
+ char **name_array;
+ char *combo_text;
+
+ g_assert (GTK_IS_COMBO_BOX (combo_box));
+ g_assert (NAUTILUS_IS_FILE (file));
+
+ if (nautilus_file_is_gone (file))
+ {
+ return;
+ }
+
+ users = nautilus_get_user_names ();
+
+ model = gtk_combo_box_get_model (combo_box);
+ store = GTK_LIST_STORE (model);
+ g_assert (GTK_IS_LIST_STORE (model));
+
+ if (!tree_model_entries_equal (model, 1, users))
+ {
+ /* Clear the contents of ComboBox in a wacky way because there
+ * is no function to clear all items and also no function to obtain
+ * the number of items in a combobox.
+ */
+ gtk_list_store_clear (store);
+
+ for (node = users, user_index = 0; node != NULL; node = node->next, ++user_index)
+ {
+ user_name = (char *) node->data;
+
+ name_array = g_strsplit (user_name, "\n", 2);
+ if (name_array[1] != NULL && *name_array[1] != 0)
+ {
+ combo_text = g_strdup_printf ("%s - %s", name_array[0], name_array[1]);
+ }
+ else
+ {
+ combo_text = g_strdup (name_array[0]);
+ }
+
+ gtk_list_store_append (store, &iter);
+ gtk_list_store_set (store, &iter,
+ 0, combo_text,
+ 1, user_name,
+ 2, name_array[0],
+ -1);
+
+ g_strfreev (name_array);
+ g_free (combo_text);
+ }
+ }
+
+ owner_name = nautilus_file_get_owner_name (file);
+ owner_index = tree_model_get_entry_index (model, 2, owner_name);
+ nice_owner_name = nautilus_file_get_string_attribute (file, "owner");
+
+ /* If owner wasn't in list, we prepend it (with a separator).
+ * This can happen if the owner is an id with no matching
+ * identifier in the passwords file.
+ */
+ if (owner_index < 0 && owner_name != NULL)
+ {
+ if (users != NULL)
+ {
+ /* add separator */
+ gtk_list_store_prepend (store, &iter);
+ gtk_list_store_set (store, &iter,
+ 0, "-",
+ 1, NULL,
+ 2, NULL,
+ -1);
+ }
+
+ owner_index = 0;
+
+ gtk_list_store_prepend (store, &iter);
+ gtk_list_store_set (store, &iter,
+ 0, nice_owner_name,
+ 1, owner_name,
+ 2, owner_name,
+ -1);
+ }
+
+ gtk_combo_box_set_active (combo_box, owner_index);
+
+ g_free (owner_name);
+ g_free (nice_owner_name);
+ g_list_free_full (users, g_free);
+}
+
+static GtkComboBox *
+attach_owner_combo_box (GtkGrid *grid,
+ GtkWidget *sibling,
+ NautilusFile *file)
+{
+ GtkComboBox *combo_box;
+
+ combo_box = attach_combo_box (grid, sibling, TRUE);
+
+ synch_user_menu (combo_box, file);
+
+ /* Connect to signal to update menu when file changes. */
+ g_signal_connect_object (file, "changed",
+ G_CALLBACK (synch_user_menu),
+ combo_box, G_CONNECT_SWAPPED);
+ g_signal_connect_data (combo_box, "changed",
+ G_CALLBACK (changed_owner_callback),
+ nautilus_file_ref (file),
+ (GClosureNotify) nautilus_file_unref, 0);
+
+ return combo_box;
}
static gboolean
file_has_prefix (NautilusFile *file,
- GList *prefix_candidates)
+ GList *prefix_candidates)
{
- GList *p;
- GFile *location, *candidate_location;
+ GList *p;
+ GFile *location, *candidate_location;
- location = nautilus_file_get_location (file);
+ location = nautilus_file_get_location (file);
- for (p = prefix_candidates; p != NULL; p = p->next) {
- if (file == p->data) {
- continue;
- }
+ for (p = prefix_candidates; p != NULL; p = p->next)
+ {
+ if (file == p->data)
+ {
+ continue;
+ }
- candidate_location = nautilus_file_get_location (NAUTILUS_FILE (p->data));
- if (g_file_has_prefix (location, candidate_location)) {
- g_object_unref (location);
- g_object_unref (candidate_location);
- return TRUE;
- }
- g_object_unref (candidate_location);
- }
+ candidate_location = nautilus_file_get_location (NAUTILUS_FILE (p->data));
+ if (g_file_has_prefix (location, candidate_location))
+ {
+ g_object_unref (location);
+ g_object_unref (candidate_location);
+ return TRUE;
+ }
+ g_object_unref (candidate_location);
+ }
- g_object_unref (location);
+ g_object_unref (location);
- return FALSE;
+ return FALSE;
}
static void
directory_contents_value_field_update (NautilusPropertiesWindow *window)
{
- NautilusRequestStatus file_status;
- char *text, *temp;
- guint directory_count;
- guint file_count;
- guint total_count;
- guint unreadable_directory_count;
- goffset total_size;
- gboolean used_two_lines;
- NautilusFile *file;
- GList *l;
- guint file_unreadable;
- goffset file_size;
- gboolean deep_count_active;
-
- g_assert (NAUTILUS_IS_PROPERTIES_WINDOW (window));
-
- total_count = window->details->total_count;
- total_size = window->details->total_size;
- unreadable_directory_count = FALSE;
-
- for (l = window->details->target_files; l; l = l->next) {
- file = NAUTILUS_FILE (l->data);
-
- if (file_has_prefix (file, window->details->target_files)) {
- /* don't count nested files twice */
- continue;
- }
-
- if (nautilus_file_is_directory (file)) {
- file_status = nautilus_file_get_deep_counts (file,
- &directory_count,
- &file_count,
- &file_unreadable,
- &file_size,
- TRUE);
- total_count += (file_count + directory_count);
- total_size += file_size;
-
- if (file_unreadable) {
- unreadable_directory_count = TRUE;
- }
-
- if (file_status == NAUTILUS_REQUEST_DONE) {
- stop_deep_count_for_file (window, file);
- }
- } else {
- ++total_count;
- total_size += nautilus_file_get_size (file);
- }
- }
-
- deep_count_active = (g_list_length (window->details->deep_count_files) > 0);
- /* If we've already displayed the total once, don't do another visible
- * count-up if the deep_count happens to get invalidated.
- * But still display the new total, since it might have changed.
- */
- if (window->details->deep_count_finished && deep_count_active) {
- return;
- }
-
- text = NULL;
- used_two_lines = FALSE;
-
- if (total_count == 0) {
- if (!deep_count_active) {
- if (unreadable_directory_count == 0) {
- text = g_strdup (_("nothing"));
- } else {
- text = g_strdup (_("unreadable"));
- }
- } else {
- text = g_strdup ("…");
- }
- } else {
- char *size_str;
- size_str = g_format_size (total_size);
- text = g_strdup_printf (ngettext("%'d item, with size %s",
- "%'d items, totalling %s",
- total_count),
- total_count, size_str);
- g_free (size_str);
-
- if (unreadable_directory_count != 0) {
- temp = text;
- text = g_strconcat (temp, "\n",
- _("(some contents unreadable)"),
- NULL);
- g_free (temp);
- used_two_lines = TRUE;
- }
- }
-
- gtk_label_set_text (window->details->directory_contents_value_field,
- text);
- g_free (text);
-
- /* Also set the title field here, with a trailing carriage return &
- * space if the value field has two lines. This is a hack to get the
- * "Contents:" title to line up with the first line of the
- * 2-line value. Maybe there's a better way to do this, but I
- * couldn't think of one.
- */
- text = g_strdup (_("Contents:"));
- if (used_two_lines) {
- temp = text;
- text = g_strconcat (temp, "\n ", NULL);
- g_free (temp);
- }
- gtk_label_set_text (window->details->directory_contents_title_field,
- text);
- g_free (text);
-
- if (!deep_count_active) {
- window->details->deep_count_finished = TRUE;
- stop_spinner (window);
- }
+ NautilusRequestStatus file_status;
+ char *text, *temp;
+ guint directory_count;
+ guint file_count;
+ guint total_count;
+ guint unreadable_directory_count;
+ goffset total_size;
+ gboolean used_two_lines;
+ NautilusFile *file;
+ GList *l;
+ guint file_unreadable;
+ goffset file_size;
+ gboolean deep_count_active;
+
+ g_assert (NAUTILUS_IS_PROPERTIES_WINDOW (window));
+
+ total_count = window->details->total_count;
+ total_size = window->details->total_size;
+ unreadable_directory_count = FALSE;
+
+ for (l = window->details->target_files; l; l = l->next)
+ {
+ file = NAUTILUS_FILE (l->data);
+
+ if (file_has_prefix (file, window->details->target_files))
+ {
+ /* don't count nested files twice */
+ continue;
+ }
+
+ if (nautilus_file_is_directory (file))
+ {
+ file_status = nautilus_file_get_deep_counts (file,
+ &directory_count,
+ &file_count,
+ &file_unreadable,
+ &file_size,
+ TRUE);
+ total_count += (file_count + directory_count);
+ total_size += file_size;
+
+ if (file_unreadable)
+ {
+ unreadable_directory_count = TRUE;
+ }
+
+ if (file_status == NAUTILUS_REQUEST_DONE)
+ {
+ stop_deep_count_for_file (window, file);
+ }
+ }
+ else
+ {
+ ++total_count;
+ total_size += nautilus_file_get_size (file);
+ }
+ }
+
+ deep_count_active = (g_list_length (window->details->deep_count_files) > 0);
+ /* If we've already displayed the total once, don't do another visible
+ * count-up if the deep_count happens to get invalidated.
+ * But still display the new total, since it might have changed.
+ */
+ if (window->details->deep_count_finished && deep_count_active)
+ {
+ return;
+ }
+
+ text = NULL;
+ used_two_lines = FALSE;
+
+ if (total_count == 0)
+ {
+ if (!deep_count_active)
+ {
+ if (unreadable_directory_count == 0)
+ {
+ text = g_strdup (_("nothing"));
+ }
+ else
+ {
+ text = g_strdup (_("unreadable"));
+ }
+ }
+ else
+ {
+ text = g_strdup ("…");
+ }
+ }
+ else
+ {
+ char *size_str;
+ size_str = g_format_size (total_size);
+ text = g_strdup_printf (ngettext ("%'d item, with size %s",
+ "%'d items, totalling %s",
+ total_count),
+ total_count, size_str);
+ g_free (size_str);
+
+ if (unreadable_directory_count != 0)
+ {
+ temp = text;
+ text = g_strconcat (temp, "\n",
+ _("(some contents unreadable)"),
+ NULL);
+ g_free (temp);
+ used_two_lines = TRUE;
+ }
+ }
+
+ gtk_label_set_text (window->details->directory_contents_value_field,
+ text);
+ g_free (text);
+
+ /* Also set the title field here, with a trailing carriage return &
+ * space if the value field has two lines. This is a hack to get the
+ * "Contents:" title to line up with the first line of the
+ * 2-line value. Maybe there's a better way to do this, but I
+ * couldn't think of one.
+ */
+ text = g_strdup (_("Contents:"));
+ if (used_two_lines)
+ {
+ temp = text;
+ text = g_strconcat (temp, "\n ", NULL);
+ g_free (temp);
+ }
+ gtk_label_set_text (window->details->directory_contents_title_field,
+ text);
+ g_free (text);
+
+ if (!deep_count_active)
+ {
+ window->details->deep_count_finished = TRUE;
+ stop_spinner (window);
+ }
}
static gboolean
update_directory_contents_callback (gpointer data)
{
- NautilusPropertiesWindow *window;
+ NautilusPropertiesWindow *window;
- window = NAUTILUS_PROPERTIES_WINDOW (data);
+ window = NAUTILUS_PROPERTIES_WINDOW (data);
- window->details->update_directory_contents_timeout_id = 0;
- directory_contents_value_field_update (window);
+ window->details->update_directory_contents_timeout_id = 0;
+ directory_contents_value_field_update (window);
- return FALSE;
+ return FALSE;
}
static void
schedule_directory_contents_update (NautilusPropertiesWindow *window)
{
- g_assert (NAUTILUS_IS_PROPERTIES_WINDOW (window));
+ g_assert (NAUTILUS_IS_PROPERTIES_WINDOW (window));
- if (window->details->update_directory_contents_timeout_id == 0) {
- window->details->update_directory_contents_timeout_id
- = g_timeout_add (DIRECTORY_CONTENTS_UPDATE_INTERVAL,
- update_directory_contents_callback,
- window);
- }
+ if (window->details->update_directory_contents_timeout_id == 0)
+ {
+ window->details->update_directory_contents_timeout_id
+ = g_timeout_add (DIRECTORY_CONTENTS_UPDATE_INTERVAL,
+ update_directory_contents_callback,
+ window);
+ }
}
static GtkLabel *
attach_directory_contents_value_field (NautilusPropertiesWindow *window,
- GtkGrid *grid,
- GtkWidget *sibling)
+ GtkGrid *grid,
+ GtkWidget *sibling)
{
- GtkLabel *value_field;
+ GtkLabel *value_field;
- value_field = attach_value_label (grid, sibling, "");
+ value_field = attach_value_label (grid, sibling, "");
- g_assert (window->details->directory_contents_value_field == NULL);
- window->details->directory_contents_value_field = value_field;
+ g_assert (window->details->directory_contents_value_field == NULL);
+ window->details->directory_contents_value_field = value_field;
- gtk_label_set_line_wrap (value_field, TRUE);
+ gtk_label_set_line_wrap (value_field, TRUE);
- return value_field;
+ return value_field;
}
static GtkLabel *
-attach_title_field (GtkGrid *grid,
- const char *title)
+attach_title_field (GtkGrid *grid,
+ const char *title)
{
- return attach_label (grid, NULL, title, FALSE, FALSE, TRUE);
-}
+ return attach_label (grid, NULL, title, FALSE, FALSE, TRUE);
+}
#define INCONSISTENT_STATE_STRING \
- "\xE2\x80\x92"
+ "\xE2\x80\x92"
static void
append_title_value_pair (NautilusPropertiesWindow *window,
- GtkGrid *grid,
- const char *title,
- const char *file_attribute_name,
- const char *inconsistent_state,
- gboolean show_original)
+ GtkGrid *grid,
+ const char *title,
+ const char *file_attribute_name,
+ const char *inconsistent_state,
+ gboolean show_original)
{
- GtkLabel *title_label;
- GtkWidget *value;
+ GtkLabel *title_label;
+ GtkWidget *value;
- title_label = attach_title_field (grid, title);
- value = attach_value_field (window, grid, GTK_WIDGET (title_label),
- file_attribute_name,
- inconsistent_state,
- show_original);
- gtk_label_set_mnemonic_widget (title_label, value);
+ title_label = attach_title_field (grid, title);
+ value = attach_value_field (window, grid, GTK_WIDGET (title_label),
+ file_attribute_name,
+ inconsistent_state,
+ show_original);
+ gtk_label_set_mnemonic_widget (title_label, value);
}
static void
append_title_and_ellipsizing_value (NautilusPropertiesWindow *window,
- GtkGrid *grid,
- const char *title,
- const char *file_attribute_name,
- const char *inconsistent_state,
- gboolean show_original)
+ GtkGrid *grid,
+ const char *title,
+ const char *file_attribute_name,
+ const char *inconsistent_state,
+ gboolean show_original)
{
- GtkLabel *title_label;
- GtkWidget *value;
+ GtkLabel *title_label;
+ GtkWidget *value;
- title_label = attach_title_field (grid, title);
- value = attach_ellipsizing_value_field (window, grid,
- GTK_WIDGET (title_label),
- file_attribute_name,
- inconsistent_state,
- show_original);
- gtk_label_set_mnemonic_widget (title_label, value);
+ title_label = attach_title_field (grid, title);
+ value = attach_ellipsizing_value_field (window, grid,
+ GTK_WIDGET (title_label),
+ file_attribute_name,
+ inconsistent_state,
+ show_original);
+ gtk_label_set_mnemonic_widget (title_label, value);
}
static void
append_directory_contents_fields (NautilusPropertiesWindow *window,
- GtkGrid *grid)
+ GtkGrid *grid)
{
- GtkLabel *title_field, *value_field;
- GList *l;
+ GtkLabel *title_field, *value_field;
+ GList *l;
- title_field = attach_title_field (grid, "");
- window->details->directory_contents_title_field = title_field;
- gtk_label_set_line_wrap (title_field, TRUE);
+ title_field = attach_title_field (grid, "");
+ window->details->directory_contents_title_field = title_field;
+ gtk_label_set_line_wrap (title_field, TRUE);
- value_field = attach_directory_contents_value_field (window, grid, GTK_WIDGET (title_field));
+ value_field = attach_directory_contents_value_field (window, grid, GTK_WIDGET (title_field));
- window->details->directory_contents_spinner = gtk_spinner_new ();
+ window->details->directory_contents_spinner = gtk_spinner_new ();
- gtk_grid_attach_next_to (grid,
- window->details->directory_contents_spinner,
- GTK_WIDGET (value_field),
- GTK_POS_RIGHT,
- 1, 1);
+ gtk_grid_attach_next_to (grid,
+ window->details->directory_contents_spinner,
+ GTK_WIDGET (value_field),
+ GTK_POS_RIGHT,
+ 1, 1);
- for (l = window->details->target_files; l; l = l->next) {
- NautilusFile *file;
+ for (l = window->details->target_files; l; l = l->next)
+ {
+ NautilusFile *file;
- file = NAUTILUS_FILE (l->data);
- start_deep_count_for_file (window, file);
- }
+ file = NAUTILUS_FILE (l->data);
+ start_deep_count_for_file (window, file);
+ }
- /* Fill in the initial value. */
- directory_contents_value_field_update (window);
+ /* Fill in the initial value. */
+ directory_contents_value_field_update (window);
- gtk_label_set_mnemonic_widget (title_field, GTK_WIDGET(value_field));
+ gtk_label_set_mnemonic_widget (title_field, GTK_WIDGET (value_field));
}
static GtkWidget *
create_page_with_hbox (GtkNotebook *notebook,
- const char *title,
- const char *help_uri)
+ const char *title,
+ const char *help_uri)
{
- GtkWidget *hbox;
+ GtkWidget *hbox;
- g_assert (GTK_IS_NOTEBOOK (notebook));
- g_assert (title != NULL);
+ g_assert (GTK_IS_NOTEBOOK (notebook));
+ g_assert (title != NULL);
- hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
- gtk_widget_show (hbox);
- gtk_container_set_border_width (GTK_CONTAINER (hbox), 12);
- gtk_box_set_spacing (GTK_BOX (hbox), 12);
- gtk_notebook_append_page (notebook, hbox, gtk_label_new (title));
- gtk_container_child_set (GTK_CONTAINER (notebook),
- hbox,
- "tab-expand", TRUE,
- NULL);
- g_object_set_data_full (G_OBJECT (hbox), "help-uri", g_strdup (help_uri), g_free);
+ hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
+ gtk_widget_show (hbox);
+ gtk_container_set_border_width (GTK_CONTAINER (hbox), 12);
+ gtk_box_set_spacing (GTK_BOX (hbox), 12);
+ gtk_notebook_append_page (notebook, hbox, gtk_label_new (title));
+ gtk_container_child_set (GTK_CONTAINER (notebook),
+ hbox,
+ "tab-expand", TRUE,
+ NULL);
+ g_object_set_data_full (G_OBJECT (hbox), "help-uri", g_strdup (help_uri), g_free);
- return hbox;
+ return hbox;
}
static GtkWidget *
create_page_with_vbox (GtkNotebook *notebook,
- const char *title,
- const char *help_uri)
+ const char *title,
+ const char *help_uri)
{
- GtkWidget *vbox;
+ GtkWidget *vbox;
- g_assert (GTK_IS_NOTEBOOK (notebook));
- g_assert (title != NULL);
+ g_assert (GTK_IS_NOTEBOOK (notebook));
+ g_assert (title != NULL);
- vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
- gtk_widget_show (vbox);
- gtk_container_set_border_width (GTK_CONTAINER (vbox), 12);
- gtk_notebook_append_page (notebook, vbox, gtk_label_new (title));
- gtk_container_child_set (GTK_CONTAINER (notebook),
- vbox,
- "tab-expand", TRUE,
- NULL);
- g_object_set_data_full (G_OBJECT (vbox), "help-uri", g_strdup (help_uri), g_free);
+ vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
+ gtk_widget_show (vbox);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox), 12);
+ gtk_notebook_append_page (notebook, vbox, gtk_label_new (title));
+ gtk_container_child_set (GTK_CONTAINER (notebook),
+ vbox,
+ "tab-expand", TRUE,
+ NULL);
+ g_object_set_data_full (G_OBJECT (vbox), "help-uri", g_strdup (help_uri), g_free);
- return vbox;
-}
+ return vbox;
+}
static GtkWidget *
append_blank_row (GtkGrid *grid)
{
- return GTK_WIDGET (attach_title_field (grid, ""));
+ return GTK_WIDGET (attach_title_field (grid, ""));
}
static void
append_blank_slim_row (GtkGrid *grid)
{
- GtkWidget *w;
- PangoAttribute *attribute;
- PangoAttrList *attr_list;
+ GtkWidget *w;
+ PangoAttribute *attribute;
+ PangoAttrList *attr_list;
- attr_list = pango_attr_list_new ();
- attribute = pango_attr_scale_new (0.30);
- pango_attr_list_insert (attr_list, attribute);
+ attr_list = pango_attr_list_new ();
+ attribute = pango_attr_scale_new (0.30);
+ pango_attr_list_insert (attr_list, attribute);
- w = gtk_label_new (NULL);
- gtk_label_set_attributes (GTK_LABEL (w), attr_list);
- gtk_widget_show (w);
+ w = gtk_label_new (NULL);
+ gtk_label_set_attributes (GTK_LABEL (w), attr_list);
+ gtk_widget_show (w);
- pango_attr_list_unref (attr_list);
+ pango_attr_list_unref (attr_list);
- gtk_container_add (GTK_CONTAINER (grid), w);
+ gtk_container_add (GTK_CONTAINER (grid), w);
}
static GtkWidget *
create_grid_with_standard_properties (void)
{
- GtkWidget *grid;
+ GtkWidget *grid;
- grid = gtk_grid_new ();
- gtk_container_set_border_width (GTK_CONTAINER (grid), 6);
- gtk_grid_set_row_spacing (GTK_GRID (grid), ROW_PAD);
- gtk_grid_set_column_spacing (GTK_GRID (grid), 12);
- gtk_orientable_set_orientation (GTK_ORIENTABLE (grid), GTK_ORIENTATION_VERTICAL);
- gtk_widget_show (grid);
+ grid = gtk_grid_new ();
+ gtk_container_set_border_width (GTK_CONTAINER (grid), 6);
+ gtk_grid_set_row_spacing (GTK_GRID (grid), ROW_PAD);
+ gtk_grid_set_column_spacing (GTK_GRID (grid), 12);
+ gtk_orientable_set_orientation (GTK_ORIENTABLE (grid), GTK_ORIENTATION_VERTICAL);
+ gtk_widget_show (grid);
- return grid;
+ return grid;
}
static gboolean
-is_merged_trash_directory (NautilusFile *file)
+is_merged_trash_directory (NautilusFile *file)
{
- char *file_uri;
- gboolean result;
+ char *file_uri;
+ gboolean result;
- file_uri = nautilus_file_get_uri (file);
- result = strcmp (file_uri, "trash:///") == 0;
- g_free (file_uri);
+ file_uri = nautilus_file_get_uri (file);
+ result = strcmp (file_uri, "trash:///") == 0;
+ g_free (file_uri);
- return result;
+ return result;
}
static gboolean
is_computer_directory (NautilusFile *file)
{
- char *file_uri;
- gboolean result;
-
- file_uri = nautilus_file_get_uri (file);
- result = strcmp (file_uri, "computer:///") == 0;
- g_free (file_uri);
-
- return result;
+ char *file_uri;
+ gboolean result;
+
+ file_uri = nautilus_file_get_uri (file);
+ result = strcmp (file_uri, "computer:///") == 0;
+ g_free (file_uri);
+
+ return result;
}
static gboolean
is_root_directory (NautilusFile *file)
{
- GFile *location;
- gboolean result;
+ GFile *location;
+ gboolean result;
- location = nautilus_file_get_location (file);
- result = nautilus_is_root_directory (location);
- g_object_unref (location);
+ location = nautilus_file_get_location (file);
+ result = nautilus_is_root_directory (location);
+ g_object_unref (location);
- return result;
+ return result;
}
static gboolean
is_network_directory (NautilusFile *file)
{
- char *file_uri;
- gboolean result;
-
- file_uri = nautilus_file_get_uri (file);
- result = strcmp (file_uri, "network:///") == 0;
- g_free (file_uri);
-
- return result;
+ char *file_uri;
+ gboolean result;
+
+ file_uri = nautilus_file_get_uri (file);
+ result = strcmp (file_uri, "network:///") == 0;
+ g_free (file_uri);
+
+ return result;
}
static gboolean
is_burn_directory (NautilusFile *file)
{
- char *file_uri;
- gboolean result;
-
- file_uri = nautilus_file_get_uri (file);
- result = strcmp (file_uri, "burn:///") == 0;
- g_free (file_uri);
-
- return result;
+ char *file_uri;
+ gboolean result;
+
+ file_uri = nautilus_file_get_uri (file);
+ result = strcmp (file_uri, "burn:///") == 0;
+ g_free (file_uri);
+
+ return result;
}
static gboolean
is_recent_directory (NautilusFile *file)
{
- char *file_uri;
- gboolean result;
+ char *file_uri;
+ gboolean result;
- file_uri = nautilus_file_get_uri (file);
- result = strcmp (file_uri, "recent:///") == 0;
- g_free (file_uri);
+ file_uri = nautilus_file_get_uri (file);
+ result = strcmp (file_uri, "recent:///") == 0;
+ g_free (file_uri);
- return result;
+ return result;
}
static gboolean
-should_show_custom_icon_buttons (NautilusPropertiesWindow *window)
+should_show_custom_icon_buttons (NautilusPropertiesWindow *window)
{
- if (is_multi_file_window (window)) {
- return FALSE;
- }
+ if (is_multi_file_window (window))
+ {
+ return FALSE;
+ }
- return TRUE;
+ return TRUE;
}
static gboolean
-should_show_file_type (NautilusPropertiesWindow *window)
+should_show_file_type (NautilusPropertiesWindow *window)
{
- if (!is_multi_file_window (window)
- && (is_merged_trash_directory (get_target_file (window)) ||
- is_computer_directory (get_target_file (window)) ||
- is_network_directory (get_target_file (window)) ||
- is_burn_directory (get_target_file (window)))) {
- return FALSE;
- }
+ if (!is_multi_file_window (window)
+ && (is_merged_trash_directory (get_target_file (window)) ||
+ is_computer_directory (get_target_file (window)) ||
+ is_network_directory (get_target_file (window)) ||
+ is_burn_directory (get_target_file (window))))
+ {
+ return FALSE;
+ }
- return TRUE;
+ return TRUE;
}
static gboolean
should_show_location_info (NautilusPropertiesWindow *window)
{
- if (!is_multi_file_window (window)
- && (is_merged_trash_directory (get_target_file (window)) ||
- is_root_directory (get_target_file (window)) ||
- is_computer_directory (get_target_file (window)) ||
- is_network_directory (get_target_file (window)) ||
- is_burn_directory (get_target_file (window)))) {
- return FALSE;
- }
+ if (!is_multi_file_window (window)
+ && (is_merged_trash_directory (get_target_file (window)) ||
+ is_root_directory (get_target_file (window)) ||
+ is_computer_directory (get_target_file (window)) ||
+ is_network_directory (get_target_file (window)) ||
+ is_burn_directory (get_target_file (window))))
+ {
+ return FALSE;
+ }
- return TRUE;
+ return TRUE;
}
static gboolean
-should_show_accessed_date (NautilusPropertiesWindow *window)
+should_show_accessed_date (NautilusPropertiesWindow *window)
{
- /* Accessed date for directory seems useless. If we some
- * day decide that it is useful, we should separately
- * consider whether it's useful for "trash:".
- */
- if (file_list_all_directories (window->details->target_files)) {
- return FALSE;
- }
+ /* Accessed date for directory seems useless. If we some
+ * day decide that it is useful, we should separately
+ * consider whether it's useful for "trash:".
+ */
+ if (file_list_all_directories (window->details->target_files))
+ {
+ return FALSE;
+ }
- return TRUE;
+ return TRUE;
}
static gboolean
should_show_link_target (NautilusPropertiesWindow *window)
{
- if (!is_multi_file_window (window)
- && nautilus_file_is_symbolic_link (get_target_file (window))) {
- return TRUE;
- }
+ if (!is_multi_file_window (window)
+ && nautilus_file_is_symbolic_link (get_target_file (window)))
+ {
+ return TRUE;
+ }
- return FALSE;
+ return FALSE;
}
static gboolean
location_show_original (NautilusPropertiesWindow *window)
{
- NautilusFile *file;
+ NautilusFile *file;
- /* there is no way a recent item will be mixed with
- other items so just pick the first file to check */
- file = NAUTILUS_FILE (g_list_nth_data (window->details->original_files, 0));
- return (file != NULL && !nautilus_file_is_in_recent (file));
+ /* there is no way a recent item will be mixed with
+ * other items so just pick the first file to check */
+ file = NAUTILUS_FILE (g_list_nth_data (window->details->original_files, 0));
+ return (file != NULL && !nautilus_file_is_in_recent (file));
}
static gboolean
should_show_free_space (NautilusPropertiesWindow *window)
{
- if (!is_multi_file_window (window)
- && (is_merged_trash_directory (get_target_file (window)) ||
- is_computer_directory (get_target_file (window)) ||
- is_network_directory (get_target_file (window)) ||
- is_recent_directory (get_target_file (window)) ||
- is_burn_directory (get_target_file (window)))) {
- return FALSE;
- }
+ if (!is_multi_file_window (window)
+ && (is_merged_trash_directory (get_target_file (window)) ||
+ is_computer_directory (get_target_file (window)) ||
+ is_network_directory (get_target_file (window)) ||
+ is_recent_directory (get_target_file (window)) ||
+ is_burn_directory (get_target_file (window))))
+ {
+ return FALSE;
+ }
- if (file_list_all_directories (window->details->target_files)) {
- return TRUE;
- }
+ if (file_list_all_directories (window->details->target_files))
+ {
+ return TRUE;
+ }
- return FALSE;
+ return FALSE;
}
static gboolean
should_show_volume_info (NautilusPropertiesWindow *window)
{
- NautilusFile *file;
+ NautilusFile *file;
- if (is_multi_file_window (window)) {
- return FALSE;
- }
+ if (is_multi_file_window (window))
+ {
+ return FALSE;
+ }
- file = get_original_file (window);
+ file = get_original_file (window);
- if (file == NULL) {
- return FALSE;
- }
+ if (file == NULL)
+ {
+ return FALSE;
+ }
- if (nautilus_file_can_unmount (file)) {
- return TRUE;
- }
+ if (nautilus_file_can_unmount (file))
+ {
+ return TRUE;
+ }
- return FALSE;
+ return FALSE;
}
static gboolean
should_show_volume_usage (NautilusPropertiesWindow *window)
{
- NautilusFile *file;
- gboolean success = FALSE;
+ NautilusFile *file;
+ gboolean success = FALSE;
- if (is_multi_file_window (window)) {
- return FALSE;
- }
+ if (is_multi_file_window (window))
+ {
+ return FALSE;
+ }
- file = get_original_file (window);
+ file = get_original_file (window);
- if (file == NULL) {
- return FALSE;
- }
+ if (file == NULL)
+ {
+ return FALSE;
+ }
- if (nautilus_file_can_unmount (file)) {
- return TRUE;
- }
+ if (nautilus_file_can_unmount (file))
+ {
+ return TRUE;
+ }
- success = is_root_directory (file);
+ success = is_root_directory (file);
#ifdef TODO_GIO
- /* Look at is_mountpoint for activation uri */
+ /* Look at is_mountpoint for activation uri */
#endif
- return success;
+ return success;
}
static void
paint_legend (GtkWidget *widget,
- cairo_t *cr,
- gpointer data)
+ cairo_t *cr,
+ gpointer data)
{
- GtkStyleContext *context;
- GtkAllocation allocation;
+ GtkStyleContext *context;
+ GtkAllocation allocation;
- gtk_widget_get_allocation (widget, &allocation);
- context = gtk_widget_get_style_context (widget);
+ gtk_widget_get_allocation (widget, &allocation);
+ context = gtk_widget_get_style_context (widget);
- gtk_render_background (context, cr, 0, 0, allocation.width, allocation.height);
- gtk_render_frame (context, cr, 0, 0, allocation.width, allocation.height);
+ gtk_render_background (context, cr, 0, 0, allocation.width, allocation.height);
+ gtk_render_frame (context, cr, 0, 0, allocation.width, allocation.height);
}
static void
-paint_slice (GtkWidget *widget,
- cairo_t *cr,
- double percent_start,
- double percent_width,
- const gchar *style_class)
-{
- double angle1;
- double angle2;
- gboolean full;
- double offset = G_PI / 2.0;
- GdkRGBA stroke, fill;
- GtkStateFlags state;
- GtkBorder border;
- GtkStyleContext *context;
- double x, y, radius;
- gint width, height;
-
- if (percent_width < .01) {
- return;
- }
-
- context = gtk_widget_get_style_context (widget);
- state = gtk_style_context_get_state (context);
- gtk_style_context_get_border (context, state, &border);
-
- gtk_style_context_save (context);
- gtk_style_context_add_class (context, style_class);
- gtk_style_context_get_background_color (context, state, &fill);
- gtk_style_context_get_border_color (context, state, &stroke);
- gtk_style_context_restore (context);
-
- width = gtk_widget_get_allocated_width (widget);
- height = gtk_widget_get_allocated_height (widget);
- x = width / 2;
- y = height / 2;
-
- if (width < height) {
- radius = (width - border.left) / 2;
- } else {
- radius = (height - border.top) / 2;
- }
-
- angle1 = (percent_start * 2 * G_PI) - offset;
- angle2 = angle1 + (percent_width * 2 * G_PI);
-
- full = (percent_width > .99);
-
- if (!full) {
- cairo_move_to (cr, x, y);
- }
- cairo_arc (cr, x, y, radius, angle1, angle2);
-
- if (!full) {
- cairo_line_to (cr, x, y);
- }
-
- cairo_set_line_width (cr, border.top);
- gdk_cairo_set_source_rgba (cr, &fill);
- cairo_fill_preserve (cr);
-
- gdk_cairo_set_source_rgba (cr, &stroke);
- cairo_stroke (cr);
+paint_slice (GtkWidget *widget,
+ cairo_t *cr,
+ double percent_start,
+ double percent_width,
+ const gchar *style_class)
+{
+ double angle1;
+ double angle2;
+ gboolean full;
+ double offset = G_PI / 2.0;
+ GdkRGBA stroke, fill;
+ GtkStateFlags state;
+ GtkBorder border;
+ GtkStyleContext *context;
+ double x, y, radius;
+ gint width, height;
+
+ if (percent_width < .01)
+ {
+ return;
+ }
+
+ context = gtk_widget_get_style_context (widget);
+ state = gtk_style_context_get_state (context);
+ gtk_style_context_get_border (context, state, &border);
+
+ gtk_style_context_save (context);
+ gtk_style_context_add_class (context, style_class);
+ gtk_style_context_get_background_color (context, state, &fill);
+ gtk_style_context_get_border_color (context, state, &stroke);
+ gtk_style_context_restore (context);
+
+ width = gtk_widget_get_allocated_width (widget);
+ height = gtk_widget_get_allocated_height (widget);
+ x = width / 2;
+ y = height / 2;
+
+ if (width < height)
+ {
+ radius = (width - border.left) / 2;
+ }
+ else
+ {
+ radius = (height - border.top) / 2;
+ }
+
+ angle1 = (percent_start * 2 * G_PI) - offset;
+ angle2 = angle1 + (percent_width * 2 * G_PI);
+
+ full = (percent_width > .99);
+
+ if (!full)
+ {
+ cairo_move_to (cr, x, y);
+ }
+ cairo_arc (cr, x, y, radius, angle1, angle2);
+
+ if (!full)
+ {
+ cairo_line_to (cr, x, y);
+ }
+
+ cairo_set_line_width (cr, border.top);
+ gdk_cairo_set_source_rgba (cr, &fill);
+ cairo_fill_preserve (cr);
+
+ gdk_cairo_set_source_rgba (cr, &stroke);
+ cairo_stroke (cr);
}
static void
paint_pie_chart (GtkWidget *widget,
- cairo_t *cr,
- gpointer data)
+ cairo_t *cr,
+ gpointer data)
{
- NautilusPropertiesWindow *window;
- double free, used, reserved;
+ NautilusPropertiesWindow *window;
+ double free, used, reserved;
- window = NAUTILUS_PROPERTIES_WINDOW (data);
+ window = NAUTILUS_PROPERTIES_WINDOW (data);
- free = (double)window->details->volume_free / (double)window->details->volume_capacity;
- used = (double)window->details->volume_used / (double)window->details->volume_capacity;
- reserved = 1.0 - (used + free);
+ free = (double) window->details->volume_free / (double) window->details->volume_capacity;
+ used = (double) window->details->volume_used / (double) window->details->volume_capacity;
+ reserved = 1.0 - (used + free);
- paint_slice (widget, cr,
- 0, free, "free");
- paint_slice (widget, cr,
- free + used, reserved, "unknown");
- /* paint the used last so its slice strokes are on top */
- paint_slice (widget, cr,
- free, used, "used");
+ paint_slice (widget, cr,
+ 0, free, "free");
+ paint_slice (widget, cr,
+ free + used, reserved, "unknown");
+ /* paint the used last so its slice strokes are on top */
+ paint_slice (widget, cr,
+ free, used, "used");
}
-static GtkWidget*
+static GtkWidget *
create_pie_widget (NautilusPropertiesWindow *window)
{
- NautilusFile *file;
- GtkGrid *grid;
- GtkStyleContext *style;
- GtkWidget *pie_canvas;
- GtkWidget *used_canvas;
- GtkWidget *used_label;
- GtkWidget *used_type_label;
- GtkWidget *free_canvas;
- GtkWidget *free_label;
- GtkWidget *free_type_label;
- GtkWidget *capacity_label;
- GtkWidget *capacity_value_label;
- GtkWidget *fstype_label;
- GtkWidget *fstype_value_label;
- GtkWidget *spacer_label;
- gchar *capacity;
- gchar *used;
- gchar *free;
- const char *fs_type;
- gchar *uri;
- GFile *location;
- GFileInfo *info;
-
- capacity = g_format_size (window->details->volume_capacity);
- free = g_format_size (window->details->volume_free);
- used = g_format_size (window->details->volume_used);
-
- file = get_original_file (window);
-
- uri = nautilus_file_get_activation_uri (file);
-
- grid = GTK_GRID (gtk_grid_new ());
- gtk_widget_set_hexpand (GTK_WIDGET (grid), FALSE);
- gtk_container_set_border_width (GTK_CONTAINER (grid), 5);
- gtk_grid_set_row_spacing (GTK_GRID (grid), 10);
- gtk_grid_set_column_spacing (GTK_GRID (grid), 10);
-
- pie_canvas = gtk_drawing_area_new ();
- gtk_widget_set_size_request (pie_canvas, 200, 200);
- style = gtk_widget_get_style_context (pie_canvas);
- gtk_style_context_add_class (style, "disk-space-display");
-
- used_canvas = gtk_drawing_area_new ();
- gtk_widget_set_size_request (used_canvas, 20, 20);
- style = gtk_widget_get_style_context (used_canvas);
- gtk_style_context_add_class (style, "disk-space-display");
- gtk_style_context_add_class (style, "used");
-
- used_label = gtk_label_new (used);
- /* Translators: "used" refers to the capacity of the filesystem */
- used_type_label = gtk_label_new (_("used"));
-
- free_canvas = gtk_drawing_area_new ();
- gtk_widget_set_size_request (free_canvas, 20, 20);
- style = gtk_widget_get_style_context (free_canvas);
- gtk_style_context_add_class (style, "disk-space-display");
- gtk_style_context_add_class (style, "free");
-
- free_label = gtk_label_new (free);
- /* Translators: "free" refers to the capacity of the filesystem */
- free_type_label = gtk_label_new (_("free"));
-
- capacity_label = gtk_label_new (_("Total capacity:"));
- capacity_value_label = gtk_label_new (capacity);
-
- fstype_label = gtk_label_new (_("Filesystem type:"));
- fstype_value_label = gtk_label_new (NULL);
-
- spacer_label = gtk_label_new ("");
-
- location = g_file_new_for_uri (uri);
- info = g_file_query_filesystem_info (location, G_FILE_ATTRIBUTE_FILESYSTEM_TYPE,
- NULL, NULL);
- if (info) {
- fs_type = g_file_info_get_attribute_string (info, G_FILE_ATTRIBUTE_FILESYSTEM_TYPE);
- if (fs_type != NULL) {
- gtk_label_set_text (GTK_LABEL (fstype_value_label), fs_type);
- }
-
- g_object_unref (info);
- }
- g_object_unref (location);
-
- g_free (uri);
- g_free (capacity);
- g_free (used);
- g_free (free);
-
- gtk_container_add_with_properties (GTK_CONTAINER (grid), pie_canvas,
- "height", 5,
- NULL);
-
- gtk_widget_set_vexpand (spacer_label, TRUE);
- gtk_grid_attach_next_to (grid, spacer_label, pie_canvas,
- GTK_POS_RIGHT, 1, 1);
-
- gtk_widget_set_halign (used_canvas, GTK_ALIGN_END);
- gtk_widget_set_vexpand (used_canvas, FALSE);
- gtk_grid_attach_next_to (grid, used_canvas, spacer_label,
- GTK_POS_BOTTOM, 1, 1);
- gtk_widget_set_halign (used_label, GTK_ALIGN_END);
- gtk_widget_set_vexpand (used_label, FALSE);
- gtk_grid_attach_next_to (grid, used_label, used_canvas,
- GTK_POS_RIGHT, 1, 1);
- gtk_widget_set_halign (used_type_label, GTK_ALIGN_START);
- gtk_widget_set_vexpand (used_type_label, FALSE);
- gtk_grid_attach_next_to (grid, used_type_label, used_label,
- GTK_POS_RIGHT, 1, 1);
-
- gtk_widget_set_halign (free_canvas, GTK_ALIGN_END);
- gtk_widget_set_vexpand (free_canvas, FALSE);
- gtk_grid_attach_next_to (grid, free_canvas, used_canvas,
- GTK_POS_BOTTOM, 1, 1);
- gtk_widget_set_halign (free_label, GTK_ALIGN_END);
- gtk_widget_set_vexpand (free_label, FALSE);
- gtk_grid_attach_next_to (grid, free_label, free_canvas,
- GTK_POS_RIGHT, 1, 1);
- gtk_widget_set_halign (free_type_label, GTK_ALIGN_START);
- gtk_widget_set_vexpand (free_type_label, FALSE);
- gtk_grid_attach_next_to (grid, free_type_label, free_label,
- GTK_POS_RIGHT, 1, 1);
-
- gtk_widget_set_halign (capacity_label, GTK_ALIGN_END);
- gtk_widget_set_vexpand (capacity_label, FALSE);
- gtk_grid_attach_next_to (grid, capacity_label, free_canvas,
- GTK_POS_BOTTOM, 1, 1);
- gtk_widget_set_halign (capacity_value_label, GTK_ALIGN_START);
- gtk_widget_set_vexpand (capacity_value_label, FALSE);
- gtk_grid_attach_next_to (grid, capacity_value_label, capacity_label,
- GTK_POS_RIGHT, 1, 1);
-
- gtk_widget_set_halign (fstype_label, GTK_ALIGN_END);
- gtk_widget_set_vexpand (fstype_label, FALSE);
- gtk_grid_attach_next_to (grid, fstype_label, capacity_label,
- GTK_POS_BOTTOM, 1, 1);
- gtk_widget_set_halign (fstype_value_label, GTK_ALIGN_START);
- gtk_widget_set_vexpand (fstype_value_label, FALSE);
- gtk_grid_attach_next_to (grid, fstype_value_label, fstype_label,
- GTK_POS_RIGHT, 1, 1);
-
- g_signal_connect (pie_canvas, "draw",
- G_CALLBACK (paint_pie_chart), window);
- g_signal_connect (used_canvas, "draw",
- G_CALLBACK (paint_legend), window);
- g_signal_connect (free_canvas, "draw",
- G_CALLBACK (paint_legend), window);
-
- return GTK_WIDGET (grid);
-}
-
-static GtkWidget*
+ NautilusFile *file;
+ GtkGrid *grid;
+ GtkStyleContext *style;
+ GtkWidget *pie_canvas;
+ GtkWidget *used_canvas;
+ GtkWidget *used_label;
+ GtkWidget *used_type_label;
+ GtkWidget *free_canvas;
+ GtkWidget *free_label;
+ GtkWidget *free_type_label;
+ GtkWidget *capacity_label;
+ GtkWidget *capacity_value_label;
+ GtkWidget *fstype_label;
+ GtkWidget *fstype_value_label;
+ GtkWidget *spacer_label;
+ gchar *capacity;
+ gchar *used;
+ gchar *free;
+ const char *fs_type;
+ gchar *uri;
+ GFile *location;
+ GFileInfo *info;
+
+ capacity = g_format_size (window->details->volume_capacity);
+ free = g_format_size (window->details->volume_free);
+ used = g_format_size (window->details->volume_used);
+
+ file = get_original_file (window);
+
+ uri = nautilus_file_get_activation_uri (file);
+
+ grid = GTK_GRID (gtk_grid_new ());
+ gtk_widget_set_hexpand (GTK_WIDGET (grid), FALSE);
+ gtk_container_set_border_width (GTK_CONTAINER (grid), 5);
+ gtk_grid_set_row_spacing (GTK_GRID (grid), 10);
+ gtk_grid_set_column_spacing (GTK_GRID (grid), 10);
+
+ pie_canvas = gtk_drawing_area_new ();
+ gtk_widget_set_size_request (pie_canvas, 200, 200);
+ style = gtk_widget_get_style_context (pie_canvas);
+ gtk_style_context_add_class (style, "disk-space-display");
+
+ used_canvas = gtk_drawing_area_new ();
+ gtk_widget_set_size_request (used_canvas, 20, 20);
+ style = gtk_widget_get_style_context (used_canvas);
+ gtk_style_context_add_class (style, "disk-space-display");
+ gtk_style_context_add_class (style, "used");
+
+ used_label = gtk_label_new (used);
+ /* Translators: "used" refers to the capacity of the filesystem */
+ used_type_label = gtk_label_new (_("used"));
+
+ free_canvas = gtk_drawing_area_new ();
+ gtk_widget_set_size_request (free_canvas, 20, 20);
+ style = gtk_widget_get_style_context (free_canvas);
+ gtk_style_context_add_class (style, "disk-space-display");
+ gtk_style_context_add_class (style, "free");
+
+ free_label = gtk_label_new (free);
+ /* Translators: "free" refers to the capacity of the filesystem */
+ free_type_label = gtk_label_new (_("free"));
+
+ capacity_label = gtk_label_new (_("Total capacity:"));
+ capacity_value_label = gtk_label_new (capacity);
+
+ fstype_label = gtk_label_new (_("Filesystem type:"));
+ fstype_value_label = gtk_label_new (NULL);
+
+ spacer_label = gtk_label_new ("");
+
+ location = g_file_new_for_uri (uri);
+ info = g_file_query_filesystem_info (location, G_FILE_ATTRIBUTE_FILESYSTEM_TYPE,
+ NULL, NULL);
+ if (info)
+ {
+ fs_type = g_file_info_get_attribute_string (info, G_FILE_ATTRIBUTE_FILESYSTEM_TYPE);
+ if (fs_type != NULL)
+ {
+ gtk_label_set_text (GTK_LABEL (fstype_value_label), fs_type);
+ }
+
+ g_object_unref (info);
+ }
+ g_object_unref (location);
+
+ g_free (uri);
+ g_free (capacity);
+ g_free (used);
+ g_free (free);
+
+ gtk_container_add_with_properties (GTK_CONTAINER (grid), pie_canvas,
+ "height", 5,
+ NULL);
+
+ gtk_widget_set_vexpand (spacer_label, TRUE);
+ gtk_grid_attach_next_to (grid, spacer_label, pie_canvas,
+ GTK_POS_RIGHT, 1, 1);
+
+ gtk_widget_set_halign (used_canvas, GTK_ALIGN_END);
+ gtk_widget_set_vexpand (used_canvas, FALSE);
+ gtk_grid_attach_next_to (grid, used_canvas, spacer_label,
+ GTK_POS_BOTTOM, 1, 1);
+ gtk_widget_set_halign (used_label, GTK_ALIGN_END);
+ gtk_widget_set_vexpand (used_label, FALSE);
+ gtk_grid_attach_next_to (grid, used_label, used_canvas,
+ GTK_POS_RIGHT, 1, 1);
+ gtk_widget_set_halign (used_type_label, GTK_ALIGN_START);
+ gtk_widget_set_vexpand (used_type_label, FALSE);
+ gtk_grid_attach_next_to (grid, used_type_label, used_label,
+ GTK_POS_RIGHT, 1, 1);
+
+ gtk_widget_set_halign (free_canvas, GTK_ALIGN_END);
+ gtk_widget_set_vexpand (free_canvas, FALSE);
+ gtk_grid_attach_next_to (grid, free_canvas, used_canvas,
+ GTK_POS_BOTTOM, 1, 1);
+ gtk_widget_set_halign (free_label, GTK_ALIGN_END);
+ gtk_widget_set_vexpand (free_label, FALSE);
+ gtk_grid_attach_next_to (grid, free_label, free_canvas,
+ GTK_POS_RIGHT, 1, 1);
+ gtk_widget_set_halign (free_type_label, GTK_ALIGN_START);
+ gtk_widget_set_vexpand (free_type_label, FALSE);
+ gtk_grid_attach_next_to (grid, free_type_label, free_label,
+ GTK_POS_RIGHT, 1, 1);
+
+ gtk_widget_set_halign (capacity_label, GTK_ALIGN_END);
+ gtk_widget_set_vexpand (capacity_label, FALSE);
+ gtk_grid_attach_next_to (grid, capacity_label, free_canvas,
+ GTK_POS_BOTTOM, 1, 1);
+ gtk_widget_set_halign (capacity_value_label, GTK_ALIGN_START);
+ gtk_widget_set_vexpand (capacity_value_label, FALSE);
+ gtk_grid_attach_next_to (grid, capacity_value_label, capacity_label,
+ GTK_POS_RIGHT, 1, 1);
+
+ gtk_widget_set_halign (fstype_label, GTK_ALIGN_END);
+ gtk_widget_set_vexpand (fstype_label, FALSE);
+ gtk_grid_attach_next_to (grid, fstype_label, capacity_label,
+ GTK_POS_BOTTOM, 1, 1);
+ gtk_widget_set_halign (fstype_value_label, GTK_ALIGN_START);
+ gtk_widget_set_vexpand (fstype_value_label, FALSE);
+ gtk_grid_attach_next_to (grid, fstype_value_label, fstype_label,
+ GTK_POS_RIGHT, 1, 1);
+
+ g_signal_connect (pie_canvas, "draw",
+ G_CALLBACK (paint_pie_chart), window);
+ g_signal_connect (used_canvas, "draw",
+ G_CALLBACK (paint_legend), window);
+ g_signal_connect (free_canvas, "draw",
+ G_CALLBACK (paint_legend), window);
+
+ return GTK_WIDGET (grid);
+}
+
+static GtkWidget *
create_volume_usage_widget (NautilusPropertiesWindow *window)
{
- GtkWidget *piewidget = NULL;
- gchar *uri;
- NautilusFile *file;
- GFile *location;
- GFileInfo *info;
+ GtkWidget *piewidget = NULL;
+ gchar *uri;
+ NautilusFile *file;
+ GFile *location;
+ GFileInfo *info;
- file = get_original_file (window);
+ file = get_original_file (window);
- uri = nautilus_file_get_activation_uri (file);
+ uri = nautilus_file_get_activation_uri (file);
- location = g_file_new_for_uri (uri);
- info = g_file_query_filesystem_info (location, "filesystem::*", NULL, NULL);
+ location = g_file_new_for_uri (uri);
+ info = g_file_query_filesystem_info (location, "filesystem::*", NULL, NULL);
- if (info) {
- window->details->volume_capacity = g_file_info_get_attribute_uint64 (info, G_FILE_ATTRIBUTE_FILESYSTEM_SIZE);
- window->details->volume_free = g_file_info_get_attribute_uint64 (info, G_FILE_ATTRIBUTE_FILESYSTEM_FREE);
- if (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_FILESYSTEM_USED)) {
- window->details->volume_used = g_file_info_get_attribute_uint64 (info, G_FILE_ATTRIBUTE_FILESYSTEM_USED);
- } else {
- window->details->volume_used = window->details->volume_capacity - window->details->volume_free;
- }
+ if (info)
+ {
+ window->details->volume_capacity = g_file_info_get_attribute_uint64 (info, G_FILE_ATTRIBUTE_FILESYSTEM_SIZE);
+ window->details->volume_free = g_file_info_get_attribute_uint64 (info, G_FILE_ATTRIBUTE_FILESYSTEM_FREE);
+ if (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_FILESYSTEM_USED))
+ {
+ window->details->volume_used = g_file_info_get_attribute_uint64 (info, G_FILE_ATTRIBUTE_FILESYSTEM_USED);
+ }
+ else
+ {
+ window->details->volume_used = window->details->volume_capacity - window->details->volume_free;
+ }
- g_object_unref (info);
- } else {
- window->details->volume_capacity = 0;
- window->details->volume_free = 0;
- window->details->volume_used = 0;
- }
+ g_object_unref (info);
+ }
+ else
+ {
+ window->details->volume_capacity = 0;
+ window->details->volume_free = 0;
+ window->details->volume_used = 0;
+ }
- g_object_unref (location);
+ g_object_unref (location);
- if (window->details->volume_capacity > 0) {
- piewidget = create_pie_widget (window);
- gtk_widget_show_all (piewidget);
- }
+ if (window->details->volume_capacity > 0)
+ {
+ piewidget = create_pie_widget (window);
+ gtk_widget_show_all (piewidget);
+ }
- return piewidget;
+ return piewidget;
}
static void
create_basic_page (NautilusPropertiesWindow *window)
{
- GtkGrid *grid;
- GtkWidget *icon_pixmap_widget;
- GtkWidget *volume_usage;
- GtkWidget *hbox, *vbox;
-
- hbox = create_page_with_hbox (window->details->notebook, _("Basic"),
- "help:gnome-help/nautilus-file-properties-basic");
-
- /* Icon pixmap */
-
- icon_pixmap_widget = create_image_widget (
- window, should_show_custom_icon_buttons (window));
- gtk_widget_set_valign (icon_pixmap_widget, GTK_ALIGN_START);
- gtk_widget_show (icon_pixmap_widget);
-
- gtk_box_pack_start (GTK_BOX (hbox), icon_pixmap_widget, FALSE, FALSE, 0);
-
- window->details->icon_chooser = NULL;
-
- /* Grid */
-
- vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
- gtk_widget_show (vbox);
- gtk_container_add (GTK_CONTAINER (hbox), vbox);
-
- grid = GTK_GRID (create_grid_with_standard_properties ());
- gtk_box_pack_start (GTK_BOX (vbox), GTK_WIDGET (grid), FALSE, FALSE, 0);
- window->details->basic_grid = grid;
-
- /* Name label. The text will be determined in update_name_field */
- window->details->name_label = attach_title_field (grid, NULL);
-
- /* Name field */
- window->details->name_field = NULL;
- update_name_field (window);
-
- /* Start with name field selected, if it's an entry. */
- if (NAUTILUS_IS_ENTRY (window->details->name_field)) {
- nautilus_entry_select_all (NAUTILUS_ENTRY (window->details->name_field));
- gtk_widget_grab_focus (GTK_WIDGET (window->details->name_field));
- }
-
- if (nautilus_desktop_item_properties_should_show (window->details->target_files)) {
- GtkSizeGroup *label_size_group;
- GtkWidget *box;
-
- label_size_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
- gtk_size_group_add_widget (label_size_group,
- GTK_WIDGET (window->details->name_label));
- box = nautilus_desktop_item_properties_make_box (label_size_group,
- window->details->target_files);
-
- gtk_grid_attach_next_to (window->details->basic_grid, box,
- GTK_WIDGET (window->details->name_label),
- GTK_POS_BOTTOM, 2, 1);
- }
-
- if (should_show_file_type (window)) {
- append_title_and_ellipsizing_value (window, grid,
- _("Type:"),
- "detailed_type",
- INCONSISTENT_STATE_STRING,
- FALSE);
- }
-
- if (should_show_link_target (window)) {
- append_title_and_ellipsizing_value (window, grid,
- _("Link target:"),
- "link_target",
- INCONSISTENT_STATE_STRING,
- FALSE);
- }
-
- if (is_multi_file_window (window) ||
- nautilus_file_is_directory (get_target_file (window))) {
- append_directory_contents_fields (window, grid);
- } else {
- append_title_value_pair (window, grid, _("Size:"),
- "size_detail",
- INCONSISTENT_STATE_STRING,
- FALSE);
- }
-
- append_blank_row (grid);
-
- if (should_show_location_info (window)) {
- append_title_and_ellipsizing_value (window, grid, _("Parent Folder:"),
- "where",
- INCONSISTENT_STATE_STRING,
- location_show_original (window));
- }
-
- if (should_show_volume_info (window)) {
- append_title_and_ellipsizing_value (window, grid,
- _("Volume:"),
- "volume",
- INCONSISTENT_STATE_STRING,
- FALSE);
- }
-
- if (should_show_accessed_date (window)) {
- append_blank_row (grid);
-
- append_title_value_pair (window, grid, _("Accessed:"),
- "date_accessed_full",
- INCONSISTENT_STATE_STRING,
- FALSE);
- append_title_value_pair (window, grid, _("Modified:"),
- "date_modified_full",
- INCONSISTENT_STATE_STRING,
- FALSE);
- }
-
- if (should_show_free_space (window)
- && ! should_show_volume_usage (window)) {
- append_blank_row (grid);
-
- append_title_value_pair (window, grid, _("Free space:"),
- "free_space",
- INCONSISTENT_STATE_STRING,
- FALSE);
- }
-
- if (should_show_volume_usage (window)) {
- volume_usage = create_volume_usage_widget (window);
- if (volume_usage != NULL) {
- gtk_container_add_with_properties (GTK_CONTAINER (grid),
- volume_usage,
- "width", 3,
- NULL);
- }
- }
-}
-
-static gboolean
+ GtkGrid *grid;
+ GtkWidget *icon_pixmap_widget;
+ GtkWidget *volume_usage;
+ GtkWidget *hbox, *vbox;
+
+ hbox = create_page_with_hbox (window->details->notebook, _("Basic"),
+ "help:gnome-help/nautilus-file-properties-basic");
+
+ /* Icon pixmap */
+
+ icon_pixmap_widget = create_image_widget (
+ window, should_show_custom_icon_buttons (window));
+ gtk_widget_set_valign (icon_pixmap_widget, GTK_ALIGN_START);
+ gtk_widget_show (icon_pixmap_widget);
+
+ gtk_box_pack_start (GTK_BOX (hbox), icon_pixmap_widget, FALSE, FALSE, 0);
+
+ window->details->icon_chooser = NULL;
+
+ /* Grid */
+
+ vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
+ gtk_widget_show (vbox);
+ gtk_container_add (GTK_CONTAINER (hbox), vbox);
+
+ grid = GTK_GRID (create_grid_with_standard_properties ());
+ gtk_box_pack_start (GTK_BOX (vbox), GTK_WIDGET (grid), FALSE, FALSE, 0);
+ window->details->basic_grid = grid;
+
+ /* Name label. The text will be determined in update_name_field */
+ window->details->name_label = attach_title_field (grid, NULL);
+
+ /* Name field */
+ window->details->name_field = NULL;
+ update_name_field (window);
+
+ /* Start with name field selected, if it's an entry. */
+ if (NAUTILUS_IS_ENTRY (window->details->name_field))
+ {
+ nautilus_entry_select_all (NAUTILUS_ENTRY (window->details->name_field));
+ gtk_widget_grab_focus (GTK_WIDGET (window->details->name_field));
+ }
+
+ if (nautilus_desktop_item_properties_should_show (window->details->target_files))
+ {
+ GtkSizeGroup *label_size_group;
+ GtkWidget *box;
+
+ label_size_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
+ gtk_size_group_add_widget (label_size_group,
+ GTK_WIDGET (window->details->name_label));
+ box = nautilus_desktop_item_properties_make_box (label_size_group,
+ window->details->target_files);
+
+ gtk_grid_attach_next_to (window->details->basic_grid, box,
+ GTK_WIDGET (window->details->name_label),
+ GTK_POS_BOTTOM, 2, 1);
+ }
+
+ if (should_show_file_type (window))
+ {
+ append_title_and_ellipsizing_value (window, grid,
+ _("Type:"),
+ "detailed_type",
+ INCONSISTENT_STATE_STRING,
+ FALSE);
+ }
+
+ if (should_show_link_target (window))
+ {
+ append_title_and_ellipsizing_value (window, grid,
+ _("Link target:"),
+ "link_target",
+ INCONSISTENT_STATE_STRING,
+ FALSE);
+ }
+
+ if (is_multi_file_window (window) ||
+ nautilus_file_is_directory (get_target_file (window)))
+ {
+ append_directory_contents_fields (window, grid);
+ }
+ else
+ {
+ append_title_value_pair (window, grid, _("Size:"),
+ "size_detail",
+ INCONSISTENT_STATE_STRING,
+ FALSE);
+ }
+
+ append_blank_row (grid);
+
+ if (should_show_location_info (window))
+ {
+ append_title_and_ellipsizing_value (window, grid, _("Parent Folder:"),
+ "where",
+ INCONSISTENT_STATE_STRING,
+ location_show_original (window));
+ }
+
+ if (should_show_volume_info (window))
+ {
+ append_title_and_ellipsizing_value (window, grid,
+ _("Volume:"),
+ "volume",
+ INCONSISTENT_STATE_STRING,
+ FALSE);
+ }
+
+ if (should_show_accessed_date (window))
+ {
+ append_blank_row (grid);
+
+ append_title_value_pair (window, grid, _("Accessed:"),
+ "date_accessed_full",
+ INCONSISTENT_STATE_STRING,
+ FALSE);
+ append_title_value_pair (window, grid, _("Modified:"),
+ "date_modified_full",
+ INCONSISTENT_STATE_STRING,
+ FALSE);
+ }
+
+ if (should_show_free_space (window)
+ && !should_show_volume_usage (window))
+ {
+ append_blank_row (grid);
+
+ append_title_value_pair (window, grid, _("Free space:"),
+ "free_space",
+ INCONSISTENT_STATE_STRING,
+ FALSE);
+ }
+
+ if (should_show_volume_usage (window))
+ {
+ volume_usage = create_volume_usage_widget (window);
+ if (volume_usage != NULL)
+ {
+ gtk_container_add_with_properties (GTK_CONTAINER (grid),
+ volume_usage,
+ "width", 3,
+ NULL);
+ }
+ }
+}
+
+static gboolean
files_has_directory (NautilusPropertiesWindow *window)
{
- GList *l;
+ GList *l;
- for (l = window->details->target_files; l != NULL; l = l->next) {
- NautilusFile *file;
- file = NAUTILUS_FILE (l->data);
- if (nautilus_file_is_directory (file)) {
- return TRUE;
- }
-
- }
+ for (l = window->details->target_files; l != NULL; l = l->next)
+ {
+ NautilusFile *file;
+ file = NAUTILUS_FILE (l->data);
+ if (nautilus_file_is_directory (file))
+ {
+ return TRUE;
+ }
+ }
- return FALSE;
+ return FALSE;
}
static gboolean
files_has_changable_permissions_directory (NautilusPropertiesWindow *window)
{
- GList *l;
- gboolean changable = FALSE;
-
- for (l = window->details->target_files; l != NULL; l = l->next) {
- NautilusFile *file;
- file = NAUTILUS_FILE (l->data);
- if (nautilus_file_is_directory (file) &&
- nautilus_file_can_get_permissions (file) &&
- nautilus_file_can_set_permissions (file)) {
- changable = TRUE;
- } else {
- changable = FALSE;
- break;
- }
- }
-
- return changable;
+ GList *l;
+ gboolean changable = FALSE;
+
+ for (l = window->details->target_files; l != NULL; l = l->next)
+ {
+ NautilusFile *file;
+ file = NAUTILUS_FILE (l->data);
+ if (nautilus_file_is_directory (file) &&
+ nautilus_file_can_get_permissions (file) &&
+ nautilus_file_can_set_permissions (file))
+ {
+ changable = TRUE;
+ }
+ else
+ {
+ changable = FALSE;
+ break;
+ }
+ }
+
+ return changable;
}
static gboolean
files_has_file (NautilusPropertiesWindow *window)
{
- GList *l;
+ GList *l;
- for (l = window->details->target_files; l != NULL; l = l->next) {
- NautilusFile *file;
- file = NAUTILUS_FILE (l->data);
- if (!nautilus_file_is_directory (file)) {
- return TRUE;
- }
- }
+ for (l = window->details->target_files; l != NULL; l = l->next)
+ {
+ NautilusFile *file;
+ file = NAUTILUS_FILE (l->data);
+ if (!nautilus_file_is_directory (file))
+ {
+ return TRUE;
+ }
+ }
- return FALSE;
+ return FALSE;
}
static void
start_long_operation (NautilusPropertiesWindow *window)
{
- if (window->details->long_operation_underway == 0) {
- /* start long operation */
- GdkDisplay *display;
- GdkCursor * cursor;
+ if (window->details->long_operation_underway == 0)
+ {
+ /* start long operation */
+ GdkDisplay *display;
+ GdkCursor *cursor;
- display = gtk_widget_get_display (GTK_WIDGET (window));
- cursor = gdk_cursor_new_for_display (display, GDK_WATCH);
- gdk_window_set_cursor (gtk_widget_get_window (GTK_WIDGET (window)), cursor);
- g_object_unref (cursor);
- }
- window->details->long_operation_underway ++;
+ display = gtk_widget_get_display (GTK_WIDGET (window));
+ cursor = gdk_cursor_new_for_display (display, GDK_WATCH);
+ gdk_window_set_cursor (gtk_widget_get_window (GTK_WIDGET (window)), cursor);
+ g_object_unref (cursor);
+ }
+ window->details->long_operation_underway++;
}
static void
end_long_operation (NautilusPropertiesWindow *window)
{
- if (gtk_widget_get_window (GTK_WIDGET (window)) != NULL &&
- window->details->long_operation_underway == 1) {
- /* finished !! */
- gdk_window_set_cursor (gtk_widget_get_window (GTK_WIDGET (window)), NULL);
- }
- window->details->long_operation_underway--;
+ if (gtk_widget_get_window (GTK_WIDGET (window)) != NULL &&
+ window->details->long_operation_underway == 1)
+ {
+ /* finished !! */
+ gdk_window_set_cursor (gtk_widget_get_window (GTK_WIDGET (window)), NULL);
+ }
+ window->details->long_operation_underway--;
}
static void
permission_change_callback (NautilusFile *file,
- GFile *res_loc,
- GError *error,
- gpointer callback_data)
+ GFile *res_loc,
+ GError *error,
+ gpointer callback_data)
{
- NautilusPropertiesWindow *window;
- g_assert (callback_data != NULL);
+ NautilusPropertiesWindow *window;
+ g_assert (callback_data != NULL);
+
+ window = NAUTILUS_PROPERTIES_WINDOW (callback_data);
+ end_long_operation (window);
- window = NAUTILUS_PROPERTIES_WINDOW (callback_data);
- end_long_operation (window);
-
- /* Report the error if it's an error. */
- nautilus_report_error_setting_permissions (file, error, NULL);
+ /* Report the error if it's an error. */
+ nautilus_report_error_setting_permissions (file, error, NULL);
- g_object_unref (window);
+ g_object_unref (window);
}
static void
update_permissions (NautilusPropertiesWindow *window,
- guint32 vfs_new_perm,
- guint32 vfs_mask,
- gboolean is_folder,
- gboolean apply_to_both_folder_and_dir,
- gboolean use_original)
-{
- GList *l;
-
- for (l = window->details->target_files; l != NULL; l = l->next) {
- NautilusFile *file;
- guint32 permissions;
-
- file = NAUTILUS_FILE (l->data);
-
- if (!nautilus_file_can_get_permissions (file)) {
- continue;
- }
-
- if (!apply_to_both_folder_and_dir &&
- ((nautilus_file_is_directory (file) && !is_folder) ||
- (!nautilus_file_is_directory (file) && is_folder))) {
- continue;
- }
-
- permissions = nautilus_file_get_permissions (file);
- if (use_original) {
- gpointer ptr;
- if (g_hash_table_lookup_extended (window->details->initial_permissions,
- file, NULL, &ptr)) {
- permissions = (permissions & ~vfs_mask) | (GPOINTER_TO_INT (ptr) & vfs_mask);
- }
- } else {
- permissions = (permissions & ~vfs_mask) | vfs_new_perm;
- }
-
- start_long_operation (window);
- g_object_ref (window);
- nautilus_file_set_permissions
- (file, permissions,
- permission_change_callback,
- window);
- }
+ guint32 vfs_new_perm,
+ guint32 vfs_mask,
+ gboolean is_folder,
+ gboolean apply_to_both_folder_and_dir,
+ gboolean use_original)
+{
+ GList *l;
+
+ for (l = window->details->target_files; l != NULL; l = l->next)
+ {
+ NautilusFile *file;
+ guint32 permissions;
+
+ file = NAUTILUS_FILE (l->data);
+
+ if (!nautilus_file_can_get_permissions (file))
+ {
+ continue;
+ }
+
+ if (!apply_to_both_folder_and_dir &&
+ ((nautilus_file_is_directory (file) && !is_folder) ||
+ (!nautilus_file_is_directory (file) && is_folder)))
+ {
+ continue;
+ }
+
+ permissions = nautilus_file_get_permissions (file);
+ if (use_original)
+ {
+ gpointer ptr;
+ if (g_hash_table_lookup_extended (window->details->initial_permissions,
+ file, NULL, &ptr))
+ {
+ permissions = (permissions & ~vfs_mask) | (GPOINTER_TO_INT (ptr) & vfs_mask);
+ }
+ }
+ else
+ {
+ permissions = (permissions & ~vfs_mask) | vfs_new_perm;
+ }
+
+ start_long_operation (window);
+ g_object_ref (window);
+ nautilus_file_set_permissions
+ (file, permissions,
+ permission_change_callback,
+ window);
+ }
}
static gboolean
initial_permission_state_consistent (NautilusPropertiesWindow *window,
- guint32 mask,
- gboolean is_folder,
- gboolean both_folder_and_dir)
-{
- GList *l;
- gboolean first;
- guint32 first_permissions;
-
- first = TRUE;
- first_permissions = 0;
- for (l = window->details->target_files; l != NULL; l = l->next) {
- NautilusFile *file;
- guint32 permissions;
-
- file = l->data;
-
- if (!both_folder_and_dir &&
- ((nautilus_file_is_directory (file) && !is_folder) ||
- (!nautilus_file_is_directory (file) && is_folder))) {
- continue;
- }
-
- permissions = GPOINTER_TO_INT (g_hash_table_lookup (window->details->initial_permissions,
- file));
-
- if (first) {
- if ((permissions & mask) != mask &&
- (permissions & mask) != 0) {
- /* Not fully on or off -> inconsistent */
- return FALSE;
- }
-
- first_permissions = permissions;
- first = FALSE;
-
- } else if ((permissions & mask) != first_permissions) {
- /* Not same permissions as first -> inconsistent */
- return FALSE;
- }
- }
- return TRUE;
+ guint32 mask,
+ gboolean is_folder,
+ gboolean both_folder_and_dir)
+{
+ GList *l;
+ gboolean first;
+ guint32 first_permissions;
+
+ first = TRUE;
+ first_permissions = 0;
+ for (l = window->details->target_files; l != NULL; l = l->next)
+ {
+ NautilusFile *file;
+ guint32 permissions;
+
+ file = l->data;
+
+ if (!both_folder_and_dir &&
+ ((nautilus_file_is_directory (file) && !is_folder) ||
+ (!nautilus_file_is_directory (file) && is_folder)))
+ {
+ continue;
+ }
+
+ permissions = GPOINTER_TO_INT (g_hash_table_lookup (window->details->initial_permissions,
+ file));
+
+ if (first)
+ {
+ if ((permissions & mask) != mask &&
+ (permissions & mask) != 0)
+ {
+ /* Not fully on or off -> inconsistent */
+ return FALSE;
+ }
+
+ first_permissions = permissions;
+ first = FALSE;
+ }
+ else if ((permissions & mask) != first_permissions)
+ {
+ /* Not same permissions as first -> inconsistent */
+ return FALSE;
+ }
+ }
+ return TRUE;
}
static void
-permission_button_toggled (GtkToggleButton *button,
- NautilusPropertiesWindow *window)
-{
- gboolean is_folder, is_special;
- guint32 permission_mask;
- gboolean inconsistent;
- gboolean on;
-
- permission_mask = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (button),
- "permission"));
- is_folder = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (button),
- "is-folder"));
- is_special = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (button),
- "is-special"));
-
- if (gtk_toggle_button_get_active (button)
- && !gtk_toggle_button_get_inconsistent (button)) {
- /* Go to the initial state unless the initial state was
- consistent, or we support recursive apply */
- inconsistent = TRUE;
- on = TRUE;
-
- if (initial_permission_state_consistent (window, permission_mask, is_folder, is_special)) {
- inconsistent = FALSE;
- on = TRUE;
- }
- } else if (gtk_toggle_button_get_inconsistent (button)
- && !gtk_toggle_button_get_active (button)) {
- inconsistent = FALSE;
- on = TRUE;
- } else {
- inconsistent = FALSE;
- on = FALSE;
- }
-
- g_signal_handlers_block_by_func (G_OBJECT (button),
- G_CALLBACK (permission_button_toggled),
- window);
-
- gtk_toggle_button_set_active (button, on);
- gtk_toggle_button_set_inconsistent (button, inconsistent);
-
- g_signal_handlers_unblock_by_func (G_OBJECT (button),
- G_CALLBACK (permission_button_toggled),
- window);
-
- update_permissions (window,
- on?permission_mask:0,
- permission_mask,
- is_folder,
- is_special,
- inconsistent);
+permission_button_toggled (GtkToggleButton *button,
+ NautilusPropertiesWindow *window)
+{
+ gboolean is_folder, is_special;
+ guint32 permission_mask;
+ gboolean inconsistent;
+ gboolean on;
+
+ permission_mask = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (button),
+ "permission"));
+ is_folder = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (button),
+ "is-folder"));
+ is_special = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (button),
+ "is-special"));
+
+ if (gtk_toggle_button_get_active (button)
+ && !gtk_toggle_button_get_inconsistent (button))
+ {
+ /* Go to the initial state unless the initial state was
+ * consistent, or we support recursive apply */
+ inconsistent = TRUE;
+ on = TRUE;
+
+ if (initial_permission_state_consistent (window, permission_mask, is_folder, is_special))
+ {
+ inconsistent = FALSE;
+ on = TRUE;
+ }
+ }
+ else if (gtk_toggle_button_get_inconsistent (button)
+ && !gtk_toggle_button_get_active (button))
+ {
+ inconsistent = FALSE;
+ on = TRUE;
+ }
+ else
+ {
+ inconsistent = FALSE;
+ on = FALSE;
+ }
+
+ g_signal_handlers_block_by_func (G_OBJECT (button),
+ G_CALLBACK (permission_button_toggled),
+ window);
+
+ gtk_toggle_button_set_active (button, on);
+ gtk_toggle_button_set_inconsistent (button, inconsistent);
+
+ g_signal_handlers_unblock_by_func (G_OBJECT (button),
+ G_CALLBACK (permission_button_toggled),
+ window);
+
+ update_permissions (window,
+ on ? permission_mask : 0,
+ permission_mask,
+ is_folder,
+ is_special,
+ inconsistent);
}
static void
permission_button_update (NautilusPropertiesWindow *window,
- GtkToggleButton *button)
-{
- GList *l;
- gboolean all_set;
- gboolean all_unset;
- gboolean all_cannot_set;
- gboolean is_folder, is_special;
- gboolean no_match;
- gboolean sensitive;
- guint32 button_permission;
-
- button_permission = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (button),
- "permission"));
- is_folder = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (button),
- "is-folder"));
- is_special = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (button),
- "is-special"));
-
- all_set = TRUE;
- all_unset = TRUE;
- all_cannot_set = TRUE;
- no_match = TRUE;
- for (l = window->details->target_files; l != NULL; l = l->next) {
- NautilusFile *file;
- guint32 file_permissions;
-
- file = NAUTILUS_FILE (l->data);
-
- if (!nautilus_file_can_get_permissions (file)) {
- continue;
- }
-
- if (!is_special &&
- ((nautilus_file_is_directory (file) && !is_folder) ||
- (!nautilus_file_is_directory (file) && is_folder))) {
- continue;
- }
-
- no_match = FALSE;
-
- file_permissions = nautilus_file_get_permissions (file);
-
- if ((file_permissions & button_permission) == button_permission) {
- all_unset = FALSE;
- } else if ((file_permissions & button_permission) == 0) {
- all_set = FALSE;
- } else {
- all_unset = FALSE;
- all_set = FALSE;
- }
-
- if (nautilus_file_can_set_permissions (file)) {
- all_cannot_set = FALSE;
- }
- }
-
- sensitive = !all_cannot_set;
-
- g_signal_handlers_block_by_func (G_OBJECT (button),
- G_CALLBACK (permission_button_toggled),
- window);
-
- gtk_toggle_button_set_active (button, !all_unset);
- /* if actually inconsistent, or default value for file buttons
- if no files are selected. (useful for recursive apply) */
- gtk_toggle_button_set_inconsistent (button,
- (!all_unset && !all_set) ||
- (!is_folder && no_match));
- gtk_widget_set_sensitive (GTK_WIDGET (button), sensitive);
-
- g_signal_handlers_unblock_by_func (G_OBJECT (button),
- G_CALLBACK (permission_button_toggled),
- window);
+ GtkToggleButton *button)
+{
+ GList *l;
+ gboolean all_set;
+ gboolean all_unset;
+ gboolean all_cannot_set;
+ gboolean is_folder, is_special;
+ gboolean no_match;
+ gboolean sensitive;
+ guint32 button_permission;
+
+ button_permission = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (button),
+ "permission"));
+ is_folder = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (button),
+ "is-folder"));
+ is_special = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (button),
+ "is-special"));
+
+ all_set = TRUE;
+ all_unset = TRUE;
+ all_cannot_set = TRUE;
+ no_match = TRUE;
+ for (l = window->details->target_files; l != NULL; l = l->next)
+ {
+ NautilusFile *file;
+ guint32 file_permissions;
+
+ file = NAUTILUS_FILE (l->data);
+
+ if (!nautilus_file_can_get_permissions (file))
+ {
+ continue;
+ }
+
+ if (!is_special &&
+ ((nautilus_file_is_directory (file) && !is_folder) ||
+ (!nautilus_file_is_directory (file) && is_folder)))
+ {
+ continue;
+ }
+
+ no_match = FALSE;
+
+ file_permissions = nautilus_file_get_permissions (file);
+
+ if ((file_permissions & button_permission) == button_permission)
+ {
+ all_unset = FALSE;
+ }
+ else if ((file_permissions & button_permission) == 0)
+ {
+ all_set = FALSE;
+ }
+ else
+ {
+ all_unset = FALSE;
+ all_set = FALSE;
+ }
+
+ if (nautilus_file_can_set_permissions (file))
+ {
+ all_cannot_set = FALSE;
+ }
+ }
+
+ sensitive = !all_cannot_set;
+
+ g_signal_handlers_block_by_func (G_OBJECT (button),
+ G_CALLBACK (permission_button_toggled),
+ window);
+
+ gtk_toggle_button_set_active (button, !all_unset);
+ /* if actually inconsistent, or default value for file buttons
+ * if no files are selected. (useful for recursive apply) */
+ gtk_toggle_button_set_inconsistent (button,
+ (!all_unset && !all_set) ||
+ (!is_folder && no_match));
+ gtk_widget_set_sensitive (GTK_WIDGET (button), sensitive);
+
+ g_signal_handlers_unblock_by_func (G_OBJECT (button),
+ G_CALLBACK (permission_button_toggled),
+ window);
}
static void
set_up_permissions_checkbox (NautilusPropertiesWindow *window,
- GtkWidget *check_button,
- guint32 permission,
- gboolean is_folder)
-{
- /* Load up the check_button with data we'll need when updating its state. */
- g_object_set_data (G_OBJECT (check_button), "permission",
- GINT_TO_POINTER (permission));
- g_object_set_data (G_OBJECT (check_button), "properties_window",
- window);
- g_object_set_data (G_OBJECT (check_button), "is-folder",
- GINT_TO_POINTER (is_folder));
-
- window->details->permission_buttons =
- g_list_prepend (window->details->permission_buttons,
- check_button);
-
- g_signal_connect_object (check_button, "toggled",
- G_CALLBACK (permission_button_toggled),
- window,
- 0);
+ GtkWidget *check_button,
+ guint32 permission,
+ gboolean is_folder)
+{
+ /* Load up the check_button with data we'll need when updating its state. */
+ g_object_set_data (G_OBJECT (check_button), "permission",
+ GINT_TO_POINTER (permission));
+ g_object_set_data (G_OBJECT (check_button), "properties_window",
+ window);
+ g_object_set_data (G_OBJECT (check_button), "is-folder",
+ GINT_TO_POINTER (is_folder));
+
+ window->details->permission_buttons =
+ g_list_prepend (window->details->permission_buttons,
+ check_button);
+
+ g_signal_connect_object (check_button, "toggled",
+ G_CALLBACK (permission_button_toggled),
+ window,
+ 0);
}
static GtkWidget *
add_execute_checkbox_with_label (NautilusPropertiesWindow *window,
- GtkGrid *grid,
- GtkWidget *sibling,
- const char *label,
- guint32 permission_to_check,
- GtkLabel *label_for,
- gboolean is_folder)
-{
- GtkWidget *check_button;
- gboolean a11y_enabled;
-
- check_button = gtk_check_button_new_with_mnemonic (label);
- gtk_widget_show (check_button);
-
- if (sibling) {
- gtk_grid_attach_next_to (grid, check_button, sibling,
- GTK_POS_RIGHT, 1, 1);
- } else {
- gtk_container_add (GTK_CONTAINER (grid), check_button);
- }
-
- set_up_permissions_checkbox (window,
- check_button,
- permission_to_check,
- is_folder);
-
- a11y_enabled = GTK_IS_ACCESSIBLE (gtk_widget_get_accessible (check_button));
- if (a11y_enabled && label_for != NULL) {
- eel_accessibility_set_up_label_widget_relation (GTK_WIDGET (label_for),
- check_button);
- }
-
- return check_button;
-}
-
-enum {
- UNIX_PERM_SUID = S_ISUID,
- UNIX_PERM_SGID = S_ISGID,
- UNIX_PERM_STICKY = 01000, /* S_ISVTX not defined on all systems */
- UNIX_PERM_USER_READ = S_IRUSR,
- UNIX_PERM_USER_WRITE = S_IWUSR,
- UNIX_PERM_USER_EXEC = S_IXUSR,
- UNIX_PERM_USER_ALL = S_IRUSR | S_IWUSR | S_IXUSR,
- UNIX_PERM_GROUP_READ = S_IRGRP,
- UNIX_PERM_GROUP_WRITE = S_IWGRP,
- UNIX_PERM_GROUP_EXEC = S_IXGRP,
- UNIX_PERM_GROUP_ALL = S_IRGRP | S_IWGRP | S_IXGRP,
- UNIX_PERM_OTHER_READ = S_IROTH,
- UNIX_PERM_OTHER_WRITE = S_IWOTH,
- UNIX_PERM_OTHER_EXEC = S_IXOTH,
- UNIX_PERM_OTHER_ALL = S_IROTH | S_IWOTH | S_IXOTH
+ GtkGrid *grid,
+ GtkWidget *sibling,
+ const char *label,
+ guint32 permission_to_check,
+ GtkLabel *label_for,
+ gboolean is_folder)
+{
+ GtkWidget *check_button;
+ gboolean a11y_enabled;
+
+ check_button = gtk_check_button_new_with_mnemonic (label);
+ gtk_widget_show (check_button);
+
+ if (sibling)
+ {
+ gtk_grid_attach_next_to (grid, check_button, sibling,
+ GTK_POS_RIGHT, 1, 1);
+ }
+ else
+ {
+ gtk_container_add (GTK_CONTAINER (grid), check_button);
+ }
+
+ set_up_permissions_checkbox (window,
+ check_button,
+ permission_to_check,
+ is_folder);
+
+ a11y_enabled = GTK_IS_ACCESSIBLE (gtk_widget_get_accessible (check_button));
+ if (a11y_enabled && label_for != NULL)
+ {
+ eel_accessibility_set_up_label_widget_relation (GTK_WIDGET (label_for),
+ check_button);
+ }
+
+ return check_button;
+}
+
+enum
+{
+ UNIX_PERM_SUID = S_ISUID,
+ UNIX_PERM_SGID = S_ISGID,
+ UNIX_PERM_STICKY = 01000, /* S_ISVTX not defined on all systems */
+ UNIX_PERM_USER_READ = S_IRUSR,
+ UNIX_PERM_USER_WRITE = S_IWUSR,
+ UNIX_PERM_USER_EXEC = S_IXUSR,
+ UNIX_PERM_USER_ALL = S_IRUSR | S_IWUSR | S_IXUSR,
+ UNIX_PERM_GROUP_READ = S_IRGRP,
+ UNIX_PERM_GROUP_WRITE = S_IWGRP,
+ UNIX_PERM_GROUP_EXEC = S_IXGRP,
+ UNIX_PERM_GROUP_ALL = S_IRGRP | S_IWGRP | S_IXGRP,
+ UNIX_PERM_OTHER_READ = S_IROTH,
+ UNIX_PERM_OTHER_WRITE = S_IWOTH,
+ UNIX_PERM_OTHER_EXEC = S_IXOTH,
+ UNIX_PERM_OTHER_ALL = S_IROTH | S_IWOTH | S_IXOTH
};
-typedef enum {
- PERMISSION_READ = (1<<0),
- PERMISSION_WRITE = (1<<1),
- PERMISSION_EXEC = (1<<2)
+typedef enum
+{
+ PERMISSION_READ = (1 << 0),
+ PERMISSION_WRITE = (1 << 1),
+ PERMISSION_EXEC = (1 << 2)
} PermissionValue;
-typedef enum {
- PERMISSION_USER,
- PERMISSION_GROUP,
- PERMISSION_OTHER
+typedef enum
+{
+ PERMISSION_USER,
+ PERMISSION_GROUP,
+ PERMISSION_OTHER
} PermissionType;
-static guint32 vfs_perms[3][3] = {
- {UNIX_PERM_USER_READ, UNIX_PERM_USER_WRITE, UNIX_PERM_USER_EXEC},
- {UNIX_PERM_GROUP_READ, UNIX_PERM_GROUP_WRITE, UNIX_PERM_GROUP_EXEC},
- {UNIX_PERM_OTHER_READ, UNIX_PERM_OTHER_WRITE, UNIX_PERM_OTHER_EXEC},
+static guint32 vfs_perms[3][3] =
+{
+ {UNIX_PERM_USER_READ, UNIX_PERM_USER_WRITE, UNIX_PERM_USER_EXEC},
+ {UNIX_PERM_GROUP_READ, UNIX_PERM_GROUP_WRITE, UNIX_PERM_GROUP_EXEC},
+ {UNIX_PERM_OTHER_READ, UNIX_PERM_OTHER_WRITE, UNIX_PERM_OTHER_EXEC},
};
-static guint32
-permission_to_vfs (PermissionType type, PermissionValue perm)
+static guint32
+permission_to_vfs (PermissionType type,
+ PermissionValue perm)
{
- guint32 vfs_perm;
- g_assert (type >= 0 && type < 3);
+ guint32 vfs_perm;
+ g_assert (type >= 0 && type < 3);
- vfs_perm = 0;
- if (perm & PERMISSION_READ) {
- vfs_perm |= vfs_perms[type][0];
- }
- if (perm & PERMISSION_WRITE) {
- vfs_perm |= vfs_perms[type][1];
- }
- if (perm & PERMISSION_EXEC) {
- vfs_perm |= vfs_perms[type][2];
- }
-
- return vfs_perm;
+ vfs_perm = 0;
+ if (perm & PERMISSION_READ)
+ {
+ vfs_perm |= vfs_perms[type][0];
+ }
+ if (perm & PERMISSION_WRITE)
+ {
+ vfs_perm |= vfs_perms[type][1];
+ }
+ if (perm & PERMISSION_EXEC)
+ {
+ vfs_perm |= vfs_perms[type][2];
+ }
+
+ return vfs_perm;
}
static PermissionValue
-permission_from_vfs (PermissionType type, guint32 vfs_perm)
+permission_from_vfs (PermissionType type,
+ guint32 vfs_perm)
{
- PermissionValue perm;
- g_assert (type >= 0 && type < 3);
+ PermissionValue perm;
+ g_assert (type >= 0 && type < 3);
+
+ perm = 0;
+ if (vfs_perm & vfs_perms[type][0])
+ {
+ perm |= PERMISSION_READ;
+ }
+ if (vfs_perm & vfs_perms[type][1])
+ {
+ perm |= PERMISSION_WRITE;
+ }
+ if (vfs_perm & vfs_perms[type][2])
+ {
+ perm |= PERMISSION_EXEC;
+ }
- perm = 0;
- if (vfs_perm & vfs_perms[type][0]) {
- perm |= PERMISSION_READ;
- }
- if (vfs_perm & vfs_perms[type][1]) {
- perm |= PERMISSION_WRITE;
- }
- if (vfs_perm & vfs_perms[type][2]) {
- perm |= PERMISSION_EXEC;
- }
-
- return perm;
+ return perm;
}
static void
-permission_combo_changed (GtkWidget *combo, NautilusPropertiesWindow *window)
-{
- GtkTreeIter iter;
- GtkTreeModel *model;
- gboolean is_folder, use_original;
- PermissionType type;
- int new_perm, mask;
- guint32 vfs_new_perm, vfs_mask;
-
- is_folder = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (combo), "is-folder"));
- type = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (combo), "permission-type"));
-
- if (is_folder) {
- mask = PERMISSION_READ|PERMISSION_WRITE|PERMISSION_EXEC;
- } else {
- mask = PERMISSION_READ|PERMISSION_WRITE;
- }
-
- vfs_mask = permission_to_vfs (type, mask);
-
- model = gtk_combo_box_get_model (GTK_COMBO_BOX (combo));
-
- if (!gtk_combo_box_get_active_iter (GTK_COMBO_BOX (combo), &iter)) {
- return;
- }
- gtk_tree_model_get (model, &iter, COLUMN_VALUE, &new_perm,
- COLUMN_USE_ORIGINAL, &use_original, -1);
- vfs_new_perm = permission_to_vfs (type, new_perm);
-
- update_permissions (window, vfs_new_perm, vfs_mask,
- is_folder, FALSE, use_original);
+permission_combo_changed (GtkWidget *combo,
+ NautilusPropertiesWindow *window)
+{
+ GtkTreeIter iter;
+ GtkTreeModel *model;
+ gboolean is_folder, use_original;
+ PermissionType type;
+ int new_perm, mask;
+ guint32 vfs_new_perm, vfs_mask;
+
+ is_folder = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (combo), "is-folder"));
+ type = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (combo), "permission-type"));
+
+ if (is_folder)
+ {
+ mask = PERMISSION_READ | PERMISSION_WRITE | PERMISSION_EXEC;
+ }
+ else
+ {
+ mask = PERMISSION_READ | PERMISSION_WRITE;
+ }
+
+ vfs_mask = permission_to_vfs (type, mask);
+
+ model = gtk_combo_box_get_model (GTK_COMBO_BOX (combo));
+
+ if (!gtk_combo_box_get_active_iter (GTK_COMBO_BOX (combo), &iter))
+ {
+ return;
+ }
+ gtk_tree_model_get (model, &iter, COLUMN_VALUE, &new_perm,
+ COLUMN_USE_ORIGINAL, &use_original, -1);
+ vfs_new_perm = permission_to_vfs (type, new_perm);
+
+ update_permissions (window, vfs_new_perm, vfs_mask,
+ is_folder, FALSE, use_original);
}
static void
-permission_combo_add_multiple_choice (GtkComboBox *combo, GtkTreeIter *iter)
-{
- GtkTreeModel *model;
- GtkListStore *store;
- gboolean found;
-
- model = gtk_combo_box_get_model (combo);
- store = GTK_LIST_STORE (model);
-
- found = FALSE;
- gtk_tree_model_get_iter_first (model, iter);
- do {
- gboolean multi;
- gtk_tree_model_get (model, iter, COLUMN_USE_ORIGINAL, &multi, -1);
-
- if (multi) {
- found = TRUE;
- break;
- }
- } while (gtk_tree_model_iter_next (model, iter));
-
- if (!found) {
- gtk_list_store_append (store, iter);
- gtk_list_store_set (store, iter,
- COLUMN_NAME, "---",
- COLUMN_VALUE, 0,
- COLUMN_USE_ORIGINAL, TRUE, -1);
- }
+permission_combo_add_multiple_choice (GtkComboBox *combo,
+ GtkTreeIter *iter)
+{
+ GtkTreeModel *model;
+ GtkListStore *store;
+ gboolean found;
+
+ model = gtk_combo_box_get_model (combo);
+ store = GTK_LIST_STORE (model);
+
+ found = FALSE;
+ gtk_tree_model_get_iter_first (model, iter);
+ do
+ {
+ gboolean multi;
+ gtk_tree_model_get (model, iter, COLUMN_USE_ORIGINAL, &multi, -1);
+
+ if (multi)
+ {
+ found = TRUE;
+ break;
+ }
+ }
+ while (gtk_tree_model_iter_next (model, iter));
+
+ if (!found)
+ {
+ gtk_list_store_append (store, iter);
+ gtk_list_store_set (store, iter,
+ COLUMN_NAME, "---",
+ COLUMN_VALUE, 0,
+ COLUMN_USE_ORIGINAL, TRUE, -1);
+ }
}
static void
permission_combo_update (NautilusPropertiesWindow *window,
- GtkComboBox *combo)
-{
- PermissionType type;
- PermissionValue perm, all_dir_perm, all_file_perm, all_perm;
- gboolean is_folder, no_files, no_dirs, all_file_same, all_dir_same, all_same;
- gboolean all_dir_cannot_set, all_file_cannot_set, sensitive;
- GtkTreeIter iter;
- int mask;
- GtkTreeModel *model;
- GtkListStore *store;
- GList *l;
- gboolean is_multi;
-
- model = gtk_combo_box_get_model (combo);
-
- is_folder = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (combo), "is-folder"));
- type = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (combo), "permission-type"));
-
- is_multi = FALSE;
- if (gtk_combo_box_get_active_iter (GTK_COMBO_BOX (combo), &iter)) {
- gtk_tree_model_get (model, &iter, COLUMN_USE_ORIGINAL, &is_multi, -1);
- }
-
- no_files = TRUE;
- no_dirs = TRUE;
- all_dir_same = TRUE;
- all_file_same = TRUE;
- all_dir_perm = 0;
- all_file_perm = 0;
- all_dir_cannot_set = TRUE;
- all_file_cannot_set = TRUE;
-
- for (l = window->details->target_files; l != NULL; l = l->next) {
- NautilusFile *file;
- guint32 file_permissions;
-
- file = NAUTILUS_FILE (l->data);
-
- if (!nautilus_file_can_get_permissions (file)) {
- continue;
- }
-
- if (nautilus_file_is_directory (file)) {
- mask = PERMISSION_READ|PERMISSION_WRITE|PERMISSION_EXEC;
- } else {
- mask = PERMISSION_READ|PERMISSION_WRITE;
- }
-
- file_permissions = nautilus_file_get_permissions (file);
-
- perm = permission_from_vfs (type, file_permissions) & mask;
-
- if (nautilus_file_is_directory (file)) {
- if (no_dirs) {
- all_dir_perm = perm;
- no_dirs = FALSE;
- } else if (perm != all_dir_perm) {
- all_dir_same = FALSE;
- }
-
- if (nautilus_file_can_set_permissions (file)) {
- all_dir_cannot_set = FALSE;
- }
- } else {
- if (no_files) {
- all_file_perm = perm;
- no_files = FALSE;
- } else if (perm != all_file_perm) {
- all_file_same = FALSE;
- }
-
- if (nautilus_file_can_set_permissions (file)) {
- all_file_cannot_set = FALSE;
- }
- }
- }
-
- if (is_folder) {
- all_same = all_dir_same;
- all_perm = all_dir_perm;
- } else {
- all_same = all_file_same && !no_files;
- all_perm = all_file_perm;
- }
-
- store = GTK_LIST_STORE (model);
- if (all_same) {
- gboolean found;
-
- found = FALSE;
- gtk_tree_model_get_iter_first (model, &iter);
- do {
- int current_perm;
- gtk_tree_model_get (model, &iter, 1, &current_perm, -1);
-
- if (current_perm == all_perm) {
- found = TRUE;
- break;
- }
- } while (gtk_tree_model_iter_next (model, &iter));
-
- if (!found) {
- GString *str;
- str = g_string_new ("");
-
- if (!(all_perm & PERMISSION_READ)) {
- /* translators: this gets concatenated to "no read",
- * "no access", etc. (see following strings)
- */
- g_string_append (str, _("no "));
- }
- if (is_folder) {
- g_string_append (str, _("list"));
- } else {
- g_string_append (str, _("read"));
- }
-
- g_string_append (str, ", ");
-
- if (!(all_perm & PERMISSION_WRITE)) {
- g_string_append (str, _("no "));
- }
- if (is_folder) {
- g_string_append (str, _("create/delete"));
- } else {
- g_string_append (str, _("write"));
- }
-
- if (is_folder) {
- g_string_append (str, ", ");
-
- if (!(all_perm & PERMISSION_EXEC)) {
- g_string_append (str, _("no "));
- }
- g_string_append (str, _("access"));
- }
-
- gtk_list_store_append (store, &iter);
- gtk_list_store_set (store, &iter,
- 0, str->str,
- 1, all_perm, -1);
-
- g_string_free (str, TRUE);
- }
- } else {
- permission_combo_add_multiple_choice (combo, &iter);
- }
-
- g_signal_handlers_block_by_func (G_OBJECT (combo),
- G_CALLBACK (permission_combo_changed),
- window);
-
- gtk_combo_box_set_active_iter (combo, &iter);
-
- /* Also enable if no files found (for recursive
- file changes when only selecting folders) */
- if (is_folder) {
- sensitive = !all_dir_cannot_set;
- } else {
- sensitive = !all_file_cannot_set;
- }
- gtk_widget_set_sensitive (GTK_WIDGET (combo), sensitive);
-
- g_signal_handlers_unblock_by_func (G_OBJECT (combo),
- G_CALLBACK (permission_combo_changed),
- window);
-
+ GtkComboBox *combo)
+{
+ PermissionType type;
+ PermissionValue perm, all_dir_perm, all_file_perm, all_perm;
+ gboolean is_folder, no_files, no_dirs, all_file_same, all_dir_same, all_same;
+ gboolean all_dir_cannot_set, all_file_cannot_set, sensitive;
+ GtkTreeIter iter;
+ int mask;
+ GtkTreeModel *model;
+ GtkListStore *store;
+ GList *l;
+ gboolean is_multi;
+
+ model = gtk_combo_box_get_model (combo);
+
+ is_folder = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (combo), "is-folder"));
+ type = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (combo), "permission-type"));
+
+ is_multi = FALSE;
+ if (gtk_combo_box_get_active_iter (GTK_COMBO_BOX (combo), &iter))
+ {
+ gtk_tree_model_get (model, &iter, COLUMN_USE_ORIGINAL, &is_multi, -1);
+ }
+
+ no_files = TRUE;
+ no_dirs = TRUE;
+ all_dir_same = TRUE;
+ all_file_same = TRUE;
+ all_dir_perm = 0;
+ all_file_perm = 0;
+ all_dir_cannot_set = TRUE;
+ all_file_cannot_set = TRUE;
+
+ for (l = window->details->target_files; l != NULL; l = l->next)
+ {
+ NautilusFile *file;
+ guint32 file_permissions;
+
+ file = NAUTILUS_FILE (l->data);
+
+ if (!nautilus_file_can_get_permissions (file))
+ {
+ continue;
+ }
+
+ if (nautilus_file_is_directory (file))
+ {
+ mask = PERMISSION_READ | PERMISSION_WRITE | PERMISSION_EXEC;
+ }
+ else
+ {
+ mask = PERMISSION_READ | PERMISSION_WRITE;
+ }
+
+ file_permissions = nautilus_file_get_permissions (file);
+
+ perm = permission_from_vfs (type, file_permissions) & mask;
+
+ if (nautilus_file_is_directory (file))
+ {
+ if (no_dirs)
+ {
+ all_dir_perm = perm;
+ no_dirs = FALSE;
+ }
+ else if (perm != all_dir_perm)
+ {
+ all_dir_same = FALSE;
+ }
+
+ if (nautilus_file_can_set_permissions (file))
+ {
+ all_dir_cannot_set = FALSE;
+ }
+ }
+ else
+ {
+ if (no_files)
+ {
+ all_file_perm = perm;
+ no_files = FALSE;
+ }
+ else if (perm != all_file_perm)
+ {
+ all_file_same = FALSE;
+ }
+
+ if (nautilus_file_can_set_permissions (file))
+ {
+ all_file_cannot_set = FALSE;
+ }
+ }
+ }
+
+ if (is_folder)
+ {
+ all_same = all_dir_same;
+ all_perm = all_dir_perm;
+ }
+ else
+ {
+ all_same = all_file_same && !no_files;
+ all_perm = all_file_perm;
+ }
+
+ store = GTK_LIST_STORE (model);
+ if (all_same)
+ {
+ gboolean found;
+
+ found = FALSE;
+ gtk_tree_model_get_iter_first (model, &iter);
+ do
+ {
+ int current_perm;
+ gtk_tree_model_get (model, &iter, 1, &current_perm, -1);
+
+ if (current_perm == all_perm)
+ {
+ found = TRUE;
+ break;
+ }
+ }
+ while (gtk_tree_model_iter_next (model, &iter));
+
+ if (!found)
+ {
+ GString *str;
+ str = g_string_new ("");
+
+ if (!(all_perm & PERMISSION_READ))
+ {
+ /* translators: this gets concatenated to "no read",
+ * "no access", etc. (see following strings)
+ */
+ g_string_append (str, _("no "));
+ }
+ if (is_folder)
+ {
+ g_string_append (str, _("list"));
+ }
+ else
+ {
+ g_string_append (str, _("read"));
+ }
+
+ g_string_append (str, ", ");
+
+ if (!(all_perm & PERMISSION_WRITE))
+ {
+ g_string_append (str, _("no "));
+ }
+ if (is_folder)
+ {
+ g_string_append (str, _("create/delete"));
+ }
+ else
+ {
+ g_string_append (str, _("write"));
+ }
+
+ if (is_folder)
+ {
+ g_string_append (str, ", ");
+
+ if (!(all_perm & PERMISSION_EXEC))
+ {
+ g_string_append (str, _("no "));
+ }
+ g_string_append (str, _("access"));
+ }
+
+ gtk_list_store_append (store, &iter);
+ gtk_list_store_set (store, &iter,
+ 0, str->str,
+ 1, all_perm, -1);
+
+ g_string_free (str, TRUE);
+ }
+ }
+ else
+ {
+ permission_combo_add_multiple_choice (combo, &iter);
+ }
+
+ g_signal_handlers_block_by_func (G_OBJECT (combo),
+ G_CALLBACK (permission_combo_changed),
+ window);
+
+ gtk_combo_box_set_active_iter (combo, &iter);
+
+ /* Also enable if no files found (for recursive
+ * file changes when only selecting folders) */
+ if (is_folder)
+ {
+ sensitive = !all_dir_cannot_set;
+ }
+ else
+ {
+ sensitive = !all_file_cannot_set;
+ }
+ gtk_widget_set_sensitive (GTK_WIDGET (combo), sensitive);
+
+ g_signal_handlers_unblock_by_func (G_OBJECT (combo),
+ G_CALLBACK (permission_combo_changed),
+ window);
}
static GtkWidget *
create_permissions_combo_box (PermissionType type,
- gboolean is_folder)
-{
- GtkWidget *combo;
- GtkListStore *store;
- GtkCellRenderer *cell;
- GtkTreeIter iter;
-
- store = gtk_list_store_new (NUM_COLUMNS, G_TYPE_STRING, G_TYPE_INT, G_TYPE_BOOLEAN, G_TYPE_STRING);
- combo = gtk_combo_box_new_with_model (GTK_TREE_MODEL (store));
- gtk_combo_box_set_id_column (GTK_COMBO_BOX (combo), COLUMN_ID);
-
- g_object_set_data (G_OBJECT (combo), "is-folder", GINT_TO_POINTER (is_folder));
- g_object_set_data (G_OBJECT (combo), "permission-type", GINT_TO_POINTER (type));
-
- if (is_folder) {
- if (type != PERMISSION_USER) {
- gtk_list_store_append (store, &iter);
- /* Translators: this is referred to the permissions
- * the user has in a directory.
- */
- gtk_list_store_set (store, &iter,
- COLUMN_NAME, _("None"),
- COLUMN_VALUE, 0,
- COLUMN_ID, "none",
- -1);
- }
- gtk_list_store_append (store, &iter);
- gtk_list_store_set (store, &iter,
- COLUMN_NAME, _("List files only"),
- COLUMN_VALUE, PERMISSION_READ,
- COLUMN_ID, "r",
- -1);
- gtk_list_store_append (store, &iter);
- gtk_list_store_set (store, &iter,
- COLUMN_NAME, _("Access files"),
- COLUMN_VALUE, PERMISSION_READ|PERMISSION_EXEC,
- COLUMN_ID, "rx",
- -1);
- gtk_list_store_append (store, &iter);
- gtk_list_store_set (store, &iter,
- COLUMN_NAME, _("Create and delete files"),
- COLUMN_VALUE, PERMISSION_READ|PERMISSION_EXEC|PERMISSION_WRITE,
- COLUMN_ID, "rwx",
- -1);
- } else {
- if (type != PERMISSION_USER) {
- gtk_list_store_append (store, &iter);
- gtk_list_store_set (store, &iter,
- COLUMN_NAME, _("None"),
- COLUMN_VALUE, 0,
- COLUMN_ID, "none",
- -1);
- }
- gtk_list_store_append (store, &iter);
- gtk_list_store_set (store, &iter,
- COLUMN_NAME, _("Read-only"),
- COLUMN_VALUE, PERMISSION_READ,
- COLUMN_ID, "r",
- -1);
- gtk_list_store_append (store, &iter);
- gtk_list_store_set (store, &iter,
- COLUMN_NAME, _("Read and write"),
- COLUMN_VALUE, PERMISSION_READ|PERMISSION_WRITE,
- COLUMN_ID, "rw",
- -1);
- }
- g_object_unref (store);
-
- cell = gtk_cell_renderer_text_new ();
- gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo), cell, TRUE);
- gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combo), cell,
- "text", COLUMN_NAME,
- NULL);
-
- return combo;
+ gboolean is_folder)
+{
+ GtkWidget *combo;
+ GtkListStore *store;
+ GtkCellRenderer *cell;
+ GtkTreeIter iter;
+
+ store = gtk_list_store_new (NUM_COLUMNS, G_TYPE_STRING, G_TYPE_INT, G_TYPE_BOOLEAN, G_TYPE_STRING);
+ combo = gtk_combo_box_new_with_model (GTK_TREE_MODEL (store));
+ gtk_combo_box_set_id_column (GTK_COMBO_BOX (combo), COLUMN_ID);
+
+ g_object_set_data (G_OBJECT (combo), "is-folder", GINT_TO_POINTER (is_folder));
+ g_object_set_data (G_OBJECT (combo), "permission-type", GINT_TO_POINTER (type));
+
+ if (is_folder)
+ {
+ if (type != PERMISSION_USER)
+ {
+ gtk_list_store_append (store, &iter);
+ /* Translators: this is referred to the permissions
+ * the user has in a directory.
+ */
+ gtk_list_store_set (store, &iter,
+ COLUMN_NAME, _("None"),
+ COLUMN_VALUE, 0,
+ COLUMN_ID, "none",
+ -1);
+ }
+ gtk_list_store_append (store, &iter);
+ gtk_list_store_set (store, &iter,
+ COLUMN_NAME, _("List files only"),
+ COLUMN_VALUE, PERMISSION_READ,
+ COLUMN_ID, "r",
+ -1);
+ gtk_list_store_append (store, &iter);
+ gtk_list_store_set (store, &iter,
+ COLUMN_NAME, _("Access files"),
+ COLUMN_VALUE, PERMISSION_READ | PERMISSION_EXEC,
+ COLUMN_ID, "rx",
+ -1);
+ gtk_list_store_append (store, &iter);
+ gtk_list_store_set (store, &iter,
+ COLUMN_NAME, _("Create and delete files"),
+ COLUMN_VALUE, PERMISSION_READ | PERMISSION_EXEC | PERMISSION_WRITE,
+ COLUMN_ID, "rwx",
+ -1);
+ }
+ else
+ {
+ if (type != PERMISSION_USER)
+ {
+ gtk_list_store_append (store, &iter);
+ gtk_list_store_set (store, &iter,
+ COLUMN_NAME, _("None"),
+ COLUMN_VALUE, 0,
+ COLUMN_ID, "none",
+ -1);
+ }
+ gtk_list_store_append (store, &iter);
+ gtk_list_store_set (store, &iter,
+ COLUMN_NAME, _("Read-only"),
+ COLUMN_VALUE, PERMISSION_READ,
+ COLUMN_ID, "r",
+ -1);
+ gtk_list_store_append (store, &iter);
+ gtk_list_store_set (store, &iter,
+ COLUMN_NAME, _("Read and write"),
+ COLUMN_VALUE, PERMISSION_READ | PERMISSION_WRITE,
+ COLUMN_ID, "rw",
+ -1);
+ }
+ g_object_unref (store);
+
+ cell = gtk_cell_renderer_text_new ();
+ gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo), cell, TRUE);
+ gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combo), cell,
+ "text", COLUMN_NAME,
+ NULL);
+
+ return combo;
}
static void
add_permissions_combo_box (NautilusPropertiesWindow *window,
- GtkGrid *grid,
- PermissionType type,
- gboolean is_folder,
- gboolean short_label)
+ GtkGrid *grid,
+ PermissionType type,
+ gboolean is_folder,
+ gboolean short_label)
{
- GtkWidget *combo;
- GtkLabel *label;
+ GtkWidget *combo;
+ GtkLabel *label;
- if (short_label) {
- label = attach_title_field (grid, _("Access:"));
- } else if (is_folder) {
- label = attach_title_field (grid, _("Folder access:"));
- } else {
- label = attach_title_field (grid, _("File access:"));
- }
+ if (short_label)
+ {
+ label = attach_title_field (grid, _("Access:"));
+ }
+ else if (is_folder)
+ {
+ label = attach_title_field (grid, _("Folder access:"));
+ }
+ else
+ {
+ label = attach_title_field (grid, _("File access:"));
+ }
- combo = create_permissions_combo_box (type, is_folder);
+ combo = create_permissions_combo_box (type, is_folder);
- window->details->permission_combos = g_list_prepend (window->details->permission_combos,
- combo);
+ window->details->permission_combos = g_list_prepend (window->details->permission_combos,
+ combo);
- g_signal_connect (combo, "changed", G_CALLBACK (permission_combo_changed), window);
+ g_signal_connect (combo, "changed", G_CALLBACK (permission_combo_changed), window);
- gtk_label_set_mnemonic_widget (label, combo);
- gtk_widget_show (combo);
+ gtk_label_set_mnemonic_widget (label, combo);
+ gtk_widget_show (combo);
- gtk_grid_attach_next_to (grid, combo, GTK_WIDGET (label),
- GTK_POS_RIGHT, 1, 1);
+ gtk_grid_attach_next_to (grid, combo, GTK_WIDGET (label),
+ GTK_POS_RIGHT, 1, 1);
}
static gboolean
all_can_get_permissions (GList *file_list)
{
- GList *l;
- for (l = file_list; l != NULL; l = l->next) {
- NautilusFile *file;
-
- file = NAUTILUS_FILE (l->data);
-
- if (!nautilus_file_can_get_permissions (file)) {
- return FALSE;
- }
- }
+ GList *l;
+ for (l = file_list; l != NULL; l = l->next)
+ {
+ NautilusFile *file;
+
+ file = NAUTILUS_FILE (l->data);
+
+ if (!nautilus_file_can_get_permissions (file))
+ {
+ return FALSE;
+ }
+ }
- return TRUE;
+ return TRUE;
}
static gboolean
all_can_set_permissions (GList *file_list)
{
- GList *l;
- for (l = file_list; l != NULL; l = l->next) {
- NautilusFile *file;
-
- file = NAUTILUS_FILE (l->data);
+ GList *l;
+ for (l = file_list; l != NULL; l = l->next)
+ {
+ NautilusFile *file;
- if (!nautilus_file_can_set_permissions (file)) {
- return FALSE;
- }
- }
+ file = NAUTILUS_FILE (l->data);
- return TRUE;
+ if (!nautilus_file_can_set_permissions (file))
+ {
+ return FALSE;
+ }
+ }
+
+ return TRUE;
}
static GHashTable *
get_initial_permissions (GList *file_list)
{
- GHashTable *ret;
- GList *l;
+ GHashTable *ret;
+ GList *l;
+
+ ret = g_hash_table_new (g_direct_hash,
+ g_direct_equal);
+
+ for (l = file_list; l != NULL; l = l->next)
+ {
+ guint32 permissions;
+ NautilusFile *file;
- ret = g_hash_table_new (g_direct_hash,
- g_direct_equal);
-
- for (l = file_list; l != NULL; l = l->next) {
- guint32 permissions;
- NautilusFile *file;
-
- file = NAUTILUS_FILE (l->data);
-
- permissions = nautilus_file_get_permissions (file);
- g_hash_table_insert (ret, file,
- GINT_TO_POINTER (permissions));
- }
+ file = NAUTILUS_FILE (l->data);
- return ret;
+ permissions = nautilus_file_get_permissions (file);
+ g_hash_table_insert (ret, file,
+ GINT_TO_POINTER (permissions));
+ }
+
+ return ret;
}
static void
-create_simple_permissions (NautilusPropertiesWindow *window, GtkGrid *page_grid)
-{
- gboolean has_directory;
- gboolean has_file;
- GtkLabel *group_label;
- GtkLabel *owner_label;
- GtkWidget *value;
- GtkComboBox *group_combo_box;
- GtkComboBox *owner_combo_box;
-
- has_directory = files_has_directory (window);
- has_file = files_has_file (window);
-
- if (!is_multi_file_window (window) && nautilus_file_can_set_owner (get_target_file (window))) {
- owner_label = attach_title_field (page_grid, _("_Owner:"));
- /* Combo box in this case. */
- owner_combo_box = attach_owner_combo_box (page_grid,
- GTK_WIDGET (owner_label),
- get_target_file (window));
- gtk_label_set_mnemonic_widget (owner_label,
- GTK_WIDGET (owner_combo_box));
- } else {
- owner_label = attach_title_field (page_grid, _("Owner:"));
- /* Static text in this case. */
- value = attach_value_field (window,
- page_grid, GTK_WIDGET (owner_label),
- "owner",
- INCONSISTENT_STATE_STRING,
- FALSE);
- gtk_label_set_mnemonic_widget (owner_label, value);
- }
- if (has_directory && has_file) {
- add_permissions_combo_box (window, page_grid,
- PERMISSION_USER, TRUE, FALSE);
- add_permissions_combo_box (window, page_grid,
- PERMISSION_USER, FALSE, FALSE);
- } else {
- add_permissions_combo_box (window, page_grid,
- PERMISSION_USER, has_directory, TRUE);
- }
-
- append_blank_slim_row (page_grid);
-
- if (!is_multi_file_window (window) && nautilus_file_can_set_group (get_target_file (window))) {
- group_label = attach_title_field (page_grid, _("_Group:"));
-
- /* Combo box in this case. */
- group_combo_box = attach_group_combo_box (page_grid, GTK_WIDGET (group_label),
- get_target_file (window));
- gtk_label_set_mnemonic_widget (group_label,
- GTK_WIDGET (group_combo_box));
- } else {
- group_label = attach_title_field (page_grid, _("Group:"));
-
- /* Static text in this case. */
- value = attach_value_field (window, page_grid,
- GTK_WIDGET (group_label),
- "group",
- INCONSISTENT_STATE_STRING,
- FALSE);
- gtk_label_set_mnemonic_widget (group_label, value);
- }
- if (has_directory && has_file) {
- add_permissions_combo_box (window, page_grid,
- PERMISSION_GROUP, TRUE, FALSE);
- add_permissions_combo_box (window, page_grid,
- PERMISSION_GROUP, FALSE, FALSE);
- } else {
- add_permissions_combo_box (window, page_grid,
- PERMISSION_GROUP, has_directory, TRUE);
- }
-
- append_blank_slim_row (page_grid);
- attach_title_field (page_grid, _("Others"));
- if (has_directory && has_file) {
- add_permissions_combo_box (window, page_grid,
- PERMISSION_OTHER, TRUE, FALSE);
- add_permissions_combo_box (window, page_grid,
- PERMISSION_OTHER, FALSE, FALSE);
- } else {
- add_permissions_combo_box (window, page_grid,
- PERMISSION_OTHER, has_directory, TRUE);
- }
-
- if (!has_directory) {
- GtkLabel *execute_label;
- append_blank_slim_row (page_grid);
-
- execute_label = attach_title_field (page_grid, _("Execute:"));
- add_execute_checkbox_with_label (window, page_grid,
- GTK_WIDGET (execute_label),
- _("Allow _executing file as program"),
- UNIX_PERM_USER_EXEC|UNIX_PERM_GROUP_EXEC|UNIX_PERM_OTHER_EXEC,
- execute_label, FALSE);
- }
+create_simple_permissions (NautilusPropertiesWindow *window,
+ GtkGrid *page_grid)
+{
+ gboolean has_directory;
+ gboolean has_file;
+ GtkLabel *group_label;
+ GtkLabel *owner_label;
+ GtkWidget *value;
+ GtkComboBox *group_combo_box;
+ GtkComboBox *owner_combo_box;
+
+ has_directory = files_has_directory (window);
+ has_file = files_has_file (window);
+
+ if (!is_multi_file_window (window) && nautilus_file_can_set_owner (get_target_file (window)))
+ {
+ owner_label = attach_title_field (page_grid, _("_Owner:"));
+ /* Combo box in this case. */
+ owner_combo_box = attach_owner_combo_box (page_grid,
+ GTK_WIDGET (owner_label),
+ get_target_file (window));
+ gtk_label_set_mnemonic_widget (owner_label,
+ GTK_WIDGET (owner_combo_box));
+ }
+ else
+ {
+ owner_label = attach_title_field (page_grid, _("Owner:"));
+ /* Static text in this case. */
+ value = attach_value_field (window,
+ page_grid, GTK_WIDGET (owner_label),
+ "owner",
+ INCONSISTENT_STATE_STRING,
+ FALSE);
+ gtk_label_set_mnemonic_widget (owner_label, value);
+ }
+ if (has_directory && has_file)
+ {
+ add_permissions_combo_box (window, page_grid,
+ PERMISSION_USER, TRUE, FALSE);
+ add_permissions_combo_box (window, page_grid,
+ PERMISSION_USER, FALSE, FALSE);
+ }
+ else
+ {
+ add_permissions_combo_box (window, page_grid,
+ PERMISSION_USER, has_directory, TRUE);
+ }
+
+ append_blank_slim_row (page_grid);
+
+ if (!is_multi_file_window (window) && nautilus_file_can_set_group (get_target_file (window)))
+ {
+ group_label = attach_title_field (page_grid, _("_Group:"));
+
+ /* Combo box in this case. */
+ group_combo_box = attach_group_combo_box (page_grid, GTK_WIDGET (group_label),
+ get_target_file (window));
+ gtk_label_set_mnemonic_widget (group_label,
+ GTK_WIDGET (group_combo_box));
+ }
+ else
+ {
+ group_label = attach_title_field (page_grid, _("Group:"));
+
+ /* Static text in this case. */
+ value = attach_value_field (window, page_grid,
+ GTK_WIDGET (group_label),
+ "group",
+ INCONSISTENT_STATE_STRING,
+ FALSE);
+ gtk_label_set_mnemonic_widget (group_label, value);
+ }
+ if (has_directory && has_file)
+ {
+ add_permissions_combo_box (window, page_grid,
+ PERMISSION_GROUP, TRUE, FALSE);
+ add_permissions_combo_box (window, page_grid,
+ PERMISSION_GROUP, FALSE, FALSE);
+ }
+ else
+ {
+ add_permissions_combo_box (window, page_grid,
+ PERMISSION_GROUP, has_directory, TRUE);
+ }
+
+ append_blank_slim_row (page_grid);
+ attach_title_field (page_grid, _("Others"));
+ if (has_directory && has_file)
+ {
+ add_permissions_combo_box (window, page_grid,
+ PERMISSION_OTHER, TRUE, FALSE);
+ add_permissions_combo_box (window, page_grid,
+ PERMISSION_OTHER, FALSE, FALSE);
+ }
+ else
+ {
+ add_permissions_combo_box (window, page_grid,
+ PERMISSION_OTHER, has_directory, TRUE);
+ }
+
+ if (!has_directory)
+ {
+ GtkLabel *execute_label;
+ append_blank_slim_row (page_grid);
+
+ execute_label = attach_title_field (page_grid, _("Execute:"));
+ add_execute_checkbox_with_label (window, page_grid,
+ GTK_WIDGET (execute_label),
+ _("Allow _executing file as program"),
+ UNIX_PERM_USER_EXEC | UNIX_PERM_GROUP_EXEC | UNIX_PERM_OTHER_EXEC,
+ execute_label, FALSE);
+ }
}
static void
set_recursive_permissions_done (gboolean success,
- gpointer callback_data)
+ gpointer callback_data)
{
- NautilusPropertiesWindow *window;
+ NautilusPropertiesWindow *window;
- window = NAUTILUS_PROPERTIES_WINDOW (callback_data);
- end_long_operation (window);
+ window = NAUTILUS_PROPERTIES_WINDOW (callback_data);
+ end_long_operation (window);
- g_object_unref (window);
+ g_object_unref (window);
}
static void
on_change_permissions_response (GtkDialog *dialog,
- int response,
- NautilusPropertiesWindow *window)
-{
- if (response != GTK_RESPONSE_OK) {
- gtk_widget_destroy (GTK_WIDGET (dialog));
- return;
- }
- guint32 file_permission, file_permission_mask;
- guint32 dir_permission, dir_permission_mask;
- guint32 vfs_mask, vfs_new_perm;
- GtkWidget *combo;
- gboolean is_folder, use_original;
- GList *l;
- GtkTreeModel *model;
- GtkTreeIter iter;
- PermissionType type;
- int new_perm, mask;
-
- file_permission = 0;
- file_permission_mask = 0;
- dir_permission = 0;
- dir_permission_mask = 0;
-
- /* Simple mode, minus exec checkbox */
- for (l = window->details->change_permission_combos; l != NULL; l = l->next) {
- combo = l->data;
-
- if (!gtk_combo_box_get_active_iter (GTK_COMBO_BOX (combo), &iter)) {
- continue;
- }
-
- type = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (combo), "permission-type"));
- is_folder = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (combo), "is-folder"));
-
- model = gtk_combo_box_get_model (GTK_COMBO_BOX (combo));
- gtk_tree_model_get (model, &iter,
- COLUMN_VALUE, &new_perm,
- COLUMN_USE_ORIGINAL, &use_original, -1);
- if (use_original) {
- continue;
- }
- vfs_new_perm = permission_to_vfs (type, new_perm);
-
- if (is_folder) {
- mask = PERMISSION_READ|PERMISSION_WRITE|PERMISSION_EXEC;
- } else {
- mask = PERMISSION_READ|PERMISSION_WRITE;
- }
- vfs_mask = permission_to_vfs (type, mask);
-
- if (is_folder) {
- dir_permission_mask |= vfs_mask;
- dir_permission |= vfs_new_perm;
- } else {
- file_permission_mask |= vfs_mask;
- file_permission |= vfs_new_perm;
- }
- }
-
- for (l = window->details->target_files; l != NULL; l = l->next) {
- NautilusFile *file;
- char *uri;
-
- file = NAUTILUS_FILE (l->data);
-
- if (nautilus_file_is_directory (file) &&
- nautilus_file_can_set_permissions (file)) {
- uri = nautilus_file_get_uri (file);
- start_long_operation (window);
- g_object_ref (window);
- nautilus_file_set_permissions_recursive (uri,
- file_permission,
- file_permission_mask,
- dir_permission,
- dir_permission_mask,
- set_recursive_permissions_done,
- window);
- g_free (uri);
- }
- }
- gtk_widget_destroy (GTK_WIDGET (dialog));
+ int response,
+ NautilusPropertiesWindow *window)
+{
+ if (response != GTK_RESPONSE_OK)
+ {
+ gtk_widget_destroy (GTK_WIDGET (dialog));
+ return;
+ }
+ guint32 file_permission, file_permission_mask;
+ guint32 dir_permission, dir_permission_mask;
+ guint32 vfs_mask, vfs_new_perm;
+ GtkWidget *combo;
+ gboolean is_folder, use_original;
+ GList *l;
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ PermissionType type;
+ int new_perm, mask;
+
+ file_permission = 0;
+ file_permission_mask = 0;
+ dir_permission = 0;
+ dir_permission_mask = 0;
+
+ /* Simple mode, minus exec checkbox */
+ for (l = window->details->change_permission_combos; l != NULL; l = l->next)
+ {
+ combo = l->data;
+
+ if (!gtk_combo_box_get_active_iter (GTK_COMBO_BOX (combo), &iter))
+ {
+ continue;
+ }
+
+ type = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (combo), "permission-type"));
+ is_folder = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (combo), "is-folder"));
+
+ model = gtk_combo_box_get_model (GTK_COMBO_BOX (combo));
+ gtk_tree_model_get (model, &iter,
+ COLUMN_VALUE, &new_perm,
+ COLUMN_USE_ORIGINAL, &use_original, -1);
+ if (use_original)
+ {
+ continue;
+ }
+ vfs_new_perm = permission_to_vfs (type, new_perm);
+
+ if (is_folder)
+ {
+ mask = PERMISSION_READ | PERMISSION_WRITE | PERMISSION_EXEC;
+ }
+ else
+ {
+ mask = PERMISSION_READ | PERMISSION_WRITE;
+ }
+ vfs_mask = permission_to_vfs (type, mask);
+
+ if (is_folder)
+ {
+ dir_permission_mask |= vfs_mask;
+ dir_permission |= vfs_new_perm;
+ }
+ else
+ {
+ file_permission_mask |= vfs_mask;
+ file_permission |= vfs_new_perm;
+ }
+ }
+
+ for (l = window->details->target_files; l != NULL; l = l->next)
+ {
+ NautilusFile *file;
+ char *uri;
+
+ file = NAUTILUS_FILE (l->data);
+
+ if (nautilus_file_is_directory (file) &&
+ nautilus_file_can_set_permissions (file))
+ {
+ uri = nautilus_file_get_uri (file);
+ start_long_operation (window);
+ g_object_ref (window);
+ nautilus_file_set_permissions_recursive (uri,
+ file_permission,
+ file_permission_mask,
+ dir_permission,
+ dir_permission_mask,
+ set_recursive_permissions_done,
+ window);
+ g_free (uri);
+ }
+ }
+ gtk_widget_destroy (GTK_WIDGET (dialog));
}
static void
-set_active_from_umask (GtkWidget *combo,
- PermissionType type,
- gboolean is_folder)
-{
- mode_t initial;
- mode_t mask;
- mode_t p;
- const char *id;
-
- if (is_folder) {
- initial = (S_IRWXU | S_IRWXG | S_IRWXO);
- } else {
- initial = (S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);
- }
-
- umask (mask = umask (0));
-
- p = ~mask & initial;
-
- if (type == PERMISSION_USER) {
- p &= ~(S_IRWXG | S_IRWXO);
- if ((p & S_IRWXU) == S_IRWXU) {
- id = "rwx";
- } else if ((p & (S_IRUSR | S_IWUSR)) == (S_IRUSR | S_IWUSR)) {
- id = "rw";
- } else if ((p & (S_IRUSR | S_IXUSR)) == (S_IRUSR | S_IXUSR)) {
- id = "rx";
- } else if ((p & S_IRUSR) == S_IRUSR) {
- id = "r";
- } else {
- id = "none";
- }
- } else if (type == PERMISSION_GROUP) {
- p &= ~(S_IRWXU | S_IRWXO);
- if ((p & S_IRWXG) == S_IRWXG) {
- id = "rwx";
- } else if ((p & (S_IRGRP | S_IWGRP)) == (S_IRGRP | S_IWGRP)) {
- id = "rw";
- } else if ((p & (S_IRGRP | S_IXGRP)) == (S_IRGRP | S_IXGRP)) {
- id = "rx";
- } else if ((p & S_IRGRP) == S_IRGRP) {
- id = "r";
- } else {
- id = "none";
- }
- } else {
- p &= ~(S_IRWXU | S_IRWXG);
- if ((p & S_IRWXO) == S_IRWXO) {
- id = "rwx";
- } else if ((p & (S_IROTH | S_IWOTH)) == (S_IROTH | S_IWOTH)) {
- id = "rw";
- } else if ((p & (S_IROTH | S_IXOTH)) == (S_IROTH | S_IXOTH)) {
- id = "rx";
- } else if ((p & S_IROTH) == S_IROTH) {
- id = "r";
- } else {
- id = "none";
- }
- }
-
- gtk_combo_box_set_active_id (GTK_COMBO_BOX (combo), id);
+set_active_from_umask (GtkWidget *combo,
+ PermissionType type,
+ gboolean is_folder)
+{
+ mode_t initial;
+ mode_t mask;
+ mode_t p;
+ const char *id;
+
+ if (is_folder)
+ {
+ initial = (S_IRWXU | S_IRWXG | S_IRWXO);
+ }
+ else
+ {
+ initial = (S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);
+ }
+
+ umask (mask = umask (0));
+
+ p = ~mask & initial;
+
+ if (type == PERMISSION_USER)
+ {
+ p &= ~(S_IRWXG | S_IRWXO);
+ if ((p & S_IRWXU) == S_IRWXU)
+ {
+ id = "rwx";
+ }
+ else if ((p & (S_IRUSR | S_IWUSR)) == (S_IRUSR | S_IWUSR))
+ {
+ id = "rw";
+ }
+ else if ((p & (S_IRUSR | S_IXUSR)) == (S_IRUSR | S_IXUSR))
+ {
+ id = "rx";
+ }
+ else if ((p & S_IRUSR) == S_IRUSR)
+ {
+ id = "r";
+ }
+ else
+ {
+ id = "none";
+ }
+ }
+ else if (type == PERMISSION_GROUP)
+ {
+ p &= ~(S_IRWXU | S_IRWXO);
+ if ((p & S_IRWXG) == S_IRWXG)
+ {
+ id = "rwx";
+ }
+ else if ((p & (S_IRGRP | S_IWGRP)) == (S_IRGRP | S_IWGRP))
+ {
+ id = "rw";
+ }
+ else if ((p & (S_IRGRP | S_IXGRP)) == (S_IRGRP | S_IXGRP))
+ {
+ id = "rx";
+ }
+ else if ((p & S_IRGRP) == S_IRGRP)
+ {
+ id = "r";
+ }
+ else
+ {
+ id = "none";
+ }
+ }
+ else
+ {
+ p &= ~(S_IRWXU | S_IRWXG);
+ if ((p & S_IRWXO) == S_IRWXO)
+ {
+ id = "rwx";
+ }
+ else if ((p & (S_IROTH | S_IWOTH)) == (S_IROTH | S_IWOTH))
+ {
+ id = "rw";
+ }
+ else if ((p & (S_IROTH | S_IXOTH)) == (S_IROTH | S_IXOTH))
+ {
+ id = "rx";
+ }
+ else if ((p & S_IROTH) == S_IROTH)
+ {
+ id = "r";
+ }
+ else
+ {
+ id = "none";
+ }
+ }
+
+ gtk_combo_box_set_active_id (GTK_COMBO_BOX (combo), id);
}
static void
on_change_permissions_clicked (GtkWidget *button,
- NautilusPropertiesWindow *window)
-{
- GtkWidget *dialog;
- GtkWidget *label;
- GtkWidget *combo;
- GtkGrid *grid;
-
- dialog = gtk_dialog_new_with_buttons (_("Change Permissions for Enclosed Files"),
- GTK_WINDOW (window),
- GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_USE_HEADER_BAR,
- _("_Cancel"), GTK_RESPONSE_CANCEL,
- _("Change"), GTK_RESPONSE_OK,
- NULL);
-
- grid = GTK_GRID (create_grid_with_standard_properties ());
- gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))),
- GTK_WIDGET (grid),
- TRUE, TRUE, 0);
-
- label = gtk_label_new (_("Files"));
- gtk_grid_attach (grid, label, 1, 0, 1, 1);
- label = gtk_label_new (_("Folders"));
- gtk_grid_attach (grid, label, 2, 0, 1, 1);
-
- label = gtk_label_new (_("Owner:"));
- gtk_label_set_xalign (GTK_LABEL (label), 0);
- gtk_grid_attach (grid, label, 0, 1, 1, 1);
- combo = create_permissions_combo_box (PERMISSION_USER, FALSE);
- window->details->change_permission_combos = g_list_prepend (window->details->change_permission_combos,
- combo);
- set_active_from_umask (combo, PERMISSION_USER, FALSE);
- gtk_grid_attach (grid, combo, 1, 1, 1, 1);
- combo = create_permissions_combo_box (PERMISSION_USER, TRUE);
- window->details->change_permission_combos = g_list_prepend (window->details->change_permission_combos,
- combo);
- set_active_from_umask (combo, PERMISSION_USER, TRUE);
- gtk_grid_attach (grid, combo, 2, 1, 1, 1);
-
- label = gtk_label_new (_("Group:"));
- gtk_label_set_xalign (GTK_LABEL (label), 0);
- gtk_grid_attach (grid, label, 0, 2, 1, 1);
- combo = create_permissions_combo_box (PERMISSION_GROUP, FALSE);
- window->details->change_permission_combos = g_list_prepend (window->details->change_permission_combos,
- combo);
- set_active_from_umask (combo, PERMISSION_GROUP, FALSE);
- gtk_grid_attach (grid, combo, 1, 2, 1, 1);
- combo = create_permissions_combo_box (PERMISSION_GROUP, TRUE);
- window->details->change_permission_combos = g_list_prepend (window->details->change_permission_combos,
- combo);
- set_active_from_umask (combo, PERMISSION_GROUP, TRUE);
- gtk_grid_attach (grid, combo, 2, 2, 1, 1);
-
- label = gtk_label_new (_("Others:"));
- gtk_label_set_xalign (GTK_LABEL (label), 0);
- gtk_grid_attach (grid, label, 0, 3, 1, 1);
- combo = create_permissions_combo_box (PERMISSION_OTHER, FALSE);
- window->details->change_permission_combos = g_list_prepend (window->details->change_permission_combos,
- combo);
- set_active_from_umask (combo, PERMISSION_OTHER, FALSE);
- gtk_grid_attach (grid, combo, 1, 3, 1, 1);
- combo = create_permissions_combo_box (PERMISSION_OTHER, TRUE);
- window->details->change_permission_combos = g_list_prepend (window->details->change_permission_combos,
- combo);
- set_active_from_umask (combo, PERMISSION_OTHER, TRUE);
- gtk_grid_attach (grid, combo, 2, 3, 1, 1);
-
- g_signal_connect (dialog, "response", G_CALLBACK (on_change_permissions_response), window);
- gtk_widget_show_all (dialog);
+ NautilusPropertiesWindow *window)
+{
+ GtkWidget *dialog;
+ GtkWidget *label;
+ GtkWidget *combo;
+ GtkGrid *grid;
+
+ dialog = gtk_dialog_new_with_buttons (_("Change Permissions for Enclosed Files"),
+ GTK_WINDOW (window),
+ GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_USE_HEADER_BAR,
+ _("_Cancel"), GTK_RESPONSE_CANCEL,
+ _("Change"), GTK_RESPONSE_OK,
+ NULL);
+
+ grid = GTK_GRID (create_grid_with_standard_properties ());
+ gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))),
+ GTK_WIDGET (grid),
+ TRUE, TRUE, 0);
+
+ label = gtk_label_new (_("Files"));
+ gtk_grid_attach (grid, label, 1, 0, 1, 1);
+ label = gtk_label_new (_("Folders"));
+ gtk_grid_attach (grid, label, 2, 0, 1, 1);
+
+ label = gtk_label_new (_("Owner:"));
+ gtk_label_set_xalign (GTK_LABEL (label), 0);
+ gtk_grid_attach (grid, label, 0, 1, 1, 1);
+ combo = create_permissions_combo_box (PERMISSION_USER, FALSE);
+ window->details->change_permission_combos = g_list_prepend (window->details->change_permission_combos,
+ combo);
+ set_active_from_umask (combo, PERMISSION_USER, FALSE);
+ gtk_grid_attach (grid, combo, 1, 1, 1, 1);
+ combo = create_permissions_combo_box (PERMISSION_USER, TRUE);
+ window->details->change_permission_combos = g_list_prepend (window->details->change_permission_combos,
+ combo);
+ set_active_from_umask (combo, PERMISSION_USER, TRUE);
+ gtk_grid_attach (grid, combo, 2, 1, 1, 1);
+
+ label = gtk_label_new (_("Group:"));
+ gtk_label_set_xalign (GTK_LABEL (label), 0);
+ gtk_grid_attach (grid, label, 0, 2, 1, 1);
+ combo = create_permissions_combo_box (PERMISSION_GROUP, FALSE);
+ window->details->change_permission_combos = g_list_prepend (window->details->change_permission_combos,
+ combo);
+ set_active_from_umask (combo, PERMISSION_GROUP, FALSE);
+ gtk_grid_attach (grid, combo, 1, 2, 1, 1);
+ combo = create_permissions_combo_box (PERMISSION_GROUP, TRUE);
+ window->details->change_permission_combos = g_list_prepend (window->details->change_permission_combos,
+ combo);
+ set_active_from_umask (combo, PERMISSION_GROUP, TRUE);
+ gtk_grid_attach (grid, combo, 2, 2, 1, 1);
+
+ label = gtk_label_new (_("Others:"));
+ gtk_label_set_xalign (GTK_LABEL (label), 0);
+ gtk_grid_attach (grid, label, 0, 3, 1, 1);
+ combo = create_permissions_combo_box (PERMISSION_OTHER, FALSE);
+ window->details->change_permission_combos = g_list_prepend (window->details->change_permission_combos,
+ combo);
+ set_active_from_umask (combo, PERMISSION_OTHER, FALSE);
+ gtk_grid_attach (grid, combo, 1, 3, 1, 1);
+ combo = create_permissions_combo_box (PERMISSION_OTHER, TRUE);
+ window->details->change_permission_combos = g_list_prepend (window->details->change_permission_combos,
+ combo);
+ set_active_from_umask (combo, PERMISSION_OTHER, TRUE);
+ gtk_grid_attach (grid, combo, 2, 3, 1, 1);
+
+ g_signal_connect (dialog, "response", G_CALLBACK (on_change_permissions_response), window);
+ gtk_widget_show_all (dialog);
}
static void
create_permissions_page (NautilusPropertiesWindow *window)
{
- GtkWidget *vbox, *button, *hbox;
- GtkGrid *page_grid;
- char *file_name, *prompt_text;
- GList *file_list;
+ GtkWidget *vbox, *button, *hbox;
+ GtkGrid *page_grid;
+ char *file_name, *prompt_text;
+ GList *file_list;
+
+ vbox = create_page_with_vbox (window->details->notebook,
+ _("Permissions"),
+ "help:gnome-help/nautilus-file-properties-permissions");
- vbox = create_page_with_vbox (window->details->notebook,
- _("Permissions"),
- "help:gnome-help/nautilus-file-properties-permissions");
+ file_list = window->details->original_files;
- file_list = window->details->original_files;
+ window->details->initial_permissions = NULL;
- window->details->initial_permissions = NULL;
-
- if (all_can_get_permissions (file_list) && all_can_get_permissions (window->details->target_files)) {
- window->details->initial_permissions = get_initial_permissions (window->details->target_files);
- window->details->has_recursive_apply = files_has_changable_permissions_directory (window);
-
- if (!all_can_set_permissions (file_list)) {
- add_prompt_and_separator (
- vbox,
- _("You are not the owner, so you cannot change these permissions."));
- }
+ if (all_can_get_permissions (file_list) && all_can_get_permissions (window->details->target_files))
+ {
+ window->details->initial_permissions = get_initial_permissions (window->details->target_files);
+ window->details->has_recursive_apply = files_has_changable_permissions_directory (window);
- page_grid = GTK_GRID (create_grid_with_standard_properties ());
+ if (!all_can_set_permissions (file_list))
+ {
+ add_prompt_and_separator (
+ vbox,
+ _("You are not the owner, so you cannot change these permissions."));
+ }
- gtk_widget_show (GTK_WIDGET (page_grid));
- gtk_box_pack_start (GTK_BOX (vbox),
- GTK_WIDGET (page_grid),
- TRUE, TRUE, 0);
+ page_grid = GTK_GRID (create_grid_with_standard_properties ());
- create_simple_permissions (window, page_grid);
+ gtk_widget_show (GTK_WIDGET (page_grid));
+ gtk_box_pack_start (GTK_BOX (vbox),
+ GTK_WIDGET (page_grid),
+ TRUE, TRUE, 0);
+
+ create_simple_permissions (window, page_grid);
#ifdef HAVE_SELINUX
- append_blank_slim_row (page_grid);
- append_title_value_pair
- (window, page_grid, _("Security context:"),
- "selinux_context", INCONSISTENT_STATE_STRING,
- FALSE);
+ append_blank_slim_row (page_grid);
+ append_title_value_pair
+ (window, page_grid, _("Security context:"),
+ "selinux_context", INCONSISTENT_STATE_STRING,
+ FALSE);
#endif
- append_blank_row (page_grid);
-
- if (window->details->has_recursive_apply) {
- hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
- gtk_widget_show (hbox);
-
- gtk_container_add_with_properties (GTK_CONTAINER (page_grid), hbox,
- "width", 2,
- NULL);
-
- button = gtk_button_new_with_mnemonic (_("Change Permissions for Enclosed Files…"));
- gtk_widget_show (button);
- gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0);
- g_signal_connect (button, "clicked",
- G_CALLBACK (on_change_permissions_clicked),
- window);
- }
- } else {
- if (!is_multi_file_window (window)) {
- file_name = nautilus_file_get_display_name (get_target_file (window));
- prompt_text = g_strdup_printf (_("The permissions of “%s” could not be determined."), file_name);
- g_free (file_name);
- } else {
- prompt_text = g_strdup (_("The permissions of the selected file could not be determined."));
- }
-
- add_prompt (vbox, prompt_text, TRUE);
- g_free (prompt_text);
- }
+ append_blank_row (page_grid);
+
+ if (window->details->has_recursive_apply)
+ {
+ hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
+ gtk_widget_show (hbox);
+
+ gtk_container_add_with_properties (GTK_CONTAINER (page_grid), hbox,
+ "width", 2,
+ NULL);
+
+ button = gtk_button_new_with_mnemonic (_("Change Permissions for Enclosed Files…"));
+ gtk_widget_show (button);
+ gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0);
+ g_signal_connect (button, "clicked",
+ G_CALLBACK (on_change_permissions_clicked),
+ window);
+ }
+ }
+ else
+ {
+ if (!is_multi_file_window (window))
+ {
+ file_name = nautilus_file_get_display_name (get_target_file (window));
+ prompt_text = g_strdup_printf (_("The permissions of “%s” could not be determined."), file_name);
+ g_free (file_name);
+ }
+ else
+ {
+ prompt_text = g_strdup (_("The permissions of the selected file could not be determined."));
+ }
+
+ add_prompt (vbox, prompt_text, TRUE);
+ g_free (prompt_text);
+ }
}
static void
append_extension_pages (NautilusPropertiesWindow *window)
{
- GList *providers;
- GList *p;
-
- providers = nautilus_module_get_extensions_for_type (NAUTILUS_TYPE_PROPERTY_PAGE_PROVIDER);
-
- for (p = providers; p != NULL; p = p->next) {
- NautilusPropertyPageProvider *provider;
- GList *pages;
- GList *l;
-
- provider = NAUTILUS_PROPERTY_PAGE_PROVIDER (p->data);
-
- pages = nautilus_property_page_provider_get_pages
- (provider, window->details->original_files);
-
- for (l = pages; l != NULL; l = l->next) {
- NautilusPropertyPage *page;
- GtkWidget *page_widget;
- GtkWidget *label;
-
- page = NAUTILUS_PROPERTY_PAGE (l->data);
-
- g_object_get (G_OBJECT (page),
- "page", &page_widget, "label", &label,
- NULL);
-
- gtk_notebook_append_page (window->details->notebook,
- page_widget, label);
- gtk_container_child_set (GTK_CONTAINER (window->details->notebook),
- page_widget,
- "tab-expand", TRUE,
- NULL);
-
- g_object_set_data (G_OBJECT (page_widget),
- "is-extension-page",
- page);
-
- g_object_unref (page_widget);
- g_object_unref (label);
-
- g_object_unref (page);
- }
-
- g_list_free (pages);
- }
-
- nautilus_module_extension_list_free (providers);
+ GList *providers;
+ GList *p;
+
+ providers = nautilus_module_get_extensions_for_type (NAUTILUS_TYPE_PROPERTY_PAGE_PROVIDER);
+
+ for (p = providers; p != NULL; p = p->next)
+ {
+ NautilusPropertyPageProvider *provider;
+ GList *pages;
+ GList *l;
+
+ provider = NAUTILUS_PROPERTY_PAGE_PROVIDER (p->data);
+
+ pages = nautilus_property_page_provider_get_pages
+ (provider, window->details->original_files);
+
+ for (l = pages; l != NULL; l = l->next)
+ {
+ NautilusPropertyPage *page;
+ GtkWidget *page_widget;
+ GtkWidget *label;
+
+ page = NAUTILUS_PROPERTY_PAGE (l->data);
+
+ g_object_get (G_OBJECT (page),
+ "page", &page_widget, "label", &label,
+ NULL);
+
+ gtk_notebook_append_page (window->details->notebook,
+ page_widget, label);
+ gtk_container_child_set (GTK_CONTAINER (window->details->notebook),
+ page_widget,
+ "tab-expand", TRUE,
+ NULL);
+
+ g_object_set_data (G_OBJECT (page_widget),
+ "is-extension-page",
+ page);
+
+ g_object_unref (page_widget);
+ g_object_unref (label);
+
+ g_object_unref (page);
+ }
+
+ g_list_free (pages);
+ }
+
+ nautilus_module_extension_list_free (providers);
}
static gboolean
-should_show_permissions (NautilusPropertiesWindow *window)
+should_show_permissions (NautilusPropertiesWindow *window)
{
- NautilusFile *file;
+ NautilusFile *file;
- file = get_target_file (window);
+ file = get_target_file (window);
- /* Don't show permissions for Trash and Computer since they're not
- * really file system objects.
- */
- if (!is_multi_file_window (window)
- && (is_merged_trash_directory (file) ||
- is_recent_directory (file) ||
- is_computer_directory (file))) {
- return FALSE;
- }
+ /* Don't show permissions for Trash and Computer since they're not
+ * really file system objects.
+ */
+ if (!is_multi_file_window (window)
+ && (is_merged_trash_directory (file) ||
+ is_recent_directory (file) ||
+ is_computer_directory (file)))
+ {
+ return FALSE;
+ }
- return TRUE;
+ return TRUE;
}
static char *
get_pending_key (GList *file_list)
{
- GList *l;
- GList *uris;
- GString *key;
- char *ret;
-
- uris = NULL;
- for (l = file_list; l != NULL; l = l->next) {
- uris = g_list_prepend (uris, nautilus_file_get_uri (NAUTILUS_FILE (l->data)));
- }
- uris = g_list_sort (uris, (GCompareFunc)strcmp);
+ GList *l;
+ GList *uris;
+ GString *key;
+ char *ret;
+
+ uris = NULL;
+ for (l = file_list; l != NULL; l = l->next)
+ {
+ uris = g_list_prepend (uris, nautilus_file_get_uri (NAUTILUS_FILE (l->data)));
+ }
+ uris = g_list_sort (uris, (GCompareFunc) strcmp);
- key = g_string_new ("");
- for (l = uris; l != NULL; l = l->next) {
- g_string_append (key, l->data);
- g_string_append (key, ";");
- }
+ key = g_string_new ("");
+ for (l = uris; l != NULL; l = l->next)
+ {
+ g_string_append (key, l->data);
+ g_string_append (key, ";");
+ }
- g_list_free_full (uris, g_free);
+ g_list_free_full (uris, g_free);
- ret = key->str;
- g_string_free (key, FALSE);
+ ret = key->str;
+ g_string_free (key, FALSE);
- return ret;
+ return ret;
}
static StartupData *
-startup_data_new (GList *original_files,
- GList *target_files,
- const char *pending_key,
- GtkWidget *parent_widget,
- GtkWindow *parent_window,
- const char *startup_id)
-{
- StartupData *data;
- GList *l;
-
- data = g_new0 (StartupData, 1);
- data->original_files = nautilus_file_list_copy (original_files);
- data->target_files = nautilus_file_list_copy (target_files);
- data->parent_widget = parent_widget;
- data->parent_window = parent_window;
- data->startup_id = g_strdup (startup_id);
- data->pending_key = g_strdup (pending_key);
- data->pending_files = g_hash_table_new (g_direct_hash,
- g_direct_equal);
-
- for (l = data->target_files; l != NULL; l = l->next) {
- g_hash_table_insert (data->pending_files, l->data, l->data);
- }
-
- return data;
+startup_data_new (GList *original_files,
+ GList *target_files,
+ const char *pending_key,
+ GtkWidget *parent_widget,
+ GtkWindow *parent_window,
+ const char *startup_id)
+{
+ StartupData *data;
+ GList *l;
+
+ data = g_new0 (StartupData, 1);
+ data->original_files = nautilus_file_list_copy (original_files);
+ data->target_files = nautilus_file_list_copy (target_files);
+ data->parent_widget = parent_widget;
+ data->parent_window = parent_window;
+ data->startup_id = g_strdup (startup_id);
+ data->pending_key = g_strdup (pending_key);
+ data->pending_files = g_hash_table_new (g_direct_hash,
+ g_direct_equal);
+
+ for (l = data->target_files; l != NULL; l = l->next)
+ {
+ g_hash_table_insert (data->pending_files, l->data, l->data);
+ }
+
+ return data;
}
static void
startup_data_free (StartupData *data)
{
- nautilus_file_list_free (data->original_files);
- nautilus_file_list_free (data->target_files);
- g_hash_table_destroy (data->pending_files);
- g_free (data->pending_key);
- g_free (data->startup_id);
- g_free (data);
+ nautilus_file_list_free (data->original_files);
+ nautilus_file_list_free (data->target_files);
+ g_hash_table_destroy (data->pending_files);
+ g_free (data->pending_key);
+ g_free (data->startup_id);
+ g_free (data);
}
static void
-file_changed_callback (NautilusFile *file, gpointer user_data)
+file_changed_callback (NautilusFile *file,
+ gpointer user_data)
{
- NautilusPropertiesWindow *window = NAUTILUS_PROPERTIES_WINDOW (user_data);
+ NautilusPropertiesWindow *window = NAUTILUS_PROPERTIES_WINDOW (user_data);
- if (!g_list_find (window->details->changed_files, file)) {
- nautilus_file_ref (file);
- window->details->changed_files = g_list_prepend (window->details->changed_files, file);
- schedule_files_update (window);
- }
+ if (!g_list_find (window->details->changed_files, file))
+ {
+ nautilus_file_ref (file);
+ window->details->changed_files = g_list_prepend (window->details->changed_files, file);
+ schedule_files_update (window);
+ }
}
static gboolean
is_a_special_file (NautilusFile *file)
{
- if (file == NULL ||
- nautilus_file_is_nautilus_link (file) ||
- is_merged_trash_directory (file) ||
- is_computer_directory (file)) {
- return TRUE;
- }
- return FALSE;
+ if (file == NULL ||
+ nautilus_file_is_nautilus_link (file) ||
+ is_merged_trash_directory (file) ||
+ is_computer_directory (file))
+ {
+ return TRUE;
+ }
+ return FALSE;
}
static gboolean
should_show_open_with (NautilusPropertiesWindow *window)
{
- NautilusFile *file;
- char *mime_type;
- char *extension;
- gboolean hide;
- g_autoptr (GAppInfo) app_info = NULL;
-
- /* Don't show open with tab for desktop special icons (trash, etc)
- * or desktop files. We don't get the open-with menu for these anyway.
- *
- * Also don't show it for folders. Changing the default app for folders
- * leads to all sort of hard to understand errors.
- */
-
- if (is_multi_file_window (window)) {
- GList *l;
-
- if (!file_list_attributes_identical (window->details->target_files,
- "mime_type")) {
- return FALSE;
- }
-
- for (l = window->details->target_files; l; l = l->next) {
- file = NAUTILUS_FILE (l->data);
- app_info = nautilus_mime_get_default_application_for_file (file);
- if (nautilus_file_is_directory (file) || !app_info || is_a_special_file (file)) {
- return FALSE;
- }
- }
-
- /* since we just confirmed all the mime types are the
- same we only need to test one file */
- file = window->details->target_files->data;
- } else {
- file = get_target_file (window);
-
- app_info = nautilus_mime_get_default_application_for_file (file);
- if (nautilus_file_is_directory (file) || !app_info || is_a_special_file (file)) {
- return FALSE;
- }
- }
-
- mime_type = nautilus_file_get_mime_type (file);
- extension = nautilus_file_get_extension (file);
- hide = (g_content_type_is_unknown (mime_type) && extension == NULL);
- g_free (mime_type);
- g_free (extension);
-
- return !hide;
+ NautilusFile *file;
+ char *mime_type;
+ char *extension;
+ gboolean hide;
+ g_autoptr (GAppInfo) app_info = NULL;
+
+ /* Don't show open with tab for desktop special icons (trash, etc)
+ * or desktop files. We don't get the open-with menu for these anyway.
+ *
+ * Also don't show it for folders. Changing the default app for folders
+ * leads to all sort of hard to understand errors.
+ */
+
+ if (is_multi_file_window (window))
+ {
+ GList *l;
+
+ if (!file_list_attributes_identical (window->details->target_files,
+ "mime_type"))
+ {
+ return FALSE;
+ }
+
+ for (l = window->details->target_files; l; l = l->next)
+ {
+ file = NAUTILUS_FILE (l->data);
+ app_info = nautilus_mime_get_default_application_for_file (file);
+ if (nautilus_file_is_directory (file) || !app_info || is_a_special_file (file))
+ {
+ return FALSE;
+ }
+ }
+
+ /* since we just confirmed all the mime types are the
+ * same we only need to test one file */
+ file = window->details->target_files->data;
+ }
+ else
+ {
+ file = get_target_file (window);
+
+ app_info = nautilus_mime_get_default_application_for_file (file);
+ if (nautilus_file_is_directory (file) || !app_info || is_a_special_file (file))
+ {
+ return FALSE;
+ }
+ }
+
+ mime_type = nautilus_file_get_mime_type (file);
+ extension = nautilus_file_get_extension (file);
+ hide = (g_content_type_is_unknown (mime_type) && extension == NULL);
+ g_free (mime_type);
+ g_free (extension);
+
+ return !hide;
}
static void
create_open_with_page (NautilusPropertiesWindow *window)
{
- GtkWidget *vbox;
- char *mime_type;
- GList *files = NULL;
- NautilusFile *target_file;
+ GtkWidget *vbox;
+ char *mime_type;
+ GList *files = NULL;
+ NautilusFile *target_file;
- target_file = get_target_file (window);
- mime_type = nautilus_file_get_mime_type (target_file);
+ target_file = get_target_file (window);
+ mime_type = nautilus_file_get_mime_type (target_file);
- if (!is_multi_file_window (window)) {
- files = g_list_prepend (NULL, target_file);
- } else {
- files = g_list_copy (window->details->original_files);
- if (files == NULL) {
- return;
- }
- }
+ if (!is_multi_file_window (window))
+ {
+ files = g_list_prepend (NULL, target_file);
+ }
+ else
+ {
+ files = g_list_copy (window->details->original_files);
+ if (files == NULL)
+ {
+ return;
+ }
+ }
- vbox = nautilus_mime_application_chooser_new (files, mime_type);
+ vbox = nautilus_mime_application_chooser_new (files, mime_type);
- gtk_widget_show (vbox);
- g_free (mime_type);
- g_list_free (files);
+ gtk_widget_show (vbox);
+ g_free (mime_type);
+ g_list_free (files);
- g_object_set_data_full (G_OBJECT (vbox), "help-uri", g_strdup ("help:gnome-help/files-open"), g_free);
- gtk_notebook_append_page (window->details->notebook,
- vbox, gtk_label_new (_("Open With")));
- gtk_container_child_set (GTK_CONTAINER (window->details->notebook),
- vbox,
- "tab-expand", TRUE,
- NULL);
+ g_object_set_data_full (G_OBJECT (vbox), "help-uri", g_strdup ("help:gnome-help/files-open"), g_free);
+ gtk_notebook_append_page (window->details->notebook,
+ vbox, gtk_label_new (_("Open With")));
+ gtk_container_child_set (GTK_CONTAINER (window->details->notebook),
+ vbox,
+ "tab-expand", TRUE,
+ NULL);
}
static NautilusPropertiesWindow *
create_properties_window (StartupData *startup_data)
{
- NautilusPropertiesWindow *window;
- GList *l;
-
- window = NAUTILUS_PROPERTIES_WINDOW (gtk_widget_new (NAUTILUS_TYPE_PROPERTIES_WINDOW,
- "use-header-bar", TRUE,
- "type-hint", GDK_WINDOW_TYPE_HINT_DIALOG,
- "modal", TRUE,
- NULL));
-
- window->details->original_files = nautilus_file_list_copy (startup_data->original_files);
-
- window->details->target_files = nautilus_file_list_copy (startup_data->target_files);
-
- gtk_window_set_wmclass (GTK_WINDOW (window), "file_properties", "Nautilus");
-
- if (startup_data->parent_widget) {
- gtk_window_set_screen (GTK_WINDOW (window),
- gtk_widget_get_screen (startup_data->parent_widget));
- }
-
- if (startup_data->parent_window) {
- gtk_window_set_transient_for (GTK_WINDOW (window), startup_data->parent_window);
- }
-
- if (startup_data->startup_id) {
- gtk_window_set_startup_id (GTK_WINDOW (window), startup_data->startup_id);
- }
-
- /* Set initial window title */
- update_properties_window_title (window);
-
- /* Start monitoring the file attributes we display. Note that some
- * of the attributes are for the original file, and some for the
- * target files.
- */
-
- for (l = window->details->original_files; l != NULL; l = l->next) {
- NautilusFile *file;
- NautilusFileAttributes attributes;
-
- file = NAUTILUS_FILE (l->data);
-
- attributes =
- NAUTILUS_FILE_ATTRIBUTES_FOR_ICON |
- NAUTILUS_FILE_ATTRIBUTE_INFO |
- NAUTILUS_FILE_ATTRIBUTE_LINK_INFO;
-
- nautilus_file_monitor_add (file,
- &window->details->original_files,
- attributes);
- }
-
- for (l = window->details->target_files; l != NULL; l = l->next) {
- NautilusFile *file;
- NautilusFileAttributes attributes;
-
- file = NAUTILUS_FILE (l->data);
-
- attributes = 0;
- if (nautilus_file_is_directory (file)) {
- attributes |= NAUTILUS_FILE_ATTRIBUTE_DEEP_COUNTS;
- }
-
- attributes |= NAUTILUS_FILE_ATTRIBUTE_INFO;
- nautilus_file_monitor_add (file, &window->details->target_files, attributes);
- }
-
- for (l = window->details->target_files; l != NULL; l = l->next) {
- g_signal_connect_object (NAUTILUS_FILE (l->data),
- "changed",
- G_CALLBACK (file_changed_callback),
- G_OBJECT (window),
- 0);
- }
-
- for (l = window->details->original_files; l != NULL; l = l->next) {
- g_signal_connect_object (NAUTILUS_FILE (l->data),
- "changed",
- G_CALLBACK (file_changed_callback),
- G_OBJECT (window),
- 0);
- }
-
- /* Create the notebook tabs. */
- window->details->notebook = GTK_NOTEBOOK (gtk_notebook_new ());
- gtk_notebook_set_show_border (window->details->notebook, FALSE);
- gtk_container_set_border_width (GTK_CONTAINER (gtk_dialog_get_content_area (GTK_DIALOG (window))), 0);
- gtk_widget_show (GTK_WIDGET (window->details->notebook));
- gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (window))),
- GTK_WIDGET (window->details->notebook),
- TRUE, TRUE, 0);
-
- /* Create the pages. */
- create_basic_page (window);
-
- if (should_show_permissions (window)) {
- create_permissions_page (window);
- }
-
- if (should_show_open_with (window)) {
- create_open_with_page (window);
- }
-
- /* append pages from available views */
- append_extension_pages (window);
-
- /* Update from initial state */
- properties_window_update (window, NULL);
-
- return window;
+ NautilusPropertiesWindow *window;
+ GList *l;
+
+ window = NAUTILUS_PROPERTIES_WINDOW (gtk_widget_new (NAUTILUS_TYPE_PROPERTIES_WINDOW,
+ "use-header-bar", TRUE,
+ "type-hint", GDK_WINDOW_TYPE_HINT_DIALOG,
+ "modal", TRUE,
+ NULL));
+
+ window->details->original_files = nautilus_file_list_copy (startup_data->original_files);
+
+ window->details->target_files = nautilus_file_list_copy (startup_data->target_files);
+
+ gtk_window_set_wmclass (GTK_WINDOW (window), "file_properties", "Nautilus");
+
+ if (startup_data->parent_widget)
+ {
+ gtk_window_set_screen (GTK_WINDOW (window),
+ gtk_widget_get_screen (startup_data->parent_widget));
+ }
+
+ if (startup_data->parent_window)
+ {
+ gtk_window_set_transient_for (GTK_WINDOW (window), startup_data->parent_window);
+ }
+
+ if (startup_data->startup_id)
+ {
+ gtk_window_set_startup_id (GTK_WINDOW (window), startup_data->startup_id);
+ }
+
+ /* Set initial window title */
+ update_properties_window_title (window);
+
+ /* Start monitoring the file attributes we display. Note that some
+ * of the attributes are for the original file, and some for the
+ * target files.
+ */
+
+ for (l = window->details->original_files; l != NULL; l = l->next)
+ {
+ NautilusFile *file;
+ NautilusFileAttributes attributes;
+
+ file = NAUTILUS_FILE (l->data);
+
+ attributes =
+ NAUTILUS_FILE_ATTRIBUTES_FOR_ICON |
+ NAUTILUS_FILE_ATTRIBUTE_INFO |
+ NAUTILUS_FILE_ATTRIBUTE_LINK_INFO;
+
+ nautilus_file_monitor_add (file,
+ &window->details->original_files,
+ attributes);
+ }
+
+ for (l = window->details->target_files; l != NULL; l = l->next)
+ {
+ NautilusFile *file;
+ NautilusFileAttributes attributes;
+
+ file = NAUTILUS_FILE (l->data);
+
+ attributes = 0;
+ if (nautilus_file_is_directory (file))
+ {
+ attributes |= NAUTILUS_FILE_ATTRIBUTE_DEEP_COUNTS;
+ }
+
+ attributes |= NAUTILUS_FILE_ATTRIBUTE_INFO;
+ nautilus_file_monitor_add (file, &window->details->target_files, attributes);
+ }
+
+ for (l = window->details->target_files; l != NULL; l = l->next)
+ {
+ g_signal_connect_object (NAUTILUS_FILE (l->data),
+ "changed",
+ G_CALLBACK (file_changed_callback),
+ G_OBJECT (window),
+ 0);
+ }
+
+ for (l = window->details->original_files; l != NULL; l = l->next)
+ {
+ g_signal_connect_object (NAUTILUS_FILE (l->data),
+ "changed",
+ G_CALLBACK (file_changed_callback),
+ G_OBJECT (window),
+ 0);
+ }
+
+ /* Create the notebook tabs. */
+ window->details->notebook = GTK_NOTEBOOK (gtk_notebook_new ());
+ gtk_notebook_set_show_border (window->details->notebook, FALSE);
+ gtk_container_set_border_width (GTK_CONTAINER (gtk_dialog_get_content_area (GTK_DIALOG (window))), 0);
+ gtk_widget_show (GTK_WIDGET (window->details->notebook));
+ gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (window))),
+ GTK_WIDGET (window->details->notebook),
+ TRUE, TRUE, 0);
+
+ /* Create the pages. */
+ create_basic_page (window);
+
+ if (should_show_permissions (window))
+ {
+ create_permissions_page (window);
+ }
+
+ if (should_show_open_with (window))
+ {
+ create_open_with_page (window);
+ }
+
+ /* append pages from available views */
+ append_extension_pages (window);
+
+ /* Update from initial state */
+ properties_window_update (window, NULL);
+
+ return window;
}
static GList *
get_target_file_list (GList *original_files)
{
- GList *ret;
- GList *l;
-
- ret = NULL;
-
- for (l = original_files; l != NULL; l = l->next) {
- NautilusFile *target;
-
- target = get_target_file_for_original_file (NAUTILUS_FILE (l->data));
-
- ret = g_list_prepend (ret, target);
- }
+ GList *ret;
+ GList *l;
+
+ ret = NULL;
+
+ for (l = original_files; l != NULL; l = l->next)
+ {
+ NautilusFile *target;
- ret = g_list_reverse (ret);
+ target = get_target_file_for_original_file (NAUTILUS_FILE (l->data));
- return ret;
+ ret = g_list_prepend (ret, target);
+ }
+
+ ret = g_list_reverse (ret);
+
+ return ret;
}
static void
add_window (NautilusPropertiesWindow *window)
{
- if (!is_multi_file_window (window)) {
- g_hash_table_insert (windows,
- get_original_file (window),
- window);
- g_object_set_data (G_OBJECT (window), "window_key",
- get_original_file (window));
- }
+ if (!is_multi_file_window (window))
+ {
+ g_hash_table_insert (windows,
+ get_original_file (window),
+ window);
+ g_object_set_data (G_OBJECT (window), "window_key",
+ get_original_file (window));
+ }
}
static void
remove_window (NautilusPropertiesWindow *window)
{
- gpointer key;
+ gpointer key;
- key = g_object_get_data (G_OBJECT (window), "window_key");
- if (key) {
- g_hash_table_remove (windows, key);
- }
+ key = g_object_get_data (G_OBJECT (window), "window_key");
+ if (key)
+ {
+ g_hash_table_remove (windows, key);
+ }
}
static GtkWindow *
get_existing_window (GList *file_list)
{
- if (!file_list->next) {
- return g_hash_table_lookup (windows, file_list->data);
- }
+ if (!file_list->next)
+ {
+ return g_hash_table_lookup (windows, file_list->data);
+ }
- return NULL;
+ return NULL;
}
static void
cancel_create_properties_window_callback (gpointer callback_data)
{
- remove_pending ((StartupData *)callback_data, TRUE, FALSE, TRUE);
+ remove_pending ((StartupData *) callback_data, TRUE, FALSE, TRUE);
}
static void
-parent_widget_destroyed_callback (GtkWidget *widget, gpointer callback_data)
+parent_widget_destroyed_callback (GtkWidget *widget,
+ gpointer callback_data)
{
- g_assert (widget == ((StartupData *)callback_data)->parent_widget);
-
- remove_pending ((StartupData *)callback_data, TRUE, TRUE, FALSE);
+ g_assert (widget == ((StartupData *) callback_data)->parent_widget);
+
+ remove_pending ((StartupData *) callback_data, TRUE, TRUE, FALSE);
}
static void
cancel_call_when_ready_callback (gpointer key,
- gpointer value,
- gpointer user_data)
+ gpointer value,
+ gpointer user_data)
{
- nautilus_file_cancel_call_when_ready
- (NAUTILUS_FILE (key),
- is_directory_ready_callback,
- user_data);
+ nautilus_file_cancel_call_when_ready
+ (NAUTILUS_FILE (key),
+ is_directory_ready_callback,
+ user_data);
}
static void
remove_pending (StartupData *startup_data,
- gboolean cancel_call_when_ready,
- gboolean cancel_timed_wait,
- gboolean cancel_destroy_handler)
-{
- if (cancel_call_when_ready) {
- g_hash_table_foreach (startup_data->pending_files,
- cancel_call_when_ready_callback,
- startup_data);
-
- }
- if (cancel_timed_wait) {
- eel_timed_wait_stop
- (cancel_create_properties_window_callback, startup_data);
- }
- if (cancel_destroy_handler && startup_data->parent_widget) {
- g_signal_handlers_disconnect_by_func (startup_data->parent_widget,
- G_CALLBACK (parent_widget_destroyed_callback),
- startup_data);
- }
-
- g_hash_table_remove (pending_lists, startup_data->pending_key);
-
- startup_data_free (startup_data);
+ gboolean cancel_call_when_ready,
+ gboolean cancel_timed_wait,
+ gboolean cancel_destroy_handler)
+{
+ if (cancel_call_when_ready)
+ {
+ g_hash_table_foreach (startup_data->pending_files,
+ cancel_call_when_ready_callback,
+ startup_data);
+ }
+ if (cancel_timed_wait)
+ {
+ eel_timed_wait_stop
+ (cancel_create_properties_window_callback, startup_data);
+ }
+ if (cancel_destroy_handler && startup_data->parent_widget)
+ {
+ g_signal_handlers_disconnect_by_func (startup_data->parent_widget,
+ G_CALLBACK (parent_widget_destroyed_callback),
+ startup_data);
+ }
+
+ g_hash_table_remove (pending_lists, startup_data->pending_key);
+
+ startup_data_free (startup_data);
}
static void
is_directory_ready_callback (NautilusFile *file,
- gpointer data)
+ gpointer data)
{
- StartupData *startup_data;
-
- startup_data = data;
-
- g_hash_table_remove (startup_data->pending_files, file);
+ StartupData *startup_data;
+
+ startup_data = data;
+
+ g_hash_table_remove (startup_data->pending_files, file);
- if (g_hash_table_size (startup_data->pending_files) == 0) {
- NautilusPropertiesWindow *new_window;
-
- new_window = create_properties_window (startup_data);
-
- add_window (new_window);
-
- remove_pending (startup_data, FALSE, TRUE, TRUE);
-
- gtk_window_present (GTK_WINDOW (new_window));
- }
+ if (g_hash_table_size (startup_data->pending_files) == 0)
+ {
+ NautilusPropertiesWindow *new_window;
+
+ new_window = create_properties_window (startup_data);
+
+ add_window (new_window);
+
+ remove_pending (startup_data, FALSE, TRUE, TRUE);
+
+ gtk_window_present (GTK_WINDOW (new_window));
+ }
}
void
nautilus_properties_window_present (GList *original_files,
- GtkWidget *parent_widget,
- const gchar *startup_id)
-{
- GList *l, *next;
- GtkWidget *parent_window;
- StartupData *startup_data;
- GList *target_files;
- GtkWindow *existing_window;
- char *pending_key;
-
- g_return_if_fail (original_files != NULL);
- g_return_if_fail (parent_widget == NULL || GTK_IS_WIDGET (parent_widget));
-
- /* Create the hash tables first time through. */
- if (windows == NULL) {
- windows = g_hash_table_new (NULL, NULL);
- }
-
- if (pending_lists == NULL) {
- pending_lists = g_hash_table_new (g_str_hash, g_str_equal);
- }
-
- /* Look to see if there's already a window for this file. */
- existing_window = get_existing_window (original_files);
- if (existing_window != NULL) {
- if (parent_widget)
- gtk_window_set_screen (existing_window,
- gtk_widget_get_screen (parent_widget));
- else if (startup_id)
- gtk_window_set_startup_id (existing_window, startup_id);
-
- gtk_window_present (existing_window);
- return;
- }
-
-
- pending_key = get_pending_key (original_files);
-
- /* Look to see if we're already waiting for a window for this file. */
- if (g_hash_table_lookup (pending_lists, pending_key) != NULL) {
- return;
- }
-
- target_files = get_target_file_list (original_files);
-
- if (parent_widget) {
- parent_window = gtk_widget_get_ancestor (parent_widget, GTK_TYPE_WINDOW);
- } else {
- parent_window = NULL;
- }
-
- startup_data = startup_data_new (original_files,
- target_files,
- pending_key,
- parent_widget,
- GTK_WINDOW (parent_window),
- startup_id);
-
- nautilus_file_list_free (target_files);
- g_free(pending_key);
-
- /* Wait until we can tell whether it's a directory before showing, since
- * some one-time layout decisions depend on that info.
- */
-
- g_hash_table_insert (pending_lists, startup_data->pending_key, startup_data->pending_key);
- if (parent_widget) {
- g_signal_connect (parent_widget, "destroy",
- G_CALLBACK (parent_widget_destroyed_callback), startup_data);
- }
-
- eel_timed_wait_start
- (cancel_create_properties_window_callback,
- startup_data,
- _("Creating Properties window."),
- parent_window == NULL ? NULL : GTK_WINDOW (parent_window));
-
- for (l = startup_data->target_files; l != NULL; l = next) {
- next = l->next;
- nautilus_file_call_when_ready
- (NAUTILUS_FILE (l->data),
- NAUTILUS_FILE_ATTRIBUTE_INFO,
- is_directory_ready_callback,
- startup_data);
- }
+ GtkWidget *parent_widget,
+ const gchar *startup_id)
+{
+ GList *l, *next;
+ GtkWidget *parent_window;
+ StartupData *startup_data;
+ GList *target_files;
+ GtkWindow *existing_window;
+ char *pending_key;
+
+ g_return_if_fail (original_files != NULL);
+ g_return_if_fail (parent_widget == NULL || GTK_IS_WIDGET (parent_widget));
+
+ /* Create the hash tables first time through. */
+ if (windows == NULL)
+ {
+ windows = g_hash_table_new (NULL, NULL);
+ }
+
+ if (pending_lists == NULL)
+ {
+ pending_lists = g_hash_table_new (g_str_hash, g_str_equal);
+ }
+
+ /* Look to see if there's already a window for this file. */
+ existing_window = get_existing_window (original_files);
+ if (existing_window != NULL)
+ {
+ if (parent_widget)
+ {
+ gtk_window_set_screen (existing_window,
+ gtk_widget_get_screen (parent_widget));
+ }
+ else if (startup_id)
+ {
+ gtk_window_set_startup_id (existing_window, startup_id);
+ }
+
+ gtk_window_present (existing_window);
+ return;
+ }
+
+
+ pending_key = get_pending_key (original_files);
+
+ /* Look to see if we're already waiting for a window for this file. */
+ if (g_hash_table_lookup (pending_lists, pending_key) != NULL)
+ {
+ return;
+ }
+
+ target_files = get_target_file_list (original_files);
+
+ if (parent_widget)
+ {
+ parent_window = gtk_widget_get_ancestor (parent_widget, GTK_TYPE_WINDOW);
+ }
+ else
+ {
+ parent_window = NULL;
+ }
+
+ startup_data = startup_data_new (original_files,
+ target_files,
+ pending_key,
+ parent_widget,
+ GTK_WINDOW (parent_window),
+ startup_id);
+
+ nautilus_file_list_free (target_files);
+ g_free (pending_key);
+
+ /* Wait until we can tell whether it's a directory before showing, since
+ * some one-time layout decisions depend on that info.
+ */
+
+ g_hash_table_insert (pending_lists, startup_data->pending_key, startup_data->pending_key);
+ if (parent_widget)
+ {
+ g_signal_connect (parent_widget, "destroy",
+ G_CALLBACK (parent_widget_destroyed_callback), startup_data);
+ }
+
+ eel_timed_wait_start
+ (cancel_create_properties_window_callback,
+ startup_data,
+ _("Creating Properties window."),
+ parent_window == NULL ? NULL : GTK_WINDOW (parent_window));
+
+ for (l = startup_data->target_files; l != NULL; l = next)
+ {
+ next = l->next;
+ nautilus_file_call_when_ready
+ (NAUTILUS_FILE (l->data),
+ NAUTILUS_FILE_ATTRIBUTE_INFO,
+ is_directory_ready_callback,
+ startup_data);
+ }
}
static void
real_response (GtkDialog *dialog,
- int response)
-{
- switch (response) {
- case GTK_RESPONSE_NONE:
- case GTK_RESPONSE_CLOSE:
- case GTK_RESPONSE_DELETE_EVENT:
- gtk_widget_destroy (GTK_WIDGET (dialog));
- break;
-
- default:
- g_assert_not_reached ();
- break;
- }
+ int response)
+{
+ switch (response)
+ {
+ case GTK_RESPONSE_NONE:
+ case GTK_RESPONSE_CLOSE:
+ case GTK_RESPONSE_DELETE_EVENT:
+ {
+ gtk_widget_destroy (GTK_WIDGET (dialog));
+ }
+ break;
+
+ default:
+ {
+ g_assert_not_reached ();
+ }
+ break;
+ }
}
static void
real_destroy (GtkWidget *object)
{
- NautilusPropertiesWindow *window;
- GList *l;
+ NautilusPropertiesWindow *window;
+ GList *l;
+
+ window = NAUTILUS_PROPERTIES_WINDOW (object);
- window = NAUTILUS_PROPERTIES_WINDOW (object);
+ remove_window (window);
- remove_window (window);
+ unschedule_or_cancel_group_change (window);
+ unschedule_or_cancel_owner_change (window);
- unschedule_or_cancel_group_change (window);
- unschedule_or_cancel_owner_change (window);
+ for (l = window->details->original_files; l != NULL; l = l->next)
+ {
+ nautilus_file_monitor_remove (NAUTILUS_FILE (l->data), &window->details->original_files);
+ }
+ nautilus_file_list_free (window->details->original_files);
+ window->details->original_files = NULL;
- for (l = window->details->original_files; l != NULL; l = l->next) {
- nautilus_file_monitor_remove (NAUTILUS_FILE (l->data), &window->details->original_files);
- }
- nautilus_file_list_free (window->details->original_files);
- window->details->original_files = NULL;
-
- for (l = window->details->target_files; l != NULL; l = l->next) {
- nautilus_file_monitor_remove (NAUTILUS_FILE (l->data), &window->details->target_files);
- }
- nautilus_file_list_free (window->details->target_files);
- window->details->target_files = NULL;
+ for (l = window->details->target_files; l != NULL; l = l->next)
+ {
+ nautilus_file_monitor_remove (NAUTILUS_FILE (l->data), &window->details->target_files);
+ }
+ nautilus_file_list_free (window->details->target_files);
+ window->details->target_files = NULL;
- nautilus_file_list_free (window->details->changed_files);
- window->details->changed_files = NULL;
+ nautilus_file_list_free (window->details->changed_files);
+ window->details->changed_files = NULL;
- if (window->details->deep_count_spinner_timeout_id > 0) {
- g_source_remove (window->details->deep_count_spinner_timeout_id);
- }
+ if (window->details->deep_count_spinner_timeout_id > 0)
+ {
+ g_source_remove (window->details->deep_count_spinner_timeout_id);
+ }
- while (window->details->deep_count_files) {
- stop_deep_count_for_file (window, window->details->deep_count_files->data);
- }
+ while (window->details->deep_count_files)
+ {
+ stop_deep_count_for_file (window, window->details->deep_count_files->data);
+ }
- window->details->name_field = NULL;
+ window->details->name_field = NULL;
- g_list_free (window->details->permission_buttons);
- window->details->permission_buttons = NULL;
+ g_list_free (window->details->permission_buttons);
+ window->details->permission_buttons = NULL;
- g_list_free (window->details->permission_combos);
- window->details->permission_combos = NULL;
+ g_list_free (window->details->permission_combos);
+ window->details->permission_combos = NULL;
- g_list_free (window->details->change_permission_combos);
- window->details->change_permission_combos = NULL;
+ g_list_free (window->details->change_permission_combos);
+ window->details->change_permission_combos = NULL;
- if (window->details->initial_permissions) {
- g_hash_table_destroy (window->details->initial_permissions);
- window->details->initial_permissions = NULL;
- }
+ if (window->details->initial_permissions)
+ {
+ g_hash_table_destroy (window->details->initial_permissions);
+ window->details->initial_permissions = NULL;
+ }
- g_list_free (window->details->value_fields);
- window->details->value_fields = NULL;
+ g_list_free (window->details->value_fields);
+ window->details->value_fields = NULL;
- if (window->details->update_directory_contents_timeout_id != 0) {
- g_source_remove (window->details->update_directory_contents_timeout_id);
- window->details->update_directory_contents_timeout_id = 0;
- }
+ if (window->details->update_directory_contents_timeout_id != 0)
+ {
+ g_source_remove (window->details->update_directory_contents_timeout_id);
+ window->details->update_directory_contents_timeout_id = 0;
+ }
- if (window->details->update_files_timeout_id != 0) {
- g_source_remove (window->details->update_files_timeout_id);
- window->details->update_files_timeout_id = 0;
- }
+ if (window->details->update_files_timeout_id != 0)
+ {
+ g_source_remove (window->details->update_files_timeout_id);
+ window->details->update_files_timeout_id = 0;
+ }
- GTK_WIDGET_CLASS (nautilus_properties_window_parent_class)->destroy (object);
+ GTK_WIDGET_CLASS (nautilus_properties_window_parent_class)->destroy (object);
}
static void
real_finalize (GObject *object)
{
- NautilusPropertiesWindow *window;
+ NautilusPropertiesWindow *window;
- window = NAUTILUS_PROPERTIES_WINDOW (object);
+ window = NAUTILUS_PROPERTIES_WINDOW (object);
- g_list_free_full (window->details->mime_list, g_free);
+ g_list_free_full (window->details->mime_list, g_free);
- g_free (window->details->pending_name);
+ g_free (window->details->pending_name);
- G_OBJECT_CLASS (nautilus_properties_window_parent_class)->finalize (object);
+ G_OBJECT_CLASS (nautilus_properties_window_parent_class)->finalize (object);
}
/* converts
@@ -4979,251 +5496,285 @@ real_finalize (GObject *object)
* */
static char *
make_relative_uri_from_full (const char *uri,
- const char *base_uri)
+ const char *base_uri)
{
- g_assert (uri != NULL);
- g_assert (base_uri != NULL);
+ g_assert (uri != NULL);
+ g_assert (base_uri != NULL);
- if (g_str_has_prefix (uri, base_uri)) {
- uri += strlen (base_uri);
- if (*uri != '/') {
- return NULL;
- }
+ if (g_str_has_prefix (uri, base_uri))
+ {
+ uri += strlen (base_uri);
+ if (*uri != '/')
+ {
+ return NULL;
+ }
- while (*uri == '/') {
- uri++;
- }
+ while (*uri == '/')
+ {
+ uri++;
+ }
- if (*uri != '\0') {
- return g_strdup (uri);
- }
- }
+ if (*uri != '\0')
+ {
+ return g_strdup (uri);
+ }
+ }
- return NULL;
+ return NULL;
}
/* icon selection callback to set the image of the file object to the selected file */
static void
-set_icon (const char* icon_uri, NautilusPropertiesWindow *properties_window)
-{
- NautilusFile *file;
- char *file_uri;
- char *icon_path;
- char *real_icon_uri;
-
- g_assert (icon_uri != NULL);
- g_assert (NAUTILUS_IS_PROPERTIES_WINDOW (properties_window));
-
- icon_path = g_filename_from_uri (icon_uri, NULL, NULL);
- /* we don't allow remote URIs */
- if (icon_path != NULL) {
- GList *l;
-
- for (l = properties_window->details->original_files; l != NULL; l = l->next) {
- file = NAUTILUS_FILE (l->data);
-
- file_uri = nautilus_file_get_uri (file);
-
- if (nautilus_file_is_mime_type (file, "application/x-desktop")) {
- if (nautilus_link_local_set_icon (file_uri, icon_path)) {
- nautilus_file_invalidate_attributes (file,
- NAUTILUS_FILE_ATTRIBUTE_INFO |
- NAUTILUS_FILE_ATTRIBUTE_LINK_INFO);
- }
- } else {
- real_icon_uri = make_relative_uri_from_full (icon_uri, file_uri);
- if (real_icon_uri == NULL) {
- real_icon_uri = g_strdup (icon_uri);
- }
-
- nautilus_file_set_metadata (file, NAUTILUS_METADATA_KEY_CUSTOM_ICON, NULL, real_icon_uri);
- nautilus_file_set_metadata (file, NAUTILUS_METADATA_KEY_ICON_SCALE, NULL, NULL);
-
- g_free (real_icon_uri);
- }
-
- g_free (file_uri);
- }
-
- g_free (icon_path);
- }
+set_icon (const char *icon_uri,
+ NautilusPropertiesWindow *properties_window)
+{
+ NautilusFile *file;
+ char *file_uri;
+ char *icon_path;
+ char *real_icon_uri;
+
+ g_assert (icon_uri != NULL);
+ g_assert (NAUTILUS_IS_PROPERTIES_WINDOW (properties_window));
+
+ icon_path = g_filename_from_uri (icon_uri, NULL, NULL);
+ /* we don't allow remote URIs */
+ if (icon_path != NULL)
+ {
+ GList *l;
+
+ for (l = properties_window->details->original_files; l != NULL; l = l->next)
+ {
+ file = NAUTILUS_FILE (l->data);
+
+ file_uri = nautilus_file_get_uri (file);
+
+ if (nautilus_file_is_mime_type (file, "application/x-desktop"))
+ {
+ if (nautilus_link_local_set_icon (file_uri, icon_path))
+ {
+ nautilus_file_invalidate_attributes (file,
+ NAUTILUS_FILE_ATTRIBUTE_INFO |
+ NAUTILUS_FILE_ATTRIBUTE_LINK_INFO);
+ }
+ }
+ else
+ {
+ real_icon_uri = make_relative_uri_from_full (icon_uri, file_uri);
+ if (real_icon_uri == NULL)
+ {
+ real_icon_uri = g_strdup (icon_uri);
+ }
+
+ nautilus_file_set_metadata (file, NAUTILUS_METADATA_KEY_CUSTOM_ICON, NULL, real_icon_uri);
+ nautilus_file_set_metadata (file, NAUTILUS_METADATA_KEY_ICON_SCALE, NULL, NULL);
+
+ g_free (real_icon_uri);
+ }
+
+ g_free (file_uri);
+ }
+
+ g_free (icon_path);
+ }
}
static void
-update_preview_callback (GtkFileChooser *icon_chooser,
- NautilusPropertiesWindow *window)
-{
- GtkWidget *preview_widget;
- GdkPixbuf *pixbuf, *scaled_pixbuf;
- char *filename;
- double scale;
-
- pixbuf = NULL;
-
- filename = gtk_file_chooser_get_filename (icon_chooser);
- if (filename != NULL) {
- pixbuf = gdk_pixbuf_new_from_file (filename, NULL);
- }
-
- if (pixbuf != NULL) {
- preview_widget = gtk_file_chooser_get_preview_widget (icon_chooser);
- gtk_file_chooser_set_preview_widget_active (icon_chooser, TRUE);
-
- if (gdk_pixbuf_get_width (pixbuf) > PREVIEW_IMAGE_WIDTH) {
- scale = (double)gdk_pixbuf_get_height (pixbuf) /
- gdk_pixbuf_get_width (pixbuf);
-
- scaled_pixbuf = gnome_desktop_thumbnail_scale_down_pixbuf
- (pixbuf,
- PREVIEW_IMAGE_WIDTH,
- scale * PREVIEW_IMAGE_WIDTH);
- g_object_unref (pixbuf);
- pixbuf = scaled_pixbuf;
- }
-
- gtk_image_set_from_pixbuf (GTK_IMAGE (preview_widget), pixbuf);
- } else {
- gtk_file_chooser_set_preview_widget_active (icon_chooser, FALSE);
- }
-
- g_free (filename);
-
- if (pixbuf != NULL) {
- g_object_unref (pixbuf);
- }
+update_preview_callback (GtkFileChooser *icon_chooser,
+ NautilusPropertiesWindow *window)
+{
+ GtkWidget *preview_widget;
+ GdkPixbuf *pixbuf, *scaled_pixbuf;
+ char *filename;
+ double scale;
+
+ pixbuf = NULL;
+
+ filename = gtk_file_chooser_get_filename (icon_chooser);
+ if (filename != NULL)
+ {
+ pixbuf = gdk_pixbuf_new_from_file (filename, NULL);
+ }
+
+ if (pixbuf != NULL)
+ {
+ preview_widget = gtk_file_chooser_get_preview_widget (icon_chooser);
+ gtk_file_chooser_set_preview_widget_active (icon_chooser, TRUE);
+
+ if (gdk_pixbuf_get_width (pixbuf) > PREVIEW_IMAGE_WIDTH)
+ {
+ scale = (double) gdk_pixbuf_get_height (pixbuf) /
+ gdk_pixbuf_get_width (pixbuf);
+
+ scaled_pixbuf = gnome_desktop_thumbnail_scale_down_pixbuf
+ (pixbuf,
+ PREVIEW_IMAGE_WIDTH,
+ scale * PREVIEW_IMAGE_WIDTH);
+ g_object_unref (pixbuf);
+ pixbuf = scaled_pixbuf;
+ }
+
+ gtk_image_set_from_pixbuf (GTK_IMAGE (preview_widget), pixbuf);
+ }
+ else
+ {
+ gtk_file_chooser_set_preview_widget_active (icon_chooser, FALSE);
+ }
+
+ g_free (filename);
+
+ if (pixbuf != NULL)
+ {
+ g_object_unref (pixbuf);
+ }
}
static void
-custom_icon_file_chooser_response_cb (GtkDialog *dialog,
- gint response,
- NautilusPropertiesWindow *window)
-{
- char *uri;
-
- switch (response) {
- case GTK_RESPONSE_NO:
- reset_icon (window);
- break;
-
- case GTK_RESPONSE_OK:
- uri = gtk_file_chooser_get_uri (GTK_FILE_CHOOSER (dialog));
- if (uri != NULL) {
- set_icon (uri, window);
- } else {
- reset_icon (window);
- }
- g_free (uri);
- break;
-
- default:
- break;
- }
-
- gtk_widget_hide (GTK_WIDGET (dialog));
+custom_icon_file_chooser_response_cb (GtkDialog *dialog,
+ gint response,
+ NautilusPropertiesWindow *window)
+{
+ char *uri;
+
+ switch (response)
+ {
+ case GTK_RESPONSE_NO:
+ {
+ reset_icon (window);
+ }
+ break;
+
+ case GTK_RESPONSE_OK:
+ {
+ uri = gtk_file_chooser_get_uri (GTK_FILE_CHOOSER (dialog));
+ if (uri != NULL)
+ {
+ set_icon (uri, window);
+ }
+ else
+ {
+ reset_icon (window);
+ }
+ g_free (uri);
+ }
+ break;
+
+ default:
+ {
+ }
+ break;
+ }
+
+ gtk_widget_hide (GTK_WIDGET (dialog));
}
static void
-select_image_button_callback (GtkWidget *widget,
- NautilusPropertiesWindow *window)
-{
- GtkWidget *dialog, *preview;
- GtkFileFilter *filter;
- GList *l;
- NautilusFile *file;
- char *uri;
- char *image_path;
- gboolean revert_is_sensitive;
-
- g_assert (NAUTILUS_IS_PROPERTIES_WINDOW (window));
-
- dialog = window->details->icon_chooser;
-
- if (dialog == NULL) {
- dialog = gtk_file_chooser_dialog_new (_("Select Custom Icon"), GTK_WINDOW (window),
- GTK_FILE_CHOOSER_ACTION_OPEN,
- _("_Revert"), GTK_RESPONSE_NO,
- _("_Cancel"), GTK_RESPONSE_CANCEL,
- _("_Open"), GTK_RESPONSE_OK,
- NULL);
- gtk_file_chooser_add_shortcut_folder (GTK_FILE_CHOOSER (dialog),
- g_get_user_special_dir (G_USER_DIRECTORY_PICTURES),
- NULL);
- gtk_window_set_destroy_with_parent (GTK_WINDOW (dialog), TRUE);
- gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
-
- filter = gtk_file_filter_new ();
- gtk_file_filter_add_pixbuf_formats (filter);
- gtk_file_chooser_set_filter (GTK_FILE_CHOOSER (dialog), filter);
-
- preview = gtk_image_new ();
- gtk_widget_set_size_request (preview, PREVIEW_IMAGE_WIDTH, -1);
- gtk_file_chooser_set_preview_widget (GTK_FILE_CHOOSER (dialog), preview);
- gtk_file_chooser_set_use_preview_label (GTK_FILE_CHOOSER (dialog), FALSE);
- gtk_file_chooser_set_preview_widget_active (GTK_FILE_CHOOSER (dialog), FALSE);
-
- g_signal_connect (dialog, "update-preview",
- G_CALLBACK (update_preview_callback), window);
-
- window->details->icon_chooser = dialog;
-
- g_object_add_weak_pointer (G_OBJECT (dialog),
- (gpointer *) &window->details->icon_chooser);
- }
-
- /* it's likely that the user wants to pick an icon that is inside a local directory */
- if (g_list_length (window->details->original_files) == 1) {
- file = NAUTILUS_FILE (window->details->original_files->data);
-
- if (nautilus_file_is_directory (file)) {
- uri = nautilus_file_get_uri (file);
-
- image_path = g_filename_from_uri (uri, NULL, NULL);
- if (image_path != NULL) {
- gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog), image_path);
- g_free (image_path);
- }
-
- g_free (uri);
- }
- }
-
- revert_is_sensitive = FALSE;
- for (l = window->details->original_files; l != NULL; l = l->next) {
- file = NAUTILUS_FILE (l->data);
- image_path = nautilus_file_get_metadata (file, NAUTILUS_METADATA_KEY_CUSTOM_ICON, NULL);
- revert_is_sensitive = (image_path != NULL);
- g_free (image_path);
-
- if (revert_is_sensitive) {
- break;
- }
- }
- gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog), GTK_RESPONSE_NO, revert_is_sensitive);
-
- g_signal_connect (dialog, "response",
- G_CALLBACK (custom_icon_file_chooser_response_cb), window);
- gtk_widget_show (dialog);
+select_image_button_callback (GtkWidget *widget,
+ NautilusPropertiesWindow *window)
+{
+ GtkWidget *dialog, *preview;
+ GtkFileFilter *filter;
+ GList *l;
+ NautilusFile *file;
+ char *uri;
+ char *image_path;
+ gboolean revert_is_sensitive;
+
+ g_assert (NAUTILUS_IS_PROPERTIES_WINDOW (window));
+
+ dialog = window->details->icon_chooser;
+
+ if (dialog == NULL)
+ {
+ dialog = gtk_file_chooser_dialog_new (_("Select Custom Icon"), GTK_WINDOW (window),
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ _("_Revert"), GTK_RESPONSE_NO,
+ _("_Cancel"), GTK_RESPONSE_CANCEL,
+ _("_Open"), GTK_RESPONSE_OK,
+ NULL);
+ gtk_file_chooser_add_shortcut_folder (GTK_FILE_CHOOSER (dialog),
+ g_get_user_special_dir (G_USER_DIRECTORY_PICTURES),
+ NULL);
+ gtk_window_set_destroy_with_parent (GTK_WINDOW (dialog), TRUE);
+ gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
+
+ filter = gtk_file_filter_new ();
+ gtk_file_filter_add_pixbuf_formats (filter);
+ gtk_file_chooser_set_filter (GTK_FILE_CHOOSER (dialog), filter);
+
+ preview = gtk_image_new ();
+ gtk_widget_set_size_request (preview, PREVIEW_IMAGE_WIDTH, -1);
+ gtk_file_chooser_set_preview_widget (GTK_FILE_CHOOSER (dialog), preview);
+ gtk_file_chooser_set_use_preview_label (GTK_FILE_CHOOSER (dialog), FALSE);
+ gtk_file_chooser_set_preview_widget_active (GTK_FILE_CHOOSER (dialog), FALSE);
+
+ g_signal_connect (dialog, "update-preview",
+ G_CALLBACK (update_preview_callback), window);
+
+ window->details->icon_chooser = dialog;
+
+ g_object_add_weak_pointer (G_OBJECT (dialog),
+ (gpointer *) &window->details->icon_chooser);
+ }
+
+ /* it's likely that the user wants to pick an icon that is inside a local directory */
+ if (g_list_length (window->details->original_files) == 1)
+ {
+ file = NAUTILUS_FILE (window->details->original_files->data);
+
+ if (nautilus_file_is_directory (file))
+ {
+ uri = nautilus_file_get_uri (file);
+
+ image_path = g_filename_from_uri (uri, NULL, NULL);
+ if (image_path != NULL)
+ {
+ gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog), image_path);
+ g_free (image_path);
+ }
+
+ g_free (uri);
+ }
+ }
+
+ revert_is_sensitive = FALSE;
+ for (l = window->details->original_files; l != NULL; l = l->next)
+ {
+ file = NAUTILUS_FILE (l->data);
+ image_path = nautilus_file_get_metadata (file, NAUTILUS_METADATA_KEY_CUSTOM_ICON, NULL);
+ revert_is_sensitive = (image_path != NULL);
+ g_free (image_path);
+
+ if (revert_is_sensitive)
+ {
+ break;
+ }
+ }
+ gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog), GTK_RESPONSE_NO, revert_is_sensitive);
+
+ g_signal_connect (dialog, "response",
+ G_CALLBACK (custom_icon_file_chooser_response_cb), window);
+ gtk_widget_show (dialog);
}
static void
nautilus_properties_window_class_init (NautilusPropertiesWindowClass *class)
{
- GtkBindingSet *binding_set;
+ GtkBindingSet *binding_set;
- G_OBJECT_CLASS (class)->finalize = real_finalize;
- GTK_WIDGET_CLASS (class)->destroy = real_destroy;
- GTK_DIALOG_CLASS (class)->response = real_response;
+ G_OBJECT_CLASS (class)->finalize = real_finalize;
+ GTK_WIDGET_CLASS (class)->destroy = real_destroy;
+ GTK_DIALOG_CLASS (class)->response = real_response;
- binding_set = gtk_binding_set_by_class (class);
- gtk_binding_entry_add_signal (binding_set, GDK_KEY_Escape, 0,
- "close", 0);
+ binding_set = gtk_binding_set_by_class (class);
+ gtk_binding_entry_add_signal (binding_set, GDK_KEY_Escape, 0,
+ "close", 0);
- g_type_class_add_private (class, sizeof (NautilusPropertiesWindowDetails));
+ g_type_class_add_private (class, sizeof (NautilusPropertiesWindowDetails));
}
static void
nautilus_properties_window_init (NautilusPropertiesWindow *window)
{
- window->details = G_TYPE_INSTANCE_GET_PRIVATE (window, NAUTILUS_TYPE_PROPERTIES_WINDOW,
- NautilusPropertiesWindowDetails);
+ window->details = G_TYPE_INSTANCE_GET_PRIVATE (window, NAUTILUS_TYPE_PROPERTIES_WINDOW,
+ NautilusPropertiesWindowDetails);
}