[gnome-applets/wip/muktupavels/sticky-notes-prefs] sticky-notes: use template for applet preferences
- From: Alberts Muktupāvels <muktupavels src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-applets/wip/muktupavels/sticky-notes-prefs] sticky-notes: use template for applet preferences
- Date: Mon, 6 Apr 2020 20:14:25 +0000 (UTC)
commit c31d601e7bb985cef859c22c79f8b574400f8ee6
Author: Alberts Muktupāvels <alberts muktupavels gmail com>
Date: Mon Apr 6 23:12:10 2020 +0300
sticky-notes: use template for applet preferences
gnome-applets/sticky-notes/Makefile.am | 2 +
.../sticky-notes/sticky-notes-applet-callbacks.c | 83 +----
.../sticky-notes/sticky-notes-applet-callbacks.h | 5 -
gnome-applets/sticky-notes/sticky-notes-applet.c | 255 ++-----------
gnome-applets/sticky-notes/sticky-notes-applet.h | 13 -
.../sticky-notes/sticky-notes-preferences.c | 415 +++++++++++++++++++++
.../sticky-notes/sticky-notes-preferences.h | 33 ++
.../sticky-notes/ui/sticky-notes-preferences.ui | 30 +-
8 files changed, 490 insertions(+), 346 deletions(-)
---
diff --git a/gnome-applets/sticky-notes/Makefile.am b/gnome-applets/sticky-notes/Makefile.am
index 60bbb2110..acf540ad6 100644
--- a/gnome-applets/sticky-notes/Makefile.am
+++ b/gnome-applets/sticky-notes/Makefile.am
@@ -26,6 +26,8 @@ libsticky_notes_applet_la_SOURCES = \
sticky-notes-applet-callbacks.h \
sticky-notes-callbacks.c \
sticky-notes-callbacks.h \
+ sticky-notes-preferences.c \
+ sticky-notes-preferences.h \
util.c \
util.h \
$(NULL)
diff --git a/gnome-applets/sticky-notes/sticky-notes-applet-callbacks.c
b/gnome-applets/sticky-notes/sticky-notes-applet-callbacks.c
index 91bbd092f..e5af82559 100644
--- a/gnome-applets/sticky-notes/sticky-notes-applet-callbacks.c
+++ b/gnome-applets/sticky-notes/sticky-notes-applet-callbacks.c
@@ -344,77 +344,6 @@ void menu_toggle_lock_state(GSimpleAction *action, GVariant *value, gpointer use
g_settings_set_boolean (stickynotes->settings, KEY_LOCKED, locked);
}
-/* Menu Callback : Configure preferences */
-void menu_preferences_cb(GSimpleAction *action, GVariant *parameter, gpointer user_data)
-{
- StickyNotesApplet *applet = (StickyNotesApplet *) user_data;
- stickynotes_applet_update_prefs();
- gtk_window_set_screen(GTK_WINDOW(stickynotes->w_prefs), gtk_widget_get_screen(GTK_WIDGET (applet)));
- gtk_window_present(GTK_WINDOW(stickynotes->w_prefs));
-}
-
-/* Preferences Callback : Save. */
-void
-preferences_save_cb (gpointer data)
-{
- gint width = gtk_adjustment_get_value (stickynotes->w_prefs_width);
- gint height = gtk_adjustment_get_value (stickynotes->w_prefs_height);
- gboolean sys_color = gtk_toggle_button_get_active (
- GTK_TOGGLE_BUTTON (stickynotes->w_prefs_sys_color));
- gboolean sys_font = gtk_toggle_button_get_active (
- GTK_TOGGLE_BUTTON (stickynotes->w_prefs_sys_font));
- gboolean sticky = gtk_toggle_button_get_active (
- GTK_TOGGLE_BUTTON (stickynotes->w_prefs_sticky));
- gboolean force_default = gtk_toggle_button_get_active (
- GTK_TOGGLE_BUTTON (stickynotes->w_prefs_force));
- gboolean desktop_hide = gtk_toggle_button_get_active (
- GTK_TOGGLE_BUTTON (stickynotes->w_prefs_desktop));
-
- if (g_settings_is_writable (stickynotes->settings, KEY_DEFAULT_WIDTH))
- g_settings_set_int (stickynotes->settings, KEY_DEFAULT_WIDTH, width);
- if (g_settings_is_writable (stickynotes->settings, KEY_DEFAULT_HEIGHT))
- g_settings_set_int (stickynotes->settings, KEY_DEFAULT_HEIGHT, height);
- if (g_settings_is_writable (stickynotes->settings, KEY_USE_SYSTEM_COLOR))
- g_settings_set_boolean (stickynotes->settings, KEY_USE_SYSTEM_COLOR, sys_color);
- if (g_settings_is_writable (stickynotes->settings, KEY_USE_SYSTEM_FONT))
- g_settings_set_boolean (stickynotes->settings, KEY_USE_SYSTEM_FONT, sys_font);
- if (g_settings_is_writable (stickynotes->settings, KEY_STICKY))
- g_settings_set_boolean (stickynotes->settings, KEY_STICKY, sticky);
- if (g_settings_is_writable (stickynotes->settings, KEY_FORCE_DEFAULT))
- g_settings_set_boolean (stickynotes->settings, KEY_FORCE_DEFAULT, force_default);
- if (g_settings_is_writable (stickynotes->settings, KEY_DESKTOP_HIDE))
- g_settings_set_boolean (stickynotes->settings, KEY_DESKTOP_HIDE, desktop_hide);
-}
-
-/* Preferences Callback : Change color. */
-void
-preferences_color_cb (GtkWidget *button, gpointer data)
-{
- GdkRGBA color, font_color;
- char *color_str, *font_color_str;
-
- gtk_color_chooser_get_rgba (GTK_COLOR_CHOOSER (stickynotes->w_prefs_color), &color);
- gtk_color_chooser_get_rgba (GTK_COLOR_CHOOSER (stickynotes->w_prefs_font_color), &font_color);
-
- color_str = gdk_rgba_to_string (&color);
- font_color_str = gdk_rgba_to_string (&font_color);
-
- g_settings_set_string (stickynotes->settings, KEY_DEFAULT_COLOR, color_str);
- g_settings_set_string (stickynotes->settings, KEY_DEFAULT_FONT_COLOR, font_color_str);
-
- g_free (color_str);
- g_free (font_color_str);
-}
-
-/* Preferences Callback : Change font. */
-void preferences_font_cb (GtkWidget *button, gpointer data)
-{
- const char *font_str;
-
- font_str = gtk_font_button_get_font_name (GTK_FONT_BUTTON (button));
- g_settings_set_string (stickynotes->settings, KEY_DEFAULT_FONT, font_str);
-}
-
/* Preferences Callback : Apply to existing notes. */
void preferences_apply_cb (GSettings *settings,
const gchar *key,
@@ -451,6 +380,7 @@ void preferences_apply_cb (GSettings *settings,
}
else if (!strcmp (key, KEY_USE_SYSTEM_COLOR) ||
+ !strcmp (key, KEY_DEFAULT_FONT_COLOR) ||
!strcmp (key, KEY_DEFAULT_COLOR))
{
for (l = stickynotes->notes; l; l = l->next)
@@ -484,7 +414,6 @@ void preferences_apply_cb (GSettings *settings,
}
}
- stickynotes_applet_update_prefs();
stickynotes_applet_update_menus();
}
@@ -509,13 +438,5 @@ void preferences_response_cb(GtkWidget *dialog, gint response, gpointer data)
}
else if (response == GTK_RESPONSE_CLOSE)
- gtk_widget_hide(GTK_WIDGET(dialog));
-}
-
-/* Preferences Callback : Delete */
-gboolean preferences_delete_cb(GtkWidget *widget, GdkEvent *event, gpointer data)
-{
- gtk_widget_hide(widget);
-
- return TRUE;
+ gtk_widget_destroy(GTK_WIDGET(dialog));
}
diff --git a/gnome-applets/sticky-notes/sticky-notes-applet-callbacks.h
b/gnome-applets/sticky-notes/sticky-notes-applet-callbacks.h
index 46ffc4b53..e033c9633 100644
--- a/gnome-applets/sticky-notes/sticky-notes-applet-callbacks.h
+++ b/gnome-applets/sticky-notes/sticky-notes-applet-callbacks.h
@@ -36,14 +36,9 @@ void menu_hide_notes_cb(GSimpleAction *action, GVariant *parameter, gpointer use
void menu_destroy_all_cb(GSimpleAction *action, GVariant *parameter, gpointer user_data);
void menu_toggle_lock_cb(GSimpleAction *action, GVariant *parameter, gpointer user_data);
void menu_toggle_lock_state(GSimpleAction *action, GVariant *value, gpointer user_data);
-void menu_preferences_cb(GSimpleAction *action, GVariant *parameter, gpointer user_data);
/* Callbacks for sticky notes preferences dialog */
-void preferences_save_cb(gpointer data);
-void preferences_color_cb (GtkWidget *button, gpointer data);
-void preferences_font_cb (GtkWidget *button, gpointer data);
void preferences_apply_cb(GSettings *settings, const gchar *key, gpointer user_data);
void preferences_response_cb(GtkWidget *dialog, gint response, gpointer data);
-gboolean preferences_delete_cb(GtkWidget *widget, GdkEvent *event, gpointer data);
#endif /* __STICKYNOTES_APPLET_CALLBACKS_H__ */
diff --git a/gnome-applets/sticky-notes/sticky-notes-applet.c
b/gnome-applets/sticky-notes/sticky-notes-applet.c
index df97593fd..a76f07485 100644
--- a/gnome-applets/sticky-notes/sticky-notes-applet.c
+++ b/gnome-applets/sticky-notes/sticky-notes-applet.c
@@ -22,6 +22,7 @@
#include "sticky-notes-applet-callbacks.h"
#include "sticky-notes.h"
+#include "sticky-notes-preferences.h"
#include "gsettings.h"
#include <glib/gi18n-lib.h>
@@ -32,10 +33,31 @@ G_DEFINE_TYPE (StickyNotesApplet, sticky_notes_applet, GP_TYPE_APPLET)
StickyNotes *stickynotes = NULL;
static void sticky_notes_init (GpApplet *applet);
-static void sticky_notes_init_prefs (void);
-
static void sticky_notes_applet_new (StickyNotesApplet *self);
+static void
+menu_preferences_cb (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer user_data)
+{
+ if (stickynotes->w_prefs != NULL)
+ {
+ gtk_window_present (GTK_WINDOW (stickynotes->w_prefs));
+ return;
+ }
+
+ stickynotes->w_prefs = sticky_notes_preferences_new (stickynotes->settings);
+ g_object_add_weak_pointer (G_OBJECT (stickynotes->w_prefs),
+ (gpointer *) &stickynotes->w_prefs);
+
+ g_signal_connect (stickynotes->w_prefs,
+ "response",
+ G_CALLBACK (preferences_response_cb),
+ NULL);
+
+ gtk_window_present (GTK_WINDOW (stickynotes->w_prefs));
+}
+
static void
menu_help_cb (GSimpleAction *action,
GVariant *parameter,
@@ -168,8 +190,6 @@ sticky_notes_init (GpApplet *applet)
stickynotes->icon_normal, 30);
stickynotes->visible = TRUE;
- sticky_notes_init_prefs ();
-
g_signal_connect (stickynotes->settings, "changed",
G_CALLBACK (preferences_apply_cb), NULL);
@@ -182,138 +202,6 @@ sticky_notes_init (GpApplet *applet)
install_check_click_on_desktop ();
}
-static void
-sticky_notes_init_prefs (void)
-{
- stickynotes->builder = gtk_builder_new ();
-
- gtk_builder_add_from_resource (stickynotes->builder,
- GRESOURCE_PREFIX "/ui/sticky-notes-preferences.ui",
- NULL);
-
- stickynotes->w_prefs = GTK_WIDGET (gtk_builder_get_object (stickynotes->builder,
- "preferences_dialog"));
-
- stickynotes->w_prefs_width = gtk_spin_button_get_adjustment (
- GTK_SPIN_BUTTON (gtk_builder_get_object (
- stickynotes->builder, "width_spin")));
- stickynotes->w_prefs_height = gtk_spin_button_get_adjustment (
- GTK_SPIN_BUTTON (gtk_builder_get_object (
- stickynotes->builder, "height_spin")));
- stickynotes->w_prefs_color = GTK_WIDGET (gtk_builder_get_object (stickynotes->builder,
- "default_color"));
- stickynotes->w_prefs_font_color = GTK_WIDGET (gtk_builder_get_object (stickynotes->builder,
- "prefs_font_color"));
- stickynotes->w_prefs_sys_color = GTK_WIDGET (>K_CHECK_BUTTON (
- gtk_builder_get_object (stickynotes->builder,
- "sys_color_check"))->toggle_button);
- stickynotes->w_prefs_font = GTK_WIDGET (gtk_builder_get_object (stickynotes->builder,
- "default_font"));
- stickynotes->w_prefs_sys_font = GTK_WIDGET (>K_CHECK_BUTTON (
- gtk_builder_get_object (stickynotes->builder,
- "sys_font_check"))->toggle_button);
- stickynotes->w_prefs_sticky = GTK_WIDGET (>K_CHECK_BUTTON (
- gtk_builder_get_object (stickynotes->builder,
- "sticky_check"))->toggle_button);
- stickynotes->w_prefs_force = GTK_WIDGET (>K_CHECK_BUTTON (
- gtk_builder_get_object (stickynotes->builder,
- "force_default_check"))->toggle_button);
- stickynotes->w_prefs_desktop = GTK_WIDGET (>K_CHECK_BUTTON (
- gtk_builder_get_object (stickynotes->builder,
- "desktop_hide_check"))->toggle_button);
-
- g_signal_connect (G_OBJECT (stickynotes->w_prefs), "response",
- G_CALLBACK (preferences_response_cb), NULL);
- g_signal_connect (G_OBJECT (stickynotes->w_prefs), "delete-event",
- G_CALLBACK (preferences_delete_cb), NULL);
- g_signal_connect_swapped (G_OBJECT (stickynotes->w_prefs_width),
- "value-changed",
- G_CALLBACK (preferences_save_cb), NULL);
- g_signal_connect_swapped (G_OBJECT (stickynotes->w_prefs_height),
- "value-changed",
- G_CALLBACK (preferences_save_cb), NULL);
- g_signal_connect_swapped (G_OBJECT (stickynotes->w_prefs_sys_color),
- "toggled",
- G_CALLBACK (preferences_save_cb), NULL);
- g_signal_connect_swapped (G_OBJECT(stickynotes->w_prefs_sys_font),
- "toggled", G_CALLBACK (preferences_save_cb), NULL);
- g_signal_connect (G_OBJECT (stickynotes->w_prefs_color),
- "color-set", G_CALLBACK (preferences_color_cb), NULL);
- g_signal_connect (G_OBJECT (stickynotes->w_prefs_font_color),
- "color-set", G_CALLBACK (preferences_color_cb), NULL);
- g_signal_connect (G_OBJECT (stickynotes->w_prefs_font),
- "font-set", G_CALLBACK (preferences_font_cb), NULL);
- g_signal_connect_swapped (G_OBJECT (stickynotes->w_prefs_sticky),
- "toggled", G_CALLBACK (preferences_save_cb), NULL);
- g_signal_connect_swapped (G_OBJECT (stickynotes->w_prefs_force),
- "toggled", G_CALLBACK (preferences_save_cb), NULL);
- g_signal_connect_swapped (G_OBJECT (stickynotes->w_prefs_desktop),
- "toggled", G_CALLBACK (preferences_save_cb), NULL);
-
- {
- GtkSizeGroup *group = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
-
- gtk_size_group_add_widget(group, GTK_WIDGET (gtk_builder_get_object (stickynotes->builder,
"width_label")));
- gtk_size_group_add_widget(group, GTK_WIDGET (gtk_builder_get_object (stickynotes->builder,
"height_label")));
- gtk_size_group_add_widget(group, GTK_WIDGET (gtk_builder_get_object (stickynotes->builder,
"prefs_color_label")));
-
- g_object_unref(group);
- }
-
- if (!g_settings_is_writable (stickynotes->settings, KEY_DEFAULT_WIDTH))
- {
- gtk_widget_set_sensitive (GTK_WIDGET (gtk_builder_get_object (
- stickynotes->builder, "width_label")),
- FALSE);
- gtk_widget_set_sensitive (GTK_WIDGET (gtk_builder_get_object (
- stickynotes->builder, "width_spin")),
- FALSE);
- }
- if (!g_settings_is_writable (stickynotes->settings, KEY_DEFAULT_HEIGHT))
- {
- gtk_widget_set_sensitive (GTK_WIDGET (gtk_builder_get_object (
- stickynotes->builder, "height_label")),
- FALSE);
- gtk_widget_set_sensitive (GTK_WIDGET (gtk_builder_get_object (
- stickynotes->builder, "height_spin")),
- FALSE);
- }
- if (!g_settings_is_writable (stickynotes->settings, KEY_DEFAULT_COLOR))
- {
- gtk_widget_set_sensitive (GTK_WIDGET (gtk_builder_get_object (
- stickynotes->builder, "prefs_color_label")),
- FALSE);
- gtk_widget_set_sensitive (stickynotes->w_prefs_color, FALSE);
- }
- if (!g_settings_is_writable (stickynotes->settings, KEY_DEFAULT_FONT_COLOR))
- {
- gtk_widget_set_sensitive (GTK_WIDGET (gtk_builder_get_object (
- stickynotes->builder, "prefs_font_color_label")),
- FALSE);
- gtk_widget_set_sensitive (stickynotes->w_prefs_font_color,
- FALSE);
- }
- if (!g_settings_is_writable (stickynotes->settings, KEY_USE_SYSTEM_COLOR))
- gtk_widget_set_sensitive (stickynotes->w_prefs_sys_color,
- FALSE);
- if (!g_settings_is_writable (stickynotes->settings, KEY_DEFAULT_FONT))
- {
- gtk_widget_set_sensitive (GTK_WIDGET (gtk_builder_get_object (
- stickynotes->builder, "prefs_font_label")),
- FALSE);
- gtk_widget_set_sensitive (stickynotes->w_prefs_font, FALSE);
- }
- if (!g_settings_is_writable (stickynotes->settings, KEY_USE_SYSTEM_FONT))
- gtk_widget_set_sensitive (stickynotes->w_prefs_sys_font,
- FALSE);
- if (!g_settings_is_writable (stickynotes->settings, KEY_STICKY))
- gtk_widget_set_sensitive (stickynotes->w_prefs_sticky, FALSE);
- if (!g_settings_is_writable (stickynotes->settings, KEY_FORCE_DEFAULT))
- gtk_widget_set_sensitive (stickynotes->w_prefs_force, FALSE);
-
- stickynotes_applet_update_prefs();
-}
-
/* Create a Sticky Notes applet */
static void
sticky_notes_applet_new (StickyNotesApplet *applet)
@@ -403,101 +291,6 @@ void stickynotes_applet_update_icon(StickyNotesApplet *applet)
g_object_unref(pixbuf2);
}
-void
-stickynotes_applet_update_prefs (void)
-{
- gint width, height;
- gboolean sys_color, sys_font, sticky, force_default, desktop_hide;
- char *font_str;
- char *color_str, *font_color_str;
- GdkRGBA color, font_color;
-
- width = g_settings_get_int (stickynotes->settings, KEY_DEFAULT_WIDTH);
- width = MAX (width, 1);
-
- height = g_settings_get_int (stickynotes->settings, KEY_DEFAULT_HEIGHT);
- height = MAX (height, 1);
-
- sys_color = g_settings_get_boolean (stickynotes->settings, KEY_USE_SYSTEM_COLOR);
- sys_font = g_settings_get_boolean (stickynotes->settings, KEY_USE_SYSTEM_FONT);
- sticky = g_settings_get_boolean (stickynotes->settings, KEY_STICKY);
- force_default = g_settings_get_boolean (stickynotes->settings, KEY_FORCE_DEFAULT);
- desktop_hide = g_settings_get_boolean (stickynotes->settings, KEY_DESKTOP_HIDE);
-
- font_str = g_settings_get_string (stickynotes->settings, KEY_DEFAULT_FONT);
- if (IS_STRING_EMPTY (font_str)) {
- g_free (font_str);
- font_str = g_strdup ("Sans 10");
- }
-
- color_str = g_settings_get_string (stickynotes->settings, KEY_DEFAULT_COLOR);
- if (IS_STRING_EMPTY (color_str)) {
- g_free (color_str);
- color_str = g_strdup ("#ECF833");
- }
-
- font_color_str = g_settings_get_string (stickynotes->settings, KEY_DEFAULT_FONT_COLOR);
- if (IS_STRING_EMPTY (font_color_str)) {
- g_free (font_color_str);
- font_color_str = g_strdup ("#000000");
- }
-
- gdk_rgba_parse (&color, color_str);
- g_free (color_str);
-
- gdk_rgba_parse (&font_color, font_color_str);
- g_free (font_color_str);
-
- gtk_adjustment_set_value (stickynotes->w_prefs_width, width);
- gtk_adjustment_set_value (stickynotes->w_prefs_height, height);
- gtk_toggle_button_set_active (
- GTK_TOGGLE_BUTTON (stickynotes->w_prefs_sys_color),
- sys_color);
- gtk_toggle_button_set_active (
- GTK_TOGGLE_BUTTON(stickynotes->w_prefs_sys_font),
- sys_font);
- gtk_toggle_button_set_active (
- GTK_TOGGLE_BUTTON (stickynotes->w_prefs_sticky),
- sticky);
- gtk_toggle_button_set_active (
- GTK_TOGGLE_BUTTON (stickynotes->w_prefs_force),
- force_default);
- gtk_toggle_button_set_active (
- GTK_TOGGLE_BUTTON (stickynotes->w_prefs_desktop),
- desktop_hide);
-
- gtk_color_chooser_set_rgba (GTK_COLOR_CHOOSER (stickynotes->w_prefs_color), &color);
- gtk_color_chooser_set_rgba (GTK_COLOR_CHOOSER (stickynotes->w_prefs_font_color), &font_color);
- gtk_font_button_set_font_name (
- GTK_FONT_BUTTON (stickynotes->w_prefs_font), font_str);
- g_free (font_str);
-
- if (g_settings_is_writable (stickynotes->settings, KEY_DEFAULT_COLOR))
- {
- gtk_widget_set_sensitive (GTK_WIDGET (gtk_builder_get_object (
- stickynotes->builder, "prefs_color_label")),
- !sys_color);
- gtk_widget_set_sensitive (stickynotes->w_prefs_color,
- !sys_color);
- }
- if (g_settings_is_writable (stickynotes->settings, KEY_DEFAULT_FONT_COLOR))
- {
- gtk_widget_set_sensitive (GTK_WIDGET (gtk_builder_get_object (
- stickynotes->builder, "prefs_font_color_label")),
- !sys_color);
- gtk_widget_set_sensitive (stickynotes->w_prefs_font_color,
- !sys_color);
- }
- if (g_settings_is_writable (stickynotes->settings, KEY_DEFAULT_FONT))
- {
- gtk_widget_set_sensitive (GTK_WIDGET (gtk_builder_get_object (
- stickynotes->builder, "prefs_font_label")),
- !sys_font);
- gtk_widget_set_sensitive (stickynotes->w_prefs_font,
- !sys_font);
- }
-}
-
void stickynotes_applet_update_menus(void)
{
GList *l;
diff --git a/gnome-applets/sticky-notes/sticky-notes-applet.h
b/gnome-applets/sticky-notes/sticky-notes-applet.h
index 5234f7303..e3bc072b2 100644
--- a/gnome-applets/sticky-notes/sticky-notes-applet.h
+++ b/gnome-applets/sticky-notes/sticky-notes-applet.h
@@ -32,19 +32,7 @@ G_DECLARE_FINAL_TYPE (StickyNotesApplet, sticky_notes_applet,
/* Global Sticky Notes instance */
typedef struct
{
- GtkBuilder *builder;
-
GtkWidget *w_prefs; /* The prefs dialog */
- GtkAdjustment *w_prefs_width;
- GtkAdjustment *w_prefs_height;
- GtkWidget *w_prefs_color;
- GtkWidget *w_prefs_font_color;
- GtkWidget *w_prefs_sys_color;
- GtkWidget *w_prefs_font;
- GtkWidget *w_prefs_sys_font;
- GtkWidget *w_prefs_sticky;
- GtkWidget *w_prefs_force;
- GtkWidget *w_prefs_desktop;
GList *notes; /* Linked-List of all the sticky notes */
GList *applets; /* Linked-List of all the applets */
@@ -88,7 +76,6 @@ typedef enum
extern StickyNotes *stickynotes;
void stickynotes_applet_update_icon(StickyNotesApplet *applet);
-void stickynotes_applet_update_prefs(void);
void stickynotes_applet_update_menus(void);
void stickynotes_applet_update_tooltips(void);
diff --git a/gnome-applets/sticky-notes/sticky-notes-preferences.c
b/gnome-applets/sticky-notes/sticky-notes-preferences.c
new file mode 100644
index 000000000..3776ba13e
--- /dev/null
+++ b/gnome-applets/sticky-notes/sticky-notes-preferences.c
@@ -0,0 +1,415 @@
+/*
+ * Copyright (C) 2020 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 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, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "config.h"
+#include "sticky-notes-preferences.h"
+
+#include "gsettings.h"
+
+struct _StickyNotesPreferences
+{
+ GtkDialog parent;
+
+ GtkWidget *width_label;
+ GtkWidget *width_spin;
+
+ GtkWidget *height_label;
+ GtkWidget *height_spin;
+
+ GtkWidget *sys_color_check;
+
+ GtkWidget *prefs_font_color_label;
+ GtkWidget *prefs_font_color;
+
+ GtkWidget *prefs_color_label;
+ GtkWidget *default_color;
+
+ GtkWidget *sys_font_check;
+
+ GtkWidget *prefs_font_label;
+ GtkWidget *default_font;
+
+ GtkWidget *sticky_check;
+
+ GtkWidget *force_default_check;
+
+ GtkWidget *desktop_hide_check;
+
+ GSettings *settings;
+};
+
+enum
+{
+ PROP_0,
+
+ PROP_SETTINGS,
+
+ LAST_PROP
+};
+
+static GParamSpec *preferences_properties[LAST_PROP] = { NULL };
+
+G_DEFINE_TYPE (StickyNotesPreferences, sticky_notes_preferences, GTK_TYPE_DIALOG)
+
+static gboolean
+int_to_dobule (GValue *value,
+ GVariant *variant,
+ gpointer user_data)
+{
+ int int_value;
+
+ g_variant_get (variant, "i", &int_value);
+ g_value_set_double (value, int_value);
+
+ return TRUE;
+}
+
+static GVariant *
+double_to_int (const GValue *value,
+ const GVariantType *expected_type,
+ gpointer user_data)
+{
+ double double_value;
+
+ double_value = g_value_get_double (value);
+
+ return g_variant_new_int32 (double_value);
+}
+
+static void
+use_system_color_changed_cb (GSettings *settings,
+ const char *key,
+ StickyNotesPreferences *self)
+{
+ gboolean use_system_color;
+ gboolean sensitive;
+
+ use_system_color = g_settings_get_boolean (settings, key);
+
+ sensitive = !use_system_color &&
+ g_settings_is_writable (settings, KEY_DEFAULT_FONT_COLOR);
+
+ gtk_widget_set_sensitive (self->prefs_font_color_label, sensitive);
+ gtk_widget_set_sensitive (self->prefs_font_color, sensitive);
+
+ sensitive = !use_system_color &&
+ g_settings_is_writable (settings, KEY_DEFAULT_COLOR);
+
+ gtk_widget_set_sensitive (self->prefs_color_label, sensitive);
+ gtk_widget_set_sensitive (self->default_color, sensitive);
+}
+
+static void
+use_system_font_changed_cb (GSettings *settings,
+ const char *key,
+ StickyNotesPreferences *self)
+{
+ gboolean use_system_font;
+ gboolean sensitive;
+
+ use_system_font = g_settings_get_boolean (settings, key);
+
+ sensitive = !use_system_font &&
+ g_settings_is_writable (settings, KEY_DEFAULT_FONT);
+
+ gtk_widget_set_sensitive (self->prefs_font_label, sensitive);
+ gtk_widget_set_sensitive (self->default_font, sensitive);
+}
+
+static gboolean
+string_to_rgba (GValue *value,
+ GVariant *variant,
+ gpointer user_data)
+{
+ const char *color;
+ GdkRGBA rgba;
+
+ g_variant_get (variant, "&s", &color);
+
+ if (!gdk_rgba_parse (&rgba, color))
+ return FALSE;
+
+ g_value_set_boxed (value, &rgba);
+
+ return TRUE;
+}
+
+static GVariant *
+rgba_to_string (const GValue *value,
+ const GVariantType *expected_type,
+ gpointer user_data)
+{
+ GdkRGBA *rgba;
+ char *color;
+ GVariant *variant;
+
+ rgba = g_value_get_boxed (value);
+
+ if (rgba == NULL)
+ return NULL;
+
+ color = gdk_rgba_to_string (rgba);
+ variant = g_variant_new_string (color);
+ g_free (color);
+
+ return variant;
+}
+
+static gboolean
+string_to_font (GValue *value,
+ GVariant *variant,
+ gpointer user_data)
+{
+ const char *color;
+
+ g_variant_get (variant, "&s", &color);
+
+ if (*color == '\0')
+ return FALSE;
+
+ g_value_set_string (value, color);
+
+ return TRUE;
+}
+
+static void
+sticky_notes_preferences_constructed (GObject *object)
+{
+ StickyNotesPreferences *self;
+
+ self = STICKY_NOTES_PREFERENCES (object);
+
+ G_OBJECT_CLASS (sticky_notes_preferences_parent_class)->constructed (object);
+
+ g_settings_bind_writable (self->settings,
+ KEY_DEFAULT_WIDTH,
+ self->width_label,
+ "sensitive",
+ FALSE);
+
+ g_settings_bind_with_mapping (self->settings,
+ KEY_DEFAULT_WIDTH,
+ self->width_spin,
+ "value",
+ G_SETTINGS_BIND_DEFAULT,
+ int_to_dobule,
+ double_to_int,
+ NULL,
+ NULL);
+
+ g_settings_bind_writable (self->settings,
+ KEY_DEFAULT_HEIGHT,
+ self->height_label,
+ "sensitive",
+ FALSE);
+
+ g_settings_bind_with_mapping (self->settings,
+ KEY_DEFAULT_HEIGHT,
+ self->height_spin,
+ "value",
+ G_SETTINGS_BIND_DEFAULT,
+ int_to_dobule,
+ double_to_int,
+ NULL,
+ NULL);
+
+ g_settings_bind (self->settings,
+ KEY_USE_SYSTEM_COLOR,
+ self->sys_color_check,
+ "active",
+ G_SETTINGS_BIND_DEFAULT);
+
+ g_signal_connect (self->settings,
+ "changed::" KEY_USE_SYSTEM_COLOR,
+ G_CALLBACK (use_system_color_changed_cb),
+ self);
+
+ g_settings_bind_with_mapping (self->settings,
+ KEY_DEFAULT_FONT_COLOR,
+ self->prefs_font_color,
+ "rgba",
+ G_SETTINGS_BIND_DEFAULT |
+ G_SETTINGS_BIND_NO_SENSITIVITY,
+ string_to_rgba,
+ rgba_to_string,
+ NULL,
+ NULL);
+
+ g_settings_bind_with_mapping (self->settings,
+ KEY_DEFAULT_COLOR,
+ self->default_color,
+ "rgba",
+ G_SETTINGS_BIND_DEFAULT |
+ G_SETTINGS_BIND_NO_SENSITIVITY,
+ string_to_rgba,
+ rgba_to_string,
+ NULL,
+ NULL);
+
+ g_settings_bind (self->settings,
+ KEY_USE_SYSTEM_FONT,
+ self->sys_font_check,
+ "active",
+ G_SETTINGS_BIND_DEFAULT);
+
+ g_signal_connect (self->settings,
+ "changed::" KEY_USE_SYSTEM_FONT,
+ G_CALLBACK (use_system_font_changed_cb),
+ self);
+
+ g_settings_bind_with_mapping (self->settings,
+ KEY_DEFAULT_FONT,
+ self->default_font,
+ "font",
+ G_SETTINGS_BIND_DEFAULT |
+ G_SETTINGS_BIND_NO_SENSITIVITY,
+ string_to_font,
+ NULL,
+ NULL,
+ NULL);
+
+ g_settings_bind (self->settings,
+ KEY_STICKY,
+ self->sticky_check,
+ "active",
+ G_SETTINGS_BIND_DEFAULT);
+
+ g_settings_bind (self->settings,
+ KEY_FORCE_DEFAULT,
+ self->force_default_check,
+ "active",
+ G_SETTINGS_BIND_DEFAULT);
+
+ g_settings_bind (self->settings,
+ KEY_DESKTOP_HIDE,
+ self->desktop_hide_check,
+ "active",
+ G_SETTINGS_BIND_DEFAULT);
+
+ use_system_color_changed_cb (self->settings, KEY_USE_SYSTEM_COLOR, self);
+ use_system_font_changed_cb (self->settings, KEY_USE_SYSTEM_FONT, self);
+}
+
+static void
+sticky_notes_preferences_dispose (GObject *object)
+{
+ StickyNotesPreferences *self;
+
+ self = STICKY_NOTES_PREFERENCES (object);
+
+ g_clear_object (&self->settings);
+
+ G_OBJECT_CLASS (sticky_notes_preferences_parent_class)->dispose (object);
+}
+
+static void
+sticky_notes_preferences_set_property (GObject *object,
+ guint property_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ StickyNotesPreferences *self;
+
+ self = STICKY_NOTES_PREFERENCES (object);
+
+ switch (property_id)
+ {
+ case PROP_SETTINGS:
+ g_assert (self->settings == NULL);
+ self->settings = g_value_dup_object (value);
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ break;
+ }
+}
+
+static void
+install_properties (GObjectClass *object_class)
+{
+ preferences_properties[PROP_SETTINGS] =
+ g_param_spec_object ("settings",
+ "settings",
+ "settings",
+ G_TYPE_SETTINGS,
+ G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS);
+
+ g_object_class_install_properties (object_class,
+ LAST_PROP,
+ preferences_properties);
+}
+
+static void
+sticky_notes_preferences_class_init (StickyNotesPreferencesClass *self_class)
+{
+ GObjectClass *object_class;
+ GtkWidgetClass *widget_class;
+ const char *resource_name;
+
+ object_class = G_OBJECT_CLASS (self_class);
+ widget_class = GTK_WIDGET_CLASS (self_class);
+
+ object_class->constructed = sticky_notes_preferences_constructed;
+ object_class->dispose = sticky_notes_preferences_dispose;
+ object_class->set_property = sticky_notes_preferences_set_property;
+
+ install_properties (object_class);
+
+ resource_name = GRESOURCE_PREFIX "/ui/sticky-notes-preferences.ui";
+ gtk_widget_class_set_template_from_resource (widget_class, resource_name);
+
+ gtk_widget_class_bind_template_child (widget_class, StickyNotesPreferences, width_label);
+ gtk_widget_class_bind_template_child (widget_class, StickyNotesPreferences, width_spin);
+
+ gtk_widget_class_bind_template_child (widget_class, StickyNotesPreferences, height_label);
+ gtk_widget_class_bind_template_child (widget_class, StickyNotesPreferences, height_spin);
+
+ gtk_widget_class_bind_template_child (widget_class, StickyNotesPreferences, sys_color_check);
+
+ gtk_widget_class_bind_template_child (widget_class, StickyNotesPreferences, prefs_font_color_label);
+ gtk_widget_class_bind_template_child (widget_class, StickyNotesPreferences, prefs_font_color);
+
+ gtk_widget_class_bind_template_child (widget_class, StickyNotesPreferences, prefs_color_label);
+ gtk_widget_class_bind_template_child (widget_class, StickyNotesPreferences, default_color);
+
+ gtk_widget_class_bind_template_child (widget_class, StickyNotesPreferences, sys_font_check);
+
+ gtk_widget_class_bind_template_child (widget_class, StickyNotesPreferences, prefs_font_label);
+ gtk_widget_class_bind_template_child (widget_class, StickyNotesPreferences, default_font);
+
+ gtk_widget_class_bind_template_child (widget_class, StickyNotesPreferences, sticky_check);
+
+ gtk_widget_class_bind_template_child (widget_class, StickyNotesPreferences, force_default_check);
+
+ gtk_widget_class_bind_template_child (widget_class, StickyNotesPreferences, desktop_hide_check);
+}
+
+static void
+sticky_notes_preferences_init (StickyNotesPreferences *self)
+{
+ gtk_widget_init_template (GTK_WIDGET (self));
+}
+
+GtkWidget *
+sticky_notes_preferences_new (GSettings *settings)
+{
+ return g_object_new (STICKY_NOTES_TYPE_PREFERENCES,
+ "settings", settings,
+ NULL);
+}
diff --git a/gnome-applets/sticky-notes/sticky-notes-preferences.h
b/gnome-applets/sticky-notes/sticky-notes-preferences.h
new file mode 100644
index 000000000..427f04726
--- /dev/null
+++ b/gnome-applets/sticky-notes/sticky-notes-preferences.h
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2020 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 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, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef STICKY_NOTES_PREFERENCES_H
+#define STICKY_NOTES_PREFERENCES_H
+
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS
+
+#define STICKY_NOTES_TYPE_PREFERENCES (sticky_notes_preferences_get_type ())
+G_DECLARE_FINAL_TYPE (StickyNotesPreferences, sticky_notes_preferences,
+ STICKY_NOTES, PREFERENCES, GtkDialog)
+
+GtkWidget *sticky_notes_preferences_new (GSettings *settings);
+
+G_END_DECLS
+
+#endif
diff --git a/gnome-applets/sticky-notes/ui/sticky-notes-preferences.ui
b/gnome-applets/sticky-notes/ui/sticky-notes-preferences.ui
index 680ba6bb6..b25d5f66f 100644
--- a/gnome-applets/sticky-notes/ui/sticky-notes-preferences.ui
+++ b/gnome-applets/sticky-notes/ui/sticky-notes-preferences.ui
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.18.3 -->
+<!-- Generated with glade 3.22.2 -->
<interface>
- <requires lib="gtk+" version="3.12"/>
+ <requires lib="gtk+" version="3.20"/>
<object class="GtkAdjustment" id="adjustment1">
<property name="lower">1</property>
<property name="upper">500</property>
@@ -16,12 +16,15 @@
<property name="step_increment">10</property>
<property name="page_increment">100</property>
</object>
- <object class="GtkDialog" id="preferences_dialog">
+ <template class="StickyNotesPreferences" parent="GtkDialog">
<property name="can_focus">False</property>
<property name="border_width">5</property>
<property name="title" translatable="yes">Sticky Notes Preferences</property>
<property name="resizable">False</property>
<property name="type_hint">dialog</property>
+ <child type="titlebar">
+ <placeholder/>
+ </child>
<child internal-child="vbox">
<object class="GtkBox" id="dialog-box">
<property name="visible">True</property>
@@ -88,8 +91,8 @@
<object class="GtkLabel" id="label1">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="xalign">0</property>
<property name="label" translatable="yes">Default Note Properties</property>
+ <property name="xalign">0</property>
<attributes>
<attribute name="weight" value="bold"/>
</attributes>
@@ -111,9 +114,9 @@
<object class="GtkLabel" id="width_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="xalign">0</property>
<property name="label" translatable="yes">_Width:</property>
<property name="use_underline">True</property>
+ <property name="xalign">0</property>
</object>
<packing>
<property name="left_attach">0</property>
@@ -124,9 +127,9 @@
<object class="GtkLabel" id="height_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="xalign">0</property>
<property name="label" translatable="yes">H_eight:</property>
<property name="use_underline">True</property>
+ <property name="xalign">0</property>
</object>
<packing>
<property name="left_attach">0</property>
@@ -170,7 +173,6 @@
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="use_underline">True</property>
- <property name="xalign">0</property>
<property name="draw_indicator">True</property>
</object>
<packing>
@@ -183,9 +185,9 @@
<object class="GtkLabel" id="prefs_font_color_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="xalign">0</property>
<property name="label" translatable="yes">Font Co_lor:</property>
<property name="use_underline">True</property>
+ <property name="xalign">0</property>
</object>
<packing>
<property name="left_attach">0</property>
@@ -196,9 +198,9 @@
<object class="GtkLabel" id="prefs_color_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="xalign">0</property>
<property name="label" translatable="yes">Note C_olor:</property>
<property name="use_underline">True</property>
+ <property name="xalign">0</property>
</object>
<packing>
<property name="left_attach">0</property>
@@ -236,7 +238,6 @@
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="use_underline">True</property>
- <property name="xalign">0</property>
<property name="draw_indicator">True</property>
</object>
<packing>
@@ -249,9 +250,9 @@
<object class="GtkLabel" id="prefs_font_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="xalign">0</property>
<property name="label" translatable="yes">_Font:</property>
<property name="use_underline">True</property>
+ <property name="xalign">0</property>
</object>
<packing>
<property name="left_attach">0</property>
@@ -296,8 +297,8 @@
<object class="GtkLabel" id="label2">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="xalign">0</property>
<property name="label" translatable="yes">Behavior</property>
+ <property name="xalign">0</property>
<attributes>
<attribute name="weight" value="bold"/>
</attributes>
@@ -323,7 +324,6 @@
<property name="receives_default">False</property>
<property name="tooltip_text" translatable="yes">Choose if notes are visible on all
workspaces</property>
<property name="use_underline">True</property>
- <property name="xalign">0</property>
<property name="draw_indicator">True</property>
</object>
<packing>
@@ -340,7 +340,6 @@
<property name="receives_default">False</property>
<property name="tooltip_text" translatable="yes">Choose if the default style is
forced on all notes</property>
<property name="use_underline">True</property>
- <property name="xalign">0</property>
<property name="draw_indicator">True</property>
</object>
<packing>
@@ -357,7 +356,6 @@
<property name="receives_default">True</property>
<property name="tooltip_text" translatable="yes">Choose whether to hide all notes
when selecting on the desktop</property>
<property name="use_underline">True</property>
- <property name="xalign">0</property>
<property name="draw_indicator">True</property>
</object>
<packing>
@@ -393,5 +391,5 @@
<action-widget response="-11">helpbutton1</action-widget>
<action-widget response="-7">closebutton1</action-widget>
</action-widgets>
- </object>
+ </template>
</interface>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]