Merge lp:~timo-jyrinki/unity/xpathselect-1.4 into lp:unity

Proposed by Timo Jyrinki
Status: Merged
Merged at revision: 3588
Proposed branch: lp:~timo-jyrinki/unity/xpathselect-1.4
Merge into: lp:unity
Diff against target: 2497 lines (+962/-740)
33 files modified
CMakeLists.txt (+1/-1)
UnityCore/Filters.cpp (+1/-1)
UnityCore/Result.cpp (+5/-12)
UnityCore/Scope.cpp (+1/-1)
UnityCore/ScopeProxy.cpp (+4/-4)
UnityCore/Variant.cpp (+264/-254)
UnityCore/Variant.h (+69/-15)
dash/FilterBar.cpp (+1/-5)
dash/PlacesGroup.cpp (+5/-2)
dash/previews/MusicPaymentPreview.cpp (+1/-2)
dash/previews/PaymentPreview.cpp (+1/-7)
dash/previews/PreviewNavigator.cpp (+1/-0)
dash/previews/Track.cpp (+2/-1)
debian/control (+2/-2)
launcher/LauncherController.cpp (+8/-9)
launcher/QuicklistView.cpp (+1/-0)
launcher/SwitcherController.cpp (+2/-2)
launcher/Tooltip.cpp (+2/-5)
panel/PanelIndicatorEntryView.cpp (+1/-0)
plugins/unityshell/src/AggregateMonitor.cpp (+0/-63)
plugins/unityshell/src/AggregateMonitor.h (+0/-50)
plugins/unityshell/src/ElapsedTimeMonitor.cpp (+0/-49)
plugins/unityshell/src/ElapsedTimeMonitor.h (+0/-47)
plugins/unityshell/src/unityshell.cpp (+4/-3)
plugins/unityshell/src/unityshell.h (+14/-1)
shutdown/SessionButton.cpp (+1/-0)
tests/test_glib_variant.cpp (+407/-15)
tests/test_panel_menu_view.cpp (+1/-1)
tests/test_results.cpp (+2/-2)
unity-shared/DebugDBusInterface.cpp (+117/-137)
unity-shared/Introspectable.cpp (+39/-41)
unity-shared/Introspectable.h (+4/-8)
unity-shared/SearchBar.cpp (+1/-0)
To merge this branch: bzr merge lp:~timo-jyrinki/unity/xpathselect-1.4
Reviewer Review Type Date Requested Status
PS Jenkins bot (community) continuous-integration Needs Fixing
Christopher Townsend Approve
Review via email: mp+194077@code.launchpad.net

Commit message

DebugDBusInterface: add support to libxpathselect-1.4

Some cleanups and reworking of glib::Variant and debug::DBusInterface

Same as lp:~3v1n0/unity/xpathselect-1.4 but with double function removed and packaging dependencies added.

Description of the change

Requires https://code.launchpad.net/~bregma/cmake/lp-1247787/+merge/193961 for Unity to build, then builds against AP1.4.

To post a comment you must log in.
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
Marco Trevisan (Treviño) (3v1n0) wrote :
Revision history for this message
Christopher Townsend (townsend) wrote :

Marco's branch was still missing the change to CMakeLists.txt, so we'll use this branch instead.

I've compiled and ran make check on this and it works, so approving.

review: Approve
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'CMakeLists.txt'
--- CMakeLists.txt 2013-10-29 20:50:07 +0000
+++ CMakeLists.txt 2013-11-06 08:52:17 +0000
@@ -233,7 +233,7 @@
233 nux-4.0>=4.0.1233 nux-4.0>=4.0.1
234 sigc++-2.0234 sigc++-2.0
235 unity-misc>=0.4.0235 unity-misc>=0.4.0
236 xpathselect>=1.2236 xpathselect=1.4
237 zeitgeist-2.0237 zeitgeist-2.0
238)238)
239239
240240
=== modified file 'UnityCore/Filters.cpp'
--- UnityCore/Filters.cpp 2013-08-15 09:59:40 +0000
+++ UnityCore/Filters.cpp 2013-11-06 08:52:17 +0000
@@ -103,7 +103,7 @@
103 current_hints[iter->first] = iter->second;103 current_hints[iter->first] = iter->second;
104 }104 }
105105
106 dee_model_set_value(model_, iter_, FilterColumn::RENDERER_STATE, glib::Variant::FromHints(current_hints));106 dee_model_set_value(model_, iter_, FilterColumn::RENDERER_STATE, glib::Variant(current_hints));
107}107}
108108
109109
110110
=== modified file 'UnityCore/Result.cpp'
--- UnityCore/Result.cpp 2013-02-21 14:01:55 +0000
+++ UnityCore/Result.cpp 2013-11-06 08:52:17 +0000
@@ -150,18 +150,11 @@
150150
151std::vector<glib::Variant> LocalResult::Variants() const151std::vector<glib::Variant> LocalResult::Variants() const
152{152{
153 std::vector<glib::Variant> vars;153 return {
154 vars.push_back(g_variant_new_string(uri.c_str()));154 glib::Variant(uri), glib::Variant(icon_hint), glib::Variant(category_index),
155 vars.push_back(g_variant_new_string(icon_hint.c_str()));155 glib::Variant(result_type), glib::Variant(mimetype), glib::Variant(name),
156 vars.push_back(g_variant_new_uint32(category_index));156 glib::Variant(comment), glib::Variant(dnd_uri), glib::Variant(hints)
157 vars.push_back(g_variant_new_uint32(result_type));157 };
158 vars.push_back(g_variant_new_string(mimetype.c_str()));
159 vars.push_back(g_variant_new_string(name.c_str()));
160 vars.push_back(g_variant_new_string(comment.c_str()));
161 vars.push_back(g_variant_new_string(dnd_uri.c_str()));
162 vars.push_back(glib::Variant::FromHints(hints));
163
164 return vars;
165}158}
166159
167glib::Variant LocalResult::Variant() const160glib::Variant LocalResult::Variant() const
168161
=== modified file 'UnityCore/Scope.cpp'
--- UnityCore/Scope.cpp 2013-09-25 11:51:08 +0000
+++ UnityCore/Scope.cpp 2013-11-06 08:52:17 +0000
@@ -278,7 +278,7 @@
278 }278 }
279279
280 glib::HintsMap tmp_hints = hints;280 glib::HintsMap tmp_hints = hints;
281 tmp_hints["preview-action-id"] = g_variant_new_string(action->id.c_str());281 tmp_hints["preview-action-id"] = action->id;
282 pimpl->Activate(result, UNITY_PROTOCOL_ACTION_TYPE_PREVIEW_ACTION, tmp_hints, callback, cancellable);282 pimpl->Activate(result, UNITY_PROTOCOL_ACTION_TYPE_PREVIEW_ACTION, tmp_hints, callback, cancellable);
283}283}
284284
285285
=== modified file 'UnityCore/ScopeProxy.cpp'
--- UnityCore/ScopeProxy.cpp 2013-09-25 11:51:08 +0000
+++ UnityCore/ScopeProxy.cpp 2013-11-06 08:52:17 +0000
@@ -401,7 +401,7 @@
401 glib::HintsMap hints;401 glib::HintsMap hints;
402 if (!owner_->form_factor().empty())402 if (!owner_->form_factor().empty())
403 {403 {
404 hints["form-factor"] = g_variant_new_string(owner_->form_factor().c_str());404 hints["form-factor"] = owner_->form_factor();
405 }405 }
406 hints["changed-filter-row"] = filter->VariantValue();406 hints["changed-filter-row"] = filter->VariantValue();
407 Search(last_search_, hints, nullptr, cancel_scope_);407 Search(last_search_, hints, nullptr, cancel_scope_);
@@ -521,7 +521,7 @@
521 glib::HintsMap updated_hints(hints);521 glib::HintsMap updated_hints(hints);
522 if (!owner_->form_factor().empty())522 if (!owner_->form_factor().empty())
523 {523 {
524 updated_hints["form-factor"] = g_variant_new_string(owner_->form_factor().c_str());524 updated_hints["form-factor"] = owner_->form_factor();
525 }525 }
526 Search(search_string, updated_hints, callback, canc);526 Search(search_string, updated_hints, callback, canc);
527 }527 }
@@ -791,9 +791,9 @@
791void ScopeProxy::Search(std::string const& search_string, glib::HintsMap const& user_hints, SearchCallback const& callback, GCancellable* cancellable)791void ScopeProxy::Search(std::string const& search_string, glib::HintsMap const& user_hints, SearchCallback const& callback, GCancellable* cancellable)
792{792{
793 glib::HintsMap hints = user_hints;793 glib::HintsMap hints = user_hints;
794 if (!form_factor.Get().empty() && hints.find("form-factor") == hints.end())794 if (!form_factor().empty() && hints.find("form-factor") == hints.end())
795 {795 {
796 hints["form-factor"] = g_variant_new_string(form_factor().c_str());796 hints["form-factor"] = form_factor();
797 }797 }
798 pimpl->Search(search_string, hints, callback, cancellable);798 pimpl->Search(search_string, hints, callback, cancellable);
799}799}
800800
=== modified file 'UnityCore/Variant.cpp'
--- UnityCore/Variant.cpp 2013-08-23 17:21:44 +0000
+++ UnityCore/Variant.cpp 2013-11-06 08:52:17 +0000
@@ -1,6 +1,6 @@
1// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-1// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
2/*2/*
3 * Copyright (C) 2010 Canonical Ltd3 * Copyright (C) 2010-2013 Canonical Ltd
4 *4 *
5 * This program is free software: you can redistribute it and/or modify5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License version 3 as6 * it under the terms of the GNU General Public License version 3 as
@@ -15,6 +15,7 @@
15 * along with this program. If not, see <http://www.gnu.org/licenses/>.15 * along with this program. If not, see <http://www.gnu.org/licenses/>.
16 *16 *
17 * Authored by: Tim Penhey <tim.penhey@canonical.com>17 * Authored by: Tim Penhey <tim.penhey@canonical.com>
18 * Marco Trevisan <marco.trevisan@canonical.com>
18 */19 */
1920
20#include "Variant.h"21#include "Variant.h"
@@ -27,7 +28,7 @@
27DECLARE_LOGGER(logger, "unity.glib.variant");28DECLARE_LOGGER(logger, "unity.glib.variant");
2829
29Variant::Variant()30Variant::Variant()
30 : variant_(NULL)31 : variant_(nullptr)
31{}32{}
3233
33Variant::Variant(GVariant* variant)34Variant::Variant(GVariant* variant)
@@ -41,9 +42,71 @@
41{}42{}
4243
43Variant::Variant(Variant const& other)44Variant::Variant(Variant const& other)
44 : variant_(other.variant_)45 : Variant(other.variant_)
46{}
47
48Variant::Variant(std::nullptr_t)
49 : Variant()
50{}
51
52Variant::Variant(const char* value)
53 : Variant(g_variant_new_string(value ? value : value))
54{}
55
56Variant::Variant(std::string const& value)
57 : Variant(g_variant_new_string(value.c_str()))
58{}
59
60Variant::Variant(unsigned char value)
61 : Variant(g_variant_new_byte(value))
62{}
63
64Variant::Variant(int16_t value)
65 : Variant(g_variant_new_int16(value))
66{}
67
68Variant::Variant(uint16_t value)
69 : Variant(g_variant_new_uint16(value))
70{}
71
72Variant::Variant(int32_t value)
73 : Variant(g_variant_new_int32(value))
74{}
75
76Variant::Variant(uint32_t value)
77 : Variant(g_variant_new_uint32(value))
78{}
79
80Variant::Variant(int64_t value)
81 : Variant(g_variant_new_int64(value))
82{}
83
84Variant::Variant(uint64_t value)
85 : Variant(g_variant_new_uint64(value))
86{}
87
88Variant::Variant(bool value)
89 : Variant(g_variant_new_boolean(value))
90{}
91
92Variant::Variant(double value)
93 : Variant(g_variant_new_double(value))
94{}
95
96Variant::Variant(float value)
97 : Variant(static_cast<double>(value))
98{}
99
100Variant::Variant(HintsMap const& hints)
45{101{
46 if (variant_) g_variant_ref_sink(variant_);102 GVariantBuilder b;
103 g_variant_builder_init(&b, G_VARIANT_TYPE("a{sv}"));
104
105 for (auto const& hint : hints)
106 g_variant_builder_add(&b, "{sv}", hint.first.c_str(), static_cast<GVariant*>(hint.second));
107
108 variant_ = g_variant_builder_end(&b);
109 g_variant_ref_sink(variant_);
47}110}
48111
49Variant::~Variant()112Variant::~Variant()
@@ -51,6 +114,25 @@
51 if (variant_) g_variant_unref(variant_);114 if (variant_) g_variant_unref(variant_);
52}115}
53116
117glib::Variant get_variant(GVariant *variant_)
118{
119 Variant value;
120
121 if (!variant_)
122 return value;
123
124 if (g_variant_is_of_type(variant_, G_VARIANT_TYPE_VARIANT))
125 {
126 value = Variant(g_variant_get_variant(variant_), StealRef());
127 }
128 else if (g_variant_is_of_type(variant_, G_VARIANT_TYPE("(v)")))
129 {
130 g_variant_get(variant_, "(v)", &value);
131 }
132
133 return value;
134}
135
54std::string Variant::GetString() const136std::string Variant::GetString() const
55{137{
56 const gchar *result = nullptr;138 const gchar *result = nullptr;
@@ -70,182 +152,91 @@
70 }152 }
71 else153 else
72 {154 {
73 auto const& variant = GetVariant();155 auto const& variant = get_variant(variant_);
74 if (variant)156 if (variant)
75 return variant.GetString();157 return variant.GetString();
76158
77 LOG_ERROR(logger) << "You're trying to extract a String from a variant which is of type "159 LOG_ERROR(logger) << "You're trying to extract a 's' from a variant which is of type '"
78 << g_variant_type_peek_string(g_variant_get_type(variant_));160 << g_variant_type_peek_string(g_variant_get_type(variant_)) << "'";
79 }161 }
80162
81 return result ? result : "";163 return result ? result : "";
82}164}
83165
166template <typename TYPE, typename GTYPE>
167TYPE get_numeric_value(GVariant *variant_, const char *type_str, const char *fallback_type_str)
168{
169 GTYPE value = 0;
170
171 if (!variant_)
172 return static_cast<TYPE>(value);
173
174 if (g_variant_is_of_type(variant_, G_VARIANT_TYPE(type_str)))
175 {
176 g_variant_get(variant_, type_str, &value);
177 }
178 else if (g_variant_is_of_type(variant_, G_VARIANT_TYPE(fallback_type_str)))
179 {
180 g_variant_get(variant_, fallback_type_str, &value);
181 }
182 else
183 {
184 auto const& variant = get_variant(variant_);
185 if (variant)
186 return get_numeric_value<TYPE, GTYPE>(static_cast<GVariant*>(variant), type_str, fallback_type_str);
187
188 LOG_ERROR(logger) << "You're trying to extract a '" << type_str << "'"
189 << " from a variant which is of type '"
190 << g_variant_type_peek_string(g_variant_get_type(variant_))
191 << "'";
192 }
193
194 return static_cast<TYPE>(value);
195}
196
197unsigned char Variant::GetByte() const
198{
199 return get_numeric_value<unsigned char, guchar>(variant_, "y", "(y)");
200}
201
202int16_t Variant::GetInt16() const
203{
204 return get_numeric_value<int16_t, gint16>(variant_, "n", "(n)");
205}
206
207uint16_t Variant::GetUInt16() const
208{
209 return get_numeric_value<uint16_t, guint16>(variant_, "q", "(q)");
210}
211
84int32_t Variant::GetInt32() const212int32_t Variant::GetInt32() const
85{213{
86 gint32 value = 0;214 return get_numeric_value<int32_t, gint32>(variant_, "i", "(i)");
87
88 if (!variant_)
89 return static_cast<int>(value);
90
91 if (g_variant_is_of_type(variant_, G_VARIANT_TYPE_INT32))
92 {
93 value = g_variant_get_int32(variant_);
94 }
95 else if (g_variant_is_of_type(variant_, G_VARIANT_TYPE("(i)")))
96 {
97 g_variant_get(variant_, "(i)", &value);
98 }
99 else
100 {
101 auto const& variant = GetVariant();
102 if (variant)
103 return variant.GetInt32();
104
105 LOG_ERROR(logger) << "You're trying to extract an Int32 from a variant which is of type "
106 << g_variant_type_peek_string(g_variant_get_type(variant_));
107 }
108
109 return static_cast<int32_t>(value);
110}215}
111216
112uint32_t Variant::GetUInt32() const217uint32_t Variant::GetUInt32() const
113{218{
114 guint32 value = 0;219 return get_numeric_value<uint32_t, guint32>(variant_, "u", "(u)");
115220}
116 if (!variant_)
117 return static_cast<unsigned>(value);
118
119 if (g_variant_is_of_type(variant_, G_VARIANT_TYPE_UINT32))
120 {
121 value = g_variant_get_uint32(variant_);
122 }
123 else if (g_variant_is_of_type(variant_, G_VARIANT_TYPE("(u)")))
124 {
125 g_variant_get(variant_, "(u)", &value);
126 }
127 else
128 {
129 auto const& variant = GetVariant();
130 if (variant)
131 return variant.GetUInt32();
132
133 LOG_ERROR(logger) << "You're trying to extract an UInt32 from a variant which is of type "
134 << g_variant_type_peek_string(g_variant_get_type(variant_));
135 }
136
137 return static_cast<uint32_t>(value);}
138221
139int64_t Variant::GetInt64() const222int64_t Variant::GetInt64() const
140{223{
141 gint64 value = 0;224 return get_numeric_value<int64_t, gint64>(variant_, "x", "(x)");
142
143 if (!variant_)
144 return static_cast<int64_t>(value);
145
146 if (g_variant_is_of_type(variant_, G_VARIANT_TYPE_INT64))
147 {
148 value = g_variant_get_int64(variant_);
149 }
150 else if (g_variant_is_of_type(variant_, G_VARIANT_TYPE("(x)")))
151 {
152 g_variant_get(variant_, "(x)", &value);
153 }
154 else
155 {
156 auto const& variant = GetVariant();
157 if (variant)
158 return variant.GetInt64();
159
160 LOG_ERROR(logger) << "You're trying to extract an Int64 from a variant which is of type "
161 << g_variant_type_peek_string(g_variant_get_type(variant_));
162 }
163
164 return static_cast<int64_t>(value);
165}225}
166226
167uint64_t Variant::GetUInt64() const227uint64_t Variant::GetUInt64() const
168{228{
169 guint64 value = 0;229 return get_numeric_value<uint64_t, guint64>(variant_, "t", "(t)");
170
171 if (!variant_)
172 return static_cast<uint64_t>(value);
173
174 if (g_variant_is_of_type(variant_, G_VARIANT_TYPE_UINT64))
175 {
176 value = g_variant_get_uint64(variant_);
177 }
178 else if (g_variant_is_of_type(variant_, G_VARIANT_TYPE("(t)")))
179 {
180 g_variant_get(variant_, "(t)", &value);
181 }
182 else
183 {
184 auto const& variant = GetVariant();
185 if (variant)
186 return variant.GetUInt64();
187
188 LOG_ERROR(logger) << "You're trying to extract an UInt64 from a variant which is of type "
189 << g_variant_type_peek_string(g_variant_get_type(variant_));
190 }
191
192 return static_cast<uint64_t>(value);
193}230}
194231
195bool Variant::GetBool() const232bool Variant::GetBool() const
196{233{
197 gboolean value = FALSE;234 return get_numeric_value<bool, gboolean>(variant_, "b", "(b)");
198
199 if (!variant_)
200 return (value != FALSE);
201
202 if (g_variant_is_of_type(variant_, G_VARIANT_TYPE_BOOLEAN))
203 {
204 value = g_variant_get_boolean(variant_);
205 }
206 else if (g_variant_is_of_type(variant_, G_VARIANT_TYPE("(b)")))
207 {
208 g_variant_get(variant_, "(b)", &value);
209 }
210 else
211 {
212 auto const& variant = GetVariant();
213 if (variant)
214 return variant.GetBool();
215
216 LOG_ERROR(logger) << "You're trying to extract a Boolean from a variant which is of type "
217 << g_variant_type_peek_string(g_variant_get_type(variant_));
218 }
219
220 return (value != FALSE);
221}235}
222236
223double Variant::GetDouble() const237double Variant::GetDouble() const
224{238{
225 double value = 0.0;239 return get_numeric_value<double, gdouble>(variant_, "d", "(d)");
226
227 if (!variant_)
228 return value;
229
230 if (g_variant_is_of_type(variant_, G_VARIANT_TYPE_DOUBLE))
231 {
232 value = g_variant_get_double(variant_);
233 }
234 else if (g_variant_is_of_type(variant_, G_VARIANT_TYPE("(d)")))
235 {
236 g_variant_get(variant_, "(d)", &value);
237 }
238 else
239 {
240 auto const& variant = GetVariant();
241 if (variant)
242 return variant.GetDouble();
243
244 LOG_ERROR(logger) << "You're trying to extract a Double from a variant which is of type "
245 << g_variant_type_peek_string(g_variant_get_type(variant_));
246 }
247
248 return value;
249}240}
250241
251float Variant::GetFloat() const242float Variant::GetFloat() const
@@ -260,18 +251,12 @@
260 if (!variant_)251 if (!variant_)
261 return value;252 return value;
262253
263 if (g_variant_is_of_type(variant_, G_VARIANT_TYPE_VARIANT))254 value = get_variant(variant_);
264 {255
265 value = Variant(g_variant_get_variant(variant_), StealRef());256 if (!value)
266 }257 {
267 else if (g_variant_is_of_type(variant_, G_VARIANT_TYPE("(v)")))258 LOG_ERROR(logger) << "You're trying to extract a 'v' from a variant which is of type '"
268 {259 << g_variant_type_peek_string(g_variant_get_type(variant_)) << "'";
269 g_variant_get(variant_, "(v)", &value);
270 }
271 else
272 {
273 LOG_ERROR(logger) << "You're trying to extract a Variant from a variant which is of type "
274 << g_variant_type_peek_string(g_variant_get_type(variant_));
275 }260 }
276261
277 return value;262 return value;
@@ -304,22 +289,6 @@
304 return true;289 return true;
305}290}
306291
307Variant Variant::FromHints(HintsMap const& hints)
308{
309 GVariantBuilder b;
310 g_variant_builder_init(&b, G_VARIANT_TYPE("a{sv}"));
311
312 for (glib::HintsMap::const_iterator it = hints.begin(); it != hints.end(); ++it)
313 {
314 const gchar* key = it->first.c_str();
315 GVariant* ptr = it->second;
316
317 g_variant_builder_add(&b, "{sv}", key, ptr);
318 }
319
320 return g_variant_builder_end(&b);
321}
322
323void Variant::swap(Variant& other)292void Variant::swap(Variant& other)
324{293{
325 std::swap(this->variant_, other.variant_);294 std::swap(this->variant_, other.variant_);
@@ -340,6 +309,21 @@
340 return *this;309 return *this;
341}310}
342311
312Variant& Variant::operator=(std::nullptr_t) { return operator=(Variant()); }
313Variant& Variant::operator=(HintsMap const& map) { return operator=(Variant(map)); }
314Variant& Variant::operator=(std::string const& value) { return operator=(Variant(value)); }
315Variant& Variant::operator=(const char* value) { return operator=(Variant(value)); }
316Variant& Variant::operator=(unsigned char value) { return operator=(Variant(value)); }
317Variant& Variant::operator=(int16_t value) { return operator=(Variant(value)); }
318Variant& Variant::operator=(uint16_t value) { return operator=(Variant(value)); }
319Variant& Variant::operator=(int32_t value) { return operator=(Variant(value)); }
320Variant& Variant::operator=(uint32_t value) { return operator=(Variant(value)); }
321Variant& Variant::operator=(int64_t value) { return operator=(Variant(value)); }
322Variant& Variant::operator=(uint64_t value) { return operator=(Variant(value)); }
323Variant& Variant::operator=(bool value) { return operator=(Variant(value)); }
324Variant& Variant::operator=(double value) { return operator=(Variant(value)); }
325Variant& Variant::operator=(float value) { return operator=(Variant(value)); }
326
343Variant::operator GVariant* () const327Variant::operator GVariant* () const
344{328{
345 return variant_;329 return variant_;
@@ -396,90 +380,116 @@
396380
397namespace variant381namespace variant
398{382{
383using namespace glib;
399384
400BuilderWrapper::BuilderWrapper(GVariantBuilder* builder)385BuilderWrapper::BuilderWrapper(GVariantBuilder* builder)
401 : builder_(builder)386 : builder_(builder)
402{}387{}
403388
404BuilderWrapper& BuilderWrapper::add(char const* name, bool value)389BuilderWrapper& BuilderWrapper::add(std::string const& name, ValueType type, std::vector<Variant> const& values)
405{390{
406 g_variant_builder_add(builder_, "{sv}", name, g_variant_new_boolean(value));391 GVariantBuilder array;
407 return *this;392 g_variant_builder_init(&array, G_VARIANT_TYPE("av"));
408}393 g_variant_builder_add(&array, "v", g_variant_new_uint32(static_cast<uint32_t>(type)));
409394
410BuilderWrapper& BuilderWrapper::add(char const* name, char const* value)395 for (auto const& value : values)
411{396 g_variant_builder_add(&array, "v", static_cast<GVariant*>(value));
412 if (value)397
413 g_variant_builder_add(builder_, "{sv}", name, g_variant_new_string(value));398 g_variant_builder_add(builder_, "{sv}", name.c_str(), g_variant_builder_end(&array));
414 else399
415 g_variant_builder_add(builder_, "{sv}", name, g_variant_new_string(""));400 return *this;
416401}
417 return *this;402
418}403BuilderWrapper& BuilderWrapper::add(std::string const& name, bool value)
419404{
420BuilderWrapper& BuilderWrapper::add(char const* name, std::string const& value)405 return add(name, ValueType::SIMPLE, {Variant(value)});
421{406}
422 g_variant_builder_add(builder_, "{sv}", name,407
423 g_variant_new_string(value.c_str()));408BuilderWrapper& BuilderWrapper::add(std::string const& name, char const* value)
424 return *this;409{
425}410 return add(name, ValueType::SIMPLE, {Variant(value)});
426411}
427BuilderWrapper& BuilderWrapper::add(char const* name, int16_t value)412
428{413BuilderWrapper& BuilderWrapper::add(std::string const& name, std::string const& value)
429 g_variant_builder_add(builder_, "{sv}", name, g_variant_new_int16(value));414{
430 return *this;415 return add(name, ValueType::SIMPLE, {Variant(value)});
431}416}
432417
433BuilderWrapper& BuilderWrapper::add(char const* name, int32_t value)418BuilderWrapper& BuilderWrapper::add(std::string const& name, int16_t value)
434{419{
435 g_variant_builder_add(builder_, "{sv}", name, g_variant_new_int32(value));420 return add(name, ValueType::SIMPLE, {Variant(value)});
436 return *this;421}
437}422
438423BuilderWrapper& BuilderWrapper::add(std::string const& name, int32_t value)
439BuilderWrapper& BuilderWrapper::add(char const* name, int64_t value)424{
440{425 return add(name, ValueType::SIMPLE, {Variant(value)});
441 g_variant_builder_add(builder_, "{sv}", name, g_variant_new_int64(value));426}
442 return *this;427
443}428BuilderWrapper& BuilderWrapper::add(std::string const& name, int64_t value)
444429{
445BuilderWrapper& BuilderWrapper::add(char const* name, uint16_t value)430 return add(name, ValueType::SIMPLE, {Variant(value)});
446{431}
447 g_variant_builder_add(builder_, "{sv}", name, g_variant_new_uint16(value));432
448 return *this;433BuilderWrapper& BuilderWrapper::add(std::string const& name, uint16_t value)
449}434{
450435 return add(name, ValueType::SIMPLE, {Variant(value)});
451BuilderWrapper& BuilderWrapper::add(char const* name, uint32_t value)436}
452{437
453 g_variant_builder_add(builder_, "{sv}", name, g_variant_new_uint32(value));438BuilderWrapper& BuilderWrapper::add(std::string const& name, uint32_t value)
454 return *this;439{
455}440 return add(name, ValueType::SIMPLE, {Variant(value)});
456441}
457BuilderWrapper& BuilderWrapper::add(char const* name, uint64_t value)442
458{443BuilderWrapper& BuilderWrapper::add(std::string const& name, uint64_t value)
459 g_variant_builder_add(builder_, "{sv}", name, g_variant_new_uint64(value));444{
460 return *this;445 return add(name, ValueType::SIMPLE, {Variant(value)});
461}446}
462447
463BuilderWrapper& BuilderWrapper::add(char const* name, float value)448BuilderWrapper& BuilderWrapper::add(std::string const& name, float value)
464{449{
465 g_variant_builder_add(builder_, "{sv}", name, g_variant_new_double(value));450 return add(name, ValueType::SIMPLE, {Variant(value)});
466 return *this;451}
467}452
468453BuilderWrapper& BuilderWrapper::add(std::string const& name, double value)
469BuilderWrapper& BuilderWrapper::add(char const* name, double value)454{
470{455 return add(name, ValueType::SIMPLE, {Variant(value)});
471 g_variant_builder_add(builder_, "{sv}", name, g_variant_new_double(value));456}
472 return *this;457
473}458BuilderWrapper& BuilderWrapper::add(std::string const& name, GVariant* value)
474459{
475BuilderWrapper& BuilderWrapper::add(char const* name, GVariant* value)460 return add(name, ValueType::SIMPLE, {Variant(value)});
476{461}
477 g_variant_builder_add(builder_, "{sv}", name, value);462
478 return *this;463BuilderWrapper& BuilderWrapper::add(std::string const& name, glib::Variant const& value)
464{
465 return add(name, ValueType::SIMPLE, {value});
466}
467
468BuilderWrapper& BuilderWrapper::add(std::string const& name, nux::Rect const& r)
469{
470 return add(name, ValueType::RECTANGLE, {Variant(r.x), Variant(r.y), Variant(r.width), Variant(r.height)});
471}
472
473BuilderWrapper& BuilderWrapper::add(std::string const& name, nux::Point const& p)
474{
475 return add(name, ValueType::POINT, {Variant(p.x), Variant(p.y)});
476}
477
478BuilderWrapper& BuilderWrapper::add(std::string const& name, nux::Size const& s)
479{
480 return add(name, ValueType::SIZE, {Variant(s.width), Variant(s.height)});
481}
482
483BuilderWrapper& BuilderWrapper::add(std::string const& name, nux::Color const& c)
484{
485 int32_t r = c.red * 255.0f, g = c.green * 255.0f, b = c.blue * 255.0f, a = c.alpha * 255.0f;
486 return add(name, ValueType::COLOR, {Variant(r), Variant(g), Variant(b), Variant(a)});
479}487}
480488
481BuilderWrapper& BuilderWrapper::add(nux::Rect const& value)489BuilderWrapper& BuilderWrapper::add(nux::Rect const& value)
482{490{
491 add("globalRect", value);
492 // Legacy support
483 add("x", value.x);493 add("x", value.x);
484 add("y", value.y);494 add("y", value.y);
485 add("width", value.width);495 add("width", value.width);
486496
=== modified file 'UnityCore/Variant.h'
--- UnityCore/Variant.h 2013-08-23 17:21:44 +0000
+++ UnityCore/Variant.h 2013-11-06 08:52:17 +0000
@@ -1,6 +1,6 @@
1// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-1// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
2/*2/*
3 * Copyright (C) 2011 Canonical Ltd3 * Copyright (C) 2011-2013 Canonical Ltd
4 *4 *
5 * This program is free software: you can redistribute it and/or modify5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License version 3 as6 * it under the terms of the GNU General Public License version 3 as
@@ -15,6 +15,7 @@
15 * along with this program. If not, see <http://www.gnu.org/licenses/>.15 * along with this program. If not, see <http://www.gnu.org/licenses/>.
16 *16 *
17 * Authored by: Tim Penhey <tim.penhey@canonical.com>17 * Authored by: Tim Penhey <tim.penhey@canonical.com>
18 * Marco Trevisan <marco.trevisan@canonical.com>
18 */19 */
1920
20#ifndef UNITY_VARIANT_H21#ifndef UNITY_VARIANT_H
@@ -22,9 +23,11 @@
2223
23#include <string>24#include <string>
24#include <glib.h>25#include <glib.h>
26#include <vector>
25#include <map>27#include <map>
2628
27#include <NuxCore/Rect.h>29#include <NuxCore/Rect.h>
30#include <NuxCore/Color.h>
2831
29namespace unity32namespace unity
30{33{
@@ -45,10 +48,28 @@
45 Variant(GVariant*);48 Variant(GVariant*);
46 Variant(GVariant*, StealRef const&);49 Variant(GVariant*, StealRef const&);
4750
51 Variant(HintsMap const& hints);
52 explicit Variant(std::nullptr_t);
53 explicit Variant(std::string const&);
54 explicit Variant(const char*);
55 explicit Variant(unsigned char);
56 explicit Variant(int16_t);
57 explicit Variant(uint16_t);
58 explicit Variant(int32_t);
59 explicit Variant(uint32_t);
60 explicit Variant(int64_t);
61 explicit Variant(uint64_t);
62 explicit Variant(bool);
63 explicit Variant(double);
64 explicit Variant(float);
65
48 Variant(Variant const&);66 Variant(Variant const&);
49 ~Variant();67 ~Variant();
5068
51 std::string GetString() const;69 std::string GetString() const;
70 unsigned char GetByte() const;
71 int16_t GetInt16() const;
72 uint16_t GetUInt16() const;
52 int32_t GetInt32() const;73 int32_t GetInt32() const;
53 uint32_t GetUInt32() const;74 uint32_t GetUInt32() const;
54 int64_t GetInt64() const;75 int64_t GetInt64() const;
@@ -59,11 +80,24 @@
59 Variant GetVariant() const;80 Variant GetVariant() const;
6081
61 bool ASVToHints(HintsMap& hints) const;82 bool ASVToHints(HintsMap& hints) const;
62 static Variant FromHints(HintsMap const& hints);
6383
64 void swap(Variant&);84 void swap(Variant&);
65 Variant& operator=(GVariant*);85 Variant& operator=(GVariant*);
66 Variant& operator=(Variant);86 Variant& operator=(Variant);
87 Variant& operator=(HintsMap const&);
88 Variant& operator=(std::nullptr_t);
89 Variant& operator=(std::string const&);
90 Variant& operator=(const char*);
91 Variant& operator=(unsigned char);
92 Variant& operator=(int16_t);
93 Variant& operator=(uint16_t);
94 Variant& operator=(int32_t);
95 Variant& operator=(uint32_t);
96 Variant& operator=(int64_t);
97 Variant& operator=(uint64_t);
98 Variant& operator=(bool);
99 Variant& operator=(double);
100 Variant& operator=(float);
67 operator GVariant*() const;101 operator GVariant*() const;
68 operator bool() const;102 operator bool() const;
69103
@@ -78,24 +112,44 @@
78112
79class BuilderWrapper113class BuilderWrapper
80{114{
115// XXX: Move this to Introspectable
81public:116public:
117 enum class ValueType : uint32_t
118 {
119 // This should match the Autopilot Type IDs
120 SIMPLE = 0,
121 RECTANGLE = 1,
122 POINT = 2,
123 SIZE = 3,
124 COLOR = 4,
125 DATE = 5,
126 TIME = 6,
127 };
128
82 BuilderWrapper(GVariantBuilder* builder);129 BuilderWrapper(GVariantBuilder* builder);
83130
84 BuilderWrapper& add(char const* name, bool value);131 BuilderWrapper& add(std::string const& name, bool);
85 BuilderWrapper& add(char const* name, char const* value);132 BuilderWrapper& add(std::string const& name, const char*);
86 BuilderWrapper& add(char const* name, std::string const& value);133 BuilderWrapper& add(std::string const& name, std::string const&);
87 BuilderWrapper& add(char const* name, int16_t value);134 BuilderWrapper& add(std::string const& name, int16_t);
88 BuilderWrapper& add(char const* name, int32_t value);135 BuilderWrapper& add(std::string const& name, int32_t);
89 BuilderWrapper& add(char const* name, int64_t value);136 BuilderWrapper& add(std::string const& name, int64_t);
90 BuilderWrapper& add(char const* name, uint16_t value);137 BuilderWrapper& add(std::string const& name, uint16_t);
91 BuilderWrapper& add(char const* name, uint32_t value);138 BuilderWrapper& add(std::string const& name, uint32_t);
92 BuilderWrapper& add(char const* name, uint64_t value);139 BuilderWrapper& add(std::string const& name, uint64_t);
93 BuilderWrapper& add(char const* name, float value);140 BuilderWrapper& add(std::string const& name, float);
94 BuilderWrapper& add(char const* name, double value);141 BuilderWrapper& add(std::string const& name, double);
95 BuilderWrapper& add(char const* name, GVariant* value);142 BuilderWrapper& add(std::string const& name, glib::Variant const&);
96 BuilderWrapper& add(nux::Rect const& value);143 BuilderWrapper& add(std::string const& name, GVariant*);
144
145 BuilderWrapper& add(std::string const& name, nux::Rect const&);
146 BuilderWrapper& add(std::string const& name, nux::Point const&);
147 BuilderWrapper& add(std::string const& name, nux::Size const&);
148 BuilderWrapper& add(std::string const& name, nux::Color const&);
149 BuilderWrapper& add(nux::Rect const&);
97150
98private:151private:
152 BuilderWrapper& add(std::string const& name, ValueType, std::vector<glib::Variant> const&);
99 GVariantBuilder* builder_;153 GVariantBuilder* builder_;
100};154};
101155
102156
=== modified file 'dash/FilterBar.cpp'
--- dash/FilterBar.cpp 2013-01-21 18:05:47 +0000
+++ dash/FilterBar.cpp 2013-11-06 08:52:17 +0000
@@ -144,11 +144,7 @@
144144
145void FilterBar::AddProperties(GVariantBuilder* builder)145void FilterBar::AddProperties(GVariantBuilder* builder)
146{146{
147 variant::BuilderWrapper(builder)147 variant::BuilderWrapper(builder).add(GetAbsoluteGeometry());
148 .add("x", GetAbsoluteX())
149 .add("y", GetAbsoluteY())
150 .add("width", GetAbsoluteWidth())
151 .add("height", GetAbsoluteHeight());
152}148}
153149
154} // namespace dash150} // namespace dash
155151
=== modified file 'dash/PlacesGroup.cpp'
--- dash/PlacesGroup.cpp 2013-05-01 18:11:32 +0000
+++ dash/PlacesGroup.cpp 2013-11-06 08:52:17 +0000
@@ -649,6 +649,7 @@
649 wrapper.add("header-y", _header_view->GetAbsoluteY());649 wrapper.add("header-y", _header_view->GetAbsoluteY());
650 wrapper.add("header-width", _header_view->GetAbsoluteWidth());650 wrapper.add("header-width", _header_view->GetAbsoluteWidth());
651 wrapper.add("header-height", _header_view->GetAbsoluteHeight());651 wrapper.add("header-height", _header_view->GetAbsoluteHeight());
652 wrapper.add("header-geo", _header_view->GetAbsoluteGeometry());
652 wrapper.add("header-has-keyfocus", HeaderHasKeyFocus());653 wrapper.add("header-has-keyfocus", HeaderHasKeyFocus());
653 wrapper.add("header-is-highlighted", ShouldBeHighlighted());654 wrapper.add("header-is-highlighted", ShouldBeHighlighted());
654 wrapper.add("name", _name->GetText());655 wrapper.add("name", _name->GetText());
@@ -656,22 +657,24 @@
656 wrapper.add("is-expanded", GetExpanded());657 wrapper.add("is-expanded", GetExpanded());
657 wrapper.add("expand-label-is-visible", _expand_label->IsVisible());658 wrapper.add("expand-label-is-visible", _expand_label->IsVisible());
658 wrapper.add("expand-label-y", _expand_label->GetAbsoluteY());659 wrapper.add("expand-label-y", _expand_label->GetAbsoluteY());
660 wrapper.add("expand-label-geo", _expand_label->GetAbsoluteGeometry());
659 wrapper.add("expand-label-baseline", _expand_label->GetBaseline());661 wrapper.add("expand-label-baseline", _expand_label->GetBaseline());
660 wrapper.add("name-label-y", _name->GetAbsoluteY());662 wrapper.add("name-label-y", _name->GetAbsoluteY());
661 wrapper.add("name-label-baseline", _name->GetBaseline());663 wrapper.add("name-label-baseline", _name->GetBaseline());
664 wrapper.add("name-label-geo", _name->GetAbsoluteGeometry());
662}665}
663666
664glib::Variant PlacesGroup::GetCurrentFocus() const667glib::Variant PlacesGroup::GetCurrentFocus() const
665{668{
666 if (_header_view && _header_view->HasKeyFocus())669 if (_header_view && _header_view->HasKeyFocus())
667 {670 {
668 return g_variant_new_string("HeaderView");671 return glib::Variant("HeaderView");
669 }672 }
670 else if (_child_view && _child_view->HasKeyFocus())673 else if (_child_view && _child_view->HasKeyFocus())
671 {674 {
672 return g_variant_new("(si)", "ResultView", _child_view->GetSelectedIndex());675 return g_variant_new("(si)", "ResultView", _child_view->GetSelectedIndex());
673 }676 }
674 return glib::Variant();677 return nullptr;
675}678}
676679
677void PlacesGroup::SetCurrentFocus(glib::Variant const& variant)680void PlacesGroup::SetCurrentFocus(glib::Variant const& variant)
678681
=== modified file 'dash/previews/MusicPaymentPreview.cpp'
--- dash/previews/MusicPaymentPreview.cpp 2013-07-10 15:14:02 +0000
+++ dash/previews/MusicPaymentPreview.cpp 2013-11-06 08:52:17 +0000
@@ -98,9 +98,8 @@
98 {98 {
99 // HACK: We need to think a better way to do this99 // HACK: We need to think a better way to do this
100 auto const& password = password_entry_->text_entry()->GetText();100 auto const& password = password_entry_->text_entry()->GetText();
101 glib::Variant variant_pw(g_variant_new_string(password.c_str()));
102 glib::HintsMap hints {101 glib::HintsMap hints {
103 std::make_pair(MusicPaymentPreview::DATA_PASSWORD_KEY, variant_pw)102 {MusicPaymentPreview::DATA_PASSWORD_KEY, glib::Variant(password)}
104 };103 };
105 preview_model_->PerformAction(id, hints);104 preview_model_->PerformAction(id, hints);
106105
107106
=== modified file 'dash/previews/PaymentPreview.cpp'
--- dash/previews/PaymentPreview.cpp 2013-07-10 15:14:02 +0000
+++ dash/previews/PaymentPreview.cpp 2013-11-06 08:52:17 +0000
@@ -170,13 +170,7 @@
170170
171void OverlaySpinner::AddProperties(GVariantBuilder* builder)171void OverlaySpinner::AddProperties(GVariantBuilder* builder)
172{172{
173 nux::Geometry geo = GetGeometry();173 variant::BuilderWrapper(builder).add(GetAbsoluteGeometry());
174
175 variant::BuilderWrapper(builder)
176 .add("x", geo.x)
177 .add("y", geo.y)
178 .add("width", geo.width)
179 .add("height", geo.height);
180}174}
181175
182176
183177
=== modified file 'dash/previews/PreviewNavigator.cpp'
--- dash/previews/PreviewNavigator.cpp 2012-11-29 10:19:01 +0000
+++ dash/previews/PreviewNavigator.cpp 2013-11-06 08:52:17 +0000
@@ -70,6 +70,7 @@
70 .add("button-y", texture_->GetAbsoluteY())70 .add("button-y", texture_->GetAbsoluteY())
71 .add("button-width", texture_->GetGeometry().width)71 .add("button-width", texture_->GetGeometry().width)
72 .add("button-height", texture_->GetGeometry().height)72 .add("button-height", texture_->GetGeometry().height)
73 .add("button-geo", texture_->GetAbsoluteGeometry())
73 .add("direction", static_cast<int>(direction_));74 .add("direction", static_cast<int>(direction_));
74}75}
7576
7677
=== modified file 'dash/previews/Track.cpp'
--- dash/previews/Track.cpp 2013-07-01 21:17:59 +0000
+++ dash/previews/Track.cpp 2013-11-06 08:52:17 +0000
@@ -147,7 +147,8 @@
147 .add("playpause-x", track_status_layout_->GetAbsoluteX())147 .add("playpause-x", track_status_layout_->GetAbsoluteX())
148 .add("playpause-y", track_status_layout_->GetAbsoluteX())148 .add("playpause-y", track_status_layout_->GetAbsoluteX())
149 .add("playpause-width", track_status_layout_->GetGeometry().width)149 .add("playpause-width", track_status_layout_->GetGeometry().width)
150 .add("playpause-height", track_status_layout_->GetGeometry().height);150 .add("playpause-height", track_status_layout_->GetGeometry().height)
151 .add("playpause-geo", track_status_layout_->GetAbsoluteGeometry());
151}152}
152153
153void Track::Update(dash::Track const& track)154void Track::Update(dash::Track const& track)
154155
=== modified file 'debian/control'
--- debian/control 2013-10-29 20:50:07 +0000
+++ debian/control 2013-11-06 08:52:17 +0000
@@ -48,7 +48,7 @@
48 libxcb-icccm4-dev,48 libxcb-icccm4-dev,
49 libxfixes-dev (>= 1:5.0.1-1),49 libxfixes-dev (>= 1:5.0.1-1),
50 libxi-dev (>= 2:1.7.1.901),50 libxi-dev (>= 2:1.7.1.901),
51 libxpathselect-dev (>=1.3),51 libxpathselect-dev (>=1.4),
52 libzeitgeist-2.0-dev,52 libzeitgeist-2.0-dev,
53 pkg-config,53 pkg-config,
54 python (>= 2.7),54 python (>= 2.7),
@@ -178,7 +178,7 @@
178 python-testtools,178 python-testtools,
179 python-xdg,179 python-xdg,
180 python-xlib,180 python-xlib,
181 libxpathselect1.3 (>= 1.3),181 libxpathselect1.4 (>= 1.4),
182Description: Autopiloted tests for Unity182Description: Autopiloted tests for Unity
183 We test Unity automatically through autopilot, a framework which enables us183 We test Unity automatically through autopilot, a framework which enables us
184 to trigger keyboard and mouse events on the fly as well as introspecting184 to trigger keyboard and mouse events on the fly as well as introspecting
185185
=== modified file 'launcher/LauncherController.cpp'
--- launcher/LauncherController.cpp 2013-10-21 23:48:47 +0000
+++ launcher/LauncherController.cpp 2013-11-06 08:52:17 +0000
@@ -164,8 +164,7 @@
164164
165 if (selected)165 if (selected)
166 {166 {
167 ubus.SendMessage(UBUS_LAUNCHER_SELECTION_CHANGED,167 ubus.SendMessage(UBUS_LAUNCHER_SELECTION_CHANGED, glib::Variant(selected->tooltip_text()));
168 g_variant_new_string(selected->tooltip_text().c_str()));
169 }168 }
170 });169 });
171170
@@ -1312,12 +1311,12 @@
1312 if (pimpl->launcher_grabbed)1311 if (pimpl->launcher_grabbed)
1313 {1312 {
1314 pimpl->ubus.SendMessage(UBUS_LAUNCHER_START_KEY_NAV,1313 pimpl->ubus.SendMessage(UBUS_LAUNCHER_START_KEY_NAV,
1315 g_variant_new_int32(pimpl->keyboard_launcher_->monitor));1314 glib::Variant(pimpl->keyboard_launcher_->monitor()));
1316 }1315 }
1317 else1316 else
1318 {1317 {
1319 pimpl->ubus.SendMessage(UBUS_LAUNCHER_START_KEY_SWITCHER,1318 pimpl->ubus.SendMessage(UBUS_LAUNCHER_START_KEY_SWITCHER,
1320 g_variant_new_int32(pimpl->keyboard_launcher_->monitor));1319 glib::Variant(pimpl->keyboard_launcher_->monitor()));
1321 }1320 }
13221321
1323 AbstractLauncherIcon::Ptr const& selected = pimpl->model_->Selection();1322 AbstractLauncherIcon::Ptr const& selected = pimpl->model_->Selection();
@@ -1325,7 +1324,7 @@
1325 if (selected)1324 if (selected)
1326 {1325 {
1327 pimpl->ubus.SendMessage(UBUS_LAUNCHER_SELECTION_CHANGED,1326 pimpl->ubus.SendMessage(UBUS_LAUNCHER_SELECTION_CHANGED,
1328 g_variant_new_string(selected->tooltip_text().c_str()));1327 glib::Variant(selected->tooltip_text()));
1329 }1328 }
1330}1329}
13311330
@@ -1338,7 +1337,7 @@
1338 if (selected)1337 if (selected)
1339 {1338 {
1340 pimpl->ubus.SendMessage(UBUS_LAUNCHER_SELECTION_CHANGED,1339 pimpl->ubus.SendMessage(UBUS_LAUNCHER_SELECTION_CHANGED,
1341 g_variant_new_string(selected->tooltip_text().c_str()));1340 glib::Variant(selected->tooltip_text()));
1342 }1341 }
1343}1342}
13441343
@@ -1351,7 +1350,7 @@
1351 if (selected)1350 if (selected)
1352 {1351 {
1353 pimpl->ubus.SendMessage(UBUS_LAUNCHER_SELECTION_CHANGED,1352 pimpl->ubus.SendMessage(UBUS_LAUNCHER_SELECTION_CHANGED,
1354 g_variant_new_string(selected->tooltip_text().c_str()));1353 glib::Variant(selected->tooltip_text()));
1355 }1354 }
1356}1355}
13571356
@@ -1376,12 +1375,12 @@
1376 pimpl->launcher_event_outside_connection_->disconnect();1375 pimpl->launcher_event_outside_connection_->disconnect();
1377 pimpl->launcher_grabbed = false;1376 pimpl->launcher_grabbed = false;
1378 pimpl->ubus.SendMessage(UBUS_LAUNCHER_END_KEY_NAV,1377 pimpl->ubus.SendMessage(UBUS_LAUNCHER_END_KEY_NAV,
1379 g_variant_new_boolean(pimpl->keynav_restore_window_));1378 glib::Variant(pimpl->keynav_restore_window_));
1380 }1379 }
1381 else1380 else
1382 {1381 {
1383 pimpl->ubus.SendMessage(UBUS_LAUNCHER_END_KEY_SWITCHER,1382 pimpl->ubus.SendMessage(UBUS_LAUNCHER_END_KEY_SWITCHER,
1384 g_variant_new_boolean(pimpl->keynav_restore_window_));1383 glib::Variant(pimpl->keynav_restore_window_));
1385 }1384 }
13861385
1387 if (activate)1386 if (activate)
13881387
=== modified file 'launcher/QuicklistView.cpp'
--- launcher/QuicklistView.cpp 2013-10-03 22:31:18 +0000
+++ launcher/QuicklistView.cpp 2013-11-06 08:52:17 +0000
@@ -1303,6 +1303,7 @@
1303 .add(GetAbsoluteGeometry())1303 .add(GetAbsoluteGeometry())
1304 .add("base_x", GetBaseX())1304 .add("base_x", GetBaseX())
1305 .add("base_y", GetBaseY())1305 .add("base_y", GetBaseY())
1306 .add("base", nux::Point(GetBaseX(), GetBaseY()))
1306 .add("active", IsVisible());1307 .add("active", IsVisible());
1307}1308}
13081309
13091310
=== modified file 'launcher/SwitcherController.cpp'
--- launcher/SwitcherController.cpp 2013-10-02 23:36:48 +0000
+++ launcher/SwitcherController.cpp 2013-11-06 08:52:17 +0000
@@ -395,7 +395,7 @@
395 }395 }
396396
397 ubus_manager_.SendMessage(UBUS_SWITCHER_SELECTION_CHANGED,397 ubus_manager_.SendMessage(UBUS_SWITCHER_SELECTION_CHANGED,
398 g_variant_new_string(icon->tooltip_text().c_str()));398 glib::Variant(icon->tooltip_text()));
399 }399 }
400}400}
401401
@@ -497,7 +497,7 @@
497 }497 }
498 }498 }
499499
500 ubus_manager_.SendMessage(UBUS_SWITCHER_END, g_variant_new_boolean(!accept_state));500 ubus_manager_.SendMessage(UBUS_SWITCHER_END, glib::Variant(!accept_state));
501 ubus_manager_.SendMessage(UBUS_SWITCHER_SHOWN, g_variant_new("(bi)", false, obj_->monitor_));501 ubus_manager_.SendMessage(UBUS_SWITCHER_SHOWN, g_variant_new("(bi)", false, obj_->monitor_));
502502
503 sources_.Remove(VIEW_CONSTRUCT_IDLE);503 sources_.Remove(VIEW_CONSTRUCT_IDLE);
504504
=== modified file 'launcher/Tooltip.cpp'
--- launcher/Tooltip.cpp 2013-10-03 22:30:57 +0000
+++ launcher/Tooltip.cpp 2013-11-06 08:52:17 +0000
@@ -559,11 +559,8 @@
559{559{
560 variant::BuilderWrapper(builder)560 variant::BuilderWrapper(builder)
561 .add("text", text)561 .add("text", text)
562 .add("x", GetBaseX())562 .add("active", IsVisible())
563 .add("y", GetBaseY())563 .add(GetAbsoluteGeometry());
564 .add("width", GetBaseWidth())
565 .add("height", GetBaseHeight())
566 .add("active", IsVisible());
567}564}
568565
569} // namespace nux566} // namespace nux
570567
=== modified file 'panel/PanelIndicatorEntryView.cpp'
--- panel/PanelIndicatorEntryView.cpp 2013-05-17 16:02:09 +0000
+++ panel/PanelIndicatorEntryView.cpp 2013-11-06 08:52:17 +0000
@@ -664,6 +664,7 @@
664 .add("menu_y", proxy_->geometry().y)664 .add("menu_y", proxy_->geometry().y)
665 .add("menu_width", proxy_->geometry().width)665 .add("menu_width", proxy_->geometry().width)
666 .add("menu_height", proxy_->geometry().height)666 .add("menu_height", proxy_->geometry().height)
667 .add("menu_geo", proxy_->geometry())
667 .add("focused", IsFocused());668 .add("focused", IsFocused());
668}669}
669670
670671
=== removed file 'plugins/unityshell/src/AggregateMonitor.cpp'
--- plugins/unityshell/src/AggregateMonitor.cpp 2012-03-14 06:24:18 +0000
+++ plugins/unityshell/src/AggregateMonitor.cpp 1970-01-01 00:00:00 +0000
@@ -1,63 +0,0 @@
1// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
2/*
3* Copyright (C) 2011 Canonical Ltd
4*
5* This program is free software: you can redistribute it and/or modify
6* it under the terms of the GNU General Public License version 3 as
7* published by the Free Software Foundation.
8*
9* This program is distributed in the hope that it will be useful,
10* but WITHOUT ANY WARRANTY; without even the implied warranty of
11* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12* GNU General Public License for more details.
13*
14* You should have received a copy of the GNU General Public License
15* along with this program. If not, see <http://www.gnu.org/licenses/>.
16*
17* Authored by: Alex Launi <alex.launi@canonical.com>
18*/
19
20#include "AggregateMonitor.h"
21#include "ElapsedTimeMonitor.h"
22#include <UnityCore/Variant.h>
23
24namespace unity {
25namespace performance {
26
27AggregateMonitor::AggregateMonitor()
28{
29 _monitors.push_back(new ElapsedTimeMonitor());
30}
31
32AggregateMonitor::~AggregateMonitor()
33{
34}
35
36std::string AggregateMonitor::GetName() const
37{
38 return "AggregateMonitor";
39}
40
41void AggregateMonitor::StartMonitor()
42{
43 for (std::list<Monitor*>::iterator iter = _monitors.begin(), end = _monitors.end();
44 iter != end; ++iter)
45 {
46 Monitor* monitor = *iter;
47 monitor->Start();
48 }
49}
50
51void AggregateMonitor::StopMonitor(GVariantBuilder* builder)
52{
53 variant::BuilderWrapper wrapper(builder);
54 for (std::list<Monitor*>::iterator iter = _monitors.begin(), end = _monitors.end();
55 iter != end; ++iter)
56 {
57 Monitor* monitor = *iter;
58 wrapper.add(monitor->GetName().c_str(), monitor->Stop());
59 }
60}
61
62}
63}
640
=== removed file 'plugins/unityshell/src/AggregateMonitor.h'
--- plugins/unityshell/src/AggregateMonitor.h 2011-12-08 04:24:00 +0000
+++ plugins/unityshell/src/AggregateMonitor.h 1970-01-01 00:00:00 +0000
@@ -1,50 +0,0 @@
1// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
2/*
3* Copyright (C) 2011 Canonical Ltd
4*
5* This program is free software: you can redistribute it and/or modify
6* it under the terms of the GNU General Public License version 3 as
7* published by the Free Software Foundation.
8*
9* This program is distributed in the hope that it will be useful,
10* but WITHOUT ANY WARRANTY; without even the implied warranty of
11* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12* GNU General Public License for more details.
13*
14* You should have received a copy of the GNU General Public License
15* along with this program. If not, see <http://www.gnu.org/licenses/>.
16*
17* Authored by: Alex Launi <alex.launi@canonical.com>
18*/
19
20#ifndef UNITY_PERFORMANCE_AGGREGATE_MONITOR
21#define UNITY_PERFORMANCE_AGGREGATE_MONITOR
22
23#include <list>
24#include <string>
25#include <gio/gio.h>
26
27#include "Monitor.h"
28
29namespace unity {
30namespace performance {
31
32class AggregateMonitor : public Monitor
33{
34public:
35 AggregateMonitor();
36 ~AggregateMonitor();
37 std::string GetName() const;
38
39protected:
40 void StartMonitor();
41 void StopMonitor(GVariantBuilder* builder);
42
43private:
44 std::list<Monitor*> _monitors;
45};
46
47}
48}
49
50#endif // UNITY_PERFORMANCE_AGGREGATE_MONITOR
510
=== removed file 'plugins/unityshell/src/ElapsedTimeMonitor.cpp'
--- plugins/unityshell/src/ElapsedTimeMonitor.cpp 2012-11-30 20:22:13 +0000
+++ plugins/unityshell/src/ElapsedTimeMonitor.cpp 1970-01-01 00:00:00 +0000
@@ -1,49 +0,0 @@
1// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
2/*
3* Copyright (C) 2011 Canonical Ltd
4*
5* This program is free software: you can redistribute it and/or modify
6* it under the terms of the GNU General Public License version 3 as
7* published by the Free Software Foundation.
8*
9* This program is distributed in the hope that it will be useful,
10* but WITHOUT ANY WARRANTY; without even the implied warranty of
11* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12* GNU General Public License for more details.
13*
14* You should have received a copy of the GNU General Public License
15* along with this program. If not, see <http://www.gnu.org/licenses/>.
16*
17* Authored by: Alex Launi <alex.launi@canonical.com>
18*/
19
20#include <UnityCore/Variant.h>
21
22#include "ElapsedTimeMonitor.h"
23#include "TimeUtil.h"
24
25namespace unity{
26namespace performance {
27
28std::string ElapsedTimeMonitor::GetName() const
29{
30 return "ElapsedTimeMonitor";
31}
32
33void ElapsedTimeMonitor::StartMonitor()
34{
35 clock_gettime(CLOCK_MONOTONIC, &_start);
36}
37
38void ElapsedTimeMonitor::StopMonitor(GVariantBuilder* builder)
39{
40 struct timespec current;
41 clock_gettime(CLOCK_MONOTONIC, &current);
42 DeltaTime diff = TimeUtil::TimeDelta(&current, &_start);
43
44 variant::BuilderWrapper(builder)
45 .add("elapsed-time", diff);
46}
47
48}
49}
500
=== removed file 'plugins/unityshell/src/ElapsedTimeMonitor.h'
--- plugins/unityshell/src/ElapsedTimeMonitor.h 2011-11-08 18:21:44 +0000
+++ plugins/unityshell/src/ElapsedTimeMonitor.h 1970-01-01 00:00:00 +0000
@@ -1,47 +0,0 @@
1// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
2/*
3* Copyright (C) 2011 Canonical Ltd
4*
5* This program is free software: you can redistribute it and/or modify
6* it under the terms of the GNU General Public License version 3 as
7* published by the Free Software Foundation.
8*
9* This program is distributed in the hope that it will be useful,
10* but WITHOUT ANY WARRANTY; without even the implied warranty of
11* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12* GNU General Public License for more details.
13*
14* You should have received a copy of the GNU General Public License
15* along with this program. If not, see <http://www.gnu.org/licenses/>.
16*
17* Authored by: Alex Launi <alex.launi@canonical.com>
18*/
19
20#ifndef UNITY_PERFORMANCE_ELAPSED_TIME_MONITOR
21#define UNITY_PERFORMANCE_ELAPSED_TIME_MONITOR
22
23#include <glib.h>
24#include <time.h>
25
26#include "Monitor.h"
27
28namespace unity {
29namespace performance {
30
31class ElapsedTimeMonitor : public Monitor
32{
33public:
34 std::string GetName() const;
35
36protected:
37 void StartMonitor();
38 void StopMonitor(GVariantBuilder* builder);
39
40private:
41 struct timespec _start;
42};
43
44}
45}
46
47#endif // UNITY_PERFORMANCE_ELAPSED_TIME_MONITOR
480
=== modified file 'plugins/unityshell/src/unityshell.cpp'
--- plugins/unityshell/src/unityshell.cpp 2013-10-22 16:17:43 +0000
+++ plugins/unityshell/src/unityshell.cpp 2013-11-06 08:52:17 +0000
@@ -745,9 +745,9 @@
745 unsigned int oldGlAddGeometryIndex = uTrayWindow->gWindow->glAddGeometryGetCurrentIndex ();745 unsigned int oldGlAddGeometryIndex = uTrayWindow->gWindow->glAddGeometryGetCurrentIndex ();
746 unsigned int oldGlDrawIndex = uTrayWindow->gWindow->glDrawGetCurrentIndex ();746 unsigned int oldGlDrawIndex = uTrayWindow->gWindow->glDrawGetCurrentIndex ();
747747
748 attrib.opacity = OPAQUE;748 attrib.opacity = COMPIZ_COMPOSITE_OPAQUE;
749 attrib.brightness = BRIGHT;749 attrib.brightness = COMPIZ_COMPOSITE_BRIGHT;
750 attrib.saturation = COLOR;750 attrib.saturation = COMPIZ_COMPOSITE_COLOR;
751751
752 oTransform.toScreenSpace (output, -DEFAULT_Z_CAMERA);752 oTransform.toScreenSpace (output, -DEFAULT_Z_CAMERA);
753753
@@ -3504,6 +3504,7 @@
3504 .add("vertically_maximized", wm.IsWindowVerticallyMaximized(xid))3504 .add("vertically_maximized", wm.IsWindowVerticallyMaximized(xid))
3505 .add("minimized", wm.IsWindowMinimized(xid))3505 .add("minimized", wm.IsWindowMinimized(xid))
3506 .add("scaled", scaled)3506 .add("scaled", scaled)
3507 .add("scaled_close_geo", close_button_geo_)
3507 .add("scaled_close_x", close_button_geo_.x)3508 .add("scaled_close_x", close_button_geo_.x)
3508 .add("scaled_close_y", close_button_geo_.y)3509 .add("scaled_close_y", close_button_geo_.y)
3509 .add("scaled_close_width", close_button_geo_.width)3510 .add("scaled_close_width", close_button_geo_.width)
35103511
=== modified file 'plugins/unityshell/src/unityshell.h'
--- plugins/unityshell/src/unityshell.h 2013-10-21 21:57:54 +0000
+++ plugins/unityshell/src/unityshell.h 2013-11-06 08:52:17 +0000
@@ -32,9 +32,22 @@
32#include <scale/scale.h>32#include <scale/scale.h>
33#include <core/core.h>33#include <core/core.h>
34#include <core/pluginclasshandler.h>34#include <core/pluginclasshandler.h>
35#include <composite/composite.h>
36#include <opengl/opengl.h>35#include <opengl/opengl.h>
3736
37// These fixes some definitions from the composite header
38#ifdef COLOR
39#define COMPIZ_COMPOSITE_COLOR 0xffff
40#undef COLOR
41#endif
42#ifdef OPAQUE
43#define COMPIZ_COMPOSITE_OPAQUE 0xffff
44#undef OPAQUE
45#endif
46#ifdef BRIGHT
47#define COMPIZ_COMPOSITE_BRIGHT 0xffff
48#undef BRIGHT
49#endif
50
38#include "unityshell_options.h"51#include "unityshell_options.h"
3952
40#include "Introspectable.h"53#include "Introspectable.h"
4154
=== modified file 'shutdown/SessionButton.cpp'
--- shutdown/SessionButton.cpp 2013-03-19 14:54:43 +0000
+++ shutdown/SessionButton.cpp 2013-11-06 08:52:17 +0000
@@ -130,6 +130,7 @@
130 unity::variant::BuilderWrapper(builder)130 unity::variant::BuilderWrapper(builder)
131 .add("highlighted", highlighted())131 .add("highlighted", highlighted())
132 .add("label", label())132 .add("label", label())
133 .add("label_color", label_view_->GetTextColor())
133 .add("label_visible", label_view_->GetTextColor() != nux::color::Transparent);134 .add("label_visible", label_view_->GetTextColor() != nux::color::Transparent);
134}135}
135136
136137
=== modified file 'tests/test_glib_variant.cpp'
--- tests/test_glib_variant.cpp 2013-08-23 17:36:51 +0000
+++ tests/test_glib_variant.cpp 2013-11-06 08:52:17 +0000
@@ -71,6 +71,121 @@
71 EXPECT_FALSE(IsFloating(v));71 EXPECT_FALSE(IsFloating(v));
72}72}
7373
74TEST(TestGLibVariant, ConstructNullptr)
75{
76 Variant v(nullptr);
77 EXPECT_FALSE(v);
78}
79
80TEST(TestGLibVariant, ConstructNull)
81{
82 GVariant* value = NULL;
83 Variant v(value);
84 EXPECT_FALSE(v);
85}
86
87TEST(TestGLibVariant, ConstructString)
88{
89 std::string value = "UnityVariant";
90 Variant v(value);
91 EXPECT_EQ(value, g_variant_get_string(v, nullptr));
92}
93
94TEST(TestGLibVariant, ConstructCharString)
95{
96 const char* value = "UnityVariantCharStr";
97 Variant v(value);
98 EXPECT_STREQ(value, g_variant_get_string(v, nullptr));
99}
100
101TEST(TestGLibVariant, ConstructByte)
102{
103 unsigned char value = g_random_int_range(0, 256);
104 Variant v(value);
105 EXPECT_EQ(value, g_variant_get_byte(v));
106}
107
108TEST(TestGLibVariant, ConstructInt16)
109{
110 int16_t value = g_random_int_range(G_MININT16, G_MAXINT16);
111 Variant v(value);
112 EXPECT_EQ(value, g_variant_get_int16(v));
113}
114
115TEST(TestGLibVariant, ConstructUInt16)
116{
117 uint16_t value = g_random_int_range(0, G_MAXUINT16);
118 Variant v(value);
119 EXPECT_EQ(value, g_variant_get_uint16(v));
120}
121
122TEST(TestGLibVariant, ConstructInt32)
123{
124 int32_t value = g_random_int_range(G_MININT32, G_MAXINT32);
125 Variant v(value);
126 EXPECT_EQ(value, g_variant_get_int32(v));
127}
128
129TEST(TestGLibVariant, ConstructUInt32)
130{
131 uint32_t value = g_random_int();
132 Variant v(value);
133 EXPECT_EQ(value, g_variant_get_uint32(v));
134}
135
136TEST(TestGLibVariant, ConstructInt64)
137{
138 int64_t value = g_random_int_range(G_MININT, G_MAXINT);
139 Variant v(value);
140 EXPECT_EQ(value, g_variant_get_int64(v));
141}
142
143TEST(TestGLibVariant, ConstructUInt64)
144{
145 uint64_t value = g_random_int();
146 Variant v(value);
147 EXPECT_EQ(value, g_variant_get_uint64(v));
148}
149
150TEST(TestGLibVariant, ConstructBool)
151{
152 bool value = g_random_int();
153 Variant v(value);
154 EXPECT_EQ(value, g_variant_get_boolean(v));
155}
156
157TEST(TestGLibVariant, ConstructDouble)
158{
159 double value = g_random_int();
160 Variant v(value);
161 EXPECT_DOUBLE_EQ(value, g_variant_get_double(v));
162}
163
164TEST(TestGLibVariant, ConstructFloat)
165{
166 float value = g_random_int();
167 Variant v(value);
168 EXPECT_FLOAT_EQ(value, static_cast<float>(g_variant_get_double(v)));
169}
170
171TEST(TestGLibVariant, ConstructNumericInt)
172{
173 Variant v0(0);
174 EXPECT_EQ(0, v0.GetInt32());
175
176 Variant v1(123456789);
177 EXPECT_EQ(123456789, v1.GetInt32());
178}
179
180TEST(TestGLibVariant, ConstructNumericDouble)
181{
182 Variant v0(0.0f);
183 EXPECT_EQ(0.0f, v0.GetDouble());
184
185 Variant v1(0.987654321);
186 EXPECT_EQ(0.987654321, v1.GetDouble());
187}
188
74TEST(TestGLibVariant, Copy)189TEST(TestGLibVariant, Copy)
75{190{
76 Variant v1 (g_variant_new_string ("bar"));191 Variant v1 (g_variant_new_string ("bar"));
@@ -108,6 +223,179 @@
108 EXPECT_TRUE(ValuesEqual(v, raw_variant));223 EXPECT_TRUE(ValuesEqual(v, raw_variant));
109}224}
110225
226TEST(TestGLibVariant, ConstructHintsMap)
227{
228 Variant v({
229 {"charstring-key", g_variant_new_string("charstring-value")},
230 {"string-key", g_variant_new_string(std::string("string-value").c_str())},
231 {"gint32-key", g_variant_new_int32(-1)},
232 {"guint32-key", g_variant_new_uint32(2)},
233 {"gint64-key", g_variant_new_int64(-3)},
234 {"guint64-key", g_variant_new_uint64(4)},
235 {"float-key", g_variant_new_double((float)1.1)},
236 {"double-key", g_variant_new_double(2.2)},
237 {"bool-key", g_variant_new_boolean(true)},
238 {"variant-key", g_variant_new_int32(123)}
239 });
240
241 EXPECT_EQ("charstring-value", Variant(g_variant_lookup_value(v, "charstring-key", nullptr)).GetString());
242 EXPECT_EQ("string-value", Variant(g_variant_lookup_value(v, "string-key", nullptr)).GetString());
243 EXPECT_EQ(-1, Variant(g_variant_lookup_value(v, "gint32-key", nullptr)).GetInt32());
244 EXPECT_EQ(2, Variant(g_variant_lookup_value(v, "guint32-key", nullptr)).GetUInt32());
245 EXPECT_EQ(-3, Variant(g_variant_lookup_value(v, "gint64-key", nullptr)).GetInt64());
246 EXPECT_EQ(4, Variant(g_variant_lookup_value(v, "guint64-key", nullptr)).GetUInt64());
247 EXPECT_FLOAT_EQ(1.1, Variant(g_variant_lookup_value(v, "float-key", nullptr)).GetFloat());
248 EXPECT_DOUBLE_EQ(2.2, Variant(g_variant_lookup_value(v, "double-key", nullptr)).GetDouble());
249 EXPECT_EQ(true, Variant(g_variant_lookup_value(v, "bool-key", nullptr)).GetBool());
250 EXPECT_EQ(123, Variant(g_variant_lookup_value(v, "variant-key", nullptr)).GetInt32());
251}
252
253TEST(TestGLibVariant, AssignString)
254{
255 std::string value = "UnityVariant";
256 Variant v;
257 v = value;
258 EXPECT_EQ(value, g_variant_get_string(v, nullptr));
259}
260
261TEST(TestGLibVariant, AssignCharString)
262{
263 const char* value = "UnityVariantCharStr";
264 Variant v;
265 v = value;
266 EXPECT_STREQ(value, g_variant_get_string(v, nullptr));
267}
268
269TEST(TestGLibVariant, AssignByte)
270{
271 unsigned char value = g_random_int_range(0, 256);
272 Variant v;
273 v = value;
274 EXPECT_EQ(value, g_variant_get_byte(v));
275}
276
277TEST(TestGLibVariant, AssignInt16)
278{
279 int16_t value = g_random_int_range(G_MININT16, G_MAXINT16);
280 Variant v;
281 v = value;
282 EXPECT_EQ(value, g_variant_get_int16(v));
283}
284
285TEST(TestGLibVariant, AssignUInt16)
286{
287 uint16_t value = g_random_int_range(0, G_MAXUINT16);
288 Variant v;
289 v = value;
290 EXPECT_EQ(value, g_variant_get_uint16(v));
291}
292
293TEST(TestGLibVariant, AssignInt32)
294{
295 int32_t value = g_random_int_range(G_MININT32, G_MAXINT32);
296 Variant v;
297 v = value;
298 EXPECT_EQ(value, g_variant_get_int32(v));
299}
300
301TEST(TestGLibVariant, AssignUInt32)
302{
303 uint32_t value = g_random_int();
304 Variant v;
305 v = value;
306 EXPECT_EQ(value, g_variant_get_uint32(v));
307}
308
309TEST(TestGLibVariant, AssignInt64)
310{
311 int64_t value = g_random_int_range(G_MININT, G_MAXINT);
312 Variant v;
313 v = value;
314 EXPECT_EQ(value, g_variant_get_int64(v));
315}
316
317TEST(TestGLibVariant, AssignUInt64)
318{
319 uint64_t value = g_random_int();
320 Variant v;
321 v = value;
322 EXPECT_EQ(value, g_variant_get_uint64(v));
323}
324
325TEST(TestGLibVariant, AssignBool)
326{
327 bool value = g_random_int();
328 Variant v;
329 v = value;
330 EXPECT_EQ(value, g_variant_get_boolean(v));
331}
332
333TEST(TestGLibVariant, AssignDouble)
334{
335 double value = g_random_int();
336 Variant v;
337 v = value;
338 EXPECT_DOUBLE_EQ(value, g_variant_get_double(v));
339}
340
341TEST(TestGLibVariant, AssignFloat)
342{
343 float value = g_random_int();
344 Variant v;
345 v = value;
346 EXPECT_FLOAT_EQ(value, static_cast<float>(g_variant_get_double(v)));
347}
348
349TEST(TestGLibVariant, AssignNumericInt)
350{
351 Variant v0;
352 v0 = 0;
353 EXPECT_EQ(0, v0.GetInt32());
354
355 Variant v1;
356 v1 = 123456789;
357 EXPECT_EQ(123456789, v1.GetInt32());
358}
359
360TEST(TestGLibVariant, AssignNumericDouble)
361{
362 Variant v0;
363 v0 = 0.0f;
364 EXPECT_EQ(0.0f, v0.GetDouble());
365
366 Variant v1;
367 v1 = 0.987654321;
368 EXPECT_EQ(0.987654321, v1.GetDouble());
369}
370
371TEST(TestGLibVariant, AssignHintsMap)
372{
373 Variant v;
374 v = {
375 {"charstring-key", g_variant_new_string("charstring-value")},
376 {"string-key", g_variant_new_string(std::string("string-value").c_str())},
377 {"gint32-key", g_variant_new_int32(-1)},
378 {"guint32-key", g_variant_new_uint32(2)},
379 {"gint64-key", g_variant_new_int64(-3)},
380 {"guint64-key", g_variant_new_uint64(4)},
381 {"float-key", g_variant_new_double((float)1.1)},
382 {"double-key", g_variant_new_double(2.2)},
383 {"bool-key", g_variant_new_boolean(true)},
384 {"variant-key", g_variant_new_int32(123)}
385 };
386
387 EXPECT_EQ("charstring-value", Variant(g_variant_lookup_value(v, "charstring-key", nullptr)).GetString());
388 EXPECT_EQ("string-value", Variant(g_variant_lookup_value(v, "string-key", nullptr)).GetString());
389 EXPECT_EQ(-1, Variant(g_variant_lookup_value(v, "gint32-key", nullptr)).GetInt32());
390 EXPECT_EQ(2, Variant(g_variant_lookup_value(v, "guint32-key", nullptr)).GetUInt32());
391 EXPECT_EQ(-3, Variant(g_variant_lookup_value(v, "gint64-key", nullptr)).GetInt64());
392 EXPECT_EQ(4, Variant(g_variant_lookup_value(v, "guint64-key", nullptr)).GetUInt64());
393 EXPECT_FLOAT_EQ(1.1, Variant(g_variant_lookup_value(v, "float-key", nullptr)).GetFloat());
394 EXPECT_DOUBLE_EQ(2.2, Variant(g_variant_lookup_value(v, "double-key", nullptr)).GetDouble());
395 EXPECT_EQ(true, Variant(g_variant_lookup_value(v, "bool-key", nullptr)).GetBool());
396 EXPECT_EQ(123, Variant(g_variant_lookup_value(v, "variant-key", nullptr)).GetInt32());
397}
398
111TEST(TestGLibVariant, KeepsRef)399TEST(TestGLibVariant, KeepsRef)
112{400{
113 GVariant *gv = g_variant_new_int32 (456);401 GVariant *gv = g_variant_new_int32 (456);
@@ -141,17 +429,16 @@
141 GVariantBuilder b;429 GVariantBuilder b;
142430
143 g_variant_builder_init (&b, G_VARIANT_TYPE ("a{sv}"));431 g_variant_builder_init (&b, G_VARIANT_TYPE ("a{sv}"));
144 variant::BuilderWrapper bw (&b);432 g_variant_builder_add(&b, "{sv}", "charstring-key", g_variant_new_string("charstring-value"));
145 bw.add ("charstring-key", "charstring-value");433 g_variant_builder_add(&b, "{sv}", "string-key", g_variant_new_string(std::string("string-value").c_str()));
146 bw.add ("string-key", std::string("string-value"));434 g_variant_builder_add(&b, "{sv}", "gint32-key", g_variant_new_int32(-1));
147 bw.add ("gint32-key", (gint32)-1);435 g_variant_builder_add(&b, "{sv}", "guint32-key", g_variant_new_uint32(-2));
148 bw.add ("guint32-key", (guint32)-2);436 g_variant_builder_add(&b, "{sv}", "gint64-key", g_variant_new_int64(-3));
149 bw.add ("gint64-key", (gint64)-3);437 g_variant_builder_add(&b, "{sv}", "guint64-key", g_variant_new_uint64(-4));
150 bw.add ("guint64-key", (guint64)-4);438 g_variant_builder_add(&b, "{sv}", "float-key", g_variant_new_double((float)1.1));
151 bw.add ("float-key", (float)1.1);439 g_variant_builder_add(&b, "{sv}", "double-key", g_variant_new_double(2.2));
152 bw.add ("double-key", (double)2.2);440 g_variant_builder_add(&b, "{sv}", "bool-key", g_variant_new_boolean(true));
153 bw.add ("bool-key", true);441 g_variant_builder_add(&b, "{sv}", "variant-key", g_variant_new_int32(123));
154 bw.add ("variant-key", g_variant_new_int32(123));
155442
156 GVariant *dict_variant = g_variant_builder_end (&b);443 GVariant *dict_variant = g_variant_builder_end (&b);
157 Variant dict (g_variant_new_tuple (&dict_variant, 1));444 Variant dict (g_variant_new_tuple (&dict_variant, 1));
@@ -208,13 +495,76 @@
208 EXPECT_EQ(v5.GetString(), "Yeah!!!");495 EXPECT_EQ(v5.GetString(), "Yeah!!!");
209}496}
210497
498TEST(TestGLibVariant, GetByte)
499{
500 guchar value = g_random_int_range(0, 256);
501 Variant v1(g_variant_new_byte(value));
502 EXPECT_EQ(v1.GetByte(), value);
503
504 value = g_random_int_range(0, 256);
505 Variant v2(g_variant_new("(y)", value));
506 EXPECT_EQ(v2.GetByte(), value);
507
508 Variant v3(g_variant_new("(ny)", value, "fooostring"));
509 EXPECT_EQ(v3.GetByte(), 0);
510
511 Variant v4;
512 EXPECT_EQ(v4.GetByte(), 0);
513
514 value = g_random_int_range(0, 256);
515 Variant v5(g_variant_new_variant(g_variant_new_byte(value)));
516 EXPECT_EQ(v5.GetByte(), value);
517}
518
519TEST(TestGLibVariant, GetInt16)
520{
521 gint16 value = g_random_int_range(G_MININT16, G_MAXINT16);
522 Variant v1(g_variant_new_int16(value));
523 EXPECT_EQ(v1.GetInt16(), value);
524
525 value = g_random_int_range(G_MININT16, G_MAXINT16);
526 Variant v2(g_variant_new("(n)", value));
527 EXPECT_EQ(v2.GetInt16(), value);
528
529 Variant v3(g_variant_new("(ns)", value, "fooostring"));
530 EXPECT_EQ(v3.GetInt16(), 0);
531
532 Variant v4;
533 EXPECT_EQ(v4.GetInt16(), 0);
534
535 value = g_random_int_range(G_MININT16, G_MAXINT16);
536 Variant v5(g_variant_new_variant(g_variant_new_int16(value)));
537 EXPECT_EQ(v5.GetInt16(), value);
538}
539
540TEST(TestGLibVariant, GetUInt16)
541{
542 guint16 value = g_random_int();
543 Variant v1(g_variant_new_uint16(value));
544 EXPECT_EQ(v1.GetUInt16(), value);
545
546 value = g_random_int();
547 Variant v2(g_variant_new("(q)", value));
548 EXPECT_EQ(v2.GetUInt16(), value);
549
550 Variant v3(g_variant_new("(qi)", value, G_MAXINT16));
551 EXPECT_EQ(v3.GetUInt16(), 0);
552
553 Variant v4;
554 EXPECT_EQ(v4.GetUInt16(), 0);
555
556 value = g_random_int();
557 Variant v5(g_variant_new_variant(g_variant_new_uint16(value)));
558 EXPECT_EQ(v5.GetUInt16(), value);
559}
560
211TEST(TestGLibVariant, GetInt32)561TEST(TestGLibVariant, GetInt32)
212{562{
213 gint32 value = g_random_int_range(G_MININT, G_MAXINT);563 gint32 value = g_random_int_range(G_MININT32, G_MAXINT32);
214 Variant v1(g_variant_new_int32(value));564 Variant v1(g_variant_new_int32(value));
215 EXPECT_EQ(v1.GetInt32(), value);565 EXPECT_EQ(v1.GetInt32(), value);
216566
217 value = g_random_int_range(G_MININT, G_MAXINT);567 value = g_random_int_range(G_MININT32, G_MAXINT32);
218 Variant v2(g_variant_new("(i)", value));568 Variant v2(g_variant_new("(i)", value));
219 EXPECT_EQ(v2.GetInt32(), value);569 EXPECT_EQ(v2.GetInt32(), value);
220570
@@ -224,7 +574,7 @@
224 Variant v4;574 Variant v4;
225 EXPECT_EQ(v4.GetInt32(), 0);575 EXPECT_EQ(v4.GetInt32(), 0);
226576
227 value = g_random_int_range(G_MININT, G_MAXINT);577 value = g_random_int_range(G_MININT32, G_MAXINT32);
228 Variant v5(g_variant_new_variant(g_variant_new_int32(value)));578 Variant v5(g_variant_new_variant(g_variant_new_int32(value)));
229 EXPECT_EQ(v5.GetInt32(), value);579 EXPECT_EQ(v5.GetInt32(), value);
230}580}
@@ -239,7 +589,7 @@
239 Variant v2(g_variant_new("(u)", value));589 Variant v2(g_variant_new("(u)", value));
240 EXPECT_EQ(v2.GetUInt32(), value);590 EXPECT_EQ(v2.GetUInt32(), value);
241591
242 Variant v3(g_variant_new("(ui)", value, G_MAXINT));592 Variant v3(g_variant_new("(ui)", value, G_MAXUINT32));
243 EXPECT_EQ(v3.GetUInt32(), 0);593 EXPECT_EQ(v3.GetUInt32(), 0);
244594
245 Variant v4;595 Variant v4;
@@ -250,6 +600,48 @@
250 EXPECT_EQ(v5.GetUInt32(), value);600 EXPECT_EQ(v5.GetUInt32(), value);
251}601}
252602
603TEST(TestGLibVariant, GetInt64)
604{
605 gint64 value = g_random_int_range(G_MININT, G_MAXINT);
606 Variant v1(g_variant_new_int64(value));
607 EXPECT_EQ(v1.GetInt64(), value);
608
609 value = g_random_int_range(G_MININT, G_MAXINT);
610 Variant v2(g_variant_new("(x)", value));
611 EXPECT_EQ(v2.GetInt64(), value);
612
613 Variant v3(g_variant_new("(xs)", value, "fooostring"));
614 EXPECT_EQ(v3.GetInt64(), 0);
615
616 Variant v4;
617 EXPECT_EQ(v4.GetInt64(), 0);
618
619 value = g_random_int_range(G_MININT, G_MAXINT);
620 Variant v5(g_variant_new_variant(g_variant_new_int64(value)));
621 EXPECT_EQ(v5.GetInt64(), value);
622}
623
624TEST(TestGLibVariant, GetUInt64)
625{
626 guint64 value = g_random_int();
627 Variant v1(g_variant_new_uint64(value));
628 EXPECT_EQ(v1.GetUInt64(), value);
629
630 value = g_random_int();
631 Variant v2(g_variant_new("(t)", value));
632 EXPECT_EQ(v2.GetUInt64(), value);
633
634 Variant v3(g_variant_new("(ti)", value, G_MAXINT64));
635 EXPECT_EQ(v3.GetUInt64(), 0);
636
637 Variant v4;
638 EXPECT_EQ(v4.GetUInt64(), 0);
639
640 value = g_random_int();
641 Variant v5(g_variant_new_variant(g_variant_new_uint64(value)));
642 EXPECT_EQ(v5.GetUInt64(), value);
643}
644
253TEST(TestGLibVariant, GetBool)645TEST(TestGLibVariant, GetBool)
254{646{
255 gboolean value = (g_random_int() % 2) ? TRUE : FALSE;647 gboolean value = (g_random_int() % 2) ? TRUE : FALSE;
256648
=== modified file 'tests/test_panel_menu_view.cpp'
--- tests/test_panel_menu_view.cpp 2013-10-14 17:36:51 +0000
+++ tests/test_panel_menu_view.cpp 2013-11-06 08:52:17 +0000
@@ -81,7 +81,7 @@
81 UBusManager ubus;81 UBusManager ubus;
82 ubus.SendMessage(UBUS_LAUNCHER_START_KEY_NAV);82 ubus.SendMessage(UBUS_LAUNCHER_START_KEY_NAV);
83 ubus.SendMessage(UBUS_LAUNCHER_SELECTION_CHANGED,83 ubus.SendMessage(UBUS_LAUNCHER_SELECTION_CHANGED,
84 g_variant_new_string(escapedText));84 glib::Variant(escapedText));
85 Utils::WaitUntilMSec([this] {return menu_view.GetCurrentTitle() == escapedText;});85 Utils::WaitUntilMSec([this] {return menu_view.GetCurrentTitle() == escapedText;});
8686
8787
8888
=== modified file 'tests/test_results.cpp'
--- tests/test_results.cpp 2013-07-10 16:07:04 +0000
+++ tests/test_results.cpp 2013-11-06 08:52:17 +0000
@@ -279,8 +279,8 @@
279 local_result_1.comment = "comment";279 local_result_1.comment = "comment";
280 local_result_1.dnd_uri = "dnd_uri";280 local_result_1.dnd_uri = "dnd_uri";
281 281
282 local_result_1.hints["key1"] = g_variant_new_string("value1");282 local_result_1.hints["key1"] = glib::Variant("value1");
283 local_result_1.hints["key2"] = g_variant_new_string("value2");283 local_result_1.hints["key2"] = glib::Variant("value2");
284284
285 glib::Variant variant_value = local_result_1.Variant();285 glib::Variant variant_value = local_result_1.Variant();
286 LocalResult local_result_2 = LocalResult::FromVariant(variant_value);286 LocalResult local_result_2 = LocalResult::FromVariant(variant_value);
287287
=== modified file 'unity-shared/DebugDBusInterface.cpp'
--- unity-shared/DebugDBusInterface.cpp 2013-10-29 20:50:07 +0000
+++ unity-shared/DebugDBusInterface.cpp 2013-11-06 08:52:17 +0000
@@ -1,6 +1,6 @@
1// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-1// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
2/*2/*
3 * Copyright (C) 2010 Canonical Ltd3 * Copyright (C) 2010-2013 Canonical Ltd
4 *4 *
5 * This program is free software: you can redistribute it and/or modify5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License version 3 as6 * it under the terms of the GNU General Public License version 3 as
@@ -15,20 +15,16 @@
15 * along with this program. If not, see <http://www.gnu.org/licenses/>.15 * along with this program. If not, see <http://www.gnu.org/licenses/>.
16 *16 *
17 * Authored by: Alex Launi <alex.launi@canonical.com>17 * Authored by: Alex Launi <alex.launi@canonical.com>
18 * Thomi Richards <thomi.richards@canonical.com>
19 * Marco Trevisan <marco.trevisan@canonical.com>
18 */20 */
1921
20#include <queue>
21#include <iostream>
22#include <fstream>22#include <fstream>
23#include <sstream>23#include <sstream>
24#include <iostream>
25#include <boost/algorithm/string.hpp>24#include <boost/algorithm/string.hpp>
26#include <boost/algorithm/string/split.hpp>
27#include <boost/algorithm/string/classification.hpp>
28#include <boost/bind.hpp>
29#include <NuxCore/Logger.h>25#include <NuxCore/Logger.h>
30#include <NuxCore/LoggingWriter.h>26#include <NuxCore/LoggingWriter.h>
31#include <xpathselect/node.h>27#include <UnityCore/Variant.h>
32#include <xpathselect/xpathselect.h>28#include <xpathselect/xpathselect.h>
33#include <dlfcn.h>29#include <dlfcn.h>
3430
@@ -45,17 +41,25 @@
45{41{
46namespace local42namespace local
47{43{
44 const std::string PROTOCOL_VERSION = "1.4";
45 const std::string XPATH_SELECT_LIB = "libxpathselect.so.1.4";
46
48 std::ofstream output_file;47 std::ofstream output_file;
49 void* xpathselect_driver_ = NULL;48 void* xpathselect_driver_ = nullptr;
5049
51 class IntrospectableAdapter: public xpathselect::Node50 class IntrospectableAdapter : public std::enable_shared_from_this<IntrospectableAdapter>, public xpathselect::Node
52 {51 {
53 public:52 public:
54 typedef std::shared_ptr<IntrospectableAdapter> Ptr;53 typedef std::shared_ptr<IntrospectableAdapter const> Ptr;
55 IntrospectableAdapter(Introspectable* node, std::string const& parent_path)54 IntrospectableAdapter(Introspectable* node, IntrospectableAdapter::Ptr const& parent = nullptr)
56 : node_(node)55 : node_(node)
56 , parent_(parent)
57 , full_path_((parent_ ? parent_->GetPath() : "") + "/" + GetName())
58 {}
59
60 int32_t GetId() const
57 {61 {
58 full_path_ = parent_path + "/" + GetName();62 return node_->GetIntrospectionId();
59 }63 }
6064
61 std::string GetName() const65 std::string GetName() const
@@ -68,145 +72,124 @@
68 return full_path_;72 return full_path_;
69 }73 }
7074
71 bool MatchProperty(const std::string& name, const std::string& value) const75 Node::Ptr GetParent() const
72 {76 {
73 bool matches = false;77 return parent_;
7478 }
75 GVariantBuilder child_builder;79
76 g_variant_builder_init(&child_builder, G_VARIANT_TYPE("a{sv}"));80 bool MatchStringProperty(std::string const& name, std::string const& value) const
77 g_variant_builder_add(&child_builder, "{sv}", "id", g_variant_new_uint64(node_->GetIntrospectionId()));81 {
78 node_->AddProperties(&child_builder);82 auto const& prop_value = GetPropertyValue(name);
79 GVariant* prop_dict = g_variant_builder_end(&child_builder);83
80 GVariant *prop_value = g_variant_lookup_value(prop_dict, name.c_str(), NULL);84 if (prop_value)
8185 {
82 if (prop_value != NULL)86 if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_STRING))
87 {
88 LOG_WARNING(logger) << "Unable to match '"<< name << "', it's not a string property.";
89 return false;
90 }
91
92 return (prop_value.GetString() == value);
93 }
94
95 return false;
96 }
97
98 bool MatchBooleanProperty(std::string const& name, bool value) const
99 {
100 auto const& prop_value = GetPropertyValue(name);
101
102 if (prop_value)
103 {
104 if (!g_variant_is_of_type(prop_value, G_VARIANT_TYPE_BOOLEAN))
105 {
106 LOG_WARNING(logger) << "Unable to match '"<< name << "', it's not a boolean property.";
107 return false;
108 }
109
110 return (prop_value.GetBool() == value);
111 }
112
113 return false;
114 }
115
116 bool MatchIntegerProperty(std::string const& name, int32_t value) const
117 {
118 auto const& prop_value = GetPropertyValue(name);
119
120 if (prop_value)
83 {121 {
84 GVariantClass prop_val_type = g_variant_classify(prop_value);122 GVariantClass prop_val_type = g_variant_classify(prop_value);
85 // it'd be nice to be able to do all this with one method. However, the booleans need123 // it'd be nice to be able to do all this with one method.
86 // special treatment, and I can't figure out how to group all the integer types together124 // I can't figure out how to group all the integer types together
87 // without resorting to template functions.... and we all know what happens when you
88 // start doing that...
89 switch (prop_val_type)125 switch (prop_val_type)
90 {126 {
91 case G_VARIANT_CLASS_STRING:
92 {
93 const gchar* prop_val = g_variant_get_string(prop_value, NULL);
94 if (g_strcmp0(prop_val, value.c_str()) == 0)
95 {
96 matches = true;
97 }
98 }
99 break;
100 case G_VARIANT_CLASS_BOOLEAN:
101 {
102 std::string value = boost::to_upper_copy(value);
103 bool p = value == "TRUE" ||
104 value == "ON" ||
105 value == "YES" ||
106 value == "1";
107 matches = (g_variant_get_boolean(prop_value) == p);
108 }
109 break;
110 case G_VARIANT_CLASS_BYTE:127 case G_VARIANT_CLASS_BYTE:
111 {128 return static_cast<unsigned char>(value) == prop_value.GetByte();
112 // It would be nice if I could do all the integer types together, but I couldn't see how...
113 std::stringstream stream(value);
114 int val; // changing this to guchar causes problems.
115 stream >> val;
116 matches = (stream.rdstate() & (stream.badbit|stream.failbit)) == 0 &&
117 val == g_variant_get_byte(prop_value);
118 }
119 break;
120 case G_VARIANT_CLASS_INT16:129 case G_VARIANT_CLASS_INT16:
121 {130 return value == prop_value.GetInt16();
122 std::stringstream stream(value);
123 gint16 val;
124 stream >> val;
125 matches = (stream.rdstate() & (stream.badbit|stream.failbit)) == 0 &&
126 val == g_variant_get_int16(prop_value);
127 }
128 break;
129 case G_VARIANT_CLASS_UINT16:131 case G_VARIANT_CLASS_UINT16:
130 {132 return static_cast<uint16_t>(value) == prop_value.GetUInt16();
131 std::stringstream stream(value);
132 guint16 val;
133 stream >> val;
134 matches = (stream.rdstate() & (stream.badbit|stream.failbit)) == 0 &&
135 val == g_variant_get_uint16(prop_value);
136 }
137 break;
138 case G_VARIANT_CLASS_INT32:133 case G_VARIANT_CLASS_INT32:
139 {134 return value == prop_value.GetInt32();
140 std::stringstream stream(value);
141 gint32 val;
142 stream >> val;
143 matches = (stream.rdstate() & (stream.badbit|stream.failbit)) == 0 &&
144 val == g_variant_get_int32(prop_value);
145 }
146 break;
147 case G_VARIANT_CLASS_UINT32:135 case G_VARIANT_CLASS_UINT32:
148 {136 return static_cast<uint32_t>(value) == prop_value.GetUInt32();
149 std::stringstream stream(value);
150 guint32 val;
151 stream >> val;
152 matches = (stream.rdstate() & (stream.badbit|stream.failbit)) == 0 &&
153 val == g_variant_get_uint32(prop_value);
154 }
155 break;
156 case G_VARIANT_CLASS_INT64:137 case G_VARIANT_CLASS_INT64:
157 {138 return value == prop_value.GetInt64();
158 std::stringstream stream(value);
159 gint64 val;
160 stream >> val;
161 matches = (stream.rdstate() & (stream.badbit|stream.failbit)) == 0 &&
162 val == g_variant_get_int64(prop_value);
163 }
164 break;
165 case G_VARIANT_CLASS_UINT64:139 case G_VARIANT_CLASS_UINT64:
166 {140 return static_cast<uint64_t>(value) == prop_value.GetUInt64();
167 std::stringstream stream(value);
168 guint64 val;
169 stream >> val;
170 matches = (stream.rdstate() & (stream.badbit|stream.failbit)) == 0 &&
171 val == g_variant_get_uint64(prop_value);
172 }
173 break;
174 default:141 default:
175 LOG_WARNING(logger) << "Unable to match against property of unknown type.";142 LOG_WARNING(logger) << "Unable to match '"<< name << "' against property of unknown integer type.";
176 };143 };
177 }144 }
178 g_variant_unref(prop_value);145
179 g_variant_unref(prop_dict);146 return false;
180 return matches;147 }
148
149 glib::Variant GetPropertyValue(std::string const& name) const
150 {
151 if (name == "id")
152 return glib::Variant(GetId());
153
154 GVariantBuilder properties_builder;
155 g_variant_builder_init(&properties_builder, G_VARIANT_TYPE("a{sv}"));
156 node_->AddProperties(&properties_builder);
157 glib::Variant props_dict(g_variant_builder_end(&properties_builder));
158 return g_variant_lookup_value(props_dict, name.c_str(), nullptr);
181 }159 }
182160
183 std::vector<xpathselect::Node::Ptr> Children() const161 std::vector<xpathselect::Node::Ptr> Children() const
184 {162 {
185 std::vector<xpathselect::Node::Ptr> children;163 std::vector<xpathselect::Node::Ptr> children;
186 for(auto child: node_->GetIntrospectableChildren())164 auto const& this_ptr = shared_from_this();
187 {165
188 children.push_back(std::make_shared<IntrospectableAdapter>(child, GetPath() ));166 for(auto const& child: node_->GetIntrospectableChildren())
189 }167 children.push_back(std::make_shared<IntrospectableAdapter>(child, this_ptr));
168
190 return children;169 return children;
191170 }
192 }171
193172 Introspectable* Node() const
173 {
174 return node_;
175 }
176
177 private:
194 Introspectable* node_;178 Introspectable* node_;
195 private:179 IntrospectableAdapter::Ptr parent_;
196 std::string full_path_;180 std::string full_path_;
197 };181 };
198182
199 xpathselect::NodeList select_nodes(local::IntrospectableAdapter::Ptr root,183 xpathselect::NodeVector select_nodes(IntrospectableAdapter::Ptr const& root, std::string const& query)
200 std::string const& query)
201 {184 {
202 if (xpathselect_driver_ == NULL)185 if (!xpathselect_driver_)
203 xpathselect_driver_ = dlopen("libxpathselect.so.1.3", RTLD_LAZY);186 xpathselect_driver_ = dlopen(XPATH_SELECT_LIB.c_str(), RTLD_LAZY);
204187
205 if (xpathselect_driver_)188 if (xpathselect_driver_)
206 {189 {
207 typedef decltype(&xpathselect::SelectNodes) entry_t;190 typedef decltype(&xpathselect::SelectNodes) select_nodes_t;
208 dlerror();191 dlerror();
209 entry_t entry_point = (entry_t) dlsym(xpathselect_driver_, "SelectNodes");192 auto SelectNodes = reinterpret_cast<select_nodes_t>(dlsym(xpathselect_driver_, "SelectNodes"));
210 const char* err = dlerror();193 const char* err = dlerror();
211 if (err)194 if (err)
212 {195 {
@@ -214,7 +197,7 @@
214 }197 }
215 else198 else
216 {199 {
217 return entry_point(root, query);200 return SelectNodes(root, query);
218 }201 }
219 }202 }
220 else203 else
@@ -223,7 +206,7 @@
223 }206 }
224207
225 // Fallen through here as we've hit an error208 // Fallen through here as we've hit an error
226 return xpathselect::NodeList();209 return xpathselect::NodeVector();
227 }210 }
228211
229 // This needs to be called at destruction to cleanup the dlopen212 // This needs to be called at destruction to cleanup the dlopen
@@ -240,10 +223,8 @@
240GVariant* GetState(std::string const& query);223GVariant* GetState(std::string const& query);
241void StartLogToFile(std::string const& file_path);224void StartLogToFile(std::string const& file_path);
242void ResetLogging();225void ResetLogging();
243void SetLogSeverity(std::string const& log_component,226void SetLogSeverity(std::string const& log_component, std::string const& severity);
244 std::string const& severity);227void LogMessage(std::string const& severity, std::string const& message);
245void LogMessage(std::string const& severity,
246 std::string const& message);
247228
248namespace dbus229namespace dbus
249{230{
@@ -317,7 +298,7 @@
317 }298 }
318 else if (method == "GetVersion")299 else if (method == "GetVersion")
319 {300 {
320 return g_variant_new("(s)", "1.3");301 return g_variant_new("(s)", local::PROTOCOL_VERSION.c_str());
321 }302 }
322 else if (method == "StartLogToFile")303 else if (method == "StartLogToFile")
323 {304 {
@@ -352,16 +333,15 @@
352333
353GVariant* GetState(std::string const& query)334GVariant* GetState(std::string const& query)
354{335{
355 GVariantBuilder builder;336 GVariantBuilder builder;
356 g_variant_builder_init(&builder, G_VARIANT_TYPE("a(sv)"));337 g_variant_builder_init(&builder, G_VARIANT_TYPE("a(sv)"));
357338
358 local::IntrospectableAdapter::Ptr root_node = std::make_shared<local::IntrospectableAdapter>(_parent_introspectable, std::string());339 auto root_node = std::make_shared<local::IntrospectableAdapter>(_parent_introspectable);
359 auto nodes = local::select_nodes(root_node, query);340 for (auto const& n : local::select_nodes(root_node, query))
360 for (auto n : nodes)
361 {341 {
362 auto p = std::static_pointer_cast<local::IntrospectableAdapter>(n);342 auto p = std::static_pointer_cast<local::IntrospectableAdapter const>(n);
363 if (p)343 if (p)
364 g_variant_builder_add(&builder, "(sv)", p->GetPath().c_str(), p->node_->Introspect());344 g_variant_builder_add(&builder, "(sv)", p->GetPath().c_str(), p->Node()->Introspect());
365 }345 }
366346
367 return g_variant_new("(a(sv))", &builder);347 return g_variant_new("(a(sv))", &builder);
368348
=== modified file 'unity-shared/Introspectable.cpp'
--- unity-shared/Introspectable.cpp 2013-01-23 02:59:06 +0000
+++ unity-shared/Introspectable.cpp 2013-11-06 08:52:17 +0000
@@ -17,6 +17,7 @@
17 * Authored by: Alex Launi <alex.launi@canonical.com>17 * Authored by: Alex Launi <alex.launi@canonical.com>
18 */18 */
1919
20#include <UnityCore/Variant.h>
20#include "Introspectable.h"21#include "Introspectable.h"
2122
22namespace unity23namespace unity
@@ -24,88 +25,85 @@
24namespace debug25namespace debug
25{26{
2627
28const std::string CHILDREN_NAME = "Children";
29
27Introspectable::Introspectable()30Introspectable::Introspectable()
28{31{
29 static guint64 unique_id=0;32 static int32_t unique_id_ = 0;
30 _id = unique_id++;33 id_ = unique_id_++;
31}34}
3235
33Introspectable::~Introspectable()36Introspectable::~Introspectable()
34{37{
35 for (auto parent : _parents)38 for (auto parent : parents_)
36 parent->_children.remove(this);39 parent->children_.remove(this);
37 for (auto child : _children)40 for (auto child : children_)
38 child->_parents.remove(this);41 child->parents_.remove(this);
39}42}
4043
41Introspectable::IntrospectableList Introspectable::GetIntrospectableChildren()44Introspectable::IntrospectableList Introspectable::GetIntrospectableChildren()
42{45{
43 return _children;46 return children_;
44}47}
4548
46GVariant*49GVariant*
47Introspectable::Introspect()50Introspectable::Introspect()
48{51{
49 GVariantBuilder builder;52 GVariantBuilder builder;
50 GVariantBuilder child_builder;53 GVariantBuilder child_builder;
51 gint n_children = 0;54 bool has_valid_children = false;
5255
53 g_variant_builder_init(&builder, G_VARIANT_TYPE("a{sv}"));56 g_variant_builder_init(&builder, G_VARIANT_TYPE("a{sv}"));
54 g_variant_builder_add(&builder, "{sv}", "id", g_variant_new_uint64(_id));57 variant::BuilderWrapper build_wrapper(&builder);
5558 build_wrapper.add("id", id_);
56 AddProperties(&builder);59 AddProperties(&builder);
5760
58 g_variant_builder_init(&child_builder, G_VARIANT_TYPE("as"));61 g_variant_builder_init(&child_builder, G_VARIANT_TYPE("as"));
5962
60 auto children = GetIntrospectableChildren();63 for (auto const& child : GetIntrospectableChildren())
61 for (auto it = children.begin(); it != children.end(); it++)
62 {64 {
63 if ((*it)->GetName() != "")65 auto const& child_name = child->GetName();
66
67 if (!child_name.empty())
64 {68 {
65 g_variant_builder_add(&child_builder, "s", (*it)->GetName().c_str());69 g_variant_builder_add(&child_builder, "s", child_name.c_str());
66 n_children++;70 has_valid_children = true;
67 }71 }
68 }72 }
6973
70 GVariant* child_results = g_variant_builder_end(&child_builder);74 glib::Variant child_results(g_variant_builder_end(&child_builder));
7175
72 if (n_children > 0)76 if (has_valid_children)
73 g_variant_builder_add(&builder, "{sv}", GetChildsName().c_str(), child_results);77 build_wrapper.add(CHILDREN_NAME, child_results);
78
74 return g_variant_builder_end(&builder);79 return g_variant_builder_end(&builder);
75}80}
7681
77void82void
78Introspectable::AddChild(Introspectable* child)83Introspectable::AddChild(Introspectable* child)
79{84{
80 _children.push_back(child);85 children_.push_back(child);
81 child->_parents.push_back(this);86 child->parents_.push_back(this);
82}87}
8388
84void89void
85Introspectable::RemoveChild(Introspectable* child)90Introspectable::RemoveChild(Introspectable* child)
86{91{
87 _children.remove(child);92 children_.remove(child);
88 child->_parents.remove(this);93 child->parents_.remove(this);
89}94}
9095
91std::string96int32_t Introspectable::GetIntrospectionId() const
92Introspectable::GetChildsName() const97{
93{98 return id_;
94 return "Children";
95}
96
97guint64 Introspectable::GetIntrospectionId() const
98{
99 return _id;
100}99}
101100
102void Introspectable::RemoveAllChildren()101void Introspectable::RemoveAllChildren()
103{102{
104 for (auto child : _children)103 for (auto child : children_)
105 {104 child->parents_.remove(this);
106 child->_parents.remove(this);105
107 }106 children_.clear();
108 _children.clear();
109}107}
110108
111}109}
112110
=== modified file 'unity-shared/Introspectable.h'
--- unity-shared/Introspectable.h 2013-01-23 02:59:06 +0000
+++ unity-shared/Introspectable.h 2013-11-06 08:52:17 +0000
@@ -41,13 +41,9 @@
41 void RemoveChild(Introspectable* child);41 void RemoveChild(Introspectable* child);
42 virtual void AddProperties(GVariantBuilder* builder) = 0;42 virtual void AddProperties(GVariantBuilder* builder) = 0;
43 virtual IntrospectableList GetIntrospectableChildren();43 virtual IntrospectableList GetIntrospectableChildren();
44 guint64 GetIntrospectionId() const;44 int32_t GetIntrospectionId() const;
4545
46protected:46protected:
47 /// Please don't override this unless you really need to. The only valid reason
48 /// is if you have a property that simply *must* be called 'Children'.
49 virtual std::string GetChildsName() const;
50
51 void RemoveAllChildren();47 void RemoveAllChildren();
5248
53 /*49 /*
@@ -61,9 +57,9 @@
61 */57 */
6258
63private:59private:
64 std::list<Introspectable*> _children;60 std::list<Introspectable*> children_;
65 std::list<Introspectable*> _parents;61 std::list<Introspectable*> parents_;
66 guint64 _id;62 int32_t id_;
67};63};
68}64}
69}65}
7066
=== modified file 'unity-shared/SearchBar.cpp'
--- unity-shared/SearchBar.cpp 2013-07-24 01:01:44 +0000
+++ unity-shared/SearchBar.cpp 2013-11-06 08:52:17 +0000
@@ -617,6 +617,7 @@
617 .add("filter-label-y", show_filters_->GetAbsoluteY())617 .add("filter-label-y", show_filters_->GetAbsoluteY())
618 .add("filter-label-width", show_filters_->GetAbsoluteWidth())618 .add("filter-label-width", show_filters_->GetAbsoluteWidth())
619 .add("filter-label-height", show_filters_->GetAbsoluteHeight())619 .add("filter-label-height", show_filters_->GetAbsoluteHeight())
620 .add("filter-label-geo", show_filters_->GetAbsoluteGeometry())
620 .add("im_active", pango_entry_->im_active());621 .add("im_active", pango_entry_->im_active());
621}622}
622623