Merge lp:~unity-team/unity/trusty-sru-7.2.6 into lp:unity/7.2

Proposed by Marco Trevisan (Treviño) on 2015-10-15
Status: Merged
Approved by: Andrea Azzarone on 2015-10-15
Approved revision: no longer in the source branch.
Merged at revision: 3835
Proposed branch: lp:~unity-team/unity/trusty-sru-7.2.6
Merge into: lp:unity/7.2
Diff against target: 1554 lines (+547/-141)
43 files modified
CMakeLists.txt (+1/-1)
ChangeLog (+182/-0)
UnityCore/GLibDBusProxy.cpp (+16/-3)
UnityCore/GnomeSessionManager.cpp (+6/-1)
dash/DashController.cpp (+2/-0)
dash/DashController.h (+0/-1)
dash/DashView.cpp (+72/-32)
dash/DashView.h (+3/-3)
dash/PlacesGroup.cpp (+13/-2)
dash/PlacesGroup.h (+1/-0)
dash/ResultView.cpp (+25/-0)
dash/ResultView.h (+6/-4)
dash/ResultViewGrid.cpp (+29/-13)
dash/ScopeView.cpp (+20/-22)
dash/ScopeView.h (+2/-0)
debian/changelog (+51/-0)
decorations/DecoratedWindow.cpp (+5/-0)
decorations/DecoratedWindow.h (+1/-0)
decorations/DecorationsManager.cpp (+5/-1)
hud/HudButton.cpp (+0/-5)
hud/HudController.cpp (+2/-0)
hud/HudController.h (+0/-1)
launcher/DeviceNotificationDisplayImp.cpp (+0/-1)
launcher/LauncherController.cpp (+2/-2)
launcher/LauncherIcon.cpp (+9/-4)
panel/PanelView.cpp (+18/-0)
panel/PanelView.h (+1/-0)
plugins/unityshell/src/unityshell.cpp (+16/-2)
plugins/unityshell/unityshell.xml.in (+6/-0)
unity-shared/BGHash.cpp (+5/-2)
unity-shared/CompizUtils.cpp (+0/-3)
unity-shared/OverlayRenderer.cpp (+2/-0)
unity-shared/OverlayScrollView.cpp (+5/-1)
unity-shared/OverlayScrollView.h (+2/-0)
unity-shared/OverlayWindowButtons.cpp (+3/-3)
unity-shared/PlacesOverlayVScrollBar.cpp (+5/-0)
unity-shared/PlacesOverlayVScrollBar.h (+8/-6)
unity-shared/PluginAdapter.cpp (+5/-1)
unity-shared/SearchBar.cpp (+9/-23)
unity-shared/SearchBar.h (+1/-3)
unity-shared/UnitySettings.cpp (+6/-1)
unity-shared/UnitySettings.h (+1/-0)
unity-shared/WindowButtons.cpp (+1/-0)
To merge this branch: bzr merge lp:~unity-team/unity/trusty-sru-7.2.6
Reviewer Review Type Date Requested Status
Andrea Azzarone (community) 2015-10-15 Approve on 2015-10-15
Review via email: mp+274599@code.launchpad.net

Commit message

Releasing 7.2.6

To post a comment you must log in.
Andrea Azzarone (azzar1) :
review: Approve
3849. By Marco Trevisan (Treviño) on 2015-10-20

New stable release

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'CMakeLists.txt'
2--- CMakeLists.txt 2015-04-16 15:55:07 +0000
3+++ CMakeLists.txt 2015-10-20 18:34:31 +0000
4@@ -10,7 +10,7 @@
5 set (PROJECT_NAME "unity")
6 set (UNITY_MAJOR 7)
7 set (UNITY_MINOR 2)
8-set (UNITY_MICRO 5)
9+set (UNITY_MICRO 6)
10 set (UNITY_VERSION "${UNITY_MAJOR}.${UNITY_MINOR}.${UNITY_MICRO}")
11 set (UNITY_API_VERSION "6.0")
12 set (UNITY_COMPONENTS_VERSION "6")
13
14=== modified file 'ChangeLog'
15--- ChangeLog 2015-04-16 15:55:07 +0000
16+++ ChangeLog 2015-10-20 18:34:31 +0000
17@@ -1,3 +1,185 @@
18+2015-10-15 Marco Trevisan (Treviño) <mail@3v1n0.net>
19+
20+ * Releasing 7.2.6
21+ * Updating ChangeLog
22+
23+2015-10-15 Marco Trevisan (Treviño) <mail@3v1n0.net>
24+
25+ New stable release
26+
27+2015-10-15 Andrea Azzarone andrea.azzarone@canonical.com
28+
29+ Merge patch from https://launchpadlibrarian.net/216276242/low-gfx-override.patch
30+
31+2015-10-15 Chris Townsend <christopher.townsend@canonical.com>
32+
33+ When looking for the top-most valid window in a VP, also check if the window is focused if the window is set to Always on Top. This allows Launcher icon spread to work properly when a window is minimized an Always on Top exists in the group.
34+
35+2015-10-15 Chris Townsend <christopher.townsend@canonical.com>
36+
37+ Wait on Spread to be terminated before showing the Quicklist.
38+
39+2015-10-15 Marco Trevisan (Treviño) <mail@3v1n0.net>
40+
41+ ResultViewGrid: wait for double-click event only if the relative result needs the Preview
42+
43+ This was causing a 500ms delay between the user click and some results (apps) activation.
44+ Also, at this point, we can get rid of PREVIEW_LEFT_BUTTON activation type. , #1447372
45+
46+2015-10-15 Chris Townsend <christopher.townsend@canonical.com>
47+
48+ If dragging an application:// uri type from the Dash to the desktop, change it to a file:// uri type so Nautilus can understand the type a make a copy of it on the desktop.
49+
50+2015-10-15 Chris Townsend <christopher.townsend@canonical.com>
51+
52+ Enable real page up/page down key navigation in the Dash. When using these keys the view scrolls the length of the visible view.
53+
54+2015-10-15 Chris Townsend <christopher.townsend@canonical.com>
55+
56+ Save the active window when showing the Hud so the correct window is focused when hiding the Hud. Fixes issue when "Always on Top" windows are present.
57+
58+2015-10-15 Chris Townsend <christopher.townsend@canonical.com>
59+
60+ Save the active window when showing the Dash so the correct window is focused when hiding the Dash. Fixes issue when "Always on Top" windows are present.
61+
62+2015-10-15 Andrea Azzarone azzaronea@gmail.com
63+
64+ Properly hide decorations when on "Show Desktop" mode.
65+
66+2015-10-15 Andrea Azzarone andrea.azzarone@canonical.com
67+
68+ Do not handle events coming from viewports not actually containing the window.
69+
70+2015-10-15 Chris Townsend <christopher.townsend@canonical.com>
71+
72+ When using keyboard navigation in the Dash, skip category headers that are not expandable. Also, do not highlight the category header when the mouse cursor is over it.
73+
74+2015-10-15 Chris Townsend <christopher.townsend@canonical.com>
75+
76+ Also use the Compiz show() method when forcing an unmapped window to be visible when clicking on it's active Launcher icon.
77+
78+2015-10-15 Andrea Azzarone andrea.azzarone@canonical.com
79+
80+ Make sure new icons are added to the model before calling SortAndUpdate.
81+
82+2015-10-15 Marco Trevisan (Treviño) <mail@3v1n0.net>
83+
84+ OverlayWindowButtons: trigger a queuedraw also when a child requires a redraw
85+
86+2015-10-15 Chris Townsend <christopher.townsend@canonical.com>
87+
88+ Add option to enable and disable Unity low graphics mode on the fly in ccsm or via gsettings.
89+
90+2015-10-15 Marco Trevisan (Treviño) <mail@3v1n0.net>
91+
92+ GnomeSessionManager: Request ScreenSaver (de)activation on VT changes
93+
94+ Connect to login1 session active property, and monitor its state.
95+ When the session is active we can safely request the screensaver to stop.
96+
97+2015-06-03 CI Train Bot <ci-train-bot@canonical.com>
98+
99+ Releasing 7.2.5+14.04.20150603-0ubuntu1
100+
101+2015-06-03 Chris Townsend <christopher.townsend@canonical.com>
102+
103+ Revert rev. 3810 due to a crash being seen on Trusty when the lockscreen is activated. Fixes: #1451613
104+ Approved by: PS Jenkins bot, Stephen M. Webb
105+
106+2015-06-03 Chris Townsend <christopher.townsend@canonical.com>
107+
108+ Revert rev. 3810 due to a crash being seen on Trusty when the lockscreen is activated.
109+
110+2015-05-21 CI Train Bot <ci-train-bot@canonical.com>
111+
112+ Releasing 7.2.5+14.04.20150521.1-0ubuntu1
113+
114+2015-05-21 Stephen M. Webb <stephen.webb@canonical.com>
115+
116+ AP tests: accounted for arbitrarily-raised exceptions in checking scaled windows Fixes: #1436095
117+ Approved by: Stephen M. Webb, PS Jenkins bot
118+
119+2015-05-15 Stephen M. Webb <stephen.webb@canonical.com>
120+
121+ AP tests: accounted for arbitrarily-raised exceptions in checking scaled windows
122+
123+2015-05-21 Andrea Azzarone <azzaronea@gmail.com>
124+
125+ Forward first key event that happens on top of the blank window to the lockscreen. Fixes: #1308265
126+ Approved by: Stephen M. Webb, PS Jenkins bot
127+
128+2015-05-15 Andrea Azzarone <azzaronea@gmail.com>
129+
130+ Forward first key event that happens on top of the blank window to the lockscreen.
131+
132+2015-05-21 Andrea Azzarone <azzaronea@gmail.com>
133+
134+ Release pointer barrier if launcher is in lock_hide state. Fixes: #1029114
135+ Approved by: Stephen M. Webb, PS Jenkins bot
136+
137+2015-05-15 Andrea Azzarone <azzaronea@gmail.com>
138+
139+ Release pointer barrier if launcher is in lock_hide state.
140+
141+2015-05-21 Andrea Azzarone <azzaronea@gmail.com>
142+
143+ Make sure scope_views_[filter.id] exists before using operator[] on it. Fixes: #926979
144+ Approved by: Stephen M. Webb, PS Jenkins bot
145+
146+2015-05-15 Andrea Azzarone <azzaronea@gmail.com>
147+
148+ Make sure scope_views_[filter.id] exists before using operator[] on it.
149+
150+2015-05-21 Andrea Azzarone <azzaronea@gmail.com>
151+
152+ Do not restore focus if a quicklist is opened during launcher key navigation. Fixes: #932486
153+ Approved by: Stephen M. Webb, PS Jenkins bot
154+
155+2015-05-15 Andrea Azzarone <azzaronea@gmail.com>
156+
157+ Do not restore focus if a quicklist is opened during launcher key navigation.
158+
159+2015-05-21 Brandon Schaefer <brandontschaefer@gmail.com>
160+
161+ When we quit the quicklist it would check if the mouse was over the launcher, if it wasn't it would fold the launcher. We don't need to check this if we are in keynav as we want all the icons to be unfolded. Fixes: #1246891
162+ Approved by: Stephen M. Webb, PS Jenkins bot
163+
164+2015-05-15 Brandon Schaefer <brandontschaefer@gmail.com>
165+
166+ When we quit the quicklist it would check if the mouse was over the launcher, if it wasn't it would fold the launcher. We don't need to check this if we are in keynav as we want all the icons to be unfolded.
167+
168+2015-05-21 Chris Townsend <christopher.townsend@canonical.com>
169+
170+ Use a 2 second delay before showing the first run shortcut hints to workaround a race condition on input handling. Fixes: #1313597
171+ Approved by: Stephen M. Webb, PS Jenkins bot
172+
173+2015-05-15 Chris Townsend <christopher.townsend@canonical.com>
174+
175+ Use a 2 second delay before showing the first run shortcut hints to workaround a race condition on input handling.
176+
177+2015-05-21 Andrea Azzarone <azzaronea@gmail.com>
178+
179+ Draw osk above unity shell. Fixes: #1413165
180+ Approved by: Stephen M. Webb, PS Jenkins bot
181+
182+2015-05-15 Andrea Azzarone <azzaronea@gmail.com>
183+
184+ Draw osk above unity shell.
185+
186+2015-05-21 Andrea Azzarone <azzaronea@gmail.com>
187+
188+ Add the possibility to specify the font size and the font weight without chaning the default font name. Fixes: #886478
189+ Approved by: Stephen M. Webb, PS Jenkins bot
190+
191+2015-05-15 Andrea Azzarone <azzaronea@gmail.com>
192+
193+ Add the possibility to specify the font size and the font weight without chaning the default font name.
194+
195+2015-04-16 Chris Townsend <christopher.townsend@canonical.com>
196+
197+ * Releasing 7.2.5.
198+ * Bump version to 7.2.5.
199+
200 2015-03-16 CI Train Bot <ci-train-bot@canonical.com>
201
202 Releasing 7.2.4+14.04.20150316-0ubuntu1
203
204=== modified file 'UnityCore/GLibDBusProxy.cpp'
205--- UnityCore/GLibDBusProxy.cpp 2014-12-16 19:27:36 +0000
206+++ UnityCore/GLibDBusProxy.cpp 2015-10-20 18:34:31 +0000
207@@ -89,7 +89,7 @@
208
209 void OnProxyNameOwnerChanged(GDBusProxy*, GParamSpec*);
210 void OnProxySignal(GDBusProxy* proxy, const char*, const char*, GVariant*);
211- void OnPropertyChanged(GDBusProxy*, GVariant*, GStrv*);
212+ void OnPropertyChanged(GDBusProxy*, GVariant*, GStrv);
213
214 static void OnProxyConnectCallback(GObject* source, GAsyncResult* res, gpointer impl);
215 static void OnCallCallback(GObject* source, GAsyncResult* res, gpointer call_data);
216@@ -114,7 +114,7 @@
217 unsigned reconnection_attempts_;
218
219 glib::Signal<void, GDBusProxy*, const char*, const char*, GVariant*> g_signal_connection_;
220- glib::Signal<void, GDBusProxy*, GVariant*, GStrv*> g_property_signal_;
221+ glib::Signal<void, GDBusProxy*, GVariant*, GStrv> g_property_signal_;
222 glib::Signal<void, GDBusProxy*, GParamSpec*> name_owner_signal_;
223 glib::Source::UniquePtr reconnect_timeout_;
224 sigc::signal<void> proxy_acquired;
225@@ -277,7 +277,7 @@
226 }
227 }
228
229-void DBusProxy::Impl::OnPropertyChanged(GDBusProxy* proxy, GVariant* changed_props, GStrv* invalidated)
230+void DBusProxy::Impl::OnPropertyChanged(GDBusProxy* proxy, GVariant* changed_props, GStrv invalidated)
231 {
232 LOG_DEBUG(logger) << "Properties changed for proxy (" << object_path_ << ")";
233
234@@ -303,6 +303,19 @@
235
236 g_variant_iter_free (iter);
237 }
238+
239+ for (const gchar *property_name = *invalidated; property_name; property_name = *(++invalidated))
240+ {
241+ LOG_DEBUG(logger) << "Property: '" << property_name << "' invalidated";
242+
243+ auto handler_it = property_handlers_.find(property_name);
244+
245+ if (handler_it != property_handlers_.end())
246+ {
247+ for (ReplyCallback const& callback : handler_it->second)
248+ callback(nullptr);
249+ }
250+ }
251 }
252
253 void DBusProxy::Impl::WaitForProxy(GCancellable* cancellable,
254
255=== modified file 'UnityCore/GnomeSessionManager.cpp'
256--- UnityCore/GnomeSessionManager.cpp 2015-03-16 17:29:46 +0000
257+++ UnityCore/GnomeSessionManager.cpp 2015-10-20 18:34:31 +0000
258@@ -104,7 +104,8 @@
259 login_proxy_ = std::make_shared<glib::DBusProxy>(test_mode_ ? testing::DBUS_NAME : "org.freedesktop.login1",
260 "/org/freedesktop/login1/session/" + glib::gchar_to_string(session_id),
261 "org.freedesktop.login1.Session",
262- test_mode_ ? G_BUS_TYPE_SESSION : G_BUS_TYPE_SYSTEM);
263+ test_mode_ ? G_BUS_TYPE_SESSION : G_BUS_TYPE_SYSTEM,
264+ G_DBUS_PROXY_FLAGS_GET_INVALIDATED_PROPERTIES);
265
266 login_proxy_->Connect("Lock", [this](GVariant*){
267 manager_->PromptLockScreen();
268@@ -113,6 +114,10 @@
269 login_proxy_->Connect("Unlock", [this](GVariant*){
270 manager_->unlock_requested.emit();
271 });
272+
273+ login_proxy_->ConnectProperty("Active", [this] (GVariant* active) {
274+ manager_->screensaver_requested.emit(!glib::Variant(active).GetBool());
275+ });
276 }
277
278 {
279
280=== modified file 'dash/DashController.cpp'
281--- dash/DashController.cpp 2014-07-24 14:03:10 +0000
282+++ dash/DashController.cpp 2015-10-20 18:34:31 +0000
283@@ -308,6 +308,8 @@
284 return false;
285 }
286
287+ wm.SaveInputFocus();
288+
289 EnsureDash();
290 monitor_ = GetIdealMonitor();
291 screen_ungrabbed_slot_->disconnect();
292
293=== modified file 'dash/DashController.h'
294--- dash/DashController.h 2014-04-25 02:42:01 +0000
295+++ dash/DashController.h 2015-10-20 18:34:31 +0000
296@@ -21,7 +21,6 @@
297
298 #include <memory>
299
300-#include <gdk/gdk.h>
301 #include <UnityCore/ConnectionManager.h>
302 #include <UnityCore/GLibDBusServer.h>
303 #include <UnityCore/GLibSignal.h>
304
305=== modified file 'dash/DashView.cpp'
306--- dash/DashView.cpp 2015-05-15 15:52:31 +0000
307+++ dash/DashView.cpp 2015-10-20 18:34:31 +0000
308@@ -59,7 +59,7 @@
309 const RawPixel PREVIEW_CONTAINER_TRIANGLE_WIDTH = 14_em;
310 const RawPixel PREVIEW_CONTAINER_TRIANGLE_HEIGHT = 12_em;
311
312-const int MAX_ENTRY_ACTIVATE_WAIT_TIMEOUT = 1000;
313+const int MAX_ENTRY_ACTIVATE_WAIT_TIMEOUT = 300;
314 }
315
316 // This is so we can access some protected members in nux::VLayout and
317@@ -120,7 +120,6 @@
318 , preview_displaying_(false)
319 , preview_navigation_mode_(previews::Navigation::NONE)
320 , last_activated_timestamp_(0)
321- , search_in_progress_(false)
322 , activate_on_finish_(false)
323 , visible_(false)
324 , opening_column_x_(-1)
325@@ -1221,21 +1220,27 @@
326
327 void DashView::OnSearchChanged(std::string const& search_string)
328 {
329- search_in_progress_ = true;
330+ activate_on_finish_ = false;
331 }
332
333 void DashView::OnLiveSearchReached(std::string const& search_string)
334 {
335- // reset and set it again once we're sure a search is happening
336- search_in_progress_ = false;
337-
338 LOG_DEBUG(logger) << "Live search reached: " << search_string;
339- if (active_scope_view_)
340+ if (!active_scope_view_.IsValid())
341+ return;
342+
343+ if (active_scope_view_->PerformSearch(search_string, sigc::mem_fun(this, &DashView::OnScopeSearchFinished)))
344 {
345- if (active_scope_view_->PerformSearch(search_string, sigc::mem_fun(this, &DashView::OnScopeSearchFinished)))
346- {
347- search_in_progress_ = true;
348- }
349+ activate_delay_.reset(new glib::Timeout(MAX_ENTRY_ACTIVATE_WAIT_TIMEOUT, [this] {
350+ if (activate_on_finish_)
351+ {
352+ activate_on_finish_ = false;
353+ active_scope_view_->ActivateFirst();
354+ }
355+
356+ activate_delay_.reset();
357+ return false;
358+ }));
359 }
360 }
361
362@@ -1254,12 +1259,15 @@
363 LOG_DEBUG(logger) << "Search completed: " << search_string;
364
365 search_bar_->SetSearchFinished();
366- search_in_progress_ = false;
367-
368- activate_timeout_.reset();
369- if (activate_on_finish_ && !err)
370- OnEntryActivated();
371- activate_on_finish_= false;
372+
373+ if (activate_on_finish_)
374+ {
375+ activate_on_finish_ = false;
376+ activate_delay_.reset();
377+
378+ if (!err)
379+ active_scope_view_->ActivateFirst();
380+ }
381 }
382 }
383
384@@ -1407,20 +1415,12 @@
385 }
386 void DashView::OnEntryActivated()
387 {
388- if (active_scope_view_.IsValid() && !search_in_progress_)
389- {
390- active_scope_view_->ActivateFirst();
391- }
392- // delay the activation until we get the SearchFinished signal
393- activate_on_finish_ = search_in_progress_;
394-
395- if (activate_on_finish_)
396- {
397- activate_timeout_.reset(new glib::Timeout(MAX_ENTRY_ACTIVATE_WAIT_TIMEOUT, [this] {
398- activate_on_finish_ = false;
399+ if (active_scope_view_.IsValid())
400+ {
401+ if (!activate_delay_ && !search_bar_->in_live_search())
402 active_scope_view_->ActivateFirst();
403- return FALSE;
404- }));
405+ else
406+ activate_on_finish_ = true;
407 }
408 }
409
410@@ -1546,6 +1546,32 @@
411 ubus_manager_.SendMessage(UBUS_OVERLAY_CLOSE_REQUEST);
412 }
413
414+nux::Area* DashView::SkipUnexpandableHeaderKeyNav()
415+{
416+ PlacesGroup::Ptr prev_view;
417+ auto category_views = active_scope_view_->GetOrderedCategoryViews();
418+
419+ for (auto category : category_views)
420+ {
421+ if (category->GetLayout() != nullptr)
422+ {
423+ auto header = category->GetHeaderFocusableView();
424+ if (header && header->HasKeyFocus() && !category->IsExpandable())
425+ {
426+ if (prev_view)
427+ return prev_view->GetChildView();
428+ else
429+ return search_bar_->text_entry();
430+ }
431+
432+ if (category->IsVisible())
433+ prev_view = category;
434+ }
435+ }
436+
437+ return nullptr;
438+}
439+
440 nux::Area* DashView::FindKeyFocusArea(unsigned int key_symbol,
441 unsigned long x11_key_code,
442 unsigned long special_keys_state)
443@@ -1576,11 +1602,9 @@
444 direction = KEY_NAV_RIGHT;
445 break;
446 case NUX_VK_LEFT_TAB:
447- case NUX_VK_PAGE_UP:
448 direction = KEY_NAV_TAB_PREVIOUS;
449 break;
450 case NUX_VK_TAB:
451- case NUX_VK_PAGE_DOWN:
452 direction = KEY_NAV_TAB_NEXT;
453 break;
454 case NUX_VK_ENTER:
455@@ -1588,6 +1612,14 @@
456 // Not sure if Enter should be a navigation key
457 direction = KEY_NAV_ENTER;
458 break;
459+ case NUX_VK_PAGE_UP:
460+ case NUX_VK_PAGE_DOWN:
461+ if (!preview_displaying_)
462+ {
463+ active_scope_view_->PerformPageNavigation((x11_key_code == NUX_VK_PAGE_UP) ? ScrollDir::UP : ScrollDir::DOWN);
464+ return nux::GetWindowCompositor().GetKeyFocusArea();
465+ }
466+ break;
467 default:
468 auto const& close_key = WindowManager::Default().close_window_key();
469
470@@ -1691,6 +1723,14 @@
471 }
472 }
473
474+ if (direction == KEY_NAV_UP)
475+ {
476+ if (auto skip_view = SkipUnexpandableHeaderKeyNav())
477+ {
478+ return skip_view;
479+ }
480+ }
481+
482 bool search_key = false;
483
484 if (direction == KEY_NAV_NONE)
485
486=== modified file 'dash/DashView.h'
487--- dash/DashView.h 2014-07-24 13:49:53 +0000
488+++ dash/DashView.h 2015-10-20 18:34:31 +0000
489@@ -137,6 +137,8 @@
490
491 nux::Area* KeyNavIteration(nux::KeyNavDirection direction);
492
493+ nux::Area* SkipUnexpandableHeaderKeyNav();
494+
495 UBusManager ubus_manager_;
496 Scopes::Ptr scopes_;
497 ScopeViews scope_views_;
498@@ -170,10 +172,8 @@
499
500 LocalResult last_activated_result_;
501 guint64 last_activated_timestamp_;
502- bool search_in_progress_;
503 bool activate_on_finish_;
504- glib::Source::UniquePtr activate_timeout_;
505-
506+ glib::Source::UniquePtr activate_delay_;
507 bool visible_;
508
509 nux::ObjectPtr<nux::IOpenGLBaseTexture> dash_view_copy_;
510
511=== modified file 'dash/PlacesGroup.cpp'
512--- dash/PlacesGroup.cpp 2014-07-24 14:14:47 +0000
513+++ dash/PlacesGroup.cpp 2015-10-20 18:34:31 +0000
514@@ -212,7 +212,12 @@
515 if(direction == nux::KEY_NAV_UP)
516 nux::GetWindowCompositor().SetKeyFocusArea(_child_view, direction);
517 else
518- nux::GetWindowCompositor().SetKeyFocusArea(GetHeaderFocusableView(), direction);
519+ {
520+ if (IsExpandable())
521+ nux::GetWindowCompositor().SetKeyFocusArea(GetHeaderFocusableView(), direction);
522+ else
523+ nux::GetWindowCompositor().SetKeyFocusArea(_child_view, direction);
524+ }
525 });
526
527 UpdatePlacesGroupSize();
528@@ -567,6 +572,12 @@
529 }
530
531 bool
532+PlacesGroup::IsExpandable() const
533+{
534+ return (_n_visible_items_in_unexpand_mode < _n_total_items);
535+}
536+
537+bool
538 PlacesGroup::GetExpanded() const
539 {
540 return _is_expanded;
541@@ -649,7 +660,7 @@
542
543 bool PlacesGroup::ShouldBeHighlighted() const
544 {
545- return HeaderHasKeyFocus();
546+ return (HeaderHasKeyFocus() && IsExpandable());
547 }
548
549 void PlacesGroup::SetResultsPreviewAnimationValue(float preview_animation)
550
551=== modified file 'dash/PlacesGroup.h'
552--- dash/PlacesGroup.h 2014-03-20 04:05:39 +0000
553+++ dash/PlacesGroup.h 2015-10-20 18:34:31 +0000
554@@ -77,6 +77,7 @@
555
556 void SetCounts(unsigned n_total_items);
557
558+ virtual bool IsExpandable() const;
559 virtual void SetExpanded(bool is_expanded);
560 virtual bool GetExpanded() const;
561
562
563=== modified file 'dash/ResultView.cpp'
564--- dash/ResultView.cpp 2014-03-20 05:13:04 +0000
565+++ dash/ResultView.cpp 2015-10-20 18:34:31 +0000
566@@ -23,6 +23,7 @@
567
568 #include "ResultView.h"
569
570+#include <boost/algorithm/string.hpp>
571 #include <Nux/Layout.h>
572
573 #include "unity-shared/IntrospectableWrappers.h"
574@@ -49,6 +50,7 @@
575 , scale(DEFAULT_SCALE)
576 , renderer_(NULL)
577 , cached_result_(nullptr, nullptr, nullptr)
578+ , default_click_activation_(ActivateType::PREVIEW)
579 {
580 expanded.changed.connect([this](bool value)
581 {
582@@ -61,6 +63,21 @@
583 NeedRedraw();
584 });
585
586+ default_click_activation.SetGetterFunction([this] {
587+ if (Settings::Instance().double_click_activate())
588+ return default_click_activation_;
589+ return ActivateType::DIRECT;
590+ });
591+
592+ default_click_activation.SetSetterFunction([this] (ActivateType at) {
593+ if (default_click_activation_ != at)
594+ {
595+ default_click_activation_ = at;
596+ return true;
597+ }
598+ return false;
599+ });
600+
601 Settings::Instance().font_scaling.changed.connect(sigc::mem_fun(this, &ResultView::UpdateFontScale));
602 enable_texture_render.changed.connect(sigc::mem_fun(this, &ResultView::OnEnableRenderToTexture));
603 scale.changed.connect(sigc::mem_fun(this, &ResultView::UpdateScale));
604@@ -208,6 +225,14 @@
605 return LocalResult(*GetIteratorAtRow(index));
606 }
607
608+ResultView::ActivateType ResultView::GetLocalResultActivateType(LocalResult const& result) const
609+{
610+ if (boost::starts_with(result.uri, "x-unity-no-preview"))
611+ return ActivateType::DIRECT;
612+
613+ return ActivateType::PREVIEW;
614+}
615+
616 void ResultView::Draw(nux::GraphicsEngine& GfxContext, bool force_draw)
617 {}
618
619
620=== modified file 'dash/ResultView.h'
621--- dash/ResultView.h 2014-03-20 05:13:04 +0000
622+++ dash/ResultView.h 2015-10-20 18:34:31 +0000
623@@ -58,12 +58,11 @@
624 class ResultView : public nux::View, public debug::Introspectable
625 {
626 public:
627- typedef enum ActivateType_
628+ enum class ActivateType
629 {
630 DIRECT,
631- PREVIEW_LEFT_BUTTON,
632 PREVIEW
633- } ActivateType;
634+ };
635
636 NUX_DECLARE_OBJECT_TYPE(ResultView, nux::View);
637
638@@ -73,8 +72,9 @@
639 void SetModelRenderer(ResultRenderer* renderer);
640 void SetResultsModel(Results::Ptr const& results);
641
642- unsigned int GetIndexForLocalResult(LocalResult const& local_result);
643+ unsigned int GetIndexForLocalResult(LocalResult const&);
644 LocalResult GetLocalResultForIndex(unsigned int);
645+ ActivateType GetLocalResultActivateType(LocalResult const&) const;
646
647 nux::Property<bool> expanded;
648 nux::Property<int> results_per_row;
649@@ -82,6 +82,7 @@
650 nux::Property<float> desaturation_progress;
651 nux::Property<bool> enable_texture_render;
652 nux::Property<double> scale;
653+ nux::RWProperty<ActivateType> default_click_activation;
654
655 sigc::signal<void, LocalResult const&, ActivateType, GVariant*> ResultActivated;
656
657@@ -130,6 +131,7 @@
658 void UpdateFontScale(double scale);
659
660 Result cached_result_;
661+ ActivateType default_click_activation_;
662 connection::Manager result_connections_;
663 };
664
665
666=== modified file 'dash/ResultViewGrid.cpp'
667--- dash/ResultViewGrid.cpp 2014-03-20 04:05:39 +0000
668+++ dash/ResultViewGrid.cpp 2015-10-20 18:34:31 +0000
669@@ -24,9 +24,8 @@
670 #include <NuxCore/Logger.h>
671 #include <Nux/VLayout.h>
672 #include <NuxGraphics/GdkGraphics.h>
673-#include <gtk/gtk.h>
674-#include <gdk/gdk.h>
675 #include <unity-protocol.h>
676+#include <boost/algorithm/string.hpp>
677
678 #include "unity-shared/IntrospectableWrappers.h"
679 #include "unity-shared/Timer.h"
680@@ -34,8 +33,8 @@
681 #include "unity-shared/UBusMessages.h"
682 #include "unity-shared/GraphicsUtils.h"
683 #include "unity-shared/RawPixel.h"
684-#include "unity-shared/UnitySettings.h"
685 #include "unity-shared/WindowManager.h"
686+#include <UnityCore/DesktopUtilities.h>
687 #include "ResultViewGrid.h"
688 #include "math.h"
689
690@@ -58,6 +57,8 @@
691
692 const RawPixel WIDTH_PADDING = 25_em;
693 const RawPixel SCROLLBAR_WIDTH = 3_em;
694+
695+ const std::string APPLICATION_URI_PREFIX = "application://";
696 }
697
698 NUX_IMPLEMENT_OBJECT_TYPE(ResultViewGrid);
699@@ -94,8 +95,7 @@
700 scale.changed.connect(sigc::mem_fun(this, &ResultViewGrid::UpdateScale));
701
702 key_nav_focus_change.connect(sigc::mem_fun(this, &ResultViewGrid::OnKeyNavFocusChange));
703- key_nav_focus_activate.connect([this] (nux::Area *area)
704- {
705+ key_nav_focus_activate.connect([this] (nux::Area *area) {
706 Activate(focused_result_, selected_index_, ResultView::ActivateType::DIRECT);
707 });
708 key_down.connect(sigc::mem_fun(this, &ResultViewGrid::OnKeyDown));
709@@ -210,6 +210,12 @@
710 row_y += row_index * row_height;
711 }
712
713+ if (type == ActivateType::PREVIEW)
714+ {
715+ if (GetLocalResultActivateType(local_result) != type)
716+ type = ActivateType::DIRECT;
717+ }
718+
719 active_index_ = index;
720 guint64 timestamp = nux::GetGraphicsDisplay()->GetCurrentEvent().x11_timestamp;
721 glib::Variant data(g_variant_new("(tiiiiii)", timestamp, column_x, row_y, column_width, row_height, left_results, right_results));
722@@ -796,6 +802,7 @@
723 unsigned num_results = GetNumResults();
724 unsigned index = GetIndexAtPosition(x, y);
725 mouse_over_index_ = index;
726+
727 if (index < num_results)
728 {
729 // we got a click on a button so activate it
730@@ -805,32 +812,32 @@
731 focused_result_ = result;
732 activated_result_ = result;
733
734-
735 if (nux::GetEventButton(button_flags) == nux::NUX_MOUSE_BUTTON1)
736 {
737- if (unity::Settings::Instance().double_click_activate)
738+ if (default_click_activation() == ActivateType::PREVIEW &&
739+ GetLocalResultActivateType(activated_result_) == ActivateType::PREVIEW)
740 {
741 // delay activate for single left click. (for double click check)
742- activate_timer_.reset(new glib::Timeout(DOUBLE_CLICK_SPEED, [this, index]() {
743- Activate(activated_result_, index, ResultView::ActivateType::PREVIEW_LEFT_BUTTON);
744+ activate_timer_.reset(new glib::Timeout(DOUBLE_CLICK_SPEED, [this, index] {
745+ Activate(activated_result_, index, ActivateType::PREVIEW);
746 return false;
747 }));
748 }
749 else
750 {
751- Activate(activated_result_, index, ResultView::ActivateType::DIRECT);
752+ Activate(activated_result_, index, ActivateType::DIRECT);
753 }
754 }
755 else
756 {
757- Activate(activated_result_, index, ResultView::ActivateType::PREVIEW);
758+ Activate(activated_result_, index, ActivateType::PREVIEW);
759 }
760 }
761 }
762
763 void ResultViewGrid::MouseDoubleClick(int x, int y, unsigned long button_flags, unsigned long key_flags)
764 {
765- if (unity::Settings::Instance().double_click_activate == false)
766+ if (default_click_activation() == ActivateType::DIRECT)
767 return;
768
769 unsigned num_results = GetNumResults();
770@@ -845,7 +852,7 @@
771 focused_result_ = result;
772
773 activated_result_ = result;
774- Activate(activated_result_, index, ResultView::ActivateType::DIRECT);
775+ Activate(activated_result_, index, ActivateType::DIRECT);
776 }
777 }
778
779@@ -916,6 +923,15 @@
780 if (current_drag_result_.empty())
781 current_drag_result_.uri = current_drag_result_.uri.substr(current_drag_result_.uri.find(":") + 1);
782
783+ if (boost::starts_with(current_drag_result_.uri, APPLICATION_URI_PREFIX))
784+ {
785+ auto desktop_id = current_drag_result_.uri.substr(APPLICATION_URI_PREFIX.size());
786+ auto desktop_path = DesktopUtilities::GetDesktopPathById(desktop_id);
787+
788+ if (!desktop_path.empty())
789+ current_drag_result_.uri = "file://" + desktop_path;
790+ }
791+
792 LOG_DEBUG (logger) << "Dnd begin at " <<
793 last_mouse_down_x_ << ", " << last_mouse_down_y_ << " - using; "
794 << current_drag_result_.uri;
795
796=== modified file 'dash/ScopeView.cpp'
797--- dash/ScopeView.cpp 2014-08-06 14:09:30 +0000
798+++ dash/ScopeView.cpp 2015-10-20 18:34:31 +0000
799@@ -481,47 +481,40 @@
800 /* Reset result count */
801 counts_[group] = 0;
802
803- ResultView* results_view = nullptr;
804+ auto* results_view = new ResultViewGrid(NUX_TRACKER_LOCATION);
805+
806 if (category.GetContentType() == "social" && category.renderer_name == "default")
807 {
808- results_view = new ResultViewGrid(NUX_TRACKER_LOCATION);
809 results_view->SetModelRenderer(new ResultRendererHorizontalTile(NUX_TRACKER_LOCATION));
810- static_cast<ResultViewGrid*> (results_view)->horizontal_spacing = CARD_VIEW_GAP_HORIZ.CP(scale());
811- static_cast<ResultViewGrid*> (results_view)->vertical_spacing = CARD_VIEW_GAP_VERT.CP(scale());
812+ results_view->horizontal_spacing = CARD_VIEW_GAP_HORIZ.CP(scale());
813+ results_view->vertical_spacing = CARD_VIEW_GAP_VERT.CP(scale());
814 }
815 else
816 {
817- results_view = new ResultViewGrid(NUX_TRACKER_LOCATION);
818 results_view->SetModelRenderer(new ResultRendererTile(NUX_TRACKER_LOCATION));
819 }
820
821 if (scope_)
822 {
823- const std::string category_id = category.id();
824- std::string unique_id = category.name() + scope_->name();
825- results_view->unique_id = unique_id;
826+ results_view->unique_id = name + scope_->name();
827 results_view->expanded = false;
828
829- results_view->ResultActivated.connect([this, unique_id, category_id] (LocalResult const& local_result, ResultView::ActivateType type, GVariant* data)
830- {
831- if (g_str_has_prefix(local_result.uri.c_str(), "x-unity-no-preview"))
832- type = ResultView::ActivateType::DIRECT;
833-
834- // Applications scope results should be activated on left-click (instead of preview). Note that app scope can still
835- // respond with preview for activation request (the case for uninstalled apps).
836- bool is_app_scope_result = (scope_->id() == "applications.scope" || (scope_->id() == "home.scope" && category_id == "applications.scope"));
837-
838- if (is_app_scope_result && type == ResultView::ActivateType::PREVIEW_LEFT_BUTTON)
839- type = ResultView::ActivateType::DIRECT;
840-
841- result_activated.emit(type, local_result, data, unique_id);
842+ if (scope_->id() == "applications.scope" ||
843+ (scope_->id() == "home.scope" && category.id() == "applications.scope"))
844+ {
845+ results_view->default_click_activation = ResultView::ActivateType::DIRECT;
846+ }
847+
848+ results_view->ResultActivated.connect([this, results_view] (LocalResult const& local_result, ResultView::ActivateType type, GVariant* data)
849+ {
850+ result_activated.emit(type, local_result, data, results_view->unique_id());
851+
852 switch (type)
853 {
854 case ResultView::ActivateType::DIRECT:
855 {
856 scope_->Activate(local_result, nullptr, cancellable_);
857 } break;
858- case ResultView::ActivateType::PREVIEW_LEFT_BUTTON:
859 case ResultView::ActivateType::PREVIEW:
860 {
861 scope_->Preview(local_result, nullptr, cancellable_);
862@@ -1007,6 +1000,11 @@
863 scroll_view_->ScrollToPosition(nux::Geometry(0, 0, 0, 0));
864 }
865
866+void ScopeView::PerformPageNavigation(ScrollDir dir)
867+{
868+ scroll_view_->page_direction.emit(dir);
869+}
870+
871 void ScopeView::ActivateFirst()
872 {
873 if (!scope_)
874
875=== modified file 'dash/ScopeView.h'
876--- dash/ScopeView.h 2014-08-06 14:09:30 +0000
877+++ dash/ScopeView.h 2015-10-20 18:34:31 +0000
878@@ -36,6 +36,7 @@
879 #include "PlacesGroup.h"
880 #include "ResultViewGrid.h"
881 #include "unity-shared/UBusWrapper.h"
882+#include "unity-shared/PlacesOverlayVScrollBar.h"
883
884 namespace unity
885 {
886@@ -61,6 +62,7 @@
887 int GetNumRows();
888 void AboutToShow();
889 void JumpToTop();
890+ void PerformPageNavigation(ScrollDir dir);
891
892 virtual void ActivateFirst();
893
894
895=== modified file 'debian/changelog'
896--- debian/changelog 2015-06-03 15:22:38 +0000
897+++ debian/changelog 2015-10-20 18:34:31 +0000
898@@ -1,3 +1,54 @@
899+unity (7.2.6-0ubuntu1) UNRELEASED; urgency=medium
900+
901+ * New upstream release
902+
903+ [ Andrea Azzarone ]
904+ * Merge patch from https://launchpadlibrarian.net/216276242/low-gfx-
905+ override.patch (LP: #1491913)
906+ * Properly hide decorations when on "Show Desktop" mode. (LP: #1485073)
907+ * Do not handle events coming from viewports not actually containing the window.
908+ (LP: #1449654)
909+ * Make sure new icons are added to the model before calling SortAndUpdate
910+ (LP: #1458950)
911+ * GnomeSessionManager: Do not allow shutdown when screen is locked. (LP: #1460626)
912+
913+ [ Chris Townsend ]
914+ * When looking for the top-most valid window in a VP, also check if the window
915+ is focused if the window is set to Always on Top. This allows Launcher icon
916+ spread to work properly when a window is minimized an Always on Top exists in
917+ the group. (LP: #1131385)
918+ * Wait on Spread to be terminated before showing the Quicklist. (LP: #1441626)
919+ * If dragging an application:// uri type from the Dash to the desktop, change it
920+ to a file:// uri type so Nautilus can understand the type a make a copy of it
921+ on the desktop. (LP: #1241972)
922+ * Enable real page up/page down key navigation in the Dash. When using these
923+ keys the view scrolls the length of the visible view. (LP: #913612)
924+ * Save the active window when showing the Hud so the correct window is focused
925+ when hiding the Hud. Fixes issue when "Always on Top" windows are present.
926+ (LP: #1366583)
927+ * Save the active window when showing the Dash so the correct window is focused
928+ when hiding the Dash. Fixes issue when "Always on Top" windows are present.
929+ (LP: #1446634)
930+ * When using keyboard navigation in the Dash, skip category headers that are not
931+ expandable. Also, do not highlight the category header when the mouse cursor
932+ is over it. (LP: #1045933)
933+ * Also use the Compiz show() method when forcing an unmapped window to be
934+ visible when clicking on it's active Launcher icon. (LP: #989588)
935+ * Add option to enable and disable Unity low graphics mode on the fly in ccsm or
936+ via gsettings. (LP: #1412937)
937+
938+ [ Marco Trevisan (Treviño) ]
939+ * ResultViewGrid: wait for double-click event only if the relative result needs
940+ the Preview (LP: #1291950)
941+ * OverlayWindowButtons: trigger a queuedraw also when a child requires a redraw
942+ (LP: #1461618)
943+ * GnomeSessionManager: Request ScreenSaver (de)activation on VT changes (LP:
944+ #1405349)
945+ * UScreen, PanelService: get monitor at position, ignoring pre-multipled Gdk
946+ scale factor (LP: #1351591)
947+
948+ -- Marco Trevisan (Treviño) <marco@ubuntu.com> Thu, 15 Oct 2015 17:35:51 +0100
949+
950 unity (7.2.5+14.04.20150603-0ubuntu1) trusty; urgency=medium
951
952 [ Chris Townsend ]
953
954=== modified file 'decorations/DecoratedWindow.cpp'
955--- decorations/DecoratedWindow.cpp 2015-03-12 00:57:05 +0000
956+++ decorations/DecoratedWindow.cpp 2015-10-20 18:34:31 +0000
957@@ -840,6 +840,11 @@
958 , impl_(new Impl(this, cwin))
959 {}
960
961+CompWindow* Window::GetCompWindow()
962+{
963+ return impl_->win_;
964+}
965+
966 void Window::Update()
967 {
968 impl_->Update();
969
970=== modified file 'decorations/DecoratedWindow.h'
971--- decorations/DecoratedWindow.h 2014-03-03 19:07:56 +0000
972+++ decorations/DecoratedWindow.h 2015-10-20 18:34:31 +0000
973@@ -45,6 +45,7 @@
974 nux::Property<bool> scaled;
975 nux::ROProperty<double> dpi_scale;
976
977+ CompWindow* GetCompWindow();
978 void Update();
979 void Undecorate();
980 void UpdateDecorationPosition();
981
982=== modified file 'decorations/DecorationsManager.cpp'
983--- decorations/DecorationsManager.cpp 2015-03-12 00:57:05 +0000
984+++ decorations/DecorationsManager.cpp 2015-10-20 18:34:31 +0000
985@@ -178,7 +178,7 @@
986 {
987 auto const& win = GetWindowByXid(xid);
988
989- if (win && !win->impl_->win_->hasUnmapReference())
990+ if (win && !win->GetCompWindow()->hasUnmapReference())
991 {
992 win->Update();
993 return true;
994@@ -312,6 +312,10 @@
995 bool Manager::Impl::HandleFrameEvent(XEvent* event)
996 {
997 auto const& win = GetWindowByFrame(event->xany.window);
998+ CompWindow* comp_window = win ? win->GetCompWindow() : nullptr;
999+
1000+ if (comp_window && comp_window->defaultViewport() != screen->vp())
1001+ return false;
1002
1003 // ButtonRelease events might happen also outside the frame window, in this
1004 // case we must unset the mouse owner, wherever the event happens.
1005
1006=== modified file 'hud/HudButton.cpp'
1007--- hud/HudButton.cpp 2014-07-24 14:20:30 +0000
1008+++ hud/HudButton.cpp 2015-10-20 18:34:31 +0000
1009@@ -20,11 +20,6 @@
1010 */
1011 #include "config.h"
1012
1013-#include <pango/pango.h>
1014-#include <pango/pangocairo.h>
1015-#include <gdk/gdk.h>
1016-#include <gtk/gtk.h>
1017-
1018 #include <Nux/Nux.h>
1019 #include <Nux/HLayout.h>
1020 #include <NuxCore/Logger.h>
1021
1022=== modified file 'hud/HudController.cpp'
1023--- hud/HudController.cpp 2014-07-24 14:20:30 +0000
1024+++ hud/HudController.cpp 2015-10-20 18:34:31 +0000
1025@@ -372,6 +372,8 @@
1026 focused_app_icon_ = PKGDATADIR "/launcher_bfb.png";
1027 }
1028
1029+ wm.SaveInputFocus();
1030+
1031 LOG_DEBUG(logger) << "Taking application icon: " << focused_app_icon_;
1032 SetIcon(focused_app_icon_);
1033 FocusWindow();
1034
1035=== modified file 'hud/HudController.h'
1036--- hud/HudController.h 2014-07-24 14:20:30 +0000
1037+++ hud/HudController.h 2015-10-20 18:34:31 +0000
1038@@ -22,7 +22,6 @@
1039 #include <functional>
1040 #include <memory>
1041
1042-#include <gdk/gdk.h>
1043 #include <UnityCore/Hud.h>
1044 #include <UnityCore/GLibSignal.h>
1045
1046
1047=== modified file 'launcher/DeviceNotificationDisplayImp.cpp'
1048--- launcher/DeviceNotificationDisplayImp.cpp 2013-10-03 23:48:48 +0000
1049+++ launcher/DeviceNotificationDisplayImp.cpp 2015-10-20 18:34:31 +0000
1050@@ -17,7 +17,6 @@
1051 * Authored by: Andrea Azzarone <andrea.azzarone@canonical.com>
1052 */
1053
1054-#include <gdk/gdk.h>
1055 #include "config.h"
1056 #include <glib/gi18n-lib.h>
1057 #include <libnotify/notify.h>
1058
1059=== modified file 'launcher/LauncherController.cpp'
1060--- launcher/LauncherController.cpp 2015-05-15 14:50:28 +0000
1061+++ launcher/LauncherController.cpp 2015-10-20 18:34:31 +0000
1062@@ -759,14 +759,14 @@
1063 *uri_ptr = new_uri;
1064 });
1065
1066+ model_->AddIcon(icon);
1067+
1068 if (icon->GetIconType() == AbstractLauncherIcon::IconType::APPLICATION)
1069 {
1070 icon->visibility_changed.connect(sigc::hide(sigc::mem_fun(this, &Impl::SortAndUpdate)));
1071 SortAndUpdate();
1072 }
1073
1074- model_->AddIcon(icon);
1075-
1076 std::string const& path = icon->DesktopFile();
1077
1078 if (!path.empty())
1079
1080=== modified file 'launcher/LauncherIcon.cpp'
1081--- launcher/LauncherIcon.cpp 2015-05-15 14:50:28 +0000
1082+++ launcher/LauncherIcon.cpp 2015-10-20 18:34:31 +0000
1083@@ -577,10 +577,6 @@
1084 }
1085
1086 WindowManager& win_manager = WindowManager::Default();
1087-
1088- if (win_manager.IsScaleActive())
1089- win_manager.TerminateScale();
1090-
1091 auto const& pos = GetTipPosition(monitor);
1092
1093 /* If the expo plugin is active, we need to wait it to be terminated, before
1094@@ -593,6 +589,15 @@
1095 conn->disconnect();
1096 });
1097 }
1098+ else if (win_manager.IsScaleActive())
1099+ {
1100+ auto conn = std::make_shared<sigc::connection>();
1101+ *conn = win_manager.terminate_spread.connect([this, conn, pos, restore_input_focus] {
1102+ QuicklistManager::Default()->ShowQuicklist(_quicklist, pos.x, pos.y, restore_input_focus);
1103+ conn->disconnect();
1104+ });
1105+ win_manager.TerminateScale();
1106+ }
1107 else
1108 {
1109 QuicklistManager::Default()->ShowQuicklist(_quicklist, pos.x, pos.y, restore_input_focus);
1110
1111=== modified file 'panel/PanelView.cpp'
1112--- panel/PanelView.cpp 2014-03-06 16:26:34 +0000
1113+++ panel/PanelView.cpp 2015-10-20 18:34:31 +0000
1114@@ -64,6 +64,7 @@
1115 auto& wm = WindowManager::Default();
1116 panel::Style::Instance().changed.connect(sigc::mem_fun(this, &PanelView::ForceUpdateBackground));
1117 Settings::Instance().dpi_changed.connect(sigc::mem_fun(this, &PanelView::Resize));
1118+ Settings::Instance().low_gfx_changed.connect(sigc::mem_fun(this, &PanelView::OnLowGfxChanged));
1119
1120 wm.average_color.changed.connect(sigc::mem_fun(this, &PanelView::OnBackgroundUpdate));
1121 wm.initiate_spread.connect(sigc::mem_fun(this, &PanelView::OnSpreadInitiate));
1122@@ -252,6 +253,22 @@
1123 EnableOverlayMode(false);
1124 }
1125
1126+void PanelView::OnLowGfxChanged()
1127+{
1128+ if (!Settings::Instance().GetLowGfxMode())
1129+ {
1130+ nux::ROPConfig rop;
1131+
1132+ rop.Blend = true;
1133+ rop.SrcBlend = GL_ZERO;
1134+ rop.DstBlend = GL_SRC_COLOR;
1135+ nux::Color darken_colour = nux::Color(0.9f, 0.9f, 0.9f, 1.0f);
1136+ bg_darken_layer_.reset(new nux::ColorLayer(darken_colour, false, rop));
1137+ }
1138+
1139+ ForceUpdateBackground();
1140+}
1141+
1142 void PanelView::AddPanelView(PanelIndicatorsView* child,
1143 unsigned int stretchFactor)
1144 {
1145@@ -540,6 +557,7 @@
1146 is_dirty_ = true;
1147 UpdateBackground();
1148
1149+ QueueRelayout();
1150 QueueDraw();
1151 }
1152
1153
1154=== modified file 'panel/PanelView.h'
1155--- panel/PanelView.h 2014-03-06 16:26:34 +0000
1156+++ panel/PanelView.h 2015-10-20 18:34:31 +0000
1157@@ -98,6 +98,7 @@
1158 void OnOverlayHidden(GVariant *data);
1159 void OnSpreadInitiate();
1160 void OnSpreadTerminate();
1161+ void OnLowGfxChanged();
1162 void EnableOverlayMode(bool);
1163
1164 bool ActivateFirstSensitive();
1165
1166=== modified file 'plugins/unityshell/src/unityshell.cpp'
1167--- plugins/unityshell/src/unityshell.cpp 2015-06-03 12:46:12 +0000
1168+++ plugins/unityshell/src/unityshell.cpp 2015-10-20 18:34:31 +0000
1169@@ -259,10 +259,16 @@
1170 renderer.find("Mesa X11") != std::string::npos ||
1171 renderer.find("LLVM") != std::string::npos ||
1172 renderer.find("on softpipe") != std::string::npos ||
1173- (getenv("UNITY_LOW_GFX_MODE") != NULL && atoi(getenv("UNITY_LOW_GFX_MODE")) == 1))
1174+ (getenv("UNITY_LOW_GFX_MODE") != NULL && atoi(getenv("UNITY_LOW_GFX_MODE")) == 1) ||
1175+ optionGetLowGraphicsMode())
1176 {
1177 unity_settings_.SetLowGfxMode(true);
1178 }
1179+
1180+ if (getenv("UNITY_LOW_GFX_MODE") != NULL && atoi(getenv("UNITY_LOW_GFX_MODE")) == 0)
1181+ {
1182+ unity_settings_.SetLowGfxMode(false);
1183+ }
1184 #endif
1185
1186 if (!failed)
1187@@ -340,6 +346,7 @@
1188 optionSetAutohideAnimationNotify(boost::bind(&UnityScreen::optionChanged, this, _1, _2));
1189 optionSetDashBlurExperimentalNotify(boost::bind(&UnityScreen::optionChanged, this, _1, _2));
1190 optionSetShortcutOverlayNotify(boost::bind(&UnityScreen::optionChanged, this, _1, _2));
1191+ optionSetLowGraphicsModeNotify(boost::bind(&UnityScreen::optionChanged, this, _1, _2));
1192 optionSetShowLauncherInitiate(boost::bind(&UnityScreen::showLauncherKeyInitiate, this, _1, _2, _3));
1193 optionSetShowLauncherTerminate(boost::bind(&UnityScreen::showLauncherKeyTerminate, this, _1, _2, _3));
1194 optionSetKeyboardFocusInitiate(boost::bind(&UnityScreen::setKeyboardFocusKeyInitiate, this, _1, _2, _3));
1195@@ -1223,7 +1230,6 @@
1196
1197 window->updateFrameRegionSetCurrentIndex(MAXSHORT);
1198 window->updateFrameRegion(region);
1199- deco_win_->UpdateFrameRegion(region);
1200 window->updateFrameRegionSetCurrentIndex(oldUpdateFrameRegionIndex);
1201 }
1202
1203@@ -3595,6 +3601,14 @@
1204 case UnityshellOptions::ShortcutOverlay:
1205 shortcut_controller_->SetEnabled(optionGetShortcutOverlay());
1206 break;
1207+ case UnityshellOptions::LowGraphicsMode:
1208+ if (optionGetLowGraphicsMode())
1209+ BackgroundEffectHelper::blur_type = BLUR_NONE;
1210+ else
1211+ BackgroundEffectHelper::blur_type = (unity::BlurType)optionGetDashBlurExperimental();
1212+
1213+ unity::Settings::Instance().SetLowGfxMode(optionGetLowGraphicsMode());
1214+ break;
1215 case UnityshellOptions::DecayRate:
1216 launcher_options->edge_decay_rate = optionGetDecayRate() * 100;
1217 break;
1218
1219=== modified file 'plugins/unityshell/unityshell.xml.in'
1220--- plugins/unityshell/unityshell.xml.in 2014-04-07 03:21:46 +0000
1221+++ plugins/unityshell/unityshell.xml.in 2015-10-20 18:34:31 +0000
1222@@ -146,6 +146,12 @@
1223 <_long>Enables possibility to display an overlay showing available mouse and keyboard shortcuts.</_long>
1224 <default>true</default>
1225 </option>
1226+
1227+ <option name="low_graphics_mode" type="bool">
1228+ <_short>Enable Low Graphics Mode</_short>
1229+ <_long>Enables low graphics mode regardless of hardware in the system</_long>
1230+ <default>false</default>
1231+ </option>
1232 </group>
1233
1234 <group>
1235
1236=== modified file 'unity-shared/BGHash.cpp'
1237--- unity-shared/BGHash.cpp 2015-03-11 20:54:31 +0000
1238+++ unity-shared/BGHash.cpp 2015-10-20 18:34:31 +0000
1239@@ -116,8 +116,11 @@
1240 .SetDuration(skip_animation ? 0 : TRANSITION_DURATION)
1241 .Start();
1242
1243- // This will make sure that the animation starts even if the screen is idle.
1244- nux::GetWindowThread()->RequestRedraw();
1245+ if (nux::WindowThread* wt = nux::GetWindowThread())
1246+ {
1247+ // This will make sure that the animation starts even if the screen is idle.
1248+ wt->RequestRedraw();
1249+ }
1250 }
1251
1252 void BGHash::OnTransitionUpdated(nux::Color const& new_color)
1253
1254=== modified file 'unity-shared/CompizUtils.cpp'
1255--- unity-shared/CompizUtils.cpp 2014-12-16 19:35:06 +0000
1256+++ unity-shared/CompizUtils.cpp 2015-10-20 18:34:31 +0000
1257@@ -190,9 +190,6 @@
1258 if (win->wmType() & (CompWindowTypeDockMask | CompWindowTypeDesktopMask))
1259 return elements;
1260
1261- if (win->inShowDesktopMode())
1262- return elements;
1263-
1264 auto const& region = win->region();
1265 bool rectangular = (region.numRects() == 1);
1266 bool alpha = win->alpha();
1267
1268=== modified file 'unity-shared/OverlayRenderer.cpp'
1269--- unity-shared/OverlayRenderer.cpp 2014-07-24 14:14:47 +0000
1270+++ unity-shared/OverlayRenderer.cpp 2015-10-20 18:34:31 +0000
1271@@ -116,6 +116,8 @@
1272 {
1273 parent->scale = Settings::Instance().em()->DPIScale();
1274 parent->scale.changed.connect(sigc::hide(sigc::mem_fun(this, &OverlayRendererImpl::LoadScaledTextures)));
1275+ Settings::Instance().low_gfx_changed.connect(sigc::mem_fun(this, &OverlayRendererImpl::UpdateTextures));
1276+
1277 UpdateTextures();
1278 LoadScaledTextures();
1279 }
1280
1281=== modified file 'unity-shared/OverlayScrollView.cpp'
1282--- unity-shared/OverlayScrollView.cpp 2014-08-06 14:09:30 +0000
1283+++ unity-shared/OverlayScrollView.cpp 2015-10-20 18:34:31 +0000
1284@@ -50,7 +50,11 @@
1285 scale.changed.connect([this] (double scale) {
1286 m_MouseWheelScrollSize = MOUSE_WHEEL_SCROLL_SIZE.CP(scale);
1287 });
1288+
1289+ page_direction.connect([scrollbar] (ScrollDir dir) {
1290+ scrollbar->PerformPageNavigation(dir);
1291+ });
1292 }
1293
1294 } // dash namespace
1295-} // unity namespace
1296\ No newline at end of file
1297+} // unity namespace
1298
1299=== modified file 'unity-shared/OverlayScrollView.h'
1300--- unity-shared/OverlayScrollView.h 2014-08-06 14:09:30 +0000
1301+++ unity-shared/OverlayScrollView.h 2015-10-20 18:34:31 +0000
1302@@ -21,6 +21,7 @@
1303 #define _UNITY_SCROLL_VIEW_H_
1304
1305 #include <Nux/Nux.h>
1306+#include "PlacesOverlayVScrollBar.h"
1307
1308 namespace unity
1309 {
1310@@ -33,6 +34,7 @@
1311 ScrollView(NUX_FILE_LINE_PROTO);
1312
1313 nux::RWProperty<double> scale;
1314+ sigc::signal<void, ScrollDir> page_direction;
1315
1316 using nux::ScrollView::SetVScrollBar;
1317 };
1318
1319=== modified file 'unity-shared/OverlayWindowButtons.cpp'
1320--- unity-shared/OverlayWindowButtons.cpp 2014-02-26 20:26:01 +0000
1321+++ unity-shared/OverlayWindowButtons.cpp 2015-10-20 18:34:31 +0000
1322@@ -36,9 +36,9 @@
1323 : nux::BaseWindow("OverlayWindowButtons")
1324 , window_buttons_(new WindowButtons())
1325 {
1326- window_buttons_->queue_draw.connect([this] (nux::Layout* /*layout*/) {
1327- QueueDraw();
1328- });
1329+ auto queue_draw = sigc::hide(sigc::mem_fun(this, &OverlayWindowButtons::QueueDraw));
1330+ window_buttons_->queue_draw.connect(queue_draw);
1331+ window_buttons_->child_queue_draw.connect(queue_draw);
1332
1333 AddChild(window_buttons_.GetPointer());
1334 UpdateGeometry();
1335
1336=== modified file 'unity-shared/PlacesOverlayVScrollBar.cpp'
1337--- unity-shared/PlacesOverlayVScrollBar.cpp 2014-08-06 14:12:12 +0000
1338+++ unity-shared/PlacesOverlayVScrollBar.cpp 2015-10-20 18:34:31 +0000
1339@@ -121,6 +121,11 @@
1340 animation_.SetFinishValue(stop);
1341 }
1342
1343+void PlacesOverlayVScrollBar::PerformPageNavigation(ScrollDir dir)
1344+{
1345+ StartScrollAnimation(dir, _slider->GetBaseHeight());
1346+}
1347+
1348 void PlacesOverlayVScrollBar::StartScrollAnimation(ScrollDir dir, int stop)
1349 {
1350 if (animation_.CurrentState() == nux::animation::Animation::State::Stopped)
1351
1352=== modified file 'unity-shared/PlacesOverlayVScrollBar.h'
1353--- unity-shared/PlacesOverlayVScrollBar.h 2014-08-06 14:12:12 +0000
1354+++ unity-shared/PlacesOverlayVScrollBar.h 2015-10-20 18:34:31 +0000
1355@@ -34,22 +34,24 @@
1356 namespace dash
1357 {
1358
1359+enum class ScrollDir : unsigned int
1360+{
1361+ UP,
1362+ DOWN,
1363+};
1364+
1365 class PlacesOverlayVScrollBar: public PlacesVScrollBar
1366 {
1367 public:
1368 PlacesOverlayVScrollBar(NUX_FILE_LINE_PROTO);
1369 virtual ~PlacesOverlayVScrollBar() {}
1370
1371+ void PerformPageNavigation(ScrollDir dir);
1372+
1373 protected:
1374 void Draw(nux::GraphicsEngine& graphics_engine, bool force_draw);
1375
1376 private:
1377- enum class ScrollDir : unsigned int
1378- {
1379- UP,
1380- DOWN,
1381- };
1382-
1383 void OnTrackGeometryChanged(nux::Area* area, nux::Geometry& geo);
1384 void OnVisibilityChanged(nux::Area* area, bool visible);
1385 void OnSensitivityChanged(nux::Area* area, bool sensitive);
1386
1387=== modified file 'unity-shared/PluginAdapter.cpp'
1388--- unity-shared/PluginAdapter.cpp 2014-12-16 19:27:36 +0000
1389+++ unity-shared/PluginAdapter.cpp 2015-10-20 18:34:31 +0000
1390@@ -627,7 +627,7 @@
1391 if (window->defaultViewport() == screen_vp &&
1392 window->isViewable() && window->isMapped() &&
1393 !window->minimized() && !window->inShowDesktopMode() &&
1394- !(window->state() & CompWindowStateAboveMask) &&
1395+ !((window->state() & CompWindowStateAboveMask) && !window->focused()) &&
1396 !(window->type() & CompWindowTypeSplashMask) &&
1397 !(window->type() & CompWindowTypeDockMask) &&
1398 !window->overrideRedirect() &&
1399@@ -772,7 +772,10 @@
1400 {
1401 CompWindow* window = m_Screen->findWindow(window_id);
1402 if (window && (window->actions() & CompWindowActionMinimizeMask))
1403+ {
1404 window->unminimize();
1405+ window->show();
1406+ }
1407 }
1408
1409 void PluginAdapter::Shade(Window window_id)
1410@@ -953,6 +956,7 @@
1411 if (forced_unminimize)
1412 {
1413 top_window->unminimize();
1414+ top_window->show();
1415 }
1416
1417 top_window->raise();
1418
1419=== modified file 'unity-shared/SearchBar.cpp'
1420--- unity-shared/SearchBar.cpp 2014-12-15 19:06:58 +0000
1421+++ unity-shared/SearchBar.cpp 2015-10-20 18:34:31 +0000
1422@@ -141,6 +141,9 @@
1423 : View(NUX_FILE_LINE_PARAM)
1424 , showing_filters(false)
1425 , can_refine_search(false)
1426+ , im_active([this] { return pango_entry_->im_active(); })
1427+ , im_preedit([this] { return pango_entry_->im_preedit(); })
1428+ , in_live_search([this] { return live_search_timeout_ && live_search_timeout_->IsRunning(); })
1429 , live_search_wait(DEFAULT_LIVE_SEARCH_TIMEOUT)
1430 , scale(DEFAULT_SCALE)
1431 , show_filter_hint_(show_filter_hint)
1432@@ -179,11 +182,11 @@
1433 pango_entry_->mouse_down.connect(sigc::mem_fun(this, &SearchBar::OnMouseButtonDown));
1434 pango_entry_->end_key_focus.connect(sigc::mem_fun(this, &SearchBar::OnEndKeyFocus));
1435 pango_entry_->key_up.connect([this] (unsigned int, unsigned long, unsigned long) {
1436- if (get_im_preedit())
1437- {
1438- hint_->SetVisible(false);
1439- hint_->QueueDraw();
1440- }
1441+ if (im_preedit())
1442+ {
1443+ hint_->SetVisible(false);
1444+ hint_->QueueDraw();
1445+ }
1446 });
1447
1448 layered_layout_ = new nux::LayeredLayout();
1449@@ -263,10 +266,8 @@
1450 OnFontChanged();
1451
1452 search_hint.changed.connect([this](std::string const& s) { OnSearchHintChanged(); });
1453- search_string.SetGetterFunction(sigc::mem_fun(this, &SearchBar::get_search_string));
1454+ search_string.SetGetterFunction([this] { return pango_entry_->GetText(); });
1455 search_string.SetSetterFunction(sigc::mem_fun(this, &SearchBar::set_search_string));
1456- im_active.SetGetterFunction(sigc::mem_fun(this, &SearchBar::get_im_active));
1457- im_preedit.SetGetterFunction(sigc::mem_fun(this, &SearchBar::get_im_preedit));
1458 showing_filters.changed.connect(sigc::mem_fun(this, &SearchBar::OnShowingFiltersChanged));
1459 scale.changed.connect(sigc::mem_fun(this, &SearchBar::UpdateScale));
1460 Settings::Instance().font_scaling.changed.connect(sigc::hide(sigc::mem_fun(this, &SearchBar::UpdateSearchBarSize)));
1461@@ -633,11 +634,6 @@
1462 return expander_view_;
1463 }
1464
1465-std::string SearchBar::get_search_string() const
1466-{
1467- return pango_entry_->GetText();
1468-}
1469-
1470 bool SearchBar::set_search_string(std::string const& string)
1471 {
1472 pango_entry_->SetText(string.c_str());
1473@@ -649,16 +645,6 @@
1474 return true;
1475 }
1476
1477-bool SearchBar::get_im_active() const
1478-{
1479- return pango_entry_->im_active();
1480-}
1481-
1482-bool SearchBar::get_im_preedit() const
1483-{
1484- return pango_entry_->im_preedit();
1485-}
1486-
1487 //
1488 // Highlight
1489 //
1490
1491=== modified file 'unity-shared/SearchBar.h'
1492--- unity-shared/SearchBar.h 2014-12-08 22:02:13 +0000
1493+++ unity-shared/SearchBar.h 2015-10-20 18:34:31 +0000
1494@@ -63,6 +63,7 @@
1495 nux::Property<bool> can_refine_search;
1496 nux::ROProperty<bool> im_active;
1497 nux::ROProperty<bool> im_preedit;
1498+ nux::ROProperty<bool> in_live_search;
1499 nux::Property<unsigned> live_search_wait;
1500 nux::Property<double> scale;
1501
1502@@ -88,10 +89,7 @@
1503 bool OnLiveSearchTimeout();
1504 bool OnSpinnerStartCb();
1505
1506- std::string get_search_string() const;
1507 bool set_search_string(std::string const& string);
1508- bool get_im_active() const;
1509- bool get_im_preedit() const;
1510 bool show_filter_hint_;
1511
1512 std::string GetName() const;
1513
1514=== modified file 'unity-shared/UnitySettings.cpp'
1515--- unity-shared/UnitySettings.cpp 2015-03-12 00:57:05 +0000
1516+++ unity-shared/UnitySettings.cpp 2015-10-20 18:34:31 +0000
1517@@ -371,7 +371,12 @@
1518
1519 void Settings::SetLowGfxMode(const bool low_gfx)
1520 {
1521- pimpl->lowGfx_ = low_gfx;
1522+ if (pimpl->lowGfx_ != low_gfx)
1523+ {
1524+ pimpl->lowGfx_ = low_gfx;
1525+
1526+ low_gfx_changed.emit();
1527+ }
1528 }
1529
1530 EMConverter::Ptr const& Settings::em(int monitor) const
1531
1532=== modified file 'unity-shared/UnitySettings.h'
1533--- unity-shared/UnitySettings.h 2014-03-20 05:03:55 +0000
1534+++ unity-shared/UnitySettings.h 2015-10-20 18:34:31 +0000
1535@@ -57,6 +57,7 @@
1536 nux::Property<double> font_scaling;
1537
1538 sigc::signal<void> dpi_changed;
1539+ sigc::signal<void> low_gfx_changed;
1540
1541 private:
1542 class Impl;
1543
1544=== modified file 'unity-shared/WindowButtons.cpp'
1545--- unity-shared/WindowButtons.cpp 2014-02-28 17:41:25 +0000
1546+++ unity-shared/WindowButtons.cpp 2015-10-20 18:34:31 +0000
1547@@ -64,6 +64,7 @@
1548 if (new_state != visual_state_)
1549 {
1550 visual_state_ = new_state;
1551+ visual_state_change.emit(this);
1552 QueueDraw();
1553 }
1554 }

Subscribers

People subscribed via source and target branches

to all changes:
to status/vote changes: