summaryrefslogtreecommitdiff
diff options
authorMarco Trevisan (Treviño) <mail@3v1n0.net>2014-03-06 22:37:11 +0100
committerMarco Trevisan (Treviño) <mail@3v1n0.net>2014-03-06 22:37:11 +0100
commitb683fc9e0af67ae2414a14ea0eaa47ea35f6e0eb (patch)
treef9fa4be22d29980fde5da0ea943c32ad5125f248
parent644f78ffc8ce207768aaa36a3f09ae67fef43a42 (diff)
LockScreenSettings: bind unity greeter options with LockScreenSettings
(bzr r3695.4.47)
-rw-r--r--lockscreen/LockScreenSettings.cpp38
-rw-r--r--lockscreen/LockScreenSettings.h11
-rw-r--r--tests/data/external.gschema.xml6
3 files changed, 55 insertions, 0 deletions
diff --git a/lockscreen/LockScreenSettings.cpp b/lockscreen/LockScreenSettings.cpp
index d00c24f8f..c791be237 100644
--- a/lockscreen/LockScreenSettings.cpp
+++ b/lockscreen/LockScreenSettings.cpp
@@ -20,6 +20,9 @@
#include "LockScreenSettings.h"
#include <NuxCore/Logger.h>
+#include <sigc++/adaptors/hide.h>
+#include <UnityCore/GLibSignal.h>
+#include <UnityCore/GLibWrapper.h>
namespace unity
{
@@ -31,8 +34,42 @@ DECLARE_LOGGER(logger, "unity.lockscreen.settings");
namespace
{
Settings* settings_instance = nullptr;
+
+const std::string GREETER_SETTINGS = "com.canonical.unity-greeter";
+const std::string LOGO_KEY = "logo";
+const std::string FONT_KEY = "font-name";
+const std::string BACKGROUND_KEY = "background";
+const std::string BACKGROUND_COLOR_KEY = "background-color";
+const std::string USER_BG_KEY = "draw-user-backgrounds";
+const std::string DRAW_GRID_KEY = "draw-grid";
+const std::string SHOW_HOSTNAME_KEY = "show-hostname";
}
+struct Settings::Impl
+{
+ Impl()
+ : greeter_settings_(g_settings_new(GREETER_SETTINGS.c_str()))
+ , signal_(greeter_settings_, "changed", sigc::hide(sigc::hide(sigc::mem_fun(this, &Impl::UpdateSettings))))
+ {
+ UpdateSettings();
+ }
+
+ void UpdateSettings()
+ {
+ auto* s = settings_instance;
+ s->font_name = glib::String(g_settings_get_string(greeter_settings_, FONT_KEY.c_str())).Str();
+ s->logo = glib::String(g_settings_get_string(greeter_settings_, LOGO_KEY.c_str())).Str();
+ s->background = glib::String(g_settings_get_string(greeter_settings_, BACKGROUND_KEY.c_str())).Str();
+ s->background_color = nux::Color(glib::String(g_settings_get_string(greeter_settings_, BACKGROUND_COLOR_KEY.c_str())).Str());
+ s->show_hostname = g_settings_get_boolean(greeter_settings_, SHOW_HOSTNAME_KEY.c_str()) != FALSE;
+ s->use_user_background = g_settings_get_boolean(greeter_settings_, USER_BG_KEY.c_str()) != FALSE;
+ s->draw_grid = g_settings_get_boolean(greeter_settings_, DRAW_GRID_KEY.c_str()) != FALSE;
+ }
+
+ glib::Object<GSettings> greeter_settings_;
+ glib::Signal<void, GSettings*, const gchar*> signal_;
+};
+
Settings::Settings()
{
if (settings_instance)
@@ -43,6 +80,7 @@ Settings::Settings()
{
lockscreen_type = Type::UNITY;
settings_instance = this;
+ impl_.reset(new Impl());
}
}
diff --git a/lockscreen/LockScreenSettings.h b/lockscreen/LockScreenSettings.h
index 0a017e779..4e1148673 100644
--- a/lockscreen/LockScreenSettings.h
+++ b/lockscreen/LockScreenSettings.h
@@ -45,8 +45,19 @@ public:
static Settings& Instance();
nux::Property<Type> lockscreen_type;
+ nux::Property<std::string> font_name;
+ nux::Property<std::string> logo;
+ nux::Property<std::string> background;
+ nux::Property<nux::Color> background_color;
+ nux::Property<bool> show_hostname;
+ nux::Property<bool> use_user_background;
+ nux::Property<bool> draw_grid;
static const int GRID_SIZE = 40;
+
+private:
+ struct Impl;
+ std::unique_ptr<Impl> impl_;
};
}
diff --git a/tests/data/external.gschema.xml b/tests/data/external.gschema.xml
index d3928da58..160b79723 100644
--- a/tests/data/external.gschema.xml
+++ b/tests/data/external.gschema.xml
@@ -57,6 +57,9 @@
<key type="s" name="logo">
<default>'/usr/share/unity-greeter/logo.png'</default>
</key>
+ <key type="s" name="font-name">
+ <default>'Ubuntu 11'</default>
+ </key>
<key type="s" name="background">
<default>'/usr/share/backgrounds/warty-final-ubuntu.png'</default>
</key>
@@ -69,5 +72,8 @@
<key type="b" name="draw-grid">
<default>true</default>
</key>
+ <key type="b" name="show-hostname">
+ <default>true</default>
+ </key>
</schema>
</schemalist>