summaryrefslogtreecommitdiff
path: root/src/caja-file-management-properties.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/caja-file-management-properties.c')
-rw-r--r--src/caja-file-management-properties.c891
1 files changed, 891 insertions, 0 deletions
diff --git a/src/caja-file-management-properties.c b/src/caja-file-management-properties.c
new file mode 100644
index 00000000..fcfbbbf4
--- /dev/null
+++ b/src/caja-file-management-properties.c
@@ -0,0 +1,891 @@
+/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
+
+/* caja-file-management-properties.c - Functions to create and show the caja preference dialog.
+
+ Copyright (C) 2002 Jan Arne Petersen
+
+ The Mate 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 Mate 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 Mate Library; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+
+ Authors: Jan Arne Petersen <[email protected]>
+*/
+
+#include <config.h>
+
+#include "caja-file-management-properties.h"
+
+#include <string.h>
+#include <time.h>
+#include <gtk/gtk.h>
+#include <gio/gio.h>
+
+#include <glib/gi18n.h>
+
+#include <eel/eel-mateconf-extensions.h>
+#include <eel/eel-glib-extensions.h>
+#include <eel/eel-preferences.h>
+
+#include <libcaja-private/caja-column-chooser.h>
+#include <libcaja-private/caja-column-utilities.h>
+#include <libcaja-private/caja-global-preferences.h>
+#include <libcaja-private/caja-module.h>
+
+#include <libcaja-private/caja-autorun.h>
+
+/* string enum preferences */
+#define CAJA_FILE_MANAGEMENT_PROPERTIES_DEFAULT_VIEW_WIDGET "default_view_combobox"
+#define CAJA_FILE_MANAGEMENT_PROPERTIES_ICON_VIEW_ZOOM_WIDGET "icon_view_zoom_combobox"
+#define CAJA_FILE_MANAGEMENT_PROPERTIES_COMPACT_VIEW_ZOOM_WIDGET "compact_view_zoom_combobox"
+#define CAJA_FILE_MANAGEMENT_PROPERTIES_LIST_VIEW_ZOOM_WIDGET "list_view_zoom_combobox"
+#define CAJA_FILE_MANAGEMENT_PROPERTIES_SORT_ORDER_WIDGET "sort_order_combobox"
+#define CAJA_FILE_MANAGEMENT_PROPERTIES_DATE_FORMAT_WIDGET "date_format_combobox"
+#define CAJA_FILE_MANAGEMENT_PROPERTIES_PREVIEW_TEXT_WIDGET "preview_text_combobox"
+#define CAJA_FILE_MANAGEMENT_PROPERTIES_PREVIEW_IMAGE_WIDGET "preview_image_combobox"
+#define CAJA_FILE_MANAGEMENT_PROPERTIES_PREVIEW_SOUND_WIDGET "preview_sound_combobox"
+#define CAJA_FILE_MANAGEMENT_PROPERTIES_PREVIEW_FOLDER_WIDGET "preview_folder_combobox"
+
+/* bool preferences */
+#define CAJA_FILE_MANAGEMENT_PROPERTIES_FOLDERS_FIRST_WIDGET "sort_folders_first_checkbutton"
+#define CAJA_FILE_MANAGEMENT_PROPERTIES_COMPACT_LAYOUT_WIDGET "compact_layout_checkbutton"
+#define CAJA_FILE_MANAGEMENT_PROPERTIES_LABELS_BESIDE_ICONS_WIDGET "labels_beside_icons_checkbutton"
+#define CAJA_FILE_MANAGEMENT_PROPERTIES_ALL_COLUMNS_SAME_WIDTH "all_columns_same_width_checkbutton"
+#define CAJA_FILE_MANAGEMENT_PROPERTIES_ALWAYS_USE_BROWSER_WIDGET "always_use_browser_checkbutton"
+#define CAJA_FILE_MANAGEMENT_PROPERTIES_ALWAYS_USE_LOCATION_ENTRY_WIDGET "always_use_location_entry_checkbutton"
+#define CAJA_FILE_MANAGEMENT_PROPERTIES_TRASH_CONFIRM_WIDGET "trash_confirm_checkbutton"
+#define CAJA_FILE_MANAGEMENT_PROPERTIES_TRASH_DELETE_WIDGET "trash_delete_checkbutton"
+#define CAJA_FILE_MANAGEMENT_PROPERTIES_OPEN_NEW_WINDOW_WIDGET "new_window_checkbutton"
+#define CAJA_FILE_MANAGEMENT_PROPERTIES_SHOW_HIDDEN_WIDGET "hidden_files_checkbutton"
+#define CAJA_FILE_MANAGEMENT_PROPERTIES_TREE_VIEW_FOLDERS_WIDGET "treeview_folders_checkbutton"
+#define CAJA_FILE_MANAGEMENT_PROPERTIES_MEDIA_AUTOMOUNT_OPEN "media_automount_open_checkbutton"
+#define CAJA_FILE_MANAGEMENT_PROPERTIES_MEDIA_AUTORUN_NEVER "media_autorun_never_checkbutton"
+
+/* int enums */
+#define CAJA_FILE_MANAGEMENT_PROPERTIES_THUMBNAIL_LIMIT_WIDGET "preview_image_size_combobox"
+
+static const char * const default_view_values[] =
+{
+ "icon_view",
+ "list_view",
+ "compact_view",
+ NULL
+};
+
+static const char * const zoom_values[] =
+{
+ "smallest",
+ "smaller",
+ "small",
+ "standard",
+ "large",
+ "larger",
+ "largest",
+ NULL
+};
+
+static const char * const sort_order_values[] =
+{
+ "name",
+ "size",
+ "type",
+ "modification_date",
+ "emblems",
+ NULL
+};
+
+static const char * const date_format_values[] =
+{
+ "locale",
+ "iso",
+ "informal",
+ NULL
+};
+
+static const char * const preview_values[] =
+{
+ "always",
+ "local_only",
+ "never",
+ NULL
+};
+
+static const char * const click_behavior_components[] =
+{
+ "single_click_radiobutton",
+ "double_click_radiobutton",
+ NULL
+};
+
+static const char * const click_behavior_values[] =
+{
+ "single",
+ "double",
+ NULL
+};
+
+static const char * const executable_text_components[] =
+{
+ "scripts_execute_radiobutton",
+ "scripts_view_radiobutton",
+ "scripts_confirm_radiobutton",
+ NULL
+};
+
+static const char * const executable_text_values[] =
+{
+ "launch",
+ "display",
+ "ask",
+ NULL
+};
+
+static const guint thumbnail_limit_values[] =
+{
+ 102400,
+ 512000,
+ 1048576,
+ 3145728,
+ 5242880,
+ 10485760,
+ 104857600,
+ 1073741824,
+ 2147483648U,
+ 4294967295U
+};
+
+static const char * const icon_captions_components[] =
+{
+ "captions_0_combobox",
+ "captions_1_combobox",
+ "captions_2_combobox",
+ NULL
+};
+
+static void
+caja_file_management_properties_size_group_create (GtkBuilder *builder,
+ char *prefix,
+ int items)
+{
+ GtkSizeGroup *size_group;
+ int i;
+ char *item_name;
+ GtkWidget *widget;
+
+ size_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
+
+ for (i = 0; i < items; i++)
+ {
+ item_name = g_strdup_printf ("%s_%d", prefix, i);
+ widget = GTK_WIDGET (gtk_builder_get_object (builder, item_name));
+ gtk_size_group_add_widget (size_group, widget);
+ g_free (item_name);
+ }
+ g_object_unref (G_OBJECT (size_group));
+}
+
+static void
+preferences_show_help (GtkWindow *parent,
+ char const *helpfile,
+ char const *sect_id)
+{
+ GError *error = NULL;
+ GtkWidget *dialog;
+ char *help_string;
+
+ g_assert (helpfile != NULL);
+ g_assert (sect_id != NULL);
+
+ help_string = g_strdup_printf ("ghelp:%s#%s", helpfile, sect_id);
+
+ gtk_show_uri (gtk_window_get_screen (parent),
+ help_string, gtk_get_current_event_time (),
+ &error);
+ g_free (help_string);
+
+ if (error)
+ {
+ dialog = gtk_message_dialog_new (GTK_WINDOW (parent),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_OK,
+ _("There was an error displaying help: \n%s"),
+ error->message);
+
+ g_signal_connect (G_OBJECT (dialog),
+ "response", G_CALLBACK (gtk_widget_destroy),
+ NULL);
+ gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE);
+ gtk_widget_show (dialog);
+ g_error_free (error);
+ }
+}
+
+
+static void
+caja_file_management_properties_dialog_response_cb (GtkDialog *parent,
+ int response_id,
+ GtkBuilder *builder)
+{
+ char *section;
+
+ if (response_id == GTK_RESPONSE_HELP)
+ {
+ switch (gtk_notebook_get_current_page (GTK_NOTEBOOK (gtk_builder_get_object (builder, "notebook1"))))
+ {
+ default:
+ case 0:
+ section = "goscaja-438";
+ break;
+ case 1:
+ section = "goscaja-56";
+ break;
+ case 2:
+ section = "goscaja-439";
+ break;
+ case 3:
+ section = "goscaja-490";
+ break;
+ case 4:
+ section = "goscaja-60";
+ }
+ preferences_show_help (GTK_WINDOW (parent), "user-guide", section);
+ }
+ else if (response_id == GTK_RESPONSE_CLOSE)
+ {
+ /* remove mateconf monitors */
+ eel_mateconf_monitor_remove ("/apps/caja/icon_view");
+ eel_mateconf_monitor_remove ("/apps/caja/list_view");
+ eel_mateconf_monitor_remove ("/apps/caja/preferences");
+ eel_mateconf_monitor_remove ("/desktop/mate/file_views");
+ }
+}
+
+static void
+columns_changed_callback (CajaColumnChooser *chooser,
+ gpointer callback_data)
+{
+ char **visible_columns;
+ char **column_order;
+
+ caja_column_chooser_get_settings (CAJA_COLUMN_CHOOSER (chooser),
+ &visible_columns,
+ &column_order);
+
+ eel_preferences_set_string_array (CAJA_PREFERENCES_LIST_VIEW_DEFAULT_VISIBLE_COLUMNS, visible_columns);
+ eel_preferences_set_string_array (CAJA_PREFERENCES_LIST_VIEW_DEFAULT_COLUMN_ORDER, column_order);
+
+ g_strfreev (visible_columns);
+ g_strfreev (column_order);
+}
+
+static void
+free_column_names_array (GPtrArray *column_names)
+{
+ g_ptr_array_foreach (column_names, (GFunc) g_free, NULL);
+ g_ptr_array_free (column_names, TRUE);
+}
+
+static void
+create_icon_caption_combo_box_items (GtkComboBox *combo_box,
+ GList *columns)
+{
+ GList *l;
+ GPtrArray *column_names;
+
+ column_names = g_ptr_array_new ();
+
+ /* Translators: this is referred to captions under icons. */
+ gtk_combo_box_append_text (combo_box, _("None"));
+ g_ptr_array_add (column_names, g_strdup ("none"));
+
+ for (l = columns; l != NULL; l = l->next)
+ {
+ CajaColumn *column;
+ char *name;
+ char *label;
+
+ column = CAJA_COLUMN (l->data);
+
+ g_object_get (G_OBJECT (column),
+ "name", &name, "label", &label,
+ NULL);
+
+ /* Don't show name here, it doesn't make sense */
+ if (!strcmp (name, "name"))
+ {
+ g_free (name);
+ g_free (label);
+ continue;
+ }
+
+ gtk_combo_box_append_text (combo_box, label);
+ g_ptr_array_add (column_names, name);
+
+ g_free (label);
+ }
+ g_object_set_data_full (G_OBJECT (combo_box), "column_names",
+ column_names,
+ (GDestroyNotify) free_column_names_array);
+}
+
+static void
+icon_captions_changed_callback (GtkComboBox *combo_box,
+ gpointer user_data)
+{
+ GPtrArray *captions;
+ GtkBuilder *builder;
+ int i;
+
+ builder = GTK_BUILDER (user_data);
+
+ captions = g_ptr_array_new ();
+
+ for (i = 0; icon_captions_components[i] != NULL; i++)
+ {
+ GtkWidget *combo_box;
+ int active;
+ GPtrArray *column_names;
+ char *name;
+
+ combo_box = GTK_WIDGET (gtk_builder_get_object
+ (builder, icon_captions_components[i]));
+ active = gtk_combo_box_get_active (GTK_COMBO_BOX (combo_box));
+
+ column_names = g_object_get_data (G_OBJECT (combo_box),
+ "column_names");
+
+ name = g_ptr_array_index (column_names, active);
+ g_ptr_array_add (captions, name);
+ }
+ g_ptr_array_add (captions, NULL);
+
+ eel_preferences_set_string_array (CAJA_PREFERENCES_ICON_VIEW_CAPTIONS,
+ (char **)captions->pdata);
+ g_ptr_array_free (captions, TRUE);
+}
+
+static void
+update_caption_combo_box (GtkBuilder *builder,
+ const char *combo_box_name,
+ const char *name)
+{
+ GtkWidget *combo_box;
+ int i;
+ GPtrArray *column_names;
+
+ combo_box = GTK_WIDGET (gtk_builder_get_object (builder, combo_box_name));
+
+ g_signal_handlers_block_by_func
+ (combo_box,
+ G_CALLBACK (icon_captions_changed_callback),
+ builder);
+
+ column_names = g_object_get_data (G_OBJECT (combo_box),
+ "column_names");
+
+ for (i = 0; i < column_names->len; ++i)
+ {
+ if (!strcmp (name, g_ptr_array_index (column_names, i)))
+ {
+ gtk_combo_box_set_active (GTK_COMBO_BOX (combo_box), i);
+ break;
+ }
+ }
+
+ g_signal_handlers_unblock_by_func
+ (combo_box,
+ G_CALLBACK (icon_captions_changed_callback),
+ builder);
+}
+
+static void
+update_icon_captions_from_mateconf (GtkBuilder *builder)
+{
+ char **captions;
+ int i, j;
+
+ captions = eel_preferences_get_string_array (CAJA_PREFERENCES_ICON_VIEW_CAPTIONS);
+ if (captions == NULL)
+ return;
+
+ for (i = 0, j = 0;
+ icon_captions_components[i] != NULL;
+ i++)
+ {
+ char *data;
+
+ if (captions[j])
+ {
+ data = captions[j];
+ ++j;
+ }
+ else
+ {
+ data = "none";
+ }
+
+ update_caption_combo_box (builder,
+ icon_captions_components[i],
+ data);
+ }
+
+ g_strfreev (captions);
+}
+
+static void
+caja_file_management_properties_dialog_setup_icon_caption_page (GtkBuilder *builder)
+{
+ GList *columns;
+ int i;
+ gboolean writable;
+
+ writable = eel_preferences_key_is_writable (CAJA_PREFERENCES_ICON_VIEW_CAPTIONS);
+
+ columns = caja_get_common_columns ();
+
+ for (i = 0; icon_captions_components[i] != NULL; i++)
+ {
+ GtkWidget *combo_box;
+
+ combo_box = GTK_WIDGET (gtk_builder_get_object (builder,
+ icon_captions_components[i]));
+
+ create_icon_caption_combo_box_items (GTK_COMBO_BOX (combo_box), columns);
+ gtk_widget_set_sensitive (combo_box, writable);
+
+ g_signal_connect (combo_box, "changed",
+ G_CALLBACK (icon_captions_changed_callback),
+ builder);
+ }
+
+ caja_column_list_free (columns);
+
+ update_icon_captions_from_mateconf (builder);
+}
+
+static void
+create_date_format_menu (GtkBuilder *builder)
+{
+ GtkWidget *combo_box;
+ gchar *date_string;
+ time_t now_raw;
+ struct tm* now;
+
+ combo_box = GTK_WIDGET (gtk_builder_get_object (builder,
+ CAJA_FILE_MANAGEMENT_PROPERTIES_DATE_FORMAT_WIDGET));
+
+ now_raw = time (NULL);
+ now = localtime (&now_raw);
+
+ date_string = eel_strdup_strftime ("%c", now);
+ gtk_combo_box_append_text (GTK_COMBO_BOX (combo_box), date_string);
+ g_free (date_string);
+
+ date_string = eel_strdup_strftime ("%Y-%m-%d %H:%M:%S", now);
+ gtk_combo_box_append_text (GTK_COMBO_BOX (combo_box), date_string);
+ g_free (date_string);
+
+ date_string = eel_strdup_strftime (_("today at %-I:%M:%S %p"), now);
+ gtk_combo_box_append_text (GTK_COMBO_BOX (combo_box), date_string);
+ g_free (date_string);
+}
+
+static void
+set_columns_from_mateconf (CajaColumnChooser *chooser)
+{
+ char **visible_columns;
+ char **column_order;
+
+ visible_columns = eel_preferences_get_string_array (CAJA_PREFERENCES_LIST_VIEW_DEFAULT_VISIBLE_COLUMNS);
+ column_order = eel_preferences_get_string_array (CAJA_PREFERENCES_LIST_VIEW_DEFAULT_COLUMN_ORDER);
+
+ caja_column_chooser_set_settings (CAJA_COLUMN_CHOOSER (chooser),
+ visible_columns,
+ column_order);
+
+ g_strfreev (visible_columns);
+ g_strfreev (column_order);
+}
+
+static void
+use_default_callback (CajaColumnChooser *chooser,
+ gpointer user_data)
+{
+ eel_preferences_unset (CAJA_PREFERENCES_LIST_VIEW_DEFAULT_VISIBLE_COLUMNS);
+ eel_preferences_unset (CAJA_PREFERENCES_LIST_VIEW_DEFAULT_COLUMN_ORDER);
+ set_columns_from_mateconf (chooser);
+}
+
+static void
+caja_file_management_properties_dialog_setup_list_column_page (GtkBuilder *builder)
+{
+ GtkWidget *chooser;
+ GtkWidget *box;
+
+ chooser = caja_column_chooser_new (NULL);
+ g_signal_connect (chooser, "changed",
+ G_CALLBACK (columns_changed_callback), chooser);
+ g_signal_connect (chooser, "use_default",
+ G_CALLBACK (use_default_callback), chooser);
+
+ set_columns_from_mateconf (CAJA_COLUMN_CHOOSER (chooser));
+
+ gtk_widget_show (chooser);
+ box = GTK_WIDGET (gtk_builder_get_object (builder, "list_columns_vbox"));
+
+ gtk_box_pack_start (GTK_BOX (box), chooser, TRUE, TRUE, 0);
+}
+
+static void
+caja_file_management_properties_dialog_update_media_sensitivity (GtkBuilder *builder)
+{
+ gtk_widget_set_sensitive (GTK_WIDGET (gtk_builder_get_object (builder, "media_handling_vbox")),
+ ! eel_preferences_get_boolean (CAJA_PREFERENCES_MEDIA_AUTORUN_NEVER));
+}
+
+static void
+other_type_combo_box_changed (GtkComboBox *combo_box, GtkComboBox *action_combo_box)
+{
+ GtkTreeIter iter;
+ GtkTreeModel *model;
+ char *x_content_type;
+
+ x_content_type = NULL;
+
+ if (!gtk_combo_box_get_active_iter (combo_box, &iter))
+ {
+ goto out;
+ }
+
+ model = gtk_combo_box_get_model (combo_box);
+ if (model == NULL)
+ {
+ goto out;
+ }
+
+ gtk_tree_model_get (model, &iter,
+ 2, &x_content_type,
+ -1);
+
+ caja_autorun_prepare_combo_box (GTK_WIDGET (action_combo_box),
+ x_content_type,
+ TRUE,
+ TRUE,
+ TRUE,
+ NULL, NULL);
+out:
+ g_free (x_content_type);
+}
+
+
+static void
+caja_file_management_properties_dialog_setup_media_page (GtkBuilder *builder)
+{
+ unsigned int n;
+ GList *l;
+ GList *content_types;
+ GtkWidget *other_type_combo_box;
+ GtkListStore *other_type_list_store;
+ GtkCellRenderer *renderer;
+ GtkTreeIter iter;
+ const char *s[] = {"media_audio_cdda_combobox", "x-content/audio-cdda",
+ "media_video_dvd_combobox", "x-content/video-dvd",
+ "media_music_player_combobox", "x-content/audio-player",
+ "media_dcf_combobox", "x-content/image-dcf",
+ "media_software_combobox", "x-content/software",
+ NULL
+ };
+
+ for (n = 0; s[n*2] != NULL; n++)
+ {
+ caja_autorun_prepare_combo_box (GTK_WIDGET (gtk_builder_get_object (builder, s[n*2])), s[n*2 + 1],
+ TRUE, TRUE, TRUE, NULL, NULL);
+ }
+
+ other_type_combo_box = GTK_WIDGET (gtk_builder_get_object (builder, "media_other_type_combobox"));
+
+ other_type_list_store = gtk_list_store_new (3,
+ GDK_TYPE_PIXBUF,
+ G_TYPE_STRING,
+ G_TYPE_STRING);
+
+ gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (other_type_list_store),
+ 1, GTK_SORT_ASCENDING);
+
+
+ content_types = g_content_types_get_registered ();
+
+ for (l = content_types; l != NULL; l = l->next)
+ {
+ char *content_type = l->data;
+ char *description;
+ GIcon *icon;
+ CajaIconInfo *icon_info;
+ GdkPixbuf *pixbuf;
+ int icon_size;
+
+ if (!g_str_has_prefix (content_type, "x-content/"))
+ continue;
+ for (n = 0; s[n*2] != NULL; n++)
+ {
+ if (strcmp (content_type, s[n*2 + 1]) == 0)
+ {
+ goto skip;
+ }
+ }
+
+ icon_size = caja_get_icon_size_for_stock_size (GTK_ICON_SIZE_MENU);
+
+ description = g_content_type_get_description (content_type);
+ gtk_list_store_append (other_type_list_store, &iter);
+ icon = g_content_type_get_icon (content_type);
+ if (icon != NULL)
+ {
+ icon_info = caja_icon_info_lookup (icon, icon_size);
+ g_object_unref (icon);
+ pixbuf = caja_icon_info_get_pixbuf_nodefault_at_size (icon_info, icon_size);
+ g_object_unref (icon_info);
+ }
+ else
+ {
+ pixbuf = NULL;
+ }
+
+ gtk_list_store_set (other_type_list_store, &iter,
+ 0, pixbuf,
+ 1, description,
+ 2, content_type,
+ -1);
+ if (pixbuf != NULL)
+ g_object_unref (pixbuf);
+ g_free (description);
+skip:
+ ;
+ }
+ g_list_foreach (content_types, (GFunc) g_free, NULL);
+ g_list_free (content_types);
+
+ gtk_combo_box_set_model (GTK_COMBO_BOX (other_type_combo_box), GTK_TREE_MODEL (other_type_list_store));
+
+ renderer = gtk_cell_renderer_pixbuf_new ();
+ gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (other_type_combo_box), renderer, FALSE);
+ gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (other_type_combo_box), renderer,
+ "pixbuf", 0,
+ NULL);
+ renderer = gtk_cell_renderer_text_new ();
+ gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (other_type_combo_box), renderer, TRUE);
+ gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (other_type_combo_box), renderer,
+ "text", 1,
+ NULL);
+
+ g_signal_connect (G_OBJECT (other_type_combo_box),
+ "changed",
+ G_CALLBACK (other_type_combo_box_changed),
+ gtk_builder_get_object (builder, "media_other_action_combobox"));
+
+ gtk_combo_box_set_active (GTK_COMBO_BOX (other_type_combo_box), 0);
+
+ caja_file_management_properties_dialog_update_media_sensitivity (builder);
+}
+
+static void
+caja_file_management_properties_dialog_setup (GtkBuilder *builder, GtkWindow *window)
+{
+ GtkWidget *dialog;
+
+ /* setup mateconf stuff */
+ eel_mateconf_monitor_add ("/apps/caja/icon_view");
+ eel_mateconf_preload_cache ("/apps/caja/icon_view", MATECONF_CLIENT_PRELOAD_ONELEVEL);
+ eel_mateconf_monitor_add ("/apps/caja/compact_view");
+ eel_mateconf_preload_cache ("/apps/caja/compact_view", MATECONF_CLIENT_PRELOAD_ONELEVEL);
+ eel_mateconf_monitor_add ("/apps/caja/list_view");
+ eel_mateconf_preload_cache ("/apps/caja/list_view", MATECONF_CLIENT_PRELOAD_ONELEVEL);
+ eel_mateconf_monitor_add ("/apps/caja/preferences");
+ eel_mateconf_preload_cache ("/apps/caja/preferences", MATECONF_CLIENT_PRELOAD_ONELEVEL);
+ eel_mateconf_monitor_add ("/desktop/mate/file_views");
+ eel_mateconf_preload_cache ("/desktop/mate/file_views", MATECONF_CLIENT_PRELOAD_ONELEVEL);
+
+ /* setup UI */
+ caja_file_management_properties_size_group_create (builder,
+ "views_label",
+ 5);
+ caja_file_management_properties_size_group_create (builder,
+ "captions_label",
+ 3);
+ caja_file_management_properties_size_group_create (builder,
+ "preview_label",
+ 5);
+ create_date_format_menu (builder);
+
+ /* setup preferences */
+ eel_preferences_builder_connect_bool (builder,
+ CAJA_FILE_MANAGEMENT_PROPERTIES_COMPACT_LAYOUT_WIDGET,
+ CAJA_PREFERENCES_ICON_VIEW_DEFAULT_USE_TIGHTER_LAYOUT);
+ eel_preferences_builder_connect_bool (builder,
+ CAJA_FILE_MANAGEMENT_PROPERTIES_LABELS_BESIDE_ICONS_WIDGET,
+ CAJA_PREFERENCES_ICON_VIEW_LABELS_BESIDE_ICONS);
+ eel_preferences_builder_connect_bool (builder,
+ CAJA_FILE_MANAGEMENT_PROPERTIES_ALL_COLUMNS_SAME_WIDTH,
+ CAJA_PREFERENCES_COMPACT_VIEW_ALL_COLUMNS_SAME_WIDTH);
+ eel_preferences_builder_connect_bool (builder,
+ CAJA_FILE_MANAGEMENT_PROPERTIES_FOLDERS_FIRST_WIDGET,
+ CAJA_PREFERENCES_SORT_DIRECTORIES_FIRST);
+ eel_preferences_builder_connect_inverted_bool (builder,
+ CAJA_FILE_MANAGEMENT_PROPERTIES_ALWAYS_USE_BROWSER_WIDGET,
+ CAJA_PREFERENCES_ALWAYS_USE_BROWSER);
+
+ eel_preferences_builder_connect_bool (builder,
+ CAJA_FILE_MANAGEMENT_PROPERTIES_MEDIA_AUTOMOUNT_OPEN,
+ CAJA_PREFERENCES_MEDIA_AUTOMOUNT_OPEN);
+ eel_preferences_builder_connect_bool (builder,
+ CAJA_FILE_MANAGEMENT_PROPERTIES_MEDIA_AUTORUN_NEVER,
+ CAJA_PREFERENCES_MEDIA_AUTORUN_NEVER);
+
+ eel_preferences_builder_connect_bool (builder,
+ CAJA_FILE_MANAGEMENT_PROPERTIES_TRASH_CONFIRM_WIDGET,
+ CAJA_PREFERENCES_CONFIRM_TRASH);
+ eel_preferences_builder_connect_bool (builder,
+ CAJA_FILE_MANAGEMENT_PROPERTIES_TRASH_DELETE_WIDGET,
+ CAJA_PREFERENCES_ENABLE_DELETE);
+ eel_preferences_builder_connect_bool (builder,
+ CAJA_FILE_MANAGEMENT_PROPERTIES_SHOW_HIDDEN_WIDGET,
+ CAJA_PREFERENCES_SHOW_HIDDEN_FILES);
+ eel_preferences_builder_connect_bool_slave (builder,
+ CAJA_FILE_MANAGEMENT_PROPERTIES_SHOW_HIDDEN_WIDGET,
+ CAJA_PREFERENCES_SHOW_BACKUP_FILES);
+ eel_preferences_builder_connect_bool (builder,
+ CAJA_FILE_MANAGEMENT_PROPERTIES_TREE_VIEW_FOLDERS_WIDGET,
+ CAJA_PREFERENCES_TREE_SHOW_ONLY_DIRECTORIES);
+
+ eel_preferences_builder_connect_string_enum_combo_box (builder,
+ CAJA_FILE_MANAGEMENT_PROPERTIES_DEFAULT_VIEW_WIDGET,
+ CAJA_PREFERENCES_DEFAULT_FOLDER_VIEWER,
+ (const char **) default_view_values);
+ eel_preferences_builder_connect_string_enum_combo_box (builder,
+ CAJA_FILE_MANAGEMENT_PROPERTIES_ICON_VIEW_ZOOM_WIDGET,
+ CAJA_PREFERENCES_ICON_VIEW_DEFAULT_ZOOM_LEVEL,
+ (const char **) zoom_values);
+ eel_preferences_builder_connect_string_enum_combo_box (builder,
+ CAJA_FILE_MANAGEMENT_PROPERTIES_COMPACT_VIEW_ZOOM_WIDGET,
+ CAJA_PREFERENCES_COMPACT_VIEW_DEFAULT_ZOOM_LEVEL,
+ (const char **) zoom_values);
+ eel_preferences_builder_connect_string_enum_combo_box (builder,
+ CAJA_FILE_MANAGEMENT_PROPERTIES_LIST_VIEW_ZOOM_WIDGET,
+ CAJA_PREFERENCES_LIST_VIEW_DEFAULT_ZOOM_LEVEL,
+ (const char **) zoom_values);
+ eel_preferences_builder_connect_string_enum_combo_box (builder,
+ CAJA_FILE_MANAGEMENT_PROPERTIES_SORT_ORDER_WIDGET,
+ CAJA_PREFERENCES_ICON_VIEW_DEFAULT_SORT_ORDER,
+ (const char **) sort_order_values);
+ eel_preferences_builder_connect_string_enum_combo_box_slave (builder,
+ CAJA_FILE_MANAGEMENT_PROPERTIES_SORT_ORDER_WIDGET,
+ CAJA_PREFERENCES_LIST_VIEW_DEFAULT_SORT_ORDER);
+ eel_preferences_builder_connect_string_enum_combo_box (builder,
+ CAJA_FILE_MANAGEMENT_PROPERTIES_PREVIEW_TEXT_WIDGET,
+ CAJA_PREFERENCES_SHOW_TEXT_IN_ICONS,
+ (const char **) preview_values);
+ eel_preferences_builder_connect_string_enum_combo_box (builder,
+ CAJA_FILE_MANAGEMENT_PROPERTIES_PREVIEW_IMAGE_WIDGET,
+ CAJA_PREFERENCES_SHOW_IMAGE_FILE_THUMBNAILS,
+ (const char **) preview_values);
+ eel_preferences_builder_connect_string_enum_combo_box (builder,
+ CAJA_FILE_MANAGEMENT_PROPERTIES_PREVIEW_SOUND_WIDGET,
+ CAJA_PREFERENCES_PREVIEW_SOUND,
+ (const char **) preview_values);
+ eel_preferences_builder_connect_string_enum_combo_box (builder,
+ CAJA_FILE_MANAGEMENT_PROPERTIES_PREVIEW_FOLDER_WIDGET,
+ CAJA_PREFERENCES_SHOW_DIRECTORY_ITEM_COUNTS,
+ (const char **) preview_values);
+ eel_preferences_builder_connect_string_enum_combo_box (builder,
+ CAJA_FILE_MANAGEMENT_PROPERTIES_DATE_FORMAT_WIDGET,
+ CAJA_PREFERENCES_DATE_FORMAT,
+ (const char **) date_format_values);
+
+ eel_preferences_builder_connect_string_enum_radio_button (builder,
+ (const char **) click_behavior_components,
+ CAJA_PREFERENCES_CLICK_POLICY,
+ (const char **) click_behavior_values);
+ eel_preferences_builder_connect_string_enum_radio_button (builder,
+ (const char **) executable_text_components,
+ CAJA_PREFERENCES_EXECUTABLE_TEXT_ACTIVATION,
+ (const char **) executable_text_values);
+
+ eel_preferences_builder_connect_uint_enum (builder,
+ CAJA_FILE_MANAGEMENT_PROPERTIES_THUMBNAIL_LIMIT_WIDGET,
+ CAJA_PREFERENCES_IMAGE_FILE_THUMBNAIL_LIMIT,
+ (const guint *) thumbnail_limit_values,
+ G_N_ELEMENTS (thumbnail_limit_values));
+
+ caja_file_management_properties_dialog_setup_icon_caption_page (builder);
+ caja_file_management_properties_dialog_setup_list_column_page (builder);
+ caja_file_management_properties_dialog_setup_media_page (builder);
+
+ eel_preferences_add_callback (CAJA_PREFERENCES_MEDIA_AUTORUN_NEVER,
+ (EelPreferencesCallback ) caja_file_management_properties_dialog_update_media_sensitivity,
+ g_object_ref (builder));
+
+
+ /* UI callbacks */
+ dialog = GTK_WIDGET (gtk_builder_get_object (builder, "file_management_dialog"));
+ g_signal_connect_data (G_OBJECT (dialog), "response",
+ G_CALLBACK (caja_file_management_properties_dialog_response_cb),
+ g_object_ref (builder),
+ (GClosureNotify)g_object_unref,
+ 0);
+
+ gtk_window_set_icon_name (GTK_WINDOW (dialog), "system-file-manager");
+
+ if (window)
+ {
+ gtk_window_set_screen (GTK_WINDOW (dialog), gtk_window_get_screen(window));
+ }
+
+ gtk_widget_show (dialog);
+}
+
+static gboolean
+delete_event_callback (GtkWidget *widget,
+ GdkEventAny *event,
+ gpointer data)
+{
+ void (*response_callback) (GtkDialog *dialog,
+ gint response_id);
+
+ response_callback = data;
+
+ response_callback (GTK_DIALOG (widget), GTK_RESPONSE_CLOSE);
+
+ return TRUE;
+}
+
+void
+caja_file_management_properties_dialog_show (GCallback close_callback, GtkWindow *window)
+{
+ GtkBuilder *builder;
+
+ builder = gtk_builder_new ();
+
+ gtk_builder_add_from_file (builder,
+ UIDIR "/caja-file-management-properties.ui",
+ NULL);
+
+ g_signal_connect (G_OBJECT (gtk_builder_get_object (builder, "file_management_dialog")),
+ "response", close_callback, NULL);
+ g_signal_connect (G_OBJECT (gtk_builder_get_object (builder, "file_management_dialog")),
+ "delete_event", G_CALLBACK (delete_event_callback), close_callback);
+
+ caja_file_management_properties_dialog_setup (builder, window);
+
+ g_object_unref (builder);
+}