1713 lines
54 KiB
C
1713 lines
54 KiB
C
|
|
/* vi:set et ai sw=2 sts=2 ts=2: */
|
||
|
|
/*-
|
||
|
|
* Copyright (c) 2005-2007 Benedikt Meurer <benny@xfce.org>
|
||
|
|
* Copyright (c) 2009 Jannis Pohlmann <jannis@xfce.org>
|
||
|
|
*
|
||
|
|
* This program is free software; you can redistribute it and/or modify it
|
||
|
|
* under the terms of the GNU General Public License as published by the Free
|
||
|
|
* Software Foundation; either version 2 of the License, or (at your option)
|
||
|
|
* any later version.
|
||
|
|
*
|
||
|
|
* This program 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 General Public License for
|
||
|
|
* more details.
|
||
|
|
*
|
||
|
|
* You should have received a copy of the GNU General Public License along with
|
||
|
|
* this program; if not, write to the Free Software Foundation, Inc., 59 Temple
|
||
|
|
* Place, Suite 330, Boston, MA 02111-1307 USA
|
||
|
|
*/
|
||
|
|
|
||
|
|
#ifdef HAVE_CONFIG_H
|
||
|
|
#include "config.h"
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#ifdef HAVE_ERRNO_H
|
||
|
|
#include <errno.h>
|
||
|
|
#endif
|
||
|
|
#ifdef HAVE_FCNTL_H
|
||
|
|
#include <fcntl.h>
|
||
|
|
#endif
|
||
|
|
#ifdef HAVE_MEMORY_H
|
||
|
|
#include <memory.h>
|
||
|
|
#endif
|
||
|
|
#ifdef HAVE_STDLIB_H
|
||
|
|
#include <stdlib.h>
|
||
|
|
#endif
|
||
|
|
#ifdef HAVE_STRING_H
|
||
|
|
#include <string.h>
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#include "thunar/thunar-enum-types.h"
|
||
|
|
#include "thunar/thunar-gio-extensions.h"
|
||
|
|
#include "thunar/thunar-gobject-extensions.h"
|
||
|
|
#include "thunar/thunar-preferences.h"
|
||
|
|
#include "thunar/thunar-private.h"
|
||
|
|
#include "xfconf/xfconf.h"
|
||
|
|
|
||
|
|
|
||
|
|
/* Property identifiers */
|
||
|
|
enum
|
||
|
|
{
|
||
|
|
PROP_0,
|
||
|
|
PROP_DEFAULT_VIEW,
|
||
|
|
PROP_HIDDEN_DEVICES,
|
||
|
|
PROP_HIDDEN_BOOKMARKS,
|
||
|
|
PROP_LAST_RESTORE_TABS,
|
||
|
|
PROP_LAST_TABS_LEFT,
|
||
|
|
PROP_LAST_TABS_RIGHT,
|
||
|
|
PROP_LAST_FOCUSED_TAB_LEFT,
|
||
|
|
PROP_LAST_FOCUSED_TAB_RIGHT,
|
||
|
|
PROP_LAST_COMPACT_VIEW_ZOOM_LEVEL,
|
||
|
|
PROP_LAST_DETAILS_VIEW_COLUMN_ORDER,
|
||
|
|
PROP_LAST_DETAILS_VIEW_COLUMN_WIDTHS,
|
||
|
|
PROP_LAST_DETAILS_VIEW_FIXED_COLUMNS,
|
||
|
|
PROP_LAST_DETAILS_VIEW_VISIBLE_COLUMNS,
|
||
|
|
PROP_LAST_DETAILS_VIEW_ZOOM_LEVEL,
|
||
|
|
PROP_LAST_ICON_VIEW_ZOOM_LEVEL,
|
||
|
|
PROP_LAST_LOCATION_BAR,
|
||
|
|
PROP_LAST_MENUBAR_VISIBLE,
|
||
|
|
PROP_LAST_SEPARATOR_POSITION,
|
||
|
|
PROP_LAST_SPLITVIEW_SEPARATOR_POSITION,
|
||
|
|
PROP_LAST_SHOW_HIDDEN,
|
||
|
|
PROP_LAST_SIDE_PANE,
|
||
|
|
PROP_LAST_SORT_COLUMN,
|
||
|
|
PROP_LAST_SORT_ORDER,
|
||
|
|
PROP_LAST_STATUSBAR_VISIBLE,
|
||
|
|
PROP_LAST_IMAGE_PREVIEW_VISIBLE,
|
||
|
|
PROP_LAST_VIEW,
|
||
|
|
PROP_LAST_WINDOW_HEIGHT,
|
||
|
|
PROP_LAST_WINDOW_WIDTH,
|
||
|
|
PROP_LAST_WINDOW_FULLSCREEN,
|
||
|
|
PROP_LAST_RENAMER_DIALOG_HEIGHT,
|
||
|
|
PROP_LAST_RENAMER_DIALOG_WIDTH,
|
||
|
|
PROP_LAST_RENAMER_DIALOG_FULLSCREEN,
|
||
|
|
PROP_LAST_TOOLBAR_VISIBLE_BUTTONS,
|
||
|
|
PROP_LAST_TOOLBAR_ITEM_ORDER,
|
||
|
|
PROP_LAST_TOOLBAR_ITEMS,
|
||
|
|
PROP_MISC_DIRECTORY_SPECIFIC_SETTINGS,
|
||
|
|
PROP_MISC_ALWAYS_SHOW_TABS,
|
||
|
|
PROP_MISC_VOLUME_MANAGEMENT,
|
||
|
|
PROP_MISC_CASE_SENSITIVE,
|
||
|
|
PROP_MISC_DATE_STYLE,
|
||
|
|
PROP_MISC_DATE_CUSTOM_STYLE,
|
||
|
|
PROP_EXEC_SHELL_SCRIPTS_BY_DEFAULT,
|
||
|
|
PROP_MISC_FOLDERS_FIRST,
|
||
|
|
PROP_MISC_FOLDER_ITEM_COUNT,
|
||
|
|
PROP_MISC_FULL_PATH_IN_TAB_TITLE,
|
||
|
|
PROP_MISC_WINDOW_TITLE_STYLE,
|
||
|
|
PROP_MISC_HORIZONTAL_WHEEL_NAVIGATES,
|
||
|
|
PROP_MISC_IMAGE_SIZE_IN_STATUSBAR,
|
||
|
|
PROP_MISC_MIDDLE_CLICK_IN_TAB,
|
||
|
|
PROP_MISC_OPEN_NEW_WINDOW_AS_TAB,
|
||
|
|
PROP_MISC_RECURSIVE_PERMISSIONS,
|
||
|
|
PROP_MISC_RECURSIVE_SEARCH,
|
||
|
|
PROP_MISC_REMEMBER_GEOMETRY,
|
||
|
|
PROP_MISC_SHOW_ABOUT_TEMPLATES,
|
||
|
|
PROP_MISC_SHOW_DELETE_ACTION,
|
||
|
|
PROP_MISC_SINGLE_CLICK,
|
||
|
|
PROP_MISC_SINGLE_CLICK_TIMEOUT,
|
||
|
|
PROP_MISC_SMALL_TOOLBAR_ICONS,
|
||
|
|
PROP_MISC_TAB_CLOSE_MIDDLE_CLICK,
|
||
|
|
PROP_MISC_TEXT_BESIDE_ICONS,
|
||
|
|
PROP_MISC_THUMBNAIL_MODE,
|
||
|
|
PROP_MISC_THUMBNAIL_DRAW_FRAMES,
|
||
|
|
PROP_MISC_THUMBNAIL_MAX_FILE_SIZE,
|
||
|
|
PROP_MISC_FILE_SIZE_BINARY,
|
||
|
|
PROP_MISC_CONFIRM_CLOSE_MULTIPLE_TABS,
|
||
|
|
PROP_MISC_STATUS_BAR_ACTIVE_INFO,
|
||
|
|
PROP_MISC_PARALLEL_COPY_MODE,
|
||
|
|
PROP_MISC_WINDOW_ICON,
|
||
|
|
PROP_MISC_TRANSFER_USE_PARTIAL,
|
||
|
|
PROP_MISC_TRANSFER_VERIFY_FILE,
|
||
|
|
PROP_MISC_IMAGE_PREVIEW_FULL,
|
||
|
|
PROP_SHORTCUTS_ICON_EMBLEMS,
|
||
|
|
PROP_SHORTCUTS_ICON_SIZE,
|
||
|
|
PROP_TREE_ICON_EMBLEMS,
|
||
|
|
PROP_TREE_ICON_SIZE,
|
||
|
|
PROP_TREE_LINES,
|
||
|
|
PROP_MISC_SWITCH_TO_NEW_TAB,
|
||
|
|
PROP_MISC_VERTICAL_SPLIT_PANE,
|
||
|
|
PROP_MISC_OPEN_NEW_WINDOWS_IN_SPLIT_VIEW, // Drop for or after 4.22
|
||
|
|
PROP_MISC_ALWAYS_ENABLE_SPLIT_VIEW,
|
||
|
|
PROP_MISC_COMPACT_VIEW_MAX_CHARS,
|
||
|
|
PROP_MISC_HIGHLIGHTING_ENABLED,
|
||
|
|
PROP_MISC_UNDO_REDO_HISTORY_SIZE,
|
||
|
|
PROP_MISC_CONFIRM_MOVE_TO_TRASH,
|
||
|
|
PROP_MISC_MAX_NUMBER_OF_TEMPLATES,
|
||
|
|
PROP_MISC_DISPLAY_LAUNCHER_NAME_AS_FILENAME,
|
||
|
|
PROP_MISC_EXPANDABLE_FOLDERS,
|
||
|
|
PROP_MISC_SYMBOLIC_ICONS_IN_TOOLBAR,
|
||
|
|
PROP_MISC_SYMBOLIC_ICONS_IN_SIDEPANE,
|
||
|
|
PROP_MISC_CTRL_SCROLL_WHEEL_TO_ZOOM,
|
||
|
|
PROP_MISC_USE_CSD,
|
||
|
|
N_PROPERTIES
|
||
|
|
};
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
static void
|
||
|
|
thunar_preferences_finalize (GObject *object);
|
||
|
|
static void
|
||
|
|
thunar_preferences_get_property (GObject *object,
|
||
|
|
guint prop_id,
|
||
|
|
GValue *value,
|
||
|
|
GParamSpec *pspec);
|
||
|
|
static void
|
||
|
|
thunar_preferences_set_property (GObject *object,
|
||
|
|
guint prop_id,
|
||
|
|
const GValue *value,
|
||
|
|
GParamSpec *pspec);
|
||
|
|
static void
|
||
|
|
thunar_preferences_prop_changed (XfconfChannel *channel,
|
||
|
|
const gchar *prop_name,
|
||
|
|
const GValue *value,
|
||
|
|
ThunarPreferences *preferences);
|
||
|
|
static void
|
||
|
|
thunar_preferences_load_rc_file (ThunarPreferences *preferences);
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
struct _ThunarPreferencesClass
|
||
|
|
{
|
||
|
|
GObjectClass __parent__;
|
||
|
|
};
|
||
|
|
|
||
|
|
struct _ThunarPreferences
|
||
|
|
{
|
||
|
|
GObject __parent__;
|
||
|
|
|
||
|
|
XfconfChannel *channel;
|
||
|
|
|
||
|
|
gulong property_changed_id;
|
||
|
|
};
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
/* don't do anything in case xfconf_init() failed */
|
||
|
|
static gboolean no_xfconf = FALSE;
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
G_DEFINE_TYPE (ThunarPreferences, thunar_preferences, G_TYPE_OBJECT)
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
static GParamSpec *preferences_props[N_PROPERTIES] = {
|
||
|
|
NULL,
|
||
|
|
};
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
static void
|
||
|
|
thunar_preferences_class_init (ThunarPreferencesClass *klass)
|
||
|
|
{
|
||
|
|
GObjectClass *gobject_class;
|
||
|
|
|
||
|
|
gobject_class = G_OBJECT_CLASS (klass);
|
||
|
|
gobject_class->finalize = thunar_preferences_finalize;
|
||
|
|
gobject_class->get_property = thunar_preferences_get_property;
|
||
|
|
gobject_class->set_property = thunar_preferences_set_property;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:default-view:
|
||
|
|
*
|
||
|
|
* The name of the widget class, which should be used for the
|
||
|
|
* view pane in new #ThunarWindow<!---->s or "void" to use the
|
||
|
|
* last selected view from the "last-view" preference.
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_DEFAULT_VIEW] =
|
||
|
|
g_param_spec_string ("default-view",
|
||
|
|
"DefaultView",
|
||
|
|
NULL,
|
||
|
|
"void",
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:hidden-bookmarks:
|
||
|
|
*
|
||
|
|
* List of URI's that are hidden in the bookmarks (obtained from ~/.gtk-bookmarks).
|
||
|
|
* If an URI is not in the bookmarks file it will be removed from this list.
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_HIDDEN_BOOKMARKS] =
|
||
|
|
g_param_spec_boxed ("hidden-bookmarks",
|
||
|
|
NULL,
|
||
|
|
NULL,
|
||
|
|
G_TYPE_STRV,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:hidden-devices:
|
||
|
|
*
|
||
|
|
* List of hidden devices. The value could be an UUID or name.
|
||
|
|
* Visibility of the device can be obtained with
|
||
|
|
* thunar_device_get_hidden().
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_HIDDEN_DEVICES] =
|
||
|
|
g_param_spec_boxed ("hidden-devices",
|
||
|
|
NULL,
|
||
|
|
NULL,
|
||
|
|
G_TYPE_STRV,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:last-restore-tabs:
|
||
|
|
*
|
||
|
|
* %TRUE to restore the tabs as they were before closing Thunar.
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_LAST_RESTORE_TABS] =
|
||
|
|
g_param_spec_boolean ("last-restore-tabs",
|
||
|
|
"LastRestoreTabs",
|
||
|
|
NULL,
|
||
|
|
FALSE,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:last-tabs-left:
|
||
|
|
*
|
||
|
|
* List of URI's that are used to reopen tabs on restart. There is one URI for each tab/folder that was open at the time
|
||
|
|
* of the last program exit. This preference holds the tabs of the default view (or the left split-view).
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_LAST_TABS_LEFT] =
|
||
|
|
g_param_spec_boxed ("last-tabs-left",
|
||
|
|
NULL,
|
||
|
|
NULL,
|
||
|
|
G_TYPE_STRV,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:last-tabs-right:
|
||
|
|
*
|
||
|
|
* List of URI's that are used to reopen tabs on restart. There is one URI for each tab/folder that was open at the time
|
||
|
|
* of the last program exit. This preference holds the tabs of the right split-view.
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_LAST_TABS_RIGHT] =
|
||
|
|
g_param_spec_boxed ("last-tabs-right",
|
||
|
|
NULL,
|
||
|
|
NULL,
|
||
|
|
G_TYPE_STRV,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:last-focused-tab-left:
|
||
|
|
*
|
||
|
|
* The index (starting from 0) of the last focused tab in left split-view
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_LAST_FOCUSED_TAB_LEFT] =
|
||
|
|
g_param_spec_int ("last-focused-tab-left",
|
||
|
|
"LastFocusedTabLeft",
|
||
|
|
NULL,
|
||
|
|
0, G_MAXINT, 0,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:last-focused-tab-right:
|
||
|
|
*
|
||
|
|
* The index (starting from 0) of the last focused tab in right split-view
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_LAST_FOCUSED_TAB_RIGHT] =
|
||
|
|
g_param_spec_int ("last-focused-tab-right",
|
||
|
|
"LastFocusedTabRight",
|
||
|
|
NULL,
|
||
|
|
0, G_MAXINT, 0,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:last-compact-view-zoom-level:
|
||
|
|
*
|
||
|
|
* The last selected #ThunarZoomLevel for the #ThunarCompactView.
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_LAST_COMPACT_VIEW_ZOOM_LEVEL] =
|
||
|
|
g_param_spec_enum ("last-compact-view-zoom-level",
|
||
|
|
"LastCompactViewZoomLevel",
|
||
|
|
NULL,
|
||
|
|
THUNAR_TYPE_ZOOM_LEVEL,
|
||
|
|
THUNAR_ZOOM_LEVEL_25_PERCENT,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:last-details-view-column-order:
|
||
|
|
*
|
||
|
|
* The comma separated list of columns that specifies the order of the
|
||
|
|
* columns in the #ThunarDetailsView.
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_LAST_DETAILS_VIEW_COLUMN_ORDER] =
|
||
|
|
g_param_spec_string ("last-details-view-column-order",
|
||
|
|
"LastDetailsViewColumnOrder",
|
||
|
|
NULL,
|
||
|
|
"THUNAR_COLUMN_NAME,THUNAR_COLUMN_SIZE,THUNAR_COLUMN_SIZE_IN_BYTES,THUNAR_COLUMN_TYPE,THUNAR_COLUMN_DATE_MODIFIED",
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:last-details-view-column-widths:
|
||
|
|
*
|
||
|
|
* The comma separated list of column widths used for fixed width
|
||
|
|
* #ThunarDetailsView<!---->s.
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_LAST_DETAILS_VIEW_COLUMN_WIDTHS] =
|
||
|
|
g_param_spec_string ("last-details-view-column-widths",
|
||
|
|
"LastDetailsViewColumnWidths",
|
||
|
|
NULL,
|
||
|
|
"",
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:last-details-view-fixed-columns:
|
||
|
|
*
|
||
|
|
* %TRUE to use fixed column widths in the #ThunarDetailsView. Else the
|
||
|
|
* column widths will be automatically determined from the model contents.
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_LAST_DETAILS_VIEW_FIXED_COLUMNS] =
|
||
|
|
g_param_spec_boolean ("last-details-view-fixed-columns",
|
||
|
|
"LastDetailsViewFixedColumns",
|
||
|
|
NULL,
|
||
|
|
FALSE,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:last-details-view-visible-columns:
|
||
|
|
*
|
||
|
|
* The comma separated list of visible columns in the #ThunarDetailsView.
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_LAST_DETAILS_VIEW_VISIBLE_COLUMNS] =
|
||
|
|
g_param_spec_string ("last-details-view-visible-columns",
|
||
|
|
"LastDetailsViewVisibleColumns",
|
||
|
|
NULL,
|
||
|
|
"THUNAR_COLUMN_DATE_MODIFIED,THUNAR_COLUMN_NAME,THUNAR_COLUMN_SIZE,THUNAR_COLUMN_TYPE",
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:last-details-view-zoom-level:
|
||
|
|
*
|
||
|
|
* The last selected #ThunarZoomLevel for the #ThunarDetailsView.
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_LAST_DETAILS_VIEW_ZOOM_LEVEL] =
|
||
|
|
g_param_spec_enum ("last-details-view-zoom-level",
|
||
|
|
"LastDetailsViewZoomLevel",
|
||
|
|
NULL,
|
||
|
|
THUNAR_TYPE_ZOOM_LEVEL,
|
||
|
|
THUNAR_ZOOM_LEVEL_38_PERCENT,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:last-icon-view-zoom-level:
|
||
|
|
*
|
||
|
|
* The last selected #ThunarZoomLevel for the #ThunarIconView.
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_LAST_ICON_VIEW_ZOOM_LEVEL] =
|
||
|
|
g_param_spec_enum ("last-icon-view-zoom-level",
|
||
|
|
"LastIconViewZoomLevel",
|
||
|
|
NULL,
|
||
|
|
THUNAR_TYPE_ZOOM_LEVEL,
|
||
|
|
THUNAR_ZOOM_LEVEL_100_PERCENT,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:last-location-bar:
|
||
|
|
*
|
||
|
|
* The name of the widget class, which should be used for the
|
||
|
|
* location bar in #ThunarWindow<!---->s or "void" to hide the
|
||
|
|
* location bar.
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_LAST_LOCATION_BAR] =
|
||
|
|
g_param_spec_string ("last-location-bar",
|
||
|
|
"LastLocationBar",
|
||
|
|
NULL,
|
||
|
|
"ThunarLocationEntry",
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:last-menubar-visible:
|
||
|
|
*
|
||
|
|
* Whether to display a menubar in new windows by default.
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_LAST_MENUBAR_VISIBLE] =
|
||
|
|
g_param_spec_boolean ("last-menubar-visible",
|
||
|
|
"LastMenubarVisible",
|
||
|
|
NULL,
|
||
|
|
TRUE,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:last-separator-position:
|
||
|
|
*
|
||
|
|
* The last position of the gutter in the main window,
|
||
|
|
* which separates the side pane from the main view.
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_LAST_SEPARATOR_POSITION] =
|
||
|
|
g_param_spec_int ("last-separator-position",
|
||
|
|
"LastSeparatorPosition",
|
||
|
|
NULL,
|
||
|
|
0, G_MAXINT, 170,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:last-splitview-separator-position:
|
||
|
|
*
|
||
|
|
* The last position of the gutter in the main window,
|
||
|
|
* which separates the notebooks in split-view.
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_LAST_SPLITVIEW_SEPARATOR_POSITION] =
|
||
|
|
g_param_spec_int ("last-splitview-separator-position",
|
||
|
|
"LastSplitviewSeparatorPosition",
|
||
|
|
NULL,
|
||
|
|
-1, G_MAXINT, -1,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:last-show-hidden:
|
||
|
|
*
|
||
|
|
* Whether to show hidden files by default in new windows.
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_LAST_SHOW_HIDDEN] =
|
||
|
|
g_param_spec_boolean ("last-show-hidden",
|
||
|
|
"LastShowHidden",
|
||
|
|
NULL,
|
||
|
|
FALSE,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:last-toolbar-visible-buttons:
|
||
|
|
*
|
||
|
|
* The comma separated list that specifies the visibility of toolbar items.
|
||
|
|
* The order of the default value corresponds to the order in which the buttons
|
||
|
|
* are added inside 'thunar_window_location_toolbar_create'.
|
||
|
|
*
|
||
|
|
* This property is only read during the migration to "last-toolbar-items".
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_LAST_TOOLBAR_VISIBLE_BUTTONS] =
|
||
|
|
g_param_spec_string ("last-toolbar-visible-buttons",
|
||
|
|
"LastToolbarVisibleButtons",
|
||
|
|
NULL,
|
||
|
|
NULL,
|
||
|
|
EXO_PARAM_READABLE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:last-toolbar-item-order:
|
||
|
|
*
|
||
|
|
* The comma separated list that specifies the order of toolbar items.
|
||
|
|
*
|
||
|
|
* This property is only read during the migration to "last-toolbar-items".
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_LAST_TOOLBAR_ITEM_ORDER] =
|
||
|
|
g_param_spec_string ("last-toolbar-item-order",
|
||
|
|
"LastToolbarItemOrder",
|
||
|
|
NULL,
|
||
|
|
NULL,
|
||
|
|
EXO_PARAM_READABLE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:misc-directory-specific-settings:
|
||
|
|
*
|
||
|
|
* Whether to use directory specific settings.
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_MISC_DIRECTORY_SPECIFIC_SETTINGS] =
|
||
|
|
g_param_spec_boolean ("misc-directory-specific-settings",
|
||
|
|
"MiscDirectorySpecificSettings",
|
||
|
|
NULL,
|
||
|
|
FALSE,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:last-side-pane:
|
||
|
|
*
|
||
|
|
* The side pane type which should be used.
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_LAST_SIDE_PANE] =
|
||
|
|
g_param_spec_enum ("last-side-pane",
|
||
|
|
"LastSidePane",
|
||
|
|
NULL,
|
||
|
|
THUNAR_TYPE_SIDEPANE_TYPE,
|
||
|
|
THUNAR_SIDEPANE_TYPE_SHORTCUTS,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:last-sort-column:
|
||
|
|
*
|
||
|
|
* The default sort column for new views.
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_LAST_SORT_COLUMN] =
|
||
|
|
g_param_spec_enum ("last-sort-column",
|
||
|
|
"LastSortColumn",
|
||
|
|
NULL,
|
||
|
|
THUNAR_TYPE_COLUMN,
|
||
|
|
THUNAR_COLUMN_NAME,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:last-sort-order:
|
||
|
|
*
|
||
|
|
* The default sort order for new views.
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_LAST_SORT_ORDER] =
|
||
|
|
g_param_spec_enum ("last-sort-order",
|
||
|
|
"LastSortOrder",
|
||
|
|
NULL,
|
||
|
|
GTK_TYPE_SORT_TYPE,
|
||
|
|
GTK_SORT_ASCENDING,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:last-statusbar-visible:
|
||
|
|
*
|
||
|
|
* Whether to display a statusbar in new windows by default.
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_LAST_STATUSBAR_VISIBLE] =
|
||
|
|
g_param_spec_boolean ("last-statusbar-visible",
|
||
|
|
"LastStatusbarVisible",
|
||
|
|
NULL,
|
||
|
|
TRUE,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:last-image-preview-visible:
|
||
|
|
*
|
||
|
|
* Whether to display an image preview in new windows by default.
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_LAST_IMAGE_PREVIEW_VISIBLE] =
|
||
|
|
g_param_spec_boolean ("last-image-preview-visible",
|
||
|
|
"LastImagePreviewVisible",
|
||
|
|
NULL,
|
||
|
|
FALSE,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:last-view:
|
||
|
|
*
|
||
|
|
* The name of the widget class, which should be used for the
|
||
|
|
* main view component in #ThunarWindow<!---->s.
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_LAST_VIEW] =
|
||
|
|
g_param_spec_string ("last-view",
|
||
|
|
"LastView",
|
||
|
|
NULL,
|
||
|
|
"ThunarIconView",
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:last-window-height:
|
||
|
|
*
|
||
|
|
* The last known height of a #ThunarWindow, which will be used as
|
||
|
|
* default height for newly created windows.
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_LAST_WINDOW_HEIGHT] =
|
||
|
|
g_param_spec_int ("last-window-height",
|
||
|
|
"LastWindowHeight",
|
||
|
|
NULL,
|
||
|
|
1, G_MAXINT, 480,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:last-window-width:
|
||
|
|
*
|
||
|
|
* The last known width of a #ThunarWindow, which will be used as
|
||
|
|
* default width for newly created windows.
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_LAST_WINDOW_WIDTH] =
|
||
|
|
g_param_spec_int ("last-window-width",
|
||
|
|
"LastWindowWidth",
|
||
|
|
NULL,
|
||
|
|
1, G_MAXINT, 640,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:last-window-maximized:
|
||
|
|
*
|
||
|
|
* The last known maximized state of a #ThunarWindow, which will be used as
|
||
|
|
* default width for newly created windows.
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_LAST_WINDOW_FULLSCREEN] =
|
||
|
|
g_param_spec_boolean ("last-window-maximized",
|
||
|
|
"LastWindowMaximized",
|
||
|
|
NULL,
|
||
|
|
FALSE,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:last-renamer-dialog-height:
|
||
|
|
*
|
||
|
|
* The last known height of a #ThunarRenamerDialog, which will be used as
|
||
|
|
* default height for newly created dialgogs.
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_LAST_RENAMER_DIALOG_HEIGHT] =
|
||
|
|
g_param_spec_int ("last-renamer-dialog-height",
|
||
|
|
"LastRenamerDialogHeight",
|
||
|
|
NULL,
|
||
|
|
1, G_MAXINT, 490,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:last-renamer-dialog-width:
|
||
|
|
*
|
||
|
|
* The last known width of a #ThunarRenamerDialog, which will be used as
|
||
|
|
* default width for newly created dialgogs.
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_LAST_RENAMER_DIALOG_WIDTH] =
|
||
|
|
g_param_spec_int ("last-renamer-dialog-width",
|
||
|
|
"LastRenamerDialogWidth",
|
||
|
|
NULL,
|
||
|
|
1, G_MAXINT, 510,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:last-renamer-dialog-maximized:
|
||
|
|
*
|
||
|
|
* The last known maximized state of a #ThunarRenamerDialog, which will be used as
|
||
|
|
* default width for newly created dialgogs.
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_LAST_RENAMER_DIALOG_FULLSCREEN] =
|
||
|
|
g_param_spec_boolean ("last-renamer-dialog-maximized",
|
||
|
|
"LastRenamerDialogMaximized",
|
||
|
|
NULL,
|
||
|
|
FALSE,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:last-toolbar-items:
|
||
|
|
*
|
||
|
|
* The comma separated list that specifies the order and visibility of toolbar items.
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_LAST_TOOLBAR_ITEMS] =
|
||
|
|
g_param_spec_string ("last-toolbar-items",
|
||
|
|
"LastToolbarItems",
|
||
|
|
NULL,
|
||
|
|
"menu:0,back:1,forward:1,open-parent:1,open-home:1,"
|
||
|
|
"new-tab:0,new-window:0,toggle-split-view:0,"
|
||
|
|
"undo:0,redo:0,zoom-out:0,zoom-in:0,zoom-reset:0,"
|
||
|
|
"view-as-icons:0,view-as-detailed-list:0,view-as-compact-list:0,view-switcher:0,"
|
||
|
|
"location-bar:1,reload:0,search:1",
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:misc-always-show-tabs:
|
||
|
|
*
|
||
|
|
* If the view tabs should always be visible.
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_MISC_ALWAYS_SHOW_TABS] =
|
||
|
|
g_param_spec_boolean ("misc-always-show-tabs",
|
||
|
|
NULL,
|
||
|
|
NULL,
|
||
|
|
FALSE,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:misc-volume-management:
|
||
|
|
*
|
||
|
|
* Whether to enable volume management capabilities (requires HAL and the
|
||
|
|
* thunar-volman package).
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_MISC_VOLUME_MANAGEMENT] =
|
||
|
|
g_param_spec_boolean ("misc-volume-management",
|
||
|
|
"MiscVolumeManagement",
|
||
|
|
NULL,
|
||
|
|
TRUE,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:misc-case-sensitive:
|
||
|
|
*
|
||
|
|
* Whether to use case-sensitive sort.
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_MISC_CASE_SENSITIVE] =
|
||
|
|
g_param_spec_boolean ("misc-case-sensitive",
|
||
|
|
"MiscCaseSensitive",
|
||
|
|
NULL,
|
||
|
|
FALSE,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:misc-date-style:
|
||
|
|
*
|
||
|
|
* The style used to display dates in the user interface.
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_MISC_DATE_STYLE] =
|
||
|
|
g_param_spec_enum ("misc-date-style",
|
||
|
|
"MiscDateStyle",
|
||
|
|
NULL,
|
||
|
|
THUNAR_TYPE_DATE_STYLE,
|
||
|
|
THUNAR_DATE_STYLE_SIMPLE,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:misc-date-custom-style:
|
||
|
|
*
|
||
|
|
* If 'custom' is selected as date format, this date-style will be used
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_MISC_DATE_CUSTOM_STYLE] =
|
||
|
|
g_param_spec_string ("misc-date-custom-style",
|
||
|
|
"MiscDateCustomStyle",
|
||
|
|
NULL,
|
||
|
|
"%Y-%m-%d %H:%M:%S",
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:misc-execute-shell-scripts-by-default:
|
||
|
|
*
|
||
|
|
* Shell scripts are often unsafe to execute, require additional
|
||
|
|
* parameters and most users will only want to edit them in their
|
||
|
|
* favorite editor, so the default is to open them in the associated
|
||
|
|
* application. Setting this to "Always" allows executing them, like
|
||
|
|
* binaries, by default. See bug #7596.
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_EXEC_SHELL_SCRIPTS_BY_DEFAULT] =
|
||
|
|
g_param_spec_enum ("misc-exec-shell-scripts-by-default",
|
||
|
|
"MiscExecShellScriptsByDefault",
|
||
|
|
NULL,
|
||
|
|
THUNAR_TYPE_EXECUTE_SHELL_SCRIPT,
|
||
|
|
THUNAR_EXECUTE_SHELL_SCRIPT_NEVER,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:misc-folders-first:
|
||
|
|
*
|
||
|
|
* Whether to sort folders before files.
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_MISC_FOLDERS_FIRST] =
|
||
|
|
g_param_spec_boolean ("misc-folders-first",
|
||
|
|
"MiscFoldersFirst",
|
||
|
|
NULL,
|
||
|
|
TRUE,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:misc-folder-item-count:
|
||
|
|
*
|
||
|
|
* Tells when the size column of folders should show the number of containing files
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_MISC_FOLDER_ITEM_COUNT] =
|
||
|
|
g_param_spec_enum ("misc-folder-item-count",
|
||
|
|
"MiscFolderItemCount",
|
||
|
|
NULL,
|
||
|
|
THUNAR_TYPE_FOLDER_ITEM_COUNT,
|
||
|
|
THUNAR_FOLDER_ITEM_COUNT_NEVER,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:misc-full-path-in-tab-title:
|
||
|
|
*
|
||
|
|
* Show the full directory path in the tab title, instead of
|
||
|
|
* only the directory name.
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_MISC_FULL_PATH_IN_TAB_TITLE] =
|
||
|
|
g_param_spec_boolean ("misc-full-path-in-tab-title",
|
||
|
|
"MiscFullPathInTabTitle",
|
||
|
|
NULL,
|
||
|
|
FALSE,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:misc-window-title-style:
|
||
|
|
*
|
||
|
|
* Whether the window title should display the full directory path instead
|
||
|
|
* of only the directory name and with or without the application name appended.
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_MISC_WINDOW_TITLE_STYLE] =
|
||
|
|
g_param_spec_enum ("misc-window-title-style",
|
||
|
|
"MiscWindowTitleStyle",
|
||
|
|
NULL,
|
||
|
|
THUNAR_TYPE_WINDOW_TITLE_STYLE,
|
||
|
|
THUNAR_WINDOW_TITLE_STYLE_FOLDER_NAME_WITH_THUNAR_SUFFIX,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:misc-horizontal-wheel-navigates:
|
||
|
|
*
|
||
|
|
* Whether the horizontal mouse wheel is used to navigate
|
||
|
|
* forth and back within a Thunar view.
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_MISC_HORIZONTAL_WHEEL_NAVIGATES] =
|
||
|
|
g_param_spec_boolean ("misc-horizontal-wheel-navigates",
|
||
|
|
"MiscHorizontalWheelNavigates",
|
||
|
|
NULL,
|
||
|
|
FALSE,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:misc-image-size-in-statusbar:
|
||
|
|
*
|
||
|
|
* When a single image file is selected, show its size
|
||
|
|
* in the statusbar. This heavily increases I/O in image
|
||
|
|
* folders when moving the selection across files.
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_MISC_IMAGE_SIZE_IN_STATUSBAR] =
|
||
|
|
g_param_spec_boolean ("misc-image-size-in-statusbar",
|
||
|
|
"MiscImageSizeInStatusbar",
|
||
|
|
NULL,
|
||
|
|
FALSE,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:misc-middle-click-in-tab:
|
||
|
|
*
|
||
|
|
* If middle click opens a folder in a new window (FALSE) or in a new window (TRUE);
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_MISC_MIDDLE_CLICK_IN_TAB] =
|
||
|
|
g_param_spec_boolean ("misc-middle-click-in-tab",
|
||
|
|
NULL,
|
||
|
|
NULL,
|
||
|
|
FALSE,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:misc-open-new-window-as_tab:
|
||
|
|
*
|
||
|
|
* %TRUE to open a new tab in an existing thunar instance. instead of a new window
|
||
|
|
* if a thunar windows already is present
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_MISC_OPEN_NEW_WINDOW_AS_TAB] =
|
||
|
|
g_param_spec_boolean ("misc-open-new-window-as-tab",
|
||
|
|
"MiscOpenNewWindowAsTab",
|
||
|
|
NULL,
|
||
|
|
FALSE,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:misc-recursive-permissions:
|
||
|
|
*
|
||
|
|
* Whether to apply permissions recursively every time the
|
||
|
|
* permissions are altered by the user.
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_MISC_RECURSIVE_PERMISSIONS] =
|
||
|
|
g_param_spec_enum ("misc-recursive-permissions",
|
||
|
|
"MiscRecursivePermissions",
|
||
|
|
NULL,
|
||
|
|
THUNAR_TYPE_RECURSIVE_PERMISSIONS,
|
||
|
|
THUNAR_RECURSIVE_PERMISSIONS_ASK,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:misc-recursive-search:
|
||
|
|
*
|
||
|
|
* Whether to search only in the current folder or recursively
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_MISC_RECURSIVE_SEARCH] =
|
||
|
|
g_param_spec_enum ("misc-recursive-search",
|
||
|
|
"MiscRecursiveSearch",
|
||
|
|
NULL,
|
||
|
|
THUNAR_TYPE_RECURSIVE_SEARCH,
|
||
|
|
THUNAR_RECURSIVE_SEARCH_ALWAYS,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:misc-remember-geometry:
|
||
|
|
*
|
||
|
|
* Whether Thunar should remember the size of windows and apply
|
||
|
|
* that size to new windows. If %TRUE the width and height are
|
||
|
|
* saved to "last-window-width" and "last-window-height". If
|
||
|
|
* %FALSE the user may specify the start size in "last-window-with"
|
||
|
|
* and "last-window-height".
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_MISC_REMEMBER_GEOMETRY] =
|
||
|
|
g_param_spec_boolean ("misc-remember-geometry",
|
||
|
|
"MiscRememberGeometry",
|
||
|
|
NULL,
|
||
|
|
TRUE,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:misc-show-about-templates:
|
||
|
|
*
|
||
|
|
* Whether to display the "About Templates" dialog, when opening the
|
||
|
|
* Templates folder from the Go menu.
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_MISC_SHOW_ABOUT_TEMPLATES] =
|
||
|
|
g_param_spec_boolean ("misc-show-about-templates",
|
||
|
|
"MiscShowAboutTemplates",
|
||
|
|
NULL,
|
||
|
|
TRUE,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:misc-show-delete-action:
|
||
|
|
*
|
||
|
|
* Whether to display a "delete" action to permanently delete files and folders
|
||
|
|
* If trash is not supported, "delete" is displayed by default.
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_MISC_SHOW_DELETE_ACTION] =
|
||
|
|
g_param_spec_boolean ("misc-show-delete-action",
|
||
|
|
"MiscShowDeleteAction",
|
||
|
|
NULL,
|
||
|
|
!thunar_g_vfs_is_uri_scheme_supported ("trash"),
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:misc-single-click:
|
||
|
|
*
|
||
|
|
* Whether to use single click navigation.
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_MISC_SINGLE_CLICK] =
|
||
|
|
g_param_spec_boolean ("misc-single-click",
|
||
|
|
"MiscSingleClick",
|
||
|
|
NULL,
|
||
|
|
FALSE,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:misc-single-click-timeout:
|
||
|
|
*
|
||
|
|
* If single-click mode is enabled this is the amount of time
|
||
|
|
* in milliseconds after which the item under the mouse cursor
|
||
|
|
* will be selected automatically. A value of %0 disables the
|
||
|
|
* automatic selection.
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_MISC_SINGLE_CLICK_TIMEOUT] =
|
||
|
|
g_param_spec_uint ("misc-single-click-timeout",
|
||
|
|
"MiscSingleClickTimeout",
|
||
|
|
NULL,
|
||
|
|
0u, G_MAXUINT, 500u,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:misc-small-toolbar-icons:
|
||
|
|
*
|
||
|
|
* Use small icons on the toolbar instead of the default toolbar size.
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_MISC_SMALL_TOOLBAR_ICONS] =
|
||
|
|
g_param_spec_boolean ("misc-small-toolbar-icons",
|
||
|
|
NULL,
|
||
|
|
NULL,
|
||
|
|
FALSE,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:misc-tab-close-middle-click:
|
||
|
|
*
|
||
|
|
* Whether to close tabs when the tab label is clicked with the 2nd
|
||
|
|
* mouse button.
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_MISC_TAB_CLOSE_MIDDLE_CLICK] =
|
||
|
|
g_param_spec_boolean ("misc-tab-close-middle-click",
|
||
|
|
NULL,
|
||
|
|
NULL,
|
||
|
|
TRUE,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:misc-text-beside-icons:
|
||
|
|
*
|
||
|
|
* Whether the icon view should display the file names beside the
|
||
|
|
* file icons instead of below the file icons.
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_MISC_TEXT_BESIDE_ICONS] =
|
||
|
|
g_param_spec_boolean ("misc-text-beside-icons",
|
||
|
|
"MiscTextBesideIcons",
|
||
|
|
NULL,
|
||
|
|
FALSE,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:misc-thumbnail-mode:
|
||
|
|
*
|
||
|
|
* Whether to generate and display thumbnails for previewable files.
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_MISC_THUMBNAIL_MODE] =
|
||
|
|
g_param_spec_enum ("misc-thumbnail-mode",
|
||
|
|
NULL,
|
||
|
|
NULL,
|
||
|
|
THUNAR_TYPE_THUMBNAIL_MODE,
|
||
|
|
THUNAR_THUMBNAIL_MODE_ONLY_LOCAL,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:misc-thumbnail-draw-frames:
|
||
|
|
*
|
||
|
|
* Whether to draw black frames around thumbnails.
|
||
|
|
* This looks neat, but will delay the first draw a bit.
|
||
|
|
* May have an impact on older systems, on folders with many pictures.
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_MISC_THUMBNAIL_DRAW_FRAMES] =
|
||
|
|
g_param_spec_boolean ("misc-thumbnail-draw-frames",
|
||
|
|
NULL,
|
||
|
|
NULL,
|
||
|
|
FALSE,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:misc-thumbnail-max-file-size:
|
||
|
|
*
|
||
|
|
* Maximum file size (in bytes) allowed to be thumbnailed.
|
||
|
|
* 0 means no limit is in place.
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_MISC_THUMBNAIL_MAX_FILE_SIZE] =
|
||
|
|
g_param_spec_uint64 ("misc-thumbnail-max-file-size",
|
||
|
|
NULL,
|
||
|
|
NULL,
|
||
|
|
0, G_MAXUINT64, 0,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:misc-file-size-binary:
|
||
|
|
*
|
||
|
|
* Show file size in binary format instead of decimal.
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_MISC_FILE_SIZE_BINARY] =
|
||
|
|
g_param_spec_boolean ("misc-file-size-binary",
|
||
|
|
"MiscFileSizeBinary",
|
||
|
|
NULL,
|
||
|
|
TRUE,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:misc-parallel-copy-mode:
|
||
|
|
*
|
||
|
|
* Do parallel copy (or not) on files copy.
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_MISC_PARALLEL_COPY_MODE] =
|
||
|
|
g_param_spec_enum ("misc-parallel-copy-mode",
|
||
|
|
"MiscParallelCopyMode",
|
||
|
|
NULL,
|
||
|
|
THUNAR_TYPE_PARALLEL_COPY_MODE,
|
||
|
|
THUNAR_PARALLEL_COPY_MODE_ONLY_LOCAL_IDLE_DEVICE,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:misc-change-window-icon:
|
||
|
|
*
|
||
|
|
* Whether to change the window icon to the folder's icon.
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_MISC_WINDOW_ICON] =
|
||
|
|
g_param_spec_boolean ("misc-change-window-icon",
|
||
|
|
"MiscChangeWindowIcon",
|
||
|
|
NULL,
|
||
|
|
TRUE,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:misc-transfer-use-partial:
|
||
|
|
*
|
||
|
|
* Whether to use intermediate file(*.partial~) to copy.
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_MISC_TRANSFER_USE_PARTIAL] =
|
||
|
|
g_param_spec_enum ("misc-transfer-use-partial",
|
||
|
|
"MiscTransferUsePartial",
|
||
|
|
NULL,
|
||
|
|
THUNAR_TYPE_USE_PARTIAL_MODE,
|
||
|
|
THUNAR_USE_PARTIAL_MODE_DISABLED,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:misc-transfer-verify-file:
|
||
|
|
*
|
||
|
|
* Whether to verify copied file contents.
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_MISC_TRANSFER_VERIFY_FILE] =
|
||
|
|
g_param_spec_enum ("misc-transfer-verify-file",
|
||
|
|
"MiscTransferVerifyFile",
|
||
|
|
NULL,
|
||
|
|
THUNAR_TYPE_VERIFY_FILE_MODE,
|
||
|
|
THUNAR_VERIFY_FILE_MODE_DISABLED,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:misc-image-preview-mode:
|
||
|
|
*
|
||
|
|
* Whether the image preview functionality uses its own sidepane or is embedded
|
||
|
|
* in the left sidepane.
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_MISC_IMAGE_PREVIEW_FULL] =
|
||
|
|
g_param_spec_enum ("misc-image-preview-mode",
|
||
|
|
"MiscImagePreviewMode",
|
||
|
|
NULL,
|
||
|
|
THUNAR_TYPE_IMAGE_PREVIEW_MODE,
|
||
|
|
THUNAR_IMAGE_PREVIEW_MODE_EMBEDDED,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:misc-confirm-close-multiple-tabs:
|
||
|
|
*
|
||
|
|
* Ask the user for confirmation before closing a window with
|
||
|
|
* multiple tabs.
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_MISC_CONFIRM_CLOSE_MULTIPLE_TABS] =
|
||
|
|
g_param_spec_boolean ("misc-confirm-close-multiple-tabs",
|
||
|
|
"ConfirmCloseMultipleTabs",
|
||
|
|
NULL,
|
||
|
|
TRUE,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:misc-status-bar-active-info:
|
||
|
|
*
|
||
|
|
* What kind of info is presented in the statusbar..
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_MISC_STATUS_BAR_ACTIVE_INFO] =
|
||
|
|
g_param_spec_uint ("misc-status-bar-active-info",
|
||
|
|
"MiscStatusBarActiveInfo",
|
||
|
|
NULL,
|
||
|
|
0, G_MAXUINT,
|
||
|
|
THUNAR_STATUS_BAR_INFO_DISPLAY_NAME | THUNAR_STATUS_BAR_INFO_FILETYPE | THUNAR_STATUS_BAR_INFO_SIZE
|
||
|
|
| THUNAR_STATUS_BAR_INFO_SIZE_IN_BYTES,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:shortcuts-icon-emblems:
|
||
|
|
*
|
||
|
|
* Whether to display emblems for file icons (if defined) in the
|
||
|
|
* shortcuts side pane.
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_SHORTCUTS_ICON_EMBLEMS] =
|
||
|
|
g_param_spec_boolean ("shortcuts-icon-emblems",
|
||
|
|
"ShortcutsIconEmblems",
|
||
|
|
NULL,
|
||
|
|
TRUE,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:shortcuts-icon-size:
|
||
|
|
*
|
||
|
|
* The icon size to use for the icons displayed in the
|
||
|
|
* shortcuts side pane.
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_SHORTCUTS_ICON_SIZE] =
|
||
|
|
g_param_spec_enum ("shortcuts-icon-size",
|
||
|
|
"ShortcutsIconSize",
|
||
|
|
NULL,
|
||
|
|
THUNAR_TYPE_ICON_SIZE,
|
||
|
|
THUNAR_ICON_SIZE_24,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:tree-icon-emblems:
|
||
|
|
*
|
||
|
|
* Whether to display emblems for file icons (if defined) in the
|
||
|
|
* tree side pane.
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_TREE_ICON_EMBLEMS] =
|
||
|
|
g_param_spec_boolean ("tree-icon-emblems",
|
||
|
|
"TreeIconEmblems",
|
||
|
|
NULL,
|
||
|
|
TRUE,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:tree-icon-size:
|
||
|
|
*
|
||
|
|
* The icon size to use for the icons displayed in the
|
||
|
|
* tree side pane.
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_TREE_ICON_SIZE] =
|
||
|
|
g_param_spec_enum ("tree-icon-size",
|
||
|
|
"TreeIconSize",
|
||
|
|
NULL,
|
||
|
|
THUNAR_TYPE_ICON_SIZE,
|
||
|
|
THUNAR_ICON_SIZE_16,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:misc-tree-lines-in-tree-sidepane:
|
||
|
|
*
|
||
|
|
* Whether to show tree lines or not in the tree side pane.
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_TREE_LINES] =
|
||
|
|
g_param_spec_boolean ("misc-tree-lines-in-tree-sidepane",
|
||
|
|
"TreeLines",
|
||
|
|
NULL,
|
||
|
|
FALSE,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:misc-switch-to-new-tab:
|
||
|
|
*
|
||
|
|
* Whether to switch to the new tab after opening a folder in a new tab.
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_MISC_SWITCH_TO_NEW_TAB] =
|
||
|
|
g_param_spec_boolean ("misc-switch-to-new-tab",
|
||
|
|
"SwitchToNewTab",
|
||
|
|
NULL,
|
||
|
|
TRUE,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:misc-vertical-split-pane:
|
||
|
|
*
|
||
|
|
* If true, split the thunar window vertically instead of horizontally
|
||
|
|
* when splitting the thunar window into two panes.
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_MISC_VERTICAL_SPLIT_PANE] =
|
||
|
|
g_param_spec_boolean ("misc-vertical-split-pane",
|
||
|
|
"MiscVerticalSplitPane",
|
||
|
|
NULL,
|
||
|
|
FALSE,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:misc-open-new-windows-in-split-view:
|
||
|
|
*
|
||
|
|
* DEPRECIATED for 4.20. Should be removed for 4.22 or later versions, together with
|
||
|
|
* the migration code in "thunar_application_open_window()"
|
||
|
|
*
|
||
|
|
* If true, all thunar windows will have split view enabled.
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_MISC_OPEN_NEW_WINDOWS_IN_SPLIT_VIEW] =
|
||
|
|
g_param_spec_boolean ("misc-open-new-windows-in-split-view",
|
||
|
|
"MiscOpenNewWindowsInSplitView",
|
||
|
|
NULL,
|
||
|
|
FALSE,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:misc-always-enable-split-view:
|
||
|
|
*
|
||
|
|
* If true, all thunar windows will have split view enabled.
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_MISC_ALWAYS_ENABLE_SPLIT_VIEW] =
|
||
|
|
g_param_spec_boolean ("misc-always-enable-split-view",
|
||
|
|
"MiscAlwaysEnableSplitView",
|
||
|
|
NULL,
|
||
|
|
FALSE,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:compact-view-max-chars:
|
||
|
|
*
|
||
|
|
* The ellipsization threshold for compact view. Negative values disable ellipsization.
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_MISC_COMPACT_VIEW_MAX_CHARS] =
|
||
|
|
g_param_spec_int ("misc-compact-view-max-chars",
|
||
|
|
"MiscCompactViewMaxChars",
|
||
|
|
NULL,
|
||
|
|
G_MININT, G_MAXINT,
|
||
|
|
100,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:misc-highlighting-enabled:
|
||
|
|
*
|
||
|
|
* If true file highlighting feature across the various views is enabled.
|
||
|
|
* Can be toggled using the View > Show File Highlight.
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_MISC_HIGHLIGHTING_ENABLED] =
|
||
|
|
g_param_spec_boolean ("misc-highlighting-enabled",
|
||
|
|
"MiscHighlightingEnabled",
|
||
|
|
NULL,
|
||
|
|
thunar_g_vfs_metadata_is_supported (),
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:misc-undo-redo-history-size:
|
||
|
|
*
|
||
|
|
* Maximum number of ThunarJobOperations which can be undone/redone
|
||
|
|
* -1 for unlimited
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_MISC_UNDO_REDO_HISTORY_SIZE] =
|
||
|
|
g_param_spec_int ("misc-undo-redo-history-size",
|
||
|
|
"MiscUndoRedoHistorySize",
|
||
|
|
NULL,
|
||
|
|
-1, G_MAXINT,
|
||
|
|
10,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:misc-confirm-move-to-trash:
|
||
|
|
*
|
||
|
|
* If true enables a confirmation to move files to trash (similar to permanently delete)
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_MISC_CONFIRM_MOVE_TO_TRASH] =
|
||
|
|
g_param_spec_boolean ("misc-confirm-move-to-trash",
|
||
|
|
"MiscConfirmMoveToTrash",
|
||
|
|
NULL,
|
||
|
|
FALSE,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:misc-max-number-of-templates:
|
||
|
|
*
|
||
|
|
* Maximum number of templates for which will be scanned in the 'templates' directory
|
||
|
|
* Required to prevent possible lag when the context menu is opened
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_MISC_MAX_NUMBER_OF_TEMPLATES] =
|
||
|
|
g_param_spec_uint ("misc-max-number-of-templates",
|
||
|
|
"MiscMaxNumberOfTemplates",
|
||
|
|
NULL,
|
||
|
|
0, G_MAXUINT,
|
||
|
|
100,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:misc-expandable-folders:
|
||
|
|
*
|
||
|
|
* If true details-view opens with expandable folders.
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_MISC_EXPANDABLE_FOLDERS] =
|
||
|
|
g_param_spec_boolean ("misc-expandable-folders",
|
||
|
|
"MiscEnableExpandableFolders",
|
||
|
|
NULL,
|
||
|
|
FALSE,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:misc-display-launcher-name-as-filename:
|
||
|
|
*
|
||
|
|
* Whether to show real file names or launcher names for .desktop files
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_MISC_DISPLAY_LAUNCHER_NAME_AS_FILENAME] =
|
||
|
|
g_param_spec_boolean ("misc-display-launcher-name-as-filename",
|
||
|
|
"MiscDisplayLauncherNameAsFilename",
|
||
|
|
NULL,
|
||
|
|
TRUE,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:misc-symbolic-icons-in-toolbar:
|
||
|
|
*
|
||
|
|
* If true symbolic icons should be used in the toolbar
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_MISC_SYMBOLIC_ICONS_IN_TOOLBAR] =
|
||
|
|
g_param_spec_boolean ("misc-symbolic-icons-in-toolbar",
|
||
|
|
"MiscSymbolicIconsInToolbar",
|
||
|
|
NULL,
|
||
|
|
TRUE,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:misc-symbolic-icons-in-sidepane:
|
||
|
|
*
|
||
|
|
* If true symbolic icons should be used in the sidepane
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_MISC_SYMBOLIC_ICONS_IN_SIDEPANE] =
|
||
|
|
g_param_spec_boolean ("misc-symbolic-icons-in-sidepane",
|
||
|
|
"MiscSymbolicIconsInSidepane",
|
||
|
|
NULL,
|
||
|
|
FALSE,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:misc-ctrl-scroll-wheel-to-zoom:
|
||
|
|
*
|
||
|
|
* If true, Ctrl + Scroll Wheel to Zoom is enabled
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_MISC_CTRL_SCROLL_WHEEL_TO_ZOOM] =
|
||
|
|
g_param_spec_boolean ("misc-ctrl-scroll-wheel-to-zoom",
|
||
|
|
"MiscCtrlScrollWheelToZoom",
|
||
|
|
NULL,
|
||
|
|
TRUE,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* ThunarPreferences:misc-use-csd:
|
||
|
|
*
|
||
|
|
* %TRUE to draw client-side decorations.
|
||
|
|
**/
|
||
|
|
preferences_props[PROP_MISC_USE_CSD] =
|
||
|
|
g_param_spec_boolean ("misc-use-csd",
|
||
|
|
"MiscUseCSD",
|
||
|
|
NULL,
|
||
|
|
FALSE,
|
||
|
|
EXO_PARAM_READWRITE);
|
||
|
|
|
||
|
|
/* install all properties */
|
||
|
|
g_object_class_install_properties (gobject_class, N_PROPERTIES, preferences_props);
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
static void
|
||
|
|
thunar_preferences_init (ThunarPreferences *preferences)
|
||
|
|
{
|
||
|
|
const gchar check_prop[] = "/last-view";
|
||
|
|
|
||
|
|
/* don't set a channel if xfconf init failed */
|
||
|
|
if (no_xfconf)
|
||
|
|
return;
|
||
|
|
|
||
|
|
/* load the channel */
|
||
|
|
preferences->channel = xfconf_channel_get ("thunar");
|
||
|
|
|
||
|
|
/* check one of the property to see if there are values */
|
||
|
|
if (!xfconf_channel_has_property (preferences->channel, check_prop))
|
||
|
|
{
|
||
|
|
/* try to load the old config file */
|
||
|
|
thunar_preferences_load_rc_file (preferences);
|
||
|
|
|
||
|
|
/* set the string we check */
|
||
|
|
if (!xfconf_channel_has_property (preferences->channel, check_prop))
|
||
|
|
xfconf_channel_set_string (preferences->channel, check_prop, "ThunarIconView");
|
||
|
|
}
|
||
|
|
|
||
|
|
preferences->property_changed_id =
|
||
|
|
g_signal_connect (G_OBJECT (preferences->channel), "property-changed",
|
||
|
|
G_CALLBACK (thunar_preferences_prop_changed), preferences);
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
static void
|
||
|
|
thunar_preferences_finalize (GObject *object)
|
||
|
|
{
|
||
|
|
ThunarPreferences *preferences = THUNAR_PREFERENCES (object);
|
||
|
|
|
||
|
|
/* disconnect from the updates */
|
||
|
|
g_signal_handler_disconnect (preferences->channel, preferences->property_changed_id);
|
||
|
|
|
||
|
|
(*G_OBJECT_CLASS (thunar_preferences_parent_class)->finalize) (object);
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
static void
|
||
|
|
thunar_preferences_get_property (GObject *object,
|
||
|
|
guint prop_id,
|
||
|
|
GValue *value,
|
||
|
|
GParamSpec *pspec)
|
||
|
|
{
|
||
|
|
ThunarPreferences *preferences = THUNAR_PREFERENCES (object);
|
||
|
|
GValue src = {
|
||
|
|
0,
|
||
|
|
};
|
||
|
|
gchar prop_name[64];
|
||
|
|
gchar **array;
|
||
|
|
|
||
|
|
/* only set defaults if channel is not set */
|
||
|
|
if (G_UNLIKELY (preferences->channel == NULL))
|
||
|
|
{
|
||
|
|
g_param_value_set_default (pspec, value);
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
/* build property name */
|
||
|
|
g_snprintf (prop_name, sizeof (prop_name), "/%s", g_param_spec_get_name (pspec));
|
||
|
|
|
||
|
|
if (G_VALUE_TYPE (value) == G_TYPE_STRV)
|
||
|
|
{
|
||
|
|
/* handle arrays directly since we cannot transform those */
|
||
|
|
array = xfconf_channel_get_string_list (preferences->channel, prop_name);
|
||
|
|
g_value_take_boxed (value, array);
|
||
|
|
}
|
||
|
|
else if (xfconf_channel_get_property (preferences->channel, prop_name, &src))
|
||
|
|
{
|
||
|
|
if (G_VALUE_TYPE (value) == G_VALUE_TYPE (&src))
|
||
|
|
g_value_copy (&src, value);
|
||
|
|
else if (!g_value_transform (&src, value))
|
||
|
|
g_warning ("Thunar: Failed to transform property %s", prop_name);
|
||
|
|
g_value_unset (&src);
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
/* value is not found, return default */
|
||
|
|
g_param_value_set_default (pspec, value);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
static void
|
||
|
|
thunar_preferences_set_property (GObject *object,
|
||
|
|
guint prop_id,
|
||
|
|
const GValue *value,
|
||
|
|
GParamSpec *pspec)
|
||
|
|
{
|
||
|
|
ThunarPreferences *preferences = THUNAR_PREFERENCES (object);
|
||
|
|
GValue dst = {
|
||
|
|
0,
|
||
|
|
};
|
||
|
|
gchar prop_name[64];
|
||
|
|
gchar **array;
|
||
|
|
|
||
|
|
/* leave if the channel is not set */
|
||
|
|
if (G_UNLIKELY (preferences->channel == NULL))
|
||
|
|
return;
|
||
|
|
|
||
|
|
/* build property name */
|
||
|
|
g_snprintf (prop_name, sizeof (prop_name), "/%s", g_param_spec_get_name (pspec));
|
||
|
|
|
||
|
|
/* freeze */
|
||
|
|
g_signal_handler_block (preferences->channel, preferences->property_changed_id);
|
||
|
|
|
||
|
|
if (G_VALUE_HOLDS_ENUM (value))
|
||
|
|
{
|
||
|
|
/* convert into a string */
|
||
|
|
g_value_init (&dst, G_TYPE_STRING);
|
||
|
|
if (g_value_transform (value, &dst))
|
||
|
|
xfconf_channel_set_property (preferences->channel, prop_name, &dst);
|
||
|
|
g_value_unset (&dst);
|
||
|
|
}
|
||
|
|
else if (G_VALUE_HOLDS (value, G_TYPE_STRV))
|
||
|
|
{
|
||
|
|
/* convert to a GValue GPtrArray in xfconf */
|
||
|
|
array = g_value_get_boxed (value);
|
||
|
|
if (array != NULL && *array != NULL)
|
||
|
|
xfconf_channel_set_string_list (preferences->channel, prop_name, (const gchar *const *) array);
|
||
|
|
else
|
||
|
|
xfconf_channel_reset_property (preferences->channel, prop_name, FALSE);
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
/* other types we support directly */
|
||
|
|
xfconf_channel_set_property (preferences->channel, prop_name, value);
|
||
|
|
}
|
||
|
|
|
||
|
|
/* thaw */
|
||
|
|
g_signal_handler_unblock (preferences->channel, preferences->property_changed_id);
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
/**
|
||
|
|
* thunar_preferences_has_property:
|
||
|
|
* @preferences : the #ThunarPreferences instance.
|
||
|
|
* @prop_name : a property name.
|
||
|
|
*
|
||
|
|
* Return value: %TRUE if @prop_name exists, %FALSE otherwise.
|
||
|
|
**/
|
||
|
|
gboolean
|
||
|
|
thunar_preferences_has_property (ThunarPreferences *preferences,
|
||
|
|
const gchar *prop_name)
|
||
|
|
{
|
||
|
|
if (G_UNLIKELY (preferences->channel == NULL))
|
||
|
|
return FALSE;
|
||
|
|
|
||
|
|
return xfconf_channel_has_property (preferences->channel, prop_name);
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
static void
|
||
|
|
thunar_preferences_prop_changed (XfconfChannel *channel,
|
||
|
|
const gchar *prop_name,
|
||
|
|
const GValue *value,
|
||
|
|
ThunarPreferences *preferences)
|
||
|
|
{
|
||
|
|
GParamSpec *pspec;
|
||
|
|
|
||
|
|
/* check if the property exists and emit change */
|
||
|
|
pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (preferences), prop_name + 1);
|
||
|
|
if (G_LIKELY (pspec != NULL))
|
||
|
|
g_object_notify_by_pspec (G_OBJECT (preferences), pspec);
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
static void
|
||
|
|
thunar_preferences_load_rc_file (ThunarPreferences *preferences)
|
||
|
|
{
|
||
|
|
GParamSpec **pspecs;
|
||
|
|
GParamSpec *pspec;
|
||
|
|
XfceRc *rc;
|
||
|
|
guint nspecs, n;
|
||
|
|
const gchar *string;
|
||
|
|
GValue dst = {
|
||
|
|
0,
|
||
|
|
};
|
||
|
|
GValue src = {
|
||
|
|
0,
|
||
|
|
};
|
||
|
|
gchar prop_name[64];
|
||
|
|
const gchar *nick;
|
||
|
|
gchar *filename;
|
||
|
|
|
||
|
|
/* find file */
|
||
|
|
filename = xfce_resource_lookup (XFCE_RESOURCE_CONFIG, "Thunar/thunarrc");
|
||
|
|
if (G_UNLIKELY (filename == NULL))
|
||
|
|
return;
|
||
|
|
|
||
|
|
/* look for preferences */
|
||
|
|
rc = xfce_rc_simple_open (filename, TRUE);
|
||
|
|
if (G_UNLIKELY (rc == NULL))
|
||
|
|
return;
|
||
|
|
|
||
|
|
xfce_rc_set_group (rc, "Configuration");
|
||
|
|
|
||
|
|
pspecs = g_object_class_list_properties (G_OBJECT_GET_CLASS (preferences), &nspecs);
|
||
|
|
for (n = 0; n < nspecs; ++n)
|
||
|
|
{
|
||
|
|
pspec = pspecs[n];
|
||
|
|
|
||
|
|
/* continue if the nick is null */
|
||
|
|
nick = g_param_spec_get_nick (pspec);
|
||
|
|
if (G_UNLIKELY (nick == NULL))
|
||
|
|
continue;
|
||
|
|
|
||
|
|
/* read the value from the rc file */
|
||
|
|
string = xfce_rc_read_entry (rc, nick, NULL);
|
||
|
|
if (G_UNLIKELY (string == NULL))
|
||
|
|
continue;
|
||
|
|
|
||
|
|
/* xfconf property name, continue if exists */
|
||
|
|
g_snprintf (prop_name, sizeof (prop_name), "/%s", g_param_spec_get_name (pspec));
|
||
|
|
if (xfconf_channel_has_property (preferences->channel, prop_name))
|
||
|
|
continue;
|
||
|
|
|
||
|
|
/* source property */
|
||
|
|
g_value_init (&src, G_TYPE_STRING);
|
||
|
|
g_value_set_static_string (&src, string);
|
||
|
|
|
||
|
|
/* store string and enums directly */
|
||
|
|
if (G_IS_PARAM_SPEC_STRING (pspec) || G_IS_PARAM_SPEC_ENUM (pspec))
|
||
|
|
{
|
||
|
|
xfconf_channel_set_property (preferences->channel, prop_name, &src);
|
||
|
|
}
|
||
|
|
else if (g_value_type_transformable (G_TYPE_STRING, G_PARAM_SPEC_VALUE_TYPE (pspec)))
|
||
|
|
{
|
||
|
|
g_value_init (&dst, G_PARAM_SPEC_VALUE_TYPE (pspec));
|
||
|
|
if (g_value_transform (&src, &dst))
|
||
|
|
xfconf_channel_set_property (preferences->channel, prop_name, &dst);
|
||
|
|
g_value_unset (&dst);
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
g_warning ("Failed to migrate property \"%s\"", g_param_spec_get_name (pspec));
|
||
|
|
}
|
||
|
|
|
||
|
|
g_value_unset (&src);
|
||
|
|
}
|
||
|
|
|
||
|
|
/* manually migrate the thumbnails property */
|
||
|
|
if (!xfce_rc_read_bool_entry (rc, "MiscShowThumbnails", TRUE))
|
||
|
|
{
|
||
|
|
xfconf_channel_set_string (preferences->channel,
|
||
|
|
"/misc-thumbnail-mode",
|
||
|
|
"THUNAR_THUMBNAIL_MODE_NEVER");
|
||
|
|
}
|
||
|
|
|
||
|
|
g_free (pspecs);
|
||
|
|
xfce_rc_close (rc);
|
||
|
|
|
||
|
|
g_print ("\n\n"
|
||
|
|
"Your Thunar settings have been migrated to Xfconf.\n"
|
||
|
|
"The config file \"%s\"\n"
|
||
|
|
"is not used anymore.\n\n",
|
||
|
|
filename);
|
||
|
|
|
||
|
|
g_free (filename);
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
/**
|
||
|
|
* thunar_preferences_get:
|
||
|
|
*
|
||
|
|
* Queries the global #ThunarPreferences instance, which is shared
|
||
|
|
* by all modules. The function automatically takes a reference
|
||
|
|
* for the caller, so you'll need to call g_object_unref() when
|
||
|
|
* you're done with it.
|
||
|
|
*
|
||
|
|
* Return value: the global #ThunarPreferences instance.
|
||
|
|
**/
|
||
|
|
ThunarPreferences *
|
||
|
|
thunar_preferences_get (void)
|
||
|
|
{
|
||
|
|
static ThunarPreferences *preferences = NULL;
|
||
|
|
|
||
|
|
if (G_UNLIKELY (preferences == NULL))
|
||
|
|
{
|
||
|
|
preferences = g_object_new (THUNAR_TYPE_PREFERENCES, NULL);
|
||
|
|
g_object_add_weak_pointer (G_OBJECT (preferences),
|
||
|
|
(gpointer) &preferences);
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
g_object_ref (G_OBJECT (preferences));
|
||
|
|
}
|
||
|
|
|
||
|
|
return preferences;
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
void
|
||
|
|
thunar_preferences_xfconf_init_failed (void)
|
||
|
|
{
|
||
|
|
no_xfconf = TRUE;
|
||
|
|
}
|