[gnome-flashback] desktop: add icon size setting
- From: Alberts Muktupāvels <muktupavels src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-flashback] desktop: add icon size setting
- Date: Thu, 31 Oct 2019 20:59:09 +0000 (UTC)
commit ff8f30ffd565b143b5a829735dcf127932ec0cb9
Author: Alberts Muktupāvels <alberts muktupavels gmail com>
Date: Thu Oct 31 02:57:29 2019 +0200
desktop: add icon size setting
data/schemas/Makefile.am | 6 +++
.../org.gnome.gnome-flashback.desktop.gschema.xml | 1 +
...gnome.gnome-flashback.desktop.icons.gschema.xml | 9 ++++
gnome-flashback/libdesktop/Makefile.am | 28 ++++++++++
.../libdesktop/gf-desktop-enum-types.c.in | 41 +++++++++++++++
.../libdesktop/gf-desktop-enum-types.h.in | 21 ++++++++
gnome-flashback/libdesktop/gf-desktop-enums.h | 40 +++++++++++++++
gnome-flashback/libdesktop/gf-icon-view.c | 59 +++++++++++++++++++++-
gnome-flashback/libdesktop/gf-monitor-view.c | 33 +++++++++++-
gnome-flashback/libdesktop/gf-monitor-view.h | 3 +-
po/POTFILES.in | 1 +
11 files changed, 239 insertions(+), 3 deletions(-)
---
diff --git a/data/schemas/Makefile.am b/data/schemas/Makefile.am
index 7e75eba..d1d2fed 100644
--- a/data/schemas/Makefile.am
+++ b/data/schemas/Makefile.am
@@ -3,10 +3,16 @@ NULL =
overridedir = $(gsettingsschemadir)
override_DATA = 00_gnome-flashback.gschema.override
+gsettings_ENUM_NAMESPACE = org.gnome.gnome-flashback.desktop
+gsettings_ENUM_FILES = \
+ $(top_srcdir)/gnome-flashback/libdesktop/gf-desktop-enums.h \
+ $(NULL)
+
gsettings_SCHEMAS = \
org.gnome.gnome-flashback.gschema.xml \
org.gnome.gnome-flashback.desktop.gschema.xml \
org.gnome.gnome-flashback.desktop.background.gschema.xml \
+ org.gnome.gnome-flashback.desktop.icons.gschema.xml \
org.gnome.gnome-flashback.input-sources.gschema.xml \
$(NULL)
diff --git a/data/schemas/org.gnome.gnome-flashback.desktop.gschema.xml
b/data/schemas/org.gnome.gnome-flashback.desktop.gschema.xml
index 4e015fe..57db913 100644
--- a/data/schemas/org.gnome.gnome-flashback.desktop.gschema.xml
+++ b/data/schemas/org.gnome.gnome-flashback.desktop.gschema.xml
@@ -13,5 +13,6 @@
</key>
<child schema="org.gnome.gnome-flashback.desktop.background" name="background" />
+ <child schema="org.gnome.gnome-flashback.desktop.icons" name="icons" />
</schema>
</schemalist>
diff --git a/data/schemas/org.gnome.gnome-flashback.desktop.icons.gschema.xml
b/data/schemas/org.gnome.gnome-flashback.desktop.icons.gschema.xml
new file mode 100644
index 0000000..2fdc942
--- /dev/null
+++ b/data/schemas/org.gnome.gnome-flashback.desktop.icons.gschema.xml
@@ -0,0 +1,9 @@
+<schemalist gettext-domain="gnome-flashback">
+ <schema id="org.gnome.gnome-flashback.desktop.icons" path="/org/gnome/gnome-flashback/desktop/icons/">
+ <key name="icon-size" enum="org.gnome.gnome-flashback.desktop.GfIconSize">
+ <default>"48px"</default>
+ <summary>Icon size</summary>
+ <description>The size of desktop icons.</description>
+ </key>
+ </schema>
+</schemalist>
diff --git a/gnome-flashback/libdesktop/Makefile.am b/gnome-flashback/libdesktop/Makefile.am
index d69ba66..54dc5ab 100644
--- a/gnome-flashback/libdesktop/Makefile.am
+++ b/gnome-flashback/libdesktop/Makefile.am
@@ -18,6 +18,7 @@ libdesktop_la_CFLAGS = \
libdesktop_la_SOURCES = \
gf-background.c \
gf-background.h \
+ gf-desktop-enums.h \
gf-desktop-window.c \
gf-desktop-window.h \
gf-desktop.c \
@@ -26,6 +27,7 @@ libdesktop_la_SOURCES = \
gf-icon-view.h \
gf-monitor-view.c \
gf-monitor-view.h \
+ $(BUILT_SOURCES) \
$(NULL)
libdesktop_la_LDFLAGS = \
@@ -37,4 +39,30 @@ libdesktop_la_LIBADD = \
$(DESKTOP_LIBS) \
$(NULL)
+ENUM_TYPES = \
+ $(srcdir)/gf-desktop-enums.h \
+ $(NULL)
+
+gf-desktop-enum-types.c: gf-desktop-enum-types.c.in gf-desktop-enum-types.h $(ENUM_TYPES)
+ $(AM_V_GEN) $(GLIB_MKENUMS) --template $(srcdir)/gf-desktop-enum-types.c.in $(ENUM_TYPES) > \
+ gf-desktop-enum-types.c.tmp && mv gf-desktop-enum-types.c.tmp gf-desktop-enum-types.c
+
+gf-desktop-enum-types.h: gf-desktop-enum-types.h.in $(ENUM_TYPES)
+ $(AM_V_GEN) $(GLIB_MKENUMS) --template $(srcdir)/gf-desktop-enum-types.h.in $(ENUM_TYPES) > \
+ gf-desktop-enum-types.h.tmp && mv gf-desktop-enum-types.h.tmp gf-desktop-enum-types.h
+
+BUILT_SOURCES = \
+ gf-desktop-enum-types.c \
+ gf-desktop-enum-types.h \
+ $(NULL)
+
+EXTRA_DIST = \
+ gf-desktop-enum-types.c.in \
+ gf-desktop-enum-types.h.in \
+ $(NULL)
+
+CLEANFILES = \
+ $(BUILT_SOURCES) \
+ $(NULL)
+
-include $(top_srcdir)/git.mk
diff --git a/gnome-flashback/libdesktop/gf-desktop-enum-types.c.in
b/gnome-flashback/libdesktop/gf-desktop-enum-types.c.in
new file mode 100644
index 0000000..310eb52
--- /dev/null
+++ b/gnome-flashback/libdesktop/gf-desktop-enum-types.c.in
@@ -0,0 +1,41 @@
+/*** BEGIN file-header ***/
+#include "config.h"
+#include "gf-desktop-enum-types.h"
+/*** END file-header ***/
+
+/*** BEGIN file-production ***/
+#include "@filename@"
+/*** END file-production ***/
+
+/*** BEGIN value-header ***/
+
+GType
+@enum_name@_get_type (void)
+{
+ static volatile gsize g_enum_type_id;
+ static const G@Type@Value values[] =
+ {
+/*** END value-header ***/
+
+/*** BEGIN value-production ***/
+ { @VALUENAME@, "@VALUENAME@", "@valuenick@" },
+/*** END value-production ***/
+
+/*** BEGIN value-tail ***/
+ { 0, NULL, NULL }
+ };
+
+ if (g_once_init_enter (&g_enum_type_id))
+ {
+ const gchar *string;
+ GType id;
+
+ string = g_intern_static_string ("@EnumName@");
+ id = g_@type@_register_static (string, values);
+
+ g_once_init_leave (&g_enum_type_id, id);
+ }
+
+ return g_enum_type_id;
+}
+/*** END value-tail ***/
diff --git a/gnome-flashback/libdesktop/gf-desktop-enum-types.h.in
b/gnome-flashback/libdesktop/gf-desktop-enum-types.h.in
new file mode 100644
index 0000000..8e32d2d
--- /dev/null
+++ b/gnome-flashback/libdesktop/gf-desktop-enum-types.h.in
@@ -0,0 +1,21 @@
+/*** BEGIN file-header ***/
+#ifndef GF_DESKTOP_ENUM_TYPES_H
+#define GF_DESKTOP_ENUM_TYPES_H
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+/*** END file-header ***/
+
+/*** BEGIN value-header ***/
+GType @enum_name@_get_type (void) G_GNUC_CONST;
+#define @ENUMPREFIX@_TYPE_@ENUMSHORT@ (@enum_name@_get_type())
+
+/*** END value-header ***/
+
+/*** BEGIN file-tail ***/
+G_END_DECLS
+
+#endif
+/*** END file-tail ***/
diff --git a/gnome-flashback/libdesktop/gf-desktop-enums.h b/gnome-flashback/libdesktop/gf-desktop-enums.h
new file mode 100644
index 0000000..37ffbc2
--- /dev/null
+++ b/gnome-flashback/libdesktop/gf-desktop-enums.h
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2019 Alberts Muktupāvels
+ *
+ * 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 3 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, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef GF_DESKTOP_ENUMS_H
+#define GF_DESKTOP_ENUMS_H
+
+#include <glib.h>
+
+G_BEGIN_DECLS
+
+typedef enum
+{
+ GF_ICON_SIZE_16PX = 16,
+ GF_ICON_SIZE_22PX = 22,
+ GF_ICON_SIZE_24PX = 24,
+ GF_ICON_SIZE_32PX = 32,
+ GF_ICON_SIZE_48PX = 48,
+ GF_ICON_SIZE_64PX = 64,
+ GF_ICON_SIZE_72PX = 72,
+ GF_ICON_SIZE_96PX = 96,
+ GF_ICON_SIZE_128PX = 128
+} GfIconSize;
+
+G_END_DECLS
+
+#endif
diff --git a/gnome-flashback/libdesktop/gf-icon-view.c b/gnome-flashback/libdesktop/gf-icon-view.c
index c6705f1..ad7a475 100644
--- a/gnome-flashback/libdesktop/gf-icon-view.c
+++ b/gnome-flashback/libdesktop/gf-icon-view.c
@@ -18,12 +18,15 @@
#include "config.h"
#include "gf-icon-view.h"
+#include "gf-desktop-enum-types.h"
#include "gf-monitor-view.h"
struct _GfIconView
{
GtkEventBox parent;
+ GSettings *settings;
+
GtkWidget *fixed;
};
@@ -71,19 +74,54 @@ workarea_cb (GdkMonitor *monitor,
gtk_fixed_move (GTK_FIXED (self->fixed), view, workarea.x, workarea.y);
}
+static gboolean
+enum_to_uint (GValue *value,
+ GVariant *variant,
+ gpointer user_data)
+{
+ const char *nick;
+ GEnumClass *enum_class;
+ GEnumValue *enum_value;
+
+ nick = g_variant_get_string (variant, NULL);
+
+ enum_class = g_type_class_ref (GF_TYPE_ICON_SIZE);
+ enum_value = g_enum_get_value_by_nick (enum_class, nick);
+ g_type_class_unref (enum_class);
+
+ if (enum_value != NULL)
+ {
+ g_value_set_uint (value, enum_value->value);
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
static void
create_monitor_view (GfIconView *self,
GdkMonitor *monitor)
{
+ guint icon_size;
GdkRectangle workarea;
GtkWidget *view;
+ icon_size = g_settings_get_enum (self->settings, "icon-size");
+
gdk_monitor_get_workarea (monitor, &workarea);
- view = gf_monitor_view_new (monitor);
+ view = gf_monitor_view_new (monitor, icon_size);
gtk_fixed_put (GTK_FIXED (self->fixed), view, workarea.x, workarea.y);
gtk_widget_show (view);
+ g_settings_bind_with_mapping (self->settings, "icon-size",
+ view, "icon-size",
+ G_SETTINGS_BIND_GET,
+ enum_to_uint,
+ NULL,
+ self,
+ NULL);
+
g_signal_connect_object (monitor, "notify::workarea",
G_CALLBACK (workarea_cb),
self, 0);
@@ -111,9 +149,26 @@ monitor_removed_cb (GdkDisplay *display,
gtk_widget_destroy (view);
}
+static void
+gf_icon_view_dispose (GObject *object)
+{
+ GfIconView *self;
+
+ self = GF_ICON_VIEW (object);
+
+ g_clear_object (&self->settings);
+
+ G_OBJECT_CLASS (gf_icon_view_parent_class)->dispose (object);
+}
+
static void
gf_icon_view_class_init (GfIconViewClass *self_class)
{
+ GObjectClass *object_class;
+
+ object_class = G_OBJECT_CLASS (self_class);
+
+ object_class->dispose = gf_icon_view_dispose;
}
static void
@@ -123,6 +178,8 @@ gf_icon_view_init (GfIconView *self)
int n_monitors;
int i;
+ self->settings = g_settings_new ("org.gnome.gnome-flashback.desktop.icons");
+
self->fixed = gtk_fixed_new ();
gtk_container_add (GTK_CONTAINER (self), self->fixed);
gtk_widget_show (self->fixed);
diff --git a/gnome-flashback/libdesktop/gf-monitor-view.c b/gnome-flashback/libdesktop/gf-monitor-view.c
index b1ceb9e..23c1816 100644
--- a/gnome-flashback/libdesktop/gf-monitor-view.c
+++ b/gnome-flashback/libdesktop/gf-monitor-view.c
@@ -24,6 +24,8 @@ struct _GfMonitorView
GdkMonitor *monitor;
+ guint icon_size;
+
int width;
int height;
};
@@ -34,6 +36,8 @@ enum
PROP_MONITOR,
+ PROP_ICON_SIZE,
+
LAST_PROP
};
@@ -41,6 +45,18 @@ static GParamSpec *view_properties[LAST_PROP] = { NULL };
G_DEFINE_TYPE (GfMonitorView, gf_monitor_view, GTK_TYPE_FIXED)
+static void
+set_icon_size (GfMonitorView *self,
+ guint icon_size)
+{
+ if (self->icon_size == icon_size)
+ return;
+
+ self->icon_size = icon_size;
+
+ gtk_widget_queue_resize (GTK_WIDGET (self));
+}
+
static void
workarea_cb (GdkMonitor *monitor,
GParamSpec *pspec,
@@ -101,6 +117,10 @@ gf_monitor_view_set_property (GObject *object,
self->monitor = g_value_dup_object (value);
break;
+ case PROP_ICON_SIZE:
+ set_icon_size (self, g_value_get_uint (value));
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
@@ -151,6 +171,15 @@ install_properties (GObjectClass *object_class)
G_PARAM_WRITABLE |
G_PARAM_STATIC_STRINGS);
+ view_properties[PROP_ICON_SIZE] =
+ g_param_spec_uint ("icon-size",
+ "icon-size",
+ "icon-size",
+ 16, 128, 48,
+ G_PARAM_CONSTRUCT |
+ G_PARAM_WRITABLE |
+ G_PARAM_STATIC_STRINGS);
+
g_object_class_install_properties (object_class, LAST_PROP, view_properties);
}
@@ -180,10 +209,12 @@ gf_monitor_view_init (GfMonitorView *self)
}
GtkWidget *
-gf_monitor_view_new (GdkMonitor *monitor)
+gf_monitor_view_new (GdkMonitor *monitor,
+ guint icon_size)
{
return g_object_new (GF_TYPE_MONITOR_VIEW,
"monitor", monitor,
+ "icon-size", icon_size,
NULL);
}
diff --git a/gnome-flashback/libdesktop/gf-monitor-view.h b/gnome-flashback/libdesktop/gf-monitor-view.h
index 52794ef..1f654ee 100644
--- a/gnome-flashback/libdesktop/gf-monitor-view.h
+++ b/gnome-flashback/libdesktop/gf-monitor-view.h
@@ -25,7 +25,8 @@ G_BEGIN_DECLS
#define GF_TYPE_MONITOR_VIEW (gf_monitor_view_get_type ())
G_DECLARE_FINAL_TYPE (GfMonitorView, gf_monitor_view, GF, MONITOR_VIEW, GtkFixed)
-GtkWidget *gf_monitor_view_new (GdkMonitor *monitor);
+GtkWidget *gf_monitor_view_new (GdkMonitor *monitor,
+ guint icon_size);
GdkMonitor *gf_monitor_view_get_monitor (GfMonitorView *self);
diff --git a/po/POTFILES.in b/po/POTFILES.in
index a1575ec..3b2d9a8 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -9,6 +9,7 @@ data/directories/X-GNOME-Flashback-Settings-System.directory.desktop.in
data/schemas/org.gnome.gnome-flashback.gschema.xml
data/schemas/org.gnome.gnome-flashback.desktop.gschema.xml
data/schemas/org.gnome.gnome-flashback.desktop.background.gschema.xml
+data/schemas/org.gnome.gnome-flashback.desktop.icons.gschema.xml
data/schemas/org.gnome.gnome-flashback.input-sources.gschema.xml
data/ui/gf-confirm-display-change-dialog.ui
data/xsessions/gnome-flashback-compiz.desktop.in.in
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]