Merge lp:~3v1n0/unity/lockscreen-accelerator-checks into lp:unity

Proposed by Marco Trevisan (Treviño)
Status: Merged
Approved by: Andrea Azzarone
Approved revision: no longer in the source branch.
Merged at revision: 4140
Proposed branch: lp:~3v1n0/unity/lockscreen-accelerator-checks
Merge into: lp:unity
Diff against target: 45 lines (+22/-0)
1 file modified
lockscreen/LockScreenAcceleratorController.cpp (+22/-0)
To merge this branch: bzr merge lp:~3v1n0/unity/lockscreen-accelerator-checks
Reviewer Review Type Date Requested Status
Andrea Azzarone (community) Approve
PS Jenkins bot continuous-integration Pending
Review via email: mp+298893@code.launchpad.net

Commit message

LockScreenAcceleratorController: check if a setting key is available instead of crashing

To post a comment you must log in.
Revision history for this message
Andrea Azzarone (azzar1) wrote :

+1

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'lockscreen/LockScreenAcceleratorController.cpp'
--- lockscreen/LockScreenAcceleratorController.cpp 2016-06-21 11:20:05 +0000
+++ lockscreen/LockScreenAcceleratorController.cpp 2016-07-01 12:56:44 +0000
@@ -70,6 +70,22 @@
70 "XF86Touchpad",70 "XF86Touchpad",
71};71};
7272
73bool IsSettingKeyAvailable(glib::Object<GSettings> const& settings, std::string const& key)
74{
75 bool available = false;
76 GSettingsSchema* schema;
77
78 g_object_get(glib::object_cast<GObject>(settings), "settings-schema", &schema, nullptr);
79
80 if (schema)
81 {
82 available = g_settings_schema_has_key(schema, key.c_str());
83 g_settings_schema_unref(schema);
84 }
85
86 return available;
87}
88
73bool IsKeyBindingAllowed(std::string const& key)89bool IsKeyBindingAllowed(std::string const& key)
74{90{
75 if (std::find(begin(ALLOWED_XF86_KEYS), end(ALLOWED_XF86_KEYS), key) != end(ALLOWED_XF86_KEYS))91 if (std::find(begin(ALLOWED_XF86_KEYS), end(ALLOWED_XF86_KEYS), key) != end(ALLOWED_XF86_KEYS))
@@ -80,6 +96,9 @@
8096
81 for (auto const& setting : ALLOWED_MEDIA_KEYS)97 for (auto const& setting : ALLOWED_MEDIA_KEYS)
82 {98 {
99 if (!IsSettingKeyAvailable(media_settings, setting))
100 continue;
101
83 Accelerator media_key(glib::String(g_settings_get_string(media_settings, setting.c_str())).Str());102 Accelerator media_key(glib::String(g_settings_get_string(media_settings, setting.c_str())).Str());
84 if (media_key == key_accelerator)103 if (media_key == key_accelerator)
85 return true;104 return true;
@@ -89,6 +108,9 @@
89108
90 for (auto const& setting : ALLOWED_WM_KEYS)109 for (auto const& setting : ALLOWED_WM_KEYS)
91 {110 {
111 if (!IsSettingKeyAvailable(wm_settings, setting))
112 continue;
113
92 glib::Variant accels(g_settings_get_value(wm_settings, setting.c_str()), glib::StealRef());114 glib::Variant accels(g_settings_get_value(wm_settings, setting.c_str()), glib::StealRef());
93 auto children = g_variant_n_children(accels);115 auto children = g_variant_n_children(accels);
94116