59
58
void OnProxyConnected();
60
59
void OnProxyDisconnected();
61
void ResultsModelUpdated(unsigned long long begin_seqnum,
62
unsigned long long end_seqnum);
63
void GlobalResultsModelUpdated(unsigned long long begin_seqnum,
64
unsigned long long end_seqnum);
66
unsigned long long ExtractModelSeqnum(GVariant *parameters);
62
68
void OnSearchFinished(GVariant* parameters);
63
69
void OnGlobalSearchFinished(GVariant* parameters);
64
70
void OnChanged(GVariant* parameters);
147
156
, filters_(new Filters())
148
157
, connected_(false)
149
158
, proxy_(dbus_name, dbus_path, "com.canonical.Unity.Lens")
159
, results_variant_(NULL)
160
, global_results_variant_(NULL)
151
162
proxy_.connected.connect(sigc::mem_fun(this, &Lens::Impl::OnProxyConnected));
152
163
proxy_.disconnected.connect(sigc::mem_fun(this, &Lens::Impl::OnProxyDisconnected));
153
164
proxy_.Connect("Changed", sigc::mem_fun(this, &Lens::Impl::OnChanged));
165
results_->end_transaction.connect(sigc::mem_fun(this, &Lens::Impl::ResultsModelUpdated));
166
global_results_->end_transaction.connect(sigc::mem_fun(this, &Lens::Impl::GlobalResultsModelUpdated));
156
169
Lens::Impl::~Impl()
178
191
owner_->connected.EmitChanged(connected_);
194
void Lens::Impl::ResultsModelUpdated(unsigned long long begin_seqnum,
195
unsigned long long end_seqnum)
197
if (results_variant_ != NULL &&
198
end_seqnum >= ExtractModelSeqnum (results_variant_))
200
glib::Variant dict(results_variant_, glib::StealRef());
203
dict.ASVToHints(hints);
205
owner_->search_finished.emit(hints);
207
results_variant_ = NULL;
211
void Lens::Impl::GlobalResultsModelUpdated(unsigned long long begin_seqnum,
212
unsigned long long end_seqnum)
214
if (global_results_variant_ != NULL &&
215
end_seqnum >= ExtractModelSeqnum (global_results_variant_))
217
glib::Variant dict(global_results_variant_, glib::StealRef());
220
dict.ASVToHints(hints);
222
owner_->global_search_finished.emit(hints);
224
global_results_variant_ = NULL;
228
unsigned long long Lens::Impl::ExtractModelSeqnum(GVariant *parameters)
232
unsigned long long seqnum = 0;
234
dict = g_variant_get_child_value (parameters, 0);
237
if (g_variant_lookup (dict, "model-seqnum", "t", &seqnum64))
239
seqnum = static_cast<unsigned long long> (seqnum64);
242
g_variant_unref (dict);
181
248
void Lens::Impl::OnSearchFinished(GVariant* parameters)
183
GVariantIter* hints_iter;
186
g_variant_get(parameters, "(a{sv})", &hints_iter);
188
Utils::ASVToHints(hints, hints_iter);
190
// FIXME: make sure the model is updated, wait if it isn't (once Dee supports
251
unsigned long long reply_seqnum;
253
reply_seqnum = ExtractModelSeqnum (parameters);
254
if (results_->seqnum < reply_seqnum)
256
// wait for the end-transaction signal
257
if (results_variant_) g_variant_unref (results_variant_);
258
results_variant_ = g_variant_ref (parameters);
260
// ResultsModelUpdated will emit OnSearchFinished
264
glib::Variant dict (parameters);
265
dict.ASVToHints(hints);
192
267
owner_->search_finished.emit(hints);
194
g_variant_iter_free(hints_iter);
197
270
void Lens::Impl::OnGlobalSearchFinished(GVariant* parameters)
199
GVariantIter* hints_iter;
202
g_variant_get(parameters, "(a{sv})", &hints_iter);
204
Utils::ASVToHints(hints, hints_iter);
273
unsigned long long reply_seqnum;
275
reply_seqnum = ExtractModelSeqnum (parameters);
276
if (global_results_->seqnum < reply_seqnum)
278
// wait for the end-transaction signal
279
if (global_results_variant_) g_variant_unref (global_results_variant_);
280
global_results_variant_ = g_variant_ref (parameters);
282
// GlobalResultsModelUpdated will emit OnGlobalSearchFinished
286
glib::Variant dict (parameters);
287
dict.ASVToHints(hints);
206
289
owner_->global_search_finished.emit(hints);
208
g_variant_iter_free(hints_iter);
211
292
void Lens::Impl::OnChanged(GVariant* parameters)
363
456
glib::String uri;
365
GVariantIter* hints_iter;
458
GVariant* hints_variant;
368
g_variant_get(parameters, "((sua{sv}))", &uri, &handled, &hints_iter);
370
Utils::ASVToHints(hints, hints_iter);
461
g_variant_get(parameters, "((su@a{sv}))", &uri, &handled, &hints_variant);
463
glib::Variant dict (hints_variant, glib::StealRef());
464
dict.ASVToHints(hints);
372
466
owner_->activated.emit(uri.Str(), static_cast<HandledType>(handled), hints);
374
g_variant_iter_free(hints_iter);
377
469
void Lens::Impl::Preview(std::string const& uri)
388
480
glib::String uri;
389
481
glib::String renderer_name;
390
GVariantIter* hints_iter;
482
GVariant* hints_variant;
393
g_variant_get(parameters, "((ssa{sv}))", &uri, &renderer_name, &hints_iter);
394
Utils::ASVToHints(hints, hints_iter);
485
g_variant_get(parameters, "((ss@a{sv}))", &uri, &renderer_name, &hints_variant);
487
glib::Variant dict (hints_variant, glib::StealRef());
488
dict.ASVToHints(hints);
396
490
Preview::Ptr preview = Preview::PreviewForProperties(renderer_name.Str(), hints);
397
491
owner_->preview_ready.emit(uri.Str(), preview);
399
g_variant_iter_free(hints_iter);
401
493
string const& Lens::Impl::id() const