Merge lp:~3v1n0/unity/dash-prompt-app-activation into lp:unity

Proposed by Marco Trevisan (Treviño)
Status: Merged
Approved by: Christopher Townsend
Approved revision: no longer in the source branch.
Merged at revision: 3967
Proposed branch: lp:~3v1n0/unity/dash-prompt-app-activation
Merge into: lp:unity
Diff against target: 557 lines (+108/-108)
13 files modified
dash/DashController.h (+0/-1)
dash/DashView.cpp (+30/-30)
dash/DashView.h (+1/-3)
dash/ResultView.cpp (+25/-0)
dash/ResultView.h (+6/-4)
dash/ResultViewGrid.cpp (+16/-13)
dash/ScopeView.cpp (+15/-22)
hud/HudButton.cpp (+0/-5)
hud/HudController.h (+0/-1)
launcher/DeviceNotificationDisplayImp.cpp (+0/-1)
unity-shared/BGHash.cpp (+5/-2)
unity-shared/SearchBar.cpp (+9/-23)
unity-shared/SearchBar.h (+1/-3)
To merge this branch: bzr merge lp:~3v1n0/unity/dash-prompt-app-activation
Reviewer Review Type Date Requested Status
PS Jenkins bot (community) continuous-integration Approve
Christopher Townsend Approve
Brandon Schaefer (community) Approve
Review via email: mp+257205@code.launchpad.net

Commit message

ResultViewGrid: wait for double-click event only if the relative result needs the Preview

This was causing a 500ms delay between the user click and some results (apps) activation.
Also, at this point, we can get rid of PREVIEW_LEFT_BUTTON activation type.

Description of the change

Remove the annoying delay before launching an application using mouse clicks in dash.

This is a regression we've introduced looong time ago, and really needs to be fixed.

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
Brandon Schaefer (brandontschaefer) wrote :

LGTM

review: Approve
Revision history for this message
Christopher Townsend (townsend) wrote :

Yeah, very nice! No more 1 second(!) delay when trying to start an app after opening the Dash. I'll wait for Jenkins to ack/nack before top 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: Approve (continuous-integration)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'dash/DashController.h'
2--- dash/DashController.h 2014-04-25 02:42:01 +0000
3+++ dash/DashController.h 2015-04-24 13:00:45 +0000
4@@ -21,7 +21,6 @@
5
6 #include <memory>
7
8-#include <gdk/gdk.h>
9 #include <UnityCore/ConnectionManager.h>
10 #include <UnityCore/GLibDBusServer.h>
11 #include <UnityCore/GLibSignal.h>
12
13=== modified file 'dash/DashView.cpp'
14--- dash/DashView.cpp 2015-03-20 18:03:15 +0000
15+++ dash/DashView.cpp 2015-04-24 13:00:45 +0000
16@@ -59,7 +59,7 @@
17 const RawPixel PREVIEW_CONTAINER_TRIANGLE_WIDTH = 14_em;
18 const RawPixel PREVIEW_CONTAINER_TRIANGLE_HEIGHT = 12_em;
19
20-const int MAX_ENTRY_ACTIVATE_WAIT_TIMEOUT = 1000;
21+const int MAX_ENTRY_ACTIVATE_WAIT_TIMEOUT = 300;
22 }
23
24 // This is so we can access some protected members in nux::VLayout and
25@@ -120,7 +120,6 @@
26 , preview_displaying_(false)
27 , preview_navigation_mode_(previews::Navigation::NONE)
28 , last_activated_timestamp_(0)
29- , search_in_progress_(false)
30 , activate_on_finish_(false)
31 , visible_(false)
32 , opening_column_x_(-1)
33@@ -1221,21 +1220,27 @@
34
35 void DashView::OnSearchChanged(std::string const& search_string)
36 {
37- search_in_progress_ = true;
38+ activate_on_finish_ = false;
39 }
40
41 void DashView::OnLiveSearchReached(std::string const& search_string)
42 {
43- // reset and set it again once we're sure a search is happening
44- search_in_progress_ = false;
45-
46 LOG_DEBUG(logger) << "Live search reached: " << search_string;
47- if (active_scope_view_)
48+ if (!active_scope_view_.IsValid())
49+ return;
50+
51+ if (active_scope_view_->PerformSearch(search_string, sigc::mem_fun(this, &DashView::OnScopeSearchFinished)))
52 {
53- if (active_scope_view_->PerformSearch(search_string, sigc::mem_fun(this, &DashView::OnScopeSearchFinished)))
54- {
55- search_in_progress_ = true;
56- }
57+ activate_delay_.reset(new glib::Timeout(MAX_ENTRY_ACTIVATE_WAIT_TIMEOUT, [this] {
58+ if (activate_on_finish_)
59+ {
60+ activate_on_finish_ = false;
61+ active_scope_view_->ActivateFirst();
62+ }
63+
64+ activate_delay_.reset();
65+ return false;
66+ }));
67 }
68 }
69
70@@ -1254,12 +1259,15 @@
71 LOG_DEBUG(logger) << "Search completed: " << search_string;
72
73 search_bar_->SetSearchFinished();
74- search_in_progress_ = false;
75-
76- activate_timeout_.reset();
77- if (activate_on_finish_ && !err)
78- OnEntryActivated();
79- activate_on_finish_= false;
80+
81+ if (activate_on_finish_)
82+ {
83+ activate_on_finish_ = false;
84+ activate_delay_.reset();
85+
86+ if (!err)
87+ active_scope_view_->ActivateFirst();
88+ }
89 }
90 }
91
92@@ -1407,20 +1415,12 @@
93 }
94 void DashView::OnEntryActivated()
95 {
96- if (active_scope_view_.IsValid() && !search_in_progress_)
97- {
98- active_scope_view_->ActivateFirst();
99- }
100- // delay the activation until we get the SearchFinished signal
101- activate_on_finish_ = search_in_progress_;
102-
103- if (activate_on_finish_)
104- {
105- activate_timeout_.reset(new glib::Timeout(MAX_ENTRY_ACTIVATE_WAIT_TIMEOUT, [this] {
106- activate_on_finish_ = false;
107+ if (active_scope_view_.IsValid())
108+ {
109+ if (!activate_delay_ && !search_bar_->in_live_search())
110 active_scope_view_->ActivateFirst();
111- return FALSE;
112- }));
113+ else
114+ activate_on_finish_ = true;
115 }
116 }
117
118
119=== modified file 'dash/DashView.h'
120--- dash/DashView.h 2015-02-03 09:46:48 +0000
121+++ dash/DashView.h 2015-04-24 13:00:45 +0000
122@@ -170,10 +170,8 @@
123
124 LocalResult last_activated_result_;
125 guint64 last_activated_timestamp_;
126- bool search_in_progress_;
127 bool activate_on_finish_;
128- glib::Source::UniquePtr activate_timeout_;
129-
130+ glib::Source::UniquePtr activate_delay_;
131 bool visible_;
132
133 nux::ObjectPtr<nux::IOpenGLBaseTexture> dash_view_copy_;
134
135=== modified file 'dash/ResultView.cpp'
136--- dash/ResultView.cpp 2014-03-20 05:13:04 +0000
137+++ dash/ResultView.cpp 2015-04-24 13:00:45 +0000
138@@ -23,6 +23,7 @@
139
140 #include "ResultView.h"
141
142+#include <boost/algorithm/string.hpp>
143 #include <Nux/Layout.h>
144
145 #include "unity-shared/IntrospectableWrappers.h"
146@@ -49,6 +50,7 @@
147 , scale(DEFAULT_SCALE)
148 , renderer_(NULL)
149 , cached_result_(nullptr, nullptr, nullptr)
150+ , default_click_activation_(ActivateType::PREVIEW)
151 {
152 expanded.changed.connect([this](bool value)
153 {
154@@ -61,6 +63,21 @@
155 NeedRedraw();
156 });
157
158+ default_click_activation.SetGetterFunction([this] {
159+ if (Settings::Instance().double_click_activate())
160+ return default_click_activation_;
161+ return ActivateType::DIRECT;
162+ });
163+
164+ default_click_activation.SetSetterFunction([this] (ActivateType at) {
165+ if (default_click_activation_ != at)
166+ {
167+ default_click_activation_ = at;
168+ return true;
169+ }
170+ return false;
171+ });
172+
173 Settings::Instance().font_scaling.changed.connect(sigc::mem_fun(this, &ResultView::UpdateFontScale));
174 enable_texture_render.changed.connect(sigc::mem_fun(this, &ResultView::OnEnableRenderToTexture));
175 scale.changed.connect(sigc::mem_fun(this, &ResultView::UpdateScale));
176@@ -208,6 +225,14 @@
177 return LocalResult(*GetIteratorAtRow(index));
178 }
179
180+ResultView::ActivateType ResultView::GetLocalResultActivateType(LocalResult const& result) const
181+{
182+ if (boost::starts_with(result.uri, "x-unity-no-preview"))
183+ return ActivateType::DIRECT;
184+
185+ return ActivateType::PREVIEW;
186+}
187+
188 void ResultView::Draw(nux::GraphicsEngine& GfxContext, bool force_draw)
189 {}
190
191
192=== modified file 'dash/ResultView.h'
193--- dash/ResultView.h 2014-03-20 05:13:04 +0000
194+++ dash/ResultView.h 2015-04-24 13:00:45 +0000
195@@ -58,12 +58,11 @@
196 class ResultView : public nux::View, public debug::Introspectable
197 {
198 public:
199- typedef enum ActivateType_
200+ enum class ActivateType
201 {
202 DIRECT,
203- PREVIEW_LEFT_BUTTON,
204 PREVIEW
205- } ActivateType;
206+ };
207
208 NUX_DECLARE_OBJECT_TYPE(ResultView, nux::View);
209
210@@ -73,8 +72,9 @@
211 void SetModelRenderer(ResultRenderer* renderer);
212 void SetResultsModel(Results::Ptr const& results);
213
214- unsigned int GetIndexForLocalResult(LocalResult const& local_result);
215+ unsigned int GetIndexForLocalResult(LocalResult const&);
216 LocalResult GetLocalResultForIndex(unsigned int);
217+ ActivateType GetLocalResultActivateType(LocalResult const&) const;
218
219 nux::Property<bool> expanded;
220 nux::Property<int> results_per_row;
221@@ -82,6 +82,7 @@
222 nux::Property<float> desaturation_progress;
223 nux::Property<bool> enable_texture_render;
224 nux::Property<double> scale;
225+ nux::RWProperty<ActivateType> default_click_activation;
226
227 sigc::signal<void, LocalResult const&, ActivateType, GVariant*> ResultActivated;
228
229@@ -130,6 +131,7 @@
230 void UpdateFontScale(double scale);
231
232 Result cached_result_;
233+ ActivateType default_click_activation_;
234 connection::Manager result_connections_;
235 };
236
237
238=== modified file 'dash/ResultViewGrid.cpp'
239--- dash/ResultViewGrid.cpp 2014-03-20 04:05:39 +0000
240+++ dash/ResultViewGrid.cpp 2015-04-24 13:00:45 +0000
241@@ -24,8 +24,6 @@
242 #include <NuxCore/Logger.h>
243 #include <Nux/VLayout.h>
244 #include <NuxGraphics/GdkGraphics.h>
245-#include <gtk/gtk.h>
246-#include <gdk/gdk.h>
247 #include <unity-protocol.h>
248
249 #include "unity-shared/IntrospectableWrappers.h"
250@@ -34,7 +32,6 @@
251 #include "unity-shared/UBusMessages.h"
252 #include "unity-shared/GraphicsUtils.h"
253 #include "unity-shared/RawPixel.h"
254-#include "unity-shared/UnitySettings.h"
255 #include "unity-shared/WindowManager.h"
256 #include "ResultViewGrid.h"
257 #include "math.h"
258@@ -94,8 +91,7 @@
259 scale.changed.connect(sigc::mem_fun(this, &ResultViewGrid::UpdateScale));
260
261 key_nav_focus_change.connect(sigc::mem_fun(this, &ResultViewGrid::OnKeyNavFocusChange));
262- key_nav_focus_activate.connect([this] (nux::Area *area)
263- {
264+ key_nav_focus_activate.connect([this] (nux::Area *area) {
265 Activate(focused_result_, selected_index_, ResultView::ActivateType::DIRECT);
266 });
267 key_down.connect(sigc::mem_fun(this, &ResultViewGrid::OnKeyDown));
268@@ -210,6 +206,12 @@
269 row_y += row_index * row_height;
270 }
271
272+ if (type == ActivateType::PREVIEW)
273+ {
274+ if (GetLocalResultActivateType(local_result) != type)
275+ type = ActivateType::DIRECT;
276+ }
277+
278 active_index_ = index;
279 guint64 timestamp = nux::GetGraphicsDisplay()->GetCurrentEvent().x11_timestamp;
280 glib::Variant data(g_variant_new("(tiiiiii)", timestamp, column_x, row_y, column_width, row_height, left_results, right_results));
281@@ -796,6 +798,7 @@
282 unsigned num_results = GetNumResults();
283 unsigned index = GetIndexAtPosition(x, y);
284 mouse_over_index_ = index;
285+
286 if (index < num_results)
287 {
288 // we got a click on a button so activate it
289@@ -805,32 +808,32 @@
290 focused_result_ = result;
291 activated_result_ = result;
292
293-
294 if (nux::GetEventButton(button_flags) == nux::NUX_MOUSE_BUTTON1)
295 {
296- if (unity::Settings::Instance().double_click_activate)
297+ if (default_click_activation() == ActivateType::PREVIEW &&
298+ GetLocalResultActivateType(activated_result_) == ActivateType::PREVIEW)
299 {
300 // delay activate for single left click. (for double click check)
301- activate_timer_.reset(new glib::Timeout(DOUBLE_CLICK_SPEED, [this, index]() {
302- Activate(activated_result_, index, ResultView::ActivateType::PREVIEW_LEFT_BUTTON);
303+ activate_timer_.reset(new glib::Timeout(DOUBLE_CLICK_SPEED, [this, index] {
304+ Activate(activated_result_, index, ActivateType::PREVIEW);
305 return false;
306 }));
307 }
308 else
309 {
310- Activate(activated_result_, index, ResultView::ActivateType::DIRECT);
311+ Activate(activated_result_, index, ActivateType::DIRECT);
312 }
313 }
314 else
315 {
316- Activate(activated_result_, index, ResultView::ActivateType::PREVIEW);
317+ Activate(activated_result_, index, ActivateType::PREVIEW);
318 }
319 }
320 }
321
322 void ResultViewGrid::MouseDoubleClick(int x, int y, unsigned long button_flags, unsigned long key_flags)
323 {
324- if (unity::Settings::Instance().double_click_activate == false)
325+ if (default_click_activation() == ActivateType::DIRECT)
326 return;
327
328 unsigned num_results = GetNumResults();
329@@ -845,7 +848,7 @@
330 focused_result_ = result;
331
332 activated_result_ = result;
333- Activate(activated_result_, index, ResultView::ActivateType::DIRECT);
334+ Activate(activated_result_, index, ActivateType::DIRECT);
335 }
336 }
337
338
339=== modified file 'dash/ScopeView.cpp'
340--- dash/ScopeView.cpp 2014-07-11 22:26:26 +0000
341+++ dash/ScopeView.cpp 2015-04-24 13:00:45 +0000
342@@ -481,47 +481,40 @@
343 /* Reset result count */
344 counts_[group] = 0;
345
346- ResultView* results_view = nullptr;
347+ auto* results_view = new ResultViewGrid(NUX_TRACKER_LOCATION);
348+
349 if (category.GetContentType() == "social" && category.renderer_name == "default")
350 {
351- results_view = new ResultViewGrid(NUX_TRACKER_LOCATION);
352 results_view->SetModelRenderer(new ResultRendererHorizontalTile(NUX_TRACKER_LOCATION));
353- static_cast<ResultViewGrid*> (results_view)->horizontal_spacing = CARD_VIEW_GAP_HORIZ.CP(scale());
354- static_cast<ResultViewGrid*> (results_view)->vertical_spacing = CARD_VIEW_GAP_VERT.CP(scale());
355+ results_view->horizontal_spacing = CARD_VIEW_GAP_HORIZ.CP(scale());
356+ results_view->vertical_spacing = CARD_VIEW_GAP_VERT.CP(scale());
357 }
358 else
359 {
360- results_view = new ResultViewGrid(NUX_TRACKER_LOCATION);
361 results_view->SetModelRenderer(new ResultRendererTile(NUX_TRACKER_LOCATION));
362 }
363
364 if (scope_)
365 {
366- const std::string category_id = category.id();
367- std::string unique_id = category.name() + scope_->name();
368- results_view->unique_id = unique_id;
369+ results_view->unique_id = name + scope_->name();
370 results_view->expanded = false;
371
372- results_view->ResultActivated.connect([this, unique_id, category_id] (LocalResult const& local_result, ResultView::ActivateType type, GVariant* data)
373- {
374- if (g_str_has_prefix(local_result.uri.c_str(), "x-unity-no-preview"))
375- type = ResultView::ActivateType::DIRECT;
376-
377- // Applications scope results should be activated on left-click (instead of preview). Note that app scope can still
378- // respond with preview for activation request (the case for uninstalled apps).
379- bool is_app_scope_result = (scope_->id() == "applications.scope" || (scope_->id() == "home.scope" && category_id == "applications.scope"));
380-
381- if (is_app_scope_result && type == ResultView::ActivateType::PREVIEW_LEFT_BUTTON)
382- type = ResultView::ActivateType::DIRECT;
383-
384- result_activated.emit(type, local_result, data, unique_id);
385+ if (scope_->id() == "applications.scope" ||
386+ (scope_->id() == "home.scope" && category.id() == "applications.scope"))
387+ {
388+ results_view->default_click_activation = ResultView::ActivateType::DIRECT;
389+ }
390+
391+ results_view->ResultActivated.connect([this, results_view] (LocalResult const& local_result, ResultView::ActivateType type, GVariant* data)
392+ {
393+ result_activated.emit(type, local_result, data, results_view->unique_id());
394+
395 switch (type)
396 {
397 case ResultView::ActivateType::DIRECT:
398 {
399 scope_->Activate(local_result, nullptr, cancellable_);
400 } break;
401- case ResultView::ActivateType::PREVIEW_LEFT_BUTTON:
402 case ResultView::ActivateType::PREVIEW:
403 {
404 scope_->Preview(local_result, nullptr, cancellable_);
405
406=== modified file 'hud/HudButton.cpp'
407--- hud/HudButton.cpp 2014-07-30 00:49:35 +0000
408+++ hud/HudButton.cpp 2015-04-24 13:00:45 +0000
409@@ -20,11 +20,6 @@
410 */
411 #include "config.h"
412
413-#include <pango/pango.h>
414-#include <pango/pangocairo.h>
415-#include <gdk/gdk.h>
416-#include <gtk/gtk.h>
417-
418 #include <Nux/Nux.h>
419 #include <Nux/HLayout.h>
420 #include <NuxGraphics/CairoGraphics.h>
421
422=== modified file 'hud/HudController.h'
423--- hud/HudController.h 2014-07-11 01:45:49 +0000
424+++ hud/HudController.h 2015-04-24 13:00:45 +0000
425@@ -22,7 +22,6 @@
426 #include <functional>
427 #include <memory>
428
429-#include <gdk/gdk.h>
430 #include <UnityCore/Hud.h>
431 #include <UnityCore/GLibSignal.h>
432
433
434=== modified file 'launcher/DeviceNotificationDisplayImp.cpp'
435--- launcher/DeviceNotificationDisplayImp.cpp 2013-10-03 23:48:48 +0000
436+++ launcher/DeviceNotificationDisplayImp.cpp 2015-04-24 13:00:45 +0000
437@@ -17,7 +17,6 @@
438 * Authored by: Andrea Azzarone <andrea.azzarone@canonical.com>
439 */
440
441-#include <gdk/gdk.h>
442 #include "config.h"
443 #include <glib/gi18n-lib.h>
444 #include <libnotify/notify.h>
445
446=== modified file 'unity-shared/BGHash.cpp'
447--- unity-shared/BGHash.cpp 2014-12-11 12:54:37 +0000
448+++ unity-shared/BGHash.cpp 2015-04-24 13:00:45 +0000
449@@ -116,8 +116,11 @@
450 .SetDuration(skip_animation ? 0 : TRANSITION_DURATION)
451 .Start();
452
453- // This will make sure that the animation starts even if the screen is idle.
454- nux::GetWindowThread()->RequestRedraw();
455+ if (nux::WindowThread* wt = nux::GetWindowThread())
456+ {
457+ // This will make sure that the animation starts even if the screen is idle.
458+ wt->RequestRedraw();
459+ }
460 }
461
462 void BGHash::OnTransitionUpdated(nux::Color const& new_color)
463
464=== modified file 'unity-shared/SearchBar.cpp'
465--- unity-shared/SearchBar.cpp 2014-09-04 22:11:33 +0000
466+++ unity-shared/SearchBar.cpp 2015-04-24 13:00:45 +0000
467@@ -141,6 +141,9 @@
468 : View(NUX_FILE_LINE_PARAM)
469 , showing_filters(false)
470 , can_refine_search(false)
471+ , im_active([this] { return pango_entry_->im_active(); })
472+ , im_preedit([this] { return pango_entry_->im_preedit(); })
473+ , in_live_search([this] { return live_search_timeout_ && live_search_timeout_->IsRunning(); })
474 , live_search_wait(DEFAULT_LIVE_SEARCH_TIMEOUT)
475 , scale(DEFAULT_SCALE)
476 , show_filter_hint_(show_filter_hint)
477@@ -179,11 +182,11 @@
478 pango_entry_->mouse_down.connect(sigc::mem_fun(this, &SearchBar::OnMouseButtonDown));
479 pango_entry_->end_key_focus.connect(sigc::mem_fun(this, &SearchBar::OnEndKeyFocus));
480 pango_entry_->key_up.connect([this] (unsigned int, unsigned long, unsigned long) {
481- if (get_im_preedit())
482- {
483- hint_->SetVisible(false);
484- hint_->QueueDraw();
485- }
486+ if (im_preedit())
487+ {
488+ hint_->SetVisible(false);
489+ hint_->QueueDraw();
490+ }
491 });
492
493 layered_layout_ = new nux::LayeredLayout();
494@@ -263,10 +266,8 @@
495 OnFontChanged();
496
497 search_hint.changed.connect([this](std::string const& s) { OnSearchHintChanged(); });
498- search_string.SetGetterFunction(sigc::mem_fun(this, &SearchBar::get_search_string));
499+ search_string.SetGetterFunction([this] { return pango_entry_->GetText(); });
500 search_string.SetSetterFunction(sigc::mem_fun(this, &SearchBar::set_search_string));
501- im_active.SetGetterFunction(sigc::mem_fun(this, &SearchBar::get_im_active));
502- im_preedit.SetGetterFunction(sigc::mem_fun(this, &SearchBar::get_im_preedit));
503 showing_filters.changed.connect(sigc::mem_fun(this, &SearchBar::OnShowingFiltersChanged));
504 scale.changed.connect(sigc::mem_fun(this, &SearchBar::UpdateScale));
505 Settings::Instance().font_scaling.changed.connect(sigc::hide(sigc::mem_fun(this, &SearchBar::UpdateSearchBarSize)));
506@@ -633,11 +634,6 @@
507 return expander_view_;
508 }
509
510-std::string SearchBar::get_search_string() const
511-{
512- return pango_entry_->GetText();
513-}
514-
515 bool SearchBar::set_search_string(std::string const& string)
516 {
517 pango_entry_->SetText(string.c_str());
518@@ -649,16 +645,6 @@
519 return true;
520 }
521
522-bool SearchBar::get_im_active() const
523-{
524- return pango_entry_->im_active();
525-}
526-
527-bool SearchBar::get_im_preedit() const
528-{
529- return pango_entry_->im_preedit();
530-}
531-
532 //
533 // Highlight
534 //
535
536=== modified file 'unity-shared/SearchBar.h'
537--- unity-shared/SearchBar.h 2014-08-06 19:46:43 +0000
538+++ unity-shared/SearchBar.h 2015-04-24 13:00:45 +0000
539@@ -63,6 +63,7 @@
540 nux::Property<bool> can_refine_search;
541 nux::ROProperty<bool> im_active;
542 nux::ROProperty<bool> im_preedit;
543+ nux::ROProperty<bool> in_live_search;
544 nux::Property<unsigned> live_search_wait;
545 nux::Property<double> scale;
546
547@@ -88,10 +89,7 @@
548 bool OnLiveSearchTimeout();
549 bool OnSpinnerStartCb();
550
551- std::string get_search_string() const;
552 bool set_search_string(std::string const& string);
553- bool get_im_active() const;
554- bool get_im_preedit() const;
555 bool show_filter_hint_;
556
557 std::string GetName() const;