Skip to content

Commit 17d86df

Browse files
committed
Add preference for default metadata
1 parent 579320a commit 17d86df

7 files changed

Lines changed: 68 additions & 12 deletions

File tree

gresources/nemo-file-management-properties.glade

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -609,6 +609,22 @@ along with . If not, see <http://www.gnu.org/licenses/>.
609609
<property name="position">5</property>
610610
</packing>
611611
</child>
612+
<child>
613+
<object class="GtkCheckButton" id="show_preview_pane_checkbutton">
614+
<property name="label" translatable="yes">Show preview pane</property>
615+
<property name="visible">True</property>
616+
<property name="can-focus">True</property>
617+
<property name="receives-default">True</property>
618+
<property name="use-underline">True</property>
619+
<property name="xalign">0</property>
620+
<property name="draw-indicator">True</property>
621+
</object>
622+
<packing>
623+
<property name="expand">False</property>
624+
<property name="fill">False</property>
625+
<property name="position">6</property>
626+
</packing>
627+
</child>
612628
</object>
613629
</child>
614630
</object>

libnemo-private/nemo-global-preferences.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ G_BEGIN_DECLS
4242
/* Display */
4343
#define NEMO_PREFERENCES_SHOW_HIDDEN_FILES "show-hidden-files"
4444
#define NEMO_PREFERENCES_SHOW_ADVANCED_PERMISSIONS "show-advanced-permissions"
45+
#define NEMO_PREFERENCES_SHOW_PREVIEW_PANE "show-preview-pane"
4546
#define NEMO_PREFERENCES_DATE_FORMAT "date-format"
4647
#define NEMO_PREFERENCES_DATE_FONT_CHOICE "date-font-choice"
4748
#define NEMO_PREFERENCES_MONO_FONT_NAME "monospace-font-name"

libnemo-private/nemo-metadata.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@
6060
#define NEMO_METADATA_KEY_WINDOW_MAXIMIZED "nemo-window-maximized"
6161
#define NEMO_METADATA_KEY_WINDOW_STICKY "nemo-window-sticky"
6262
#define NEMO_METADATA_KEY_WINDOW_KEEP_ABOVE "nemo-window-keep-above"
63-
#define NEMO_METADATA_KEY_WINDOW_SHOW_PREVIEW_PANE "nemo-window-show-preview-pane"
63+
#define NEMO_METADATA_KEY_WINDOW_SHOW_PREVIEW_PANE "nemo-window-show-preview-pane"
6464

6565
#define NEMO_METADATA_KEY_SIDEBAR_BACKGROUND_COLOR "nemo-sidebar-background-color"
6666
#define NEMO_METADATA_KEY_SIDEBAR_BACKGROUND_IMAGE "nemo-sidebar-background-image"

libnemo-private/org.nemo.gschema.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -274,6 +274,11 @@
274274
<summary>Show favorites first in windows</summary>
275275
<description>If set to true, then Nemo shows favorites prior to other files in the icon and list views.</description>
276276
</key>
277+
<key name="show-preview-pane" type="b">
278+
<default>false</default>
279+
<summary>Show the preview pane by default in newly visited folders</summary>
280+
<description>If set to true, then Nemo shows the preview pane when visiting new folders.</description>
281+
</key>
277282
<key name="default-sort-order" enum="org.nemo.SortOrder">
278283
<aliases>
279284
<alias value='modification_date' target='mtime'/>

src/nemo-file-management-properties.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@
9191
#define NEMO_FILE_MANAGEMENT_PROPERTIES_SHOW_SHOW_THUMBNAILS_ICON_TOOLBAR_WIDGET "show_show_thumbnails_icon_toolbar_togglebutton"
9292
#define NEMO_FILE_MANAGEMENT_PROPERTIES_SHOW_TOGGLE_EXTRA_PANE_ICON_TOOLBAR_WIDGET "show_toggle_extra_pane_icon_toolbar_togglebutton"
9393

94+
#define NEMO_FILE_MANAGEMENT_PROPERTIES_SHOW_PREVIEW_PANE_WIDGET "show_preview_pane_checkbutton"
9495
#define NEMO_FILE_MANAGEMENT_PROPERTIES_SHOW_FULL_PATH_IN_TITLE_BARS_WIDGET "show_full_path_in_title_bars_checkbutton"
9596
#define NEMO_FILE_MANAGEMENT_PROPERTIES_CLOSE_DEVICE_VIEW_ON_EJECT_WIDGET "close_device_view_on_eject_checkbutton"
9697
#define NEMO_FILE_MANAGEMENT_PROPERTIES_AUTOMOUNT_MEDIA_WIDGET "media_automount_checkbutton"
@@ -931,6 +932,10 @@ nemo_file_management_properties_dialog_setup (GtkBuilder *builder,
931932
NEMO_FILE_MANAGEMENT_PROPERTIES_SHOW_SHOW_THUMBNAILS_ICON_TOOLBAR_WIDGET,
932933
NEMO_PREFERENCES_SHOW_SHOW_THUMBNAILS_TOOLBAR);
933934

935+
bind_builder_bool (builder, nemo_preferences,
936+
NEMO_FILE_MANAGEMENT_PROPERTIES_SHOW_PREVIEW_PANE_WIDGET,
937+
NEMO_PREFERENCES_SHOW_PREVIEW_PANE);
938+
934939
/* setup preferences */
935940
bind_builder_bool (builder, nemo_icon_view_preferences,
936941
NEMO_FILE_MANAGEMENT_PROPERTIES_LABELS_BESIDE_ICONS_WIDGET,

src/nemo-view.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -528,6 +528,7 @@ nemo_view_reset_to_defaults (NemoView *view)
528528
file = view->details->slot->viewed_file;
529529
nemo_file_set_metadata(file, NEMO_METADATA_KEY_SHOW_THUMBNAILS, NULL, NULL);
530530
nemo_file_set_metadata(file, NEMO_METADATA_KEY_DEFAULT_VIEW, NULL, NULL);
531+
nemo_file_set_metadata (file, NEMO_METADATA_KEY_WINDOW_SHOW_PREVIEW_PANE, NULL, NULL);
531532
gtk_action_activate (gtk_action_group_get_action (nemo_window_get_main_action_group (window), NEMO_ACTION_RELOAD));
532533
}
533534

src/nemo-window.c

Lines changed: 39 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1626,6 +1626,10 @@ zoom_level_changed_callback (NemoView *view,
16261626
nemo_window_sync_zoom_widgets (window);
16271627
}
16281628

1629+
/* Forward declarations */
1630+
static void nemo_window_preview_pane_on_internal (NemoWindow *window, gboolean write_metadata);
1631+
static void nemo_window_preview_pane_off_internal (NemoWindow *window, gboolean write_metadata);
1632+
16291633
/* Check if any slot in the window (across all panes and tabs) has
16301634
* preview pane enabled in its metadata, excluding the given slot.
16311635
*/
@@ -1672,13 +1676,15 @@ any_other_slot_wants_preview_pane (NemoWindow *window,
16721676
/* Synchronize the preview pane state based on a slot's directory metadata.
16731677
* This checks the slot's current directory's saved preference and applies it,
16741678
* taking into account whether other slots in the window want the preview pane.
1679+
* If no metadata is saved for this directory, uses the default from GSettings.
16751680
*/
16761681
static void
16771682
sync_preview_pane_from_slot_metadata (NemoWindow *window,
16781683
NemoWindowSlot *slot)
16791684
{
16801685
NemoFile *directory_file;
16811686
gboolean show_preview;
1687+
gboolean default_show_preview;
16821688

16831689
if (slot == NULL || slot->content_view == NULL) {
16841690
return;
@@ -1689,17 +1695,23 @@ sync_preview_pane_from_slot_metadata (NemoWindow *window,
16891695
return;
16901696
}
16911697

1698+
/* Get the default from GSettings - this is used when directory has no saved metadata */
1699+
default_show_preview = g_settings_get_boolean (nemo_preferences,
1700+
NEMO_PREFERENCES_SHOW_PREVIEW_PANE);
1701+
1702+
/* Get the preview pane preference: uses directory metadata if saved,
1703+
* otherwise falls back to the GSettings default */
16921704
show_preview = nemo_file_get_boolean_metadata (directory_file,
16931705
NEMO_METADATA_KEY_WINDOW_SHOW_PREVIEW_PANE,
1694-
FALSE);
1706+
default_show_preview);
16951707

1696-
/* Apply the saved state */
1708+
/* Apply the saved state (don't write metadata - this is automatic sync, not user action) */
16971709
if (show_preview && !window->details->show_preview_pane) {
1698-
nemo_window_preview_pane_on (window);
1710+
nemo_window_preview_pane_on_internal (window, FALSE);
16991711
} else if (!show_preview && window->details->show_preview_pane) {
17001712
/* Only close preview pane if no other slot wants it */
17011713
if (!any_other_slot_wants_preview_pane (window, slot)) {
1702-
nemo_window_preview_pane_off (window);
1714+
nemo_window_preview_pane_off_internal (window, FALSE);
17031715
}
17041716
}
17051717
}
@@ -2546,8 +2558,9 @@ nemo_window_split_view_showing (NemoWindow *window)
25462558
return g_list_length (NEMO_WINDOW (window)->details->panes) > 1;
25472559
}
25482560

2549-
void
2550-
nemo_window_preview_pane_on (NemoWindow *window)
2561+
static void
2562+
nemo_window_preview_pane_on_internal (NemoWindow *window,
2563+
gboolean write_metadata)
25512564
{
25522565
NemoWindowSlot *slot;
25532566
GList *selection;
@@ -2602,8 +2615,8 @@ nemo_window_preview_pane_on (NemoWindow *window)
26022615
window->details->show_preview_pane = TRUE;
26032616
// nemo_window_update_show_hide_ui_elements (window);
26042617

2605-
/* Save preview pane state to directory metadata */
2606-
if (slot != NULL && slot->content_view != NULL) {
2618+
/* Save preview pane state to directory metadata (only if explicitly requested) */
2619+
if (write_metadata && slot != NULL && slot->content_view != NULL) {
26072620
NemoFile *directory_file;
26082621

26092622
directory_file = nemo_view_get_directory_as_file (slot->content_view);
@@ -2620,7 +2633,15 @@ nemo_window_preview_pane_on (NemoWindow *window)
26202633
}
26212634

26222635
void
2623-
nemo_window_preview_pane_off (NemoWindow *window)
2636+
nemo_window_preview_pane_on (NemoWindow *window)
2637+
{
2638+
/* User-triggered action: write metadata to remember this choice */
2639+
nemo_window_preview_pane_on_internal (window, TRUE);
2640+
}
2641+
2642+
static void
2643+
nemo_window_preview_pane_off_internal (NemoWindow *window,
2644+
gboolean write_metadata)
26242645
{
26252646
GtkPaned *paned;
26262647
NemoWindowSlot *slot;
@@ -2653,9 +2674,9 @@ nemo_window_preview_pane_off (NemoWindow *window)
26532674

26542675
// nemo_window_update_show_hide_ui_elements (window);
26552676

2656-
/* Save preview pane state to directory metadata */
2677+
/* Save preview pane state to directory metadata (only if explicitly requested) */
26572678
slot = nemo_window_get_active_slot (window);
2658-
if (slot != NULL && slot->content_view != NULL) {
2679+
if (write_metadata && slot != NULL && slot->content_view != NULL) {
26592680
NemoFile *directory_file;
26602681

26612682
directory_file = nemo_view_get_directory_as_file (slot->content_view);
@@ -2671,6 +2692,13 @@ nemo_window_preview_pane_off (NemoWindow *window)
26712692
g_object_notify_by_pspec (G_OBJECT (window), properties[PROP_SHOW_PREVIEW_PANE]);
26722693
}
26732694

2695+
void
2696+
nemo_window_preview_pane_off (NemoWindow *window)
2697+
{
2698+
/* User-triggered action: write metadata to remember this choice */
2699+
nemo_window_preview_pane_off_internal (window, TRUE);
2700+
}
2701+
26742702
gboolean
26752703
nemo_window_preview_pane_showing (NemoWindow *window)
26762704
{

0 commit comments

Comments
 (0)