Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 42 additions & 0 deletions gresources/nemo-desktop-overlay.glade
Original file line number Diff line number Diff line change
Expand Up @@ -321,6 +321,48 @@
</child>
</object>
</child>
<child>
<object class="GtkListBoxRow" id="listboxrow_keep_aligned">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="activatable">False</property>
<property name="selectable">False</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="border_width">5</property>
<property name="spacing">20</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Keep aligned to grid</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="padding">6</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkSwitch" id="keep_aligned_switch">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="valign">center</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack_type">end</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
Expand Down
1 change: 1 addition & 0 deletions libnemo-private/nemo-global-preferences.h
Original file line number Diff line number Diff line change
Expand Up @@ -239,6 +239,7 @@ typedef enum
#define NEMO_PREFERENCES_SHOW_ORPHANED_DESKTOP_ICONS "show-orphaned-desktop-icons"
#define NEMO_PREFERENCES_SHOW_DESKTOP "show-desktop-icons" /* DEPRECATED */
#define NEMO_PREFERENCES_USE_DESKTOP_GRID "use-desktop-grid"
#define NEMO_PREFERENCES_DESKTOP_KEEP_ALIGNED "keep-aligned"
#define NEMO_PREFERENCES_DESKTOP_HORIZONTAL_GRID_ADJUST "horizontal-grid-adjust"
#define NEMO_PREFERENCES_DESKTOP_VERTICAL_GRID_ADJUST "vertical-grid-adjust"

Expand Down
5 changes: 5 additions & 0 deletions libnemo-private/org.nemo.gschema.xml
Original file line number Diff line number Diff line change
Expand Up @@ -576,6 +576,11 @@
<summary>Which desktop view type to use</summary>
<description>If true, the new desktop grid view will be used by nemo-desktop, otherwise the legacy view will be used.</description>
</key>
<key name="keep-aligned" type="b">
<default>true</default>
<summary>Snap desktop icons to the grid</summary>
<description>If true, icons are snapped to the desktop grid, otherwise icons are freely placeable.</description>
</key>
<key name="vertical-grid-adjust" type="d">
<default>1.0</default>
<summary>Vertical desktop grid adjustment</summary>
Expand Down
31 changes: 30 additions & 1 deletion src/nemo-desktop-icon-grid-view.c
Original file line number Diff line number Diff line change
Expand Up @@ -359,6 +359,29 @@ nemo_desktop_icon_grid_view_dispose (GObject *object)
G_OBJECT_CLASS (nemo_desktop_icon_grid_view_parent_class)->dispose (object);
}

static void
apply_keep_aligned (NemoDesktopIconGridView *view)
{
gboolean aligned = g_settings_get_boolean (nemo_desktop_preferences,
NEMO_PREFERENCES_DESKTOP_KEEP_ALIGNED);
nemo_icon_container_set_keep_aligned (get_icon_container (view), aligned);
}

static void
nemo_desktop_icon_grid_view_begin_loading (NemoView *view)
{
NEMO_VIEW_CLASS (nemo_desktop_icon_grid_view_parent_class)->begin_loading (view);
apply_keep_aligned (NEMO_DESKTOP_ICON_GRID_VIEW (view));
}

static void
desktop_keep_aligned_changed (GSettings *settings,
const char *key,
gpointer user_data)
{
apply_keep_aligned (NEMO_DESKTOP_ICON_GRID_VIEW (user_data));
}

static void
nemo_desktop_icon_grid_view_class_init (NemoDesktopIconGridViewClass *class)
{
Expand All @@ -373,6 +396,7 @@ nemo_desktop_icon_grid_view_class_init (NemoDesktopIconGridViewClass *class)

vclass->merge_menus = real_merge_menus;
vclass->update_menus = real_update_menus;
vclass->begin_loading = nemo_desktop_icon_grid_view_begin_loading;
vclass->get_view_id = real_get_id;
vclass->add_file = nemo_desktop_icon_grid_view_add_file;
vclass->file_changed = nemo_desktop_icon_grid_view_file_changed;
Expand Down Expand Up @@ -527,7 +551,12 @@ nemo_desktop_icon_grid_view_constructed (GObject *object)

nemo_icon_container_set_is_fixed_size (icon_container, TRUE);
nemo_icon_container_set_is_desktop (icon_container, TRUE);
nemo_icon_container_set_keep_aligned (icon_container, TRUE);
apply_keep_aligned (desktop_icon_grid_view);
g_signal_connect_object (nemo_desktop_preferences,
"changed::" NEMO_PREFERENCES_DESKTOP_KEEP_ALIGNED,
G_CALLBACK (desktop_keep_aligned_changed),
desktop_icon_grid_view,
0);

NEMO_ICON_VIEW_GRID_CONTAINER (icon_container)->horizontal = FALSE;

Expand Down
40 changes: 40 additions & 0 deletions src/nemo-desktop-overlay.c
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
#include "nemo-desktop-manager.h"

#include <libnemo-extension/nemo-desktop-preferences.h>
#include <libnemo-private/nemo-global-preferences.h>

typedef struct
{
Expand Down Expand Up @@ -102,6 +103,21 @@ show_view_page (NemoDesktopOverlay *overlay)
gtk_stack_set_visible_child_name (priv->stack, "view");
}

static void
keep_aligned_apply_visual (GtkSwitch *keep,
GtkSwitch *arrange)
{
gtk_widget_set_sensitive (GTK_WIDGET (keep), !gtk_switch_get_active (arrange));
}

static void
auto_arrange_exclusive_notify (GObject *object,
GParamSpec *pspec,
gpointer user_data)
{
keep_aligned_apply_visual (GTK_SWITCH (user_data), GTK_SWITCH (object));
}

static void
sync_controls (NemoDesktopOverlay *overlay,
gboolean same_monitor)
Expand Down Expand Up @@ -228,6 +244,30 @@ sync_controls (NemoDesktopOverlay *overlay,
gtk_activatable_set_related_action (GTK_ACTIVATABLE (gtk_builder_get_object (priv->builder, "auto_arrange_switch")),
action);

{
GtkWidget *keep = GTK_WIDGET (gtk_builder_get_object (priv->builder, "keep_aligned_switch"));
GtkWidget *arrange = GTK_WIDGET (gtk_builder_get_object (priv->builder, "auto_arrange_switch"));
GtkWidget *row = GTK_WIDGET (gtk_builder_get_object (priv->builder, "listboxrow_keep_aligned"));

/* Skip for legacy desktop */
gtk_widget_set_visible (row,
g_settings_get_boolean (nemo_desktop_preferences,
NEMO_PREFERENCES_USE_DESKTOP_GRID));

if (!GPOINTER_TO_INT (g_object_get_data (G_OBJECT (keep), "keep-aligned-bound"))) {
g_settings_bind (nemo_desktop_preferences,
NEMO_PREFERENCES_DESKTOP_KEEP_ALIGNED,
keep, "active",
G_SETTINGS_BIND_DEFAULT);
g_object_set_data (G_OBJECT (keep), "keep-aligned-bound", GINT_TO_POINTER (TRUE));
g_signal_connect (arrange, "notify::active",
G_CALLBACK (auto_arrange_exclusive_notify),
keep);
}

keep_aligned_apply_visual (GTK_SWITCH (keep), GTK_SWITCH (arrange));
}

action = gtk_action_group_get_action (priv->action_group, "Desktop Reverse Sort");
gtk_activatable_set_related_action (GTK_ACTIVATABLE (gtk_builder_get_object (priv->builder, "reverse_sort_switch")),
action);
Expand Down