Merge lp:~unity-team/unity/x-sru3 into lp:unity/7.4
- x-sru3
- Merge into xenial
Proposed by
Marco Trevisan (Treviño)
Status: | Merged |
---|---|
Approved by: | Andrea Azzarone |
Approved revision: | no longer in the source branch. |
Merged at revision: | 4111 |
Proposed branch: | lp:~unity-team/unity/x-sru3 |
Merge into: | lp:unity/7.4 |
Diff against target: |
1128 lines (+505/-85) 35 files modified
CMakeLists.txt (+6/-0) debian/changelog (+35/-0) debian/control (+1/-0) debian/libunity-core-6.0-9.install (+1/-1) debian/unity-services.install (+1/-1) debian/unity.install (+1/-0) decorations/CMakeLists.txt (+1/-0) decorations/DecoratedWindow.cpp (+101/-5) decorations/DecoratedWindow.h (+1/-0) decorations/DecorationsManager.cpp (+1/-1) decorations/DecorationsPriv.h (+8/-0) decorations/DecorationsShape.cpp (+107/-0) decorations/DecorationsShape.h (+54/-0) launcher/DeviceNotificationDisplay.h (+1/-1) launcher/DeviceNotificationDisplayImp.cpp (+4/-26) launcher/DeviceNotificationDisplayImp.h (+1/-1) launcher/FileManagerLauncherIcon.cpp (+4/-2) launcher/TrashLauncherIcon.cpp (+21/-17) launcher/VolumeLauncherIcon.cpp (+1/-1) lockscreen/LockScreenAcceleratorController.cpp (+12/-2) plugins/unityshell/src/unityshell.cpp (+2/-1) plugins/unityshell/unityshell.xml.in (+2/-0) tests/test_mock_devices.h (+1/-1) tests/test_unity_window_view.cpp (+6/-0) tests/test_volume_launcher_icon.cpp (+2/-2) tools/CMakeLists.txt (+22/-0) tools/unity.cmake (+6/-0) tools/unity_active_plugins_safety_check.cpp (+83/-0) unity-shared/CompizUtils.cpp (+3/-4) unity-shared/CompizUtils.h (+2/-1) unity-shared/PluginAdapter.cpp (+1/-1) unity-shared/TextInput.cpp (+4/-15) unity-shared/TextInput.h (+0/-1) unity-shared/UnityWindowView.cpp (+6/-1) unity7.conf.in (+3/-0) |
To merge this branch: | bzr merge lp:~unity-team/unity/x-sru3 |
Related bugs: |
|
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Andrea Azzarone (community) | Approve | ||
Review via email: mp+301625@code.launchpad.net |
Commit message
Releasing Unity Xenial SRU3.
Description of the change
To post a comment you must log in.
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 2016-05-14 23:01:37 +0000 |
3 | +++ CMakeLists.txt 2016-08-01 13:05:54 +0000 |
4 | @@ -425,3 +425,9 @@ |
5 | ADDITIONAL_MAKE_CLEAN_FILES api-doc) |
6 | |
7 | endif (DOXYGEN_FOUND STREQUAL "YES") |
8 | + |
9 | +# |
10 | +# Upstart |
11 | +# |
12 | +configure_file(unity7.conf.in ${CMAKE_CURRENT_BINARY_DIR}/unity7.conf) |
13 | +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/unity7.conf DESTINATION ${CMAKE_INSTALL_DATADIR}/upstart/sessions) |
14 | |
15 | === modified file 'debian/changelog' |
16 | --- debian/changelog 2016-07-15 10:14:41 +0000 |
17 | +++ debian/changelog 2016-08-01 13:05:54 +0000 |
18 | @@ -1,3 +1,38 @@ |
19 | +unity (7.4.0+16.04.20160715-0ubuntu2) UNRELEASED; urgency=medium |
20 | + |
21 | + [ Andrea Azzarone ] |
22 | + * FileManagerLauncherIcon: Don't trust the Quirk::VISIBLE in the ctor. |
23 | + (LP: #1599133) |
24 | + * [TrashLauncherIcon] Create GFileMonitor in an idle to avoid blocking |
25 | + calls. (LP: #1602720) |
26 | + * [LockSceen] Remove numlock warning. (LP: #1526322) |
27 | + * Make sure initiate and terminate callbacks are not empty before |
28 | + calling them. (LP: #1605012) |
29 | + * Properly destroy close_button_ to properly disconnect lambda. (LP: |
30 | + #1605010) |
31 | + * Use the standard notification-device-eject in the "device eject" |
32 | + notification. This allows us to scale it properly on high-dpi |
33 | + setups. (LP: #1605231) |
34 | + * Add tools to enforce unityshell plugin for the current profile and |
35 | + add "move" and "resize" plugins as requirements. (LP: #1506023, LP: |
36 | + #1605007, LP: #1604657) |
37 | + |
38 | + [ Marco Trevisan (Treviño) ] |
39 | + * Unity script: use result from unity_support_test to check the right |
40 | + COMPIZ_CONFIG_PROFILE to use (LP: #1602377) |
41 | + * LockScreenAcceleratorController: ensure callbacks are valid before |
42 | + calling them (LP: #1605012) |
43 | + |
44 | + [ Eleni Maria Stea ] |
45 | + * DecoratedWindow: Added shadows for shaped windows (LP: 1608418) |
46 | + |
47 | + [ Marco Trevisan (Treviño) ] |
48 | + * DecoratedWindow: Cleanup shadows for shaped windows, reduce |
49 | + recomputation (LP: #1608418) |
50 | + * UnityWindowView: don't try to deference close_button_ if its' null |
51 | + |
52 | + -- Andrea Azzarone <azzaronea@gmail.com> Mon, 01 Aug 2016 10:34:14 +0200 |
53 | + |
54 | unity (7.4.0+16.04.20160715-0ubuntu1) xenial; urgency=medium |
55 | |
56 | [ Eleni Maria Stea ] |
57 | |
58 | === modified file 'debian/control' |
59 | --- debian/control 2016-03-21 15:38:17 +0000 |
60 | +++ debian/control 2016-08-01 13:05:54 +0000 |
61 | @@ -18,6 +18,7 @@ |
62 | libbamf3-dev (>= 0.5.3~bzr0), |
63 | libboost-dev, |
64 | libcairo2-dev, |
65 | + libcompizconfig0-dev, |
66 | libdbus-1-dev, |
67 | libdbusmenu-glib-dev (>= 0.3.91), |
68 | libdee-dev (>= 1.2.6), |
69 | |
70 | === modified file 'debian/libunity-core-6.0-9.install' |
71 | --- debian/libunity-core-6.0-9.install 2016-02-09 01:26:22 +0000 |
72 | +++ debian/libunity-core-6.0-9.install 2016-08-01 13:05:54 +0000 |
73 | @@ -3,7 +3,7 @@ |
74 | usr/share/ccsm |
75 | usr/share/gnome-control-center/ |
76 | usr/share/unity |
77 | +usr/share/upstart/sessions/unity7.conf |
78 | debian/unity-crashdb.conf etc/apport/crashdb.conf.d/ |
79 | debian/source_unity.py usr/share/apport/package-hooks |
80 | -debian/unity7.conf usr/share/upstart/sessions |
81 | tools/convert-files/* usr/lib/compiz/migration/ |
82 | |
83 | === modified file 'debian/unity-services.install' |
84 | --- debian/unity-services.install 2016-02-09 01:26:22 +0000 |
85 | +++ debian/unity-services.install 2016-08-01 13:05:54 +0000 |
86 | @@ -1,3 +1,3 @@ |
87 | usr/lib/*/unity/*service |
88 | -usr/share/upstart |
89 | +usr/share/upstart/sessions/unity-panel-service*.conf |
90 | usr/share/man/*/unity-panel-service.1 |
91 | |
92 | === modified file 'debian/unity.install' |
93 | --- debian/unity.install 2016-02-09 01:26:22 +0000 |
94 | +++ debian/unity.install 2016-08-01 13:05:54 +0000 |
95 | @@ -1,6 +1,7 @@ |
96 | etc/pam.d |
97 | usr/bin |
98 | usr/lib/*/compiz/libunity*.so |
99 | +usr/lib/*/unity/unity-active-plugins-safety-check |
100 | usr/share/man/*/unity.1 |
101 | usr/share/compiz |
102 | usr/share/locale |
103 | |
104 | === modified file 'decorations/CMakeLists.txt' |
105 | --- decorations/CMakeLists.txt 2014-03-27 19:32:34 +0000 |
106 | +++ decorations/CMakeLists.txt 2016-08-01 13:05:54 +0000 |
107 | @@ -35,6 +35,7 @@ |
108 | DecorationsMenuDropdown.cpp |
109 | DecorationsForceQuitDialog.cpp |
110 | DecorationsDataPool.cpp |
111 | + DecorationsShape.cpp |
112 | ) |
113 | |
114 | add_library (decorations-lib STATIC ${DECORATION_SOURCES}) |
115 | |
116 | === modified file 'decorations/DecoratedWindow.cpp' |
117 | --- decorations/DecoratedWindow.cpp 2016-04-01 00:50:30 +0000 |
118 | +++ decorations/DecoratedWindow.cpp 2016-08-01 13:05:54 +0000 |
119 | @@ -38,6 +38,7 @@ |
120 | namespace |
121 | { |
122 | const std::string MENUS_PANEL_NAME = "WindowLIM"; |
123 | +const int SHADOW_BLUR_MARGIN_FACTOR = 2; |
124 | } |
125 | |
126 | Window::Impl::Impl(Window* parent, CompWindow* win) |
127 | @@ -492,6 +493,12 @@ |
128 | return deco_elements_ & cu::DecorationElement::SHADOW; |
129 | } |
130 | |
131 | +bool Window::Impl::ShapedShadowDecorated() const |
132 | +{ |
133 | + return deco_elements_ & cu::DecorationElement::SHADOW && |
134 | + deco_elements_ & cu::DecorationElement::SHAPED; |
135 | +} |
136 | + |
137 | bool Window::Impl::FullyDecorated() const |
138 | { |
139 | return deco_elements_ & cu::DecorationElement::BORDER; |
140 | @@ -504,6 +511,14 @@ |
141 | |
142 | GLTexture* Window::Impl::ShadowTexture() const |
143 | { |
144 | + if (shaped_shadow_pixmap_) |
145 | + return shaped_shadow_pixmap_->texture(); |
146 | + |
147 | + return SharedShadowTexture(); |
148 | +} |
149 | + |
150 | +GLTexture* Window::Impl::SharedShadowTexture() const |
151 | +{ |
152 | auto const& mi = manager_->impl_; |
153 | if (active() || parent_->scaled()) |
154 | return mi->active_shadow_pixmap_->texture(); |
155 | @@ -569,10 +584,22 @@ |
156 | if (!last_shadow_rect_.isEmpty()) |
157 | last_shadow_rect_.setGeometry(0, 0, 0, 0); |
158 | |
159 | - return; |
160 | - } |
161 | + shaped_shadow_pixmap_.reset(); |
162 | + } |
163 | + else if (deco_elements_ & cu::DecorationElement::SHAPED) |
164 | + { |
165 | + ComputeShapedShadowQuad(); |
166 | + } |
167 | + else |
168 | + { |
169 | + shaped_shadow_pixmap_.reset(); |
170 | + ComputeGenericShadowQuads(); |
171 | + } |
172 | +} |
173 | |
174 | - const auto* texture = ShadowTexture(); |
175 | +void Window::Impl::ComputeGenericShadowQuads() |
176 | +{ |
177 | + const auto* texture = SharedShadowTexture(); |
178 | |
179 | if (!texture || !texture->width() || !texture->height()) |
180 | return; |
181 | @@ -676,6 +703,68 @@ |
182 | } |
183 | } |
184 | |
185 | +cu::PixmapTexture::Ptr Window::Impl::BuildShapedShadowTexture(nux::Size const& size, unsigned radius, nux::Color const& color, Shape const& shape) { |
186 | + nux::CairoGraphics img(CAIRO_FORMAT_ARGB32, size.width, size.height); |
187 | + auto* img_ctx = img.GetInternalContext(); |
188 | + |
189 | + for (auto const& rect : shape.GetRectangles()) |
190 | + { |
191 | + cairo_rectangle(img_ctx, rect.x + radius * SHADOW_BLUR_MARGIN_FACTOR - shape.XOffset(), rect.y + radius * SHADOW_BLUR_MARGIN_FACTOR - shape.YOffset(), rect.width, rect.height); |
192 | + cairo_set_source_rgba(img_ctx, color.red, color.green, color.blue, color.alpha); |
193 | + cairo_fill(img_ctx); |
194 | + } |
195 | + |
196 | + img.BlurSurface(radius); |
197 | + |
198 | + cu::CairoContext shadow_ctx(size.width, size.height); |
199 | + cairo_set_source_surface(shadow_ctx, img.GetSurface(), 0, 0); |
200 | + cairo_paint(shadow_ctx); |
201 | + |
202 | + return shadow_ctx; |
203 | +} |
204 | + |
205 | +void Window::Impl::ComputeShapedShadowQuad() |
206 | +{ |
207 | + nux::Color color = active() ? manager_->active_shadow_color() : manager_->inactive_shadow_color(); |
208 | + unsigned int radius = active() ? manager_->active_shadow_radius() : manager_->inactive_shadow_radius(); |
209 | + |
210 | + Shape shape(win_->id()); |
211 | + auto const& border = win_->borderRect(); |
212 | + auto const& shadow_offset = manager_->shadow_offset(); |
213 | + |
214 | + // Ideally it would be shape.getWidth + radius * 2 but Cairographics::BlurSurface |
215 | + // isn't bounded by the radius and we need to compensate by using a larger texture. |
216 | + int width = shape.Width() + radius * 2 * SHADOW_BLUR_MARGIN_FACTOR; |
217 | + int height = shape.Height() + radius * 2 * SHADOW_BLUR_MARGIN_FACTOR; |
218 | + |
219 | + if (width != last_shadow_rect_.width() || height != last_shadow_rect_.height()) |
220 | + shaped_shadow_pixmap_ = BuildShapedShadowTexture({width, height}, radius, color, shape); |
221 | + |
222 | + const auto* texture = shaped_shadow_pixmap_->texture(); |
223 | + |
224 | + if (!texture || !texture->width() || !texture->height()) |
225 | + return; |
226 | + |
227 | + int x = border.x() + shadow_offset.x - radius * 2 + shape.XOffset(); |
228 | + int y = border.y() + shadow_offset.y - radius * 2 + shape.YOffset(); |
229 | + |
230 | + auto* quad = &shadow_quads_[Quads::Pos(0)]; |
231 | + quad->box.setGeometry(x, y, width, height); |
232 | + quad->matrix = texture->matrix(); |
233 | + quad->matrix.x0 = -COMP_TEX_COORD_X(quad->matrix, quad->box.x1()); |
234 | + quad->matrix.y0 = -COMP_TEX_COORD_Y(quad->matrix, quad->box.y1()); |
235 | + |
236 | + CompRect shaped_shadow_rect(x, y, width, height); |
237 | + if (shaped_shadow_rect != last_shadow_rect_) |
238 | + { |
239 | + auto const& win_region = win_->region(); |
240 | + quad->region = CompRegion(quad->box) - win_region; |
241 | + |
242 | + last_shadow_rect_ = shaped_shadow_rect; |
243 | + win_->updateWindowOutputExtents(); |
244 | + } |
245 | +} |
246 | + |
247 | void Window::Impl::Paint(GLMatrix const& transformation, |
248 | GLWindowPaintAttrib const& attrib, |
249 | CompRegion const& region, unsigned mask) |
250 | @@ -714,14 +803,18 @@ |
251 | |
252 | glwin_->vertexBuffer()->begin(); |
253 | |
254 | - for (unsigned i = 0; i < shadow_quads_.size(); ++i) |
255 | + unsigned int num_quads = ShapedShadowDecorated() ? 1 : shadow_quads_.size(); |
256 | + for (unsigned int i = 0; i < num_quads; ++i) |
257 | { |
258 | auto& quad = shadow_quads_[Quads::Pos(i)]; |
259 | glwin_->glAddGeometry(quad.matrices, quad.region, clip_region); |
260 | } |
261 | |
262 | if (glwin_->vertexBuffer()->end()) |
263 | - glwin_->glDrawTexture(ShadowTexture(), transformation, attrib, mask); |
264 | + { |
265 | + if (GLTexture* texture = ShadowTexture()) |
266 | + glwin_->glDrawTexture(texture, transformation, attrib, mask); |
267 | + } |
268 | |
269 | for (auto const& dtex : bg_textures_) |
270 | { |
271 | @@ -746,6 +839,9 @@ |
272 | |
273 | void Window::Impl::RedrawDecorations() |
274 | { |
275 | + if (!win_->isMapped()) |
276 | + return; |
277 | + |
278 | dirty_geo_ = true; |
279 | cwin_->damageOutputExtents(); |
280 | } |
281 | |
282 | === modified file 'decorations/DecoratedWindow.h' |
283 | --- decorations/DecoratedWindow.h 2015-08-07 18:54:07 +0000 |
284 | +++ decorations/DecoratedWindow.h 2016-08-01 13:05:54 +0000 |
285 | @@ -21,6 +21,7 @@ |
286 | #define UNITY_DECORATED_WINDOW |
287 | |
288 | #include "Introspectable.h" |
289 | +#include <NuxCore/Property.h> |
290 | #include <memory> |
291 | |
292 | class CompRegion; |
293 | |
294 | === modified file 'decorations/DecorationsManager.cpp' |
295 | --- decorations/DecorationsManager.cpp 2016-03-09 17:28:36 +0000 |
296 | +++ decorations/DecorationsManager.cpp 2016-08-01 13:05:54 +0000 |
297 | @@ -20,9 +20,9 @@ |
298 | #include "DecorationsPriv.h" |
299 | |
300 | #include <core/atoms.h> |
301 | -#include <NuxGraphics/CairoGraphics.h> |
302 | #include <UnityCore/DBusIndicators.h> |
303 | #include <X11/Xatom.h> |
304 | + |
305 | #include "WindowManager.h" |
306 | |
307 | namespace unity |
308 | |
309 | === modified file 'decorations/DecorationsPriv.h' |
310 | --- decorations/DecorationsPriv.h 2016-04-01 00:50:30 +0000 |
311 | +++ decorations/DecorationsPriv.h 2016-08-01 13:05:54 +0000 |
312 | @@ -23,6 +23,7 @@ |
313 | #include <unordered_map> |
314 | #include <NuxCore/NuxCore.h> |
315 | #include <NuxCore/Rect.h> |
316 | +#include <NuxGraphics/CairoGraphics.h> |
317 | #include <UnityCore/ConnectionManager.h> |
318 | #include <UnityCore/Indicators.h> |
319 | #include <core/core.h> |
320 | @@ -30,6 +31,7 @@ |
321 | #include <composite/composite.h> |
322 | #include <X11/extensions/shape.h> |
323 | |
324 | +#include "DecorationsShape.h" |
325 | #include "DecorationsDataPool.h" |
326 | #include "DecorationsManager.h" |
327 | #include "DecorationsInputMixer.h" |
328 | @@ -88,6 +90,7 @@ |
329 | bool IsMaximized() const; |
330 | bool FullyDecorated() const; |
331 | bool ShadowDecorated() const; |
332 | + bool ShapedShadowDecorated() const; |
333 | void RedrawDecorations(); |
334 | void Damage(); |
335 | void SetupAppMenu(); |
336 | @@ -117,14 +120,18 @@ |
337 | void SyncMenusGeometries() const; |
338 | bool ShouldBeDecorated() const; |
339 | GLTexture* ShadowTexture() const; |
340 | + GLTexture* SharedShadowTexture() const; |
341 | unsigned ShadowRadius() const; |
342 | std::string const& GetMenusPanelID() const; |
343 | |
344 | void ComputeShadowQuads(); |
345 | + void ComputeGenericShadowQuads(); |
346 | + void ComputeShapedShadowQuad(); |
347 | void UpdateDecorationTextures(); |
348 | void UpdateWindowEdgesGeo(); |
349 | void UpdateForceQuitDialogPosition(); |
350 | void RenderDecorationTexture(Side, nux::Geometry const&); |
351 | + cu::PixmapTexture::Ptr BuildShapedShadowTexture(nux::Size const&, unsigned radius, nux::Color const&, Shape const&); |
352 | void Paint(GLMatrix const&, GLWindowPaintAttrib const&, CompRegion const&, unsigned mask); |
353 | void Draw(GLMatrix const&, GLWindowPaintAttrib const&, CompRegion const&, unsigned mask); |
354 | |
355 | @@ -155,6 +162,7 @@ |
356 | std::string last_title_; |
357 | std::string panel_id_; |
358 | std::vector<cu::SimpleTextureQuad> bg_textures_; |
359 | + cu::PixmapTexture::Ptr shaped_shadow_pixmap_; |
360 | std::shared_ptr<ForceQuitDialog> force_quit_; |
361 | InputMixer::Ptr input_mixer_; |
362 | Layout::Ptr top_layout_; |
363 | |
364 | === added file 'decorations/DecorationsShape.cpp' |
365 | --- decorations/DecorationsShape.cpp 1970-01-01 00:00:00 +0000 |
366 | +++ decorations/DecorationsShape.cpp 2016-08-01 13:05:54 +0000 |
367 | @@ -0,0 +1,107 @@ |
368 | +// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*- |
369 | +/* |
370 | + * Copyright (C) 2016 Canonical Ltd |
371 | + * |
372 | + * This program is free software: you can redistribute it and/or modify |
373 | + * it under the terms of the GNU General Public License version 3 as |
374 | + * published by the Free Software Foundation. |
375 | + * |
376 | + * This program is distributed in the hope that it will be useful, |
377 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of |
378 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
379 | + * GNU General Public License for more details. |
380 | + * |
381 | + * You should have received a copy of the GNU General Public License |
382 | + * along with this program. If not, see <http://www.gnu.org/licenses/>. |
383 | + * |
384 | + * Authored by: Eleni Maria Stea <elenimaria.stea@canonical.com> |
385 | + */ |
386 | + |
387 | +#include "DecorationsShape.h" |
388 | + |
389 | +#include <core/core.h> |
390 | +#include <NuxCore/Logger.h> |
391 | +#include <X11/extensions/shape.h> |
392 | + |
393 | +namespace unity |
394 | +{ |
395 | +namespace decoration |
396 | +{ |
397 | +namespace |
398 | +{ |
399 | +DECLARE_LOGGER(logger, "unity.decoration.shape"); |
400 | +} |
401 | + |
402 | +Shape::Shape(Window xid) |
403 | +{ |
404 | + Bool buse, cuse; |
405 | + int bx, by, cx, cy; |
406 | + unsigned int bw, bh, cw, ch; |
407 | + Display *dpy = screen->dpy(); |
408 | + |
409 | + XShapeQueryExtents(dpy, xid, &buse, &bx, &by, &bw, &bh, &cuse, &cx, &cy, &cw, &ch); |
410 | + |
411 | + int kind; |
412 | + |
413 | + if (buse) |
414 | + { |
415 | + width_ = bw; |
416 | + height_ = bh; |
417 | + xoffs_ = bx; |
418 | + yoffs_ = by; |
419 | + kind = ShapeBounding; |
420 | + } |
421 | + else if (cuse) |
422 | + { |
423 | + width_ = cw; |
424 | + height_ = ch; |
425 | + xoffs_ = cx; |
426 | + yoffs_ = cy; |
427 | + kind = ShapeClip; |
428 | + } |
429 | + else |
430 | + { |
431 | + LOG_ERROR(logger) << "XShapeQueryExtend returned no extents"; |
432 | + return; |
433 | + } |
434 | + |
435 | + int rect_count, rect_order; |
436 | + std::unique_ptr<XRectangle[], int(*)(void*)> rectangles(XShapeGetRectangles(dpy, xid, kind, &rect_count, &rect_order), XFree); |
437 | + |
438 | + if (!rectangles) |
439 | + { |
440 | + LOG_ERROR(logger) << "Failed to get shape rectangles"; |
441 | + return; |
442 | + } |
443 | + |
444 | + for (int i = 0; i < rect_count; ++i) |
445 | + rectangles_.push_back(rectangles[i]); |
446 | +} |
447 | + |
448 | +std::vector<XRectangle> const& Shape::GetRectangles() const |
449 | +{ |
450 | + return rectangles_; |
451 | +} |
452 | + |
453 | +int Shape::Width() const |
454 | +{ |
455 | + return width_; |
456 | +} |
457 | + |
458 | +int Shape::Height() const |
459 | +{ |
460 | + return height_; |
461 | +} |
462 | + |
463 | +int Shape::XOffset() const |
464 | +{ |
465 | + return xoffs_; |
466 | +} |
467 | + |
468 | +int Shape::YOffset() const |
469 | +{ |
470 | + return yoffs_; |
471 | +} |
472 | + |
473 | +} // decoration namespace |
474 | +} // unity namespace |
475 | |
476 | === added file 'decorations/DecorationsShape.h' |
477 | --- decorations/DecorationsShape.h 1970-01-01 00:00:00 +0000 |
478 | +++ decorations/DecorationsShape.h 2016-08-01 13:05:54 +0000 |
479 | @@ -0,0 +1,54 @@ |
480 | +// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*- |
481 | +/* |
482 | + * Copyright (C) 2016 Canonical Ltd |
483 | + * |
484 | + * This program is free software: you can redistribute it and/or modify |
485 | + * it under the terms of the GNU General Public License version 3 as |
486 | + * published by the Free Software Foundation. |
487 | + * |
488 | + * This program is distributed in the hope that it will be useful, |
489 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of |
490 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
491 | + * GNU General Public License for more details. |
492 | + * |
493 | + * You should have received a copy of the GNU General Public License |
494 | + * along with this program. If not, see <http://www.gnu.org/licenses/>. |
495 | + * |
496 | + * Authored by: Eleni Maria Stea <elenimaria.stea@canonical.com> |
497 | + */ |
498 | + |
499 | +#ifndef DECORATIONS_SHAPE_H_ |
500 | +#define DECORATIONS_SHAPE_H_ |
501 | + |
502 | +#include <X11/Xlib.h> |
503 | +#include <vector> |
504 | + |
505 | +namespace unity |
506 | +{ |
507 | +namespace decoration |
508 | +{ |
509 | +class Shape |
510 | +{ |
511 | +public: |
512 | + Shape(Window); |
513 | + |
514 | + int Width() const; |
515 | + int Height() const; |
516 | + int XOffset() const; |
517 | + int YOffset() const; |
518 | + |
519 | + std::vector<XRectangle> const& GetRectangles() const; |
520 | + |
521 | +private: |
522 | + int width_; |
523 | + int height_; |
524 | + int xoffs_; |
525 | + int yoffs_; |
526 | + |
527 | + std::vector<XRectangle> rectangles_; |
528 | +}; |
529 | + |
530 | +} // decoration namespace |
531 | +} // unity namespace |
532 | + |
533 | +#endif //DECORATIONS_SHAPE_H_ |
534 | |
535 | === modified file 'launcher/DeviceNotificationDisplay.h' |
536 | --- launcher/DeviceNotificationDisplay.h 2012-08-22 09:03:25 +0000 |
537 | +++ launcher/DeviceNotificationDisplay.h 2016-08-01 13:05:54 +0000 |
538 | @@ -36,7 +36,7 @@ |
539 | |
540 | virtual ~DeviceNotificationDisplay() {} |
541 | |
542 | - virtual void Display(std::string const& icon_name, std::string const& volume_name) = 0; |
543 | + virtual void Display(std::string const& volume_name) = 0; |
544 | }; |
545 | |
546 | } |
547 | |
548 | === modified file 'launcher/DeviceNotificationDisplayImp.cpp' |
549 | --- launcher/DeviceNotificationDisplayImp.cpp 2015-04-22 23:54:26 +0000 |
550 | +++ launcher/DeviceNotificationDisplayImp.cpp 2016-08-01 13:05:54 +0000 |
551 | @@ -20,49 +20,27 @@ |
552 | #include "config.h" |
553 | #include <glib/gi18n-lib.h> |
554 | #include <libnotify/notify.h> |
555 | -#include <sigc++/sigc++.h> |
556 | #include <UnityCore/GLibWrapper.h> |
557 | |
558 | #include "DeviceNotificationDisplayImp.h" |
559 | -#include "unity-shared/IconLoader.h" |
560 | |
561 | namespace unity |
562 | { |
563 | namespace launcher |
564 | { |
565 | |
566 | -namespace |
567 | -{ |
568 | -const unsigned icon_size = 48; |
569 | -} |
570 | - |
571 | // |
572 | // Start private implementation |
573 | // |
574 | class DeviceNotificationDisplayImp::Impl |
575 | { |
576 | public: |
577 | - void Show(std::string const& icon_name, std::string const& volume_name) |
578 | - { |
579 | - IconLoader::GetDefault().LoadFromGIconString(icon_name, -1, icon_size, |
580 | - sigc::bind(sigc::mem_fun(this, &Impl::ShowNotificationWhenIconIsReady), volume_name)); |
581 | - } |
582 | - |
583 | - void ShowNotificationWhenIconIsReady(std::string const& icon_name, |
584 | - int max_width, |
585 | - int max_height, |
586 | - glib::Object<GdkPixbuf> const& pixbuf, |
587 | - std::string const& volume_name) |
588 | + void Show(std::string const& volume_name) |
589 | { |
590 | glib::Object<NotifyNotification> notification(notify_notification_new(volume_name.c_str(), |
591 | _("The drive has been successfully ejected"), |
592 | - nullptr)); |
593 | - |
594 | + "notification-device-eject")); |
595 | notify_notification_set_hint(notification, "x-canonical-private-synchronous", g_variant_new_boolean(TRUE)); |
596 | - |
597 | - if (pixbuf) |
598 | - notify_notification_set_image_from_pixbuf(notification, pixbuf); |
599 | - |
600 | notify_notification_show(notification, nullptr); |
601 | } |
602 | }; |
603 | @@ -78,9 +56,9 @@ |
604 | DeviceNotificationDisplayImp::~DeviceNotificationDisplayImp() |
605 | {} |
606 | |
607 | -void DeviceNotificationDisplayImp::Display(std::string const& icon_name, std::string const& volume_name) |
608 | +void DeviceNotificationDisplayImp::Display(std::string const& volume_name) |
609 | { |
610 | - pimpl->Show(icon_name, volume_name); |
611 | + pimpl->Show(volume_name); |
612 | } |
613 | |
614 | } |
615 | |
616 | === modified file 'launcher/DeviceNotificationDisplayImp.h' |
617 | --- launcher/DeviceNotificationDisplayImp.h 2012-08-22 09:03:25 +0000 |
618 | +++ launcher/DeviceNotificationDisplayImp.h 2016-08-01 13:05:54 +0000 |
619 | @@ -33,7 +33,7 @@ |
620 | DeviceNotificationDisplayImp(); |
621 | virtual ~DeviceNotificationDisplayImp(); |
622 | |
623 | - virtual void Display(std::string const& icon_name, std::string const& volume_name); |
624 | + virtual void Display(std::string const& volume_name); |
625 | |
626 | private: |
627 | class Impl; |
628 | |
629 | === modified file 'launcher/FileManagerLauncherIcon.cpp' |
630 | --- launcher/FileManagerLauncherIcon.cpp 2016-07-05 10:21:45 +0000 |
631 | +++ launcher/FileManagerLauncherIcon.cpp 2016-08-01 13:05:54 +0000 |
632 | @@ -46,6 +46,9 @@ |
633 | // We disconnect from ApplicationLauncherIcon app signals, as we manage them manually |
634 | signals_conn_.Clear(); |
635 | |
636 | + SetQuirk(Quirk::VISIBLE, false); |
637 | + SkipQuirkAnimation(Quirk::VISIBLE); |
638 | + |
639 | signals_conn_.Add(app_->desktop_file.changed.connect([this](std::string const& desktop_file) { |
640 | LOG_DEBUG(logger) << tooltip_text() << " desktop_file now " << desktop_file; |
641 | UpdateDesktopFile(); |
642 | @@ -74,7 +77,6 @@ |
643 | _source_manager.Remove(ICON_REMOVE_TIMEOUT); |
644 | })); |
645 | |
646 | - |
647 | UpdateStorageWindows(); |
648 | } |
649 | |
650 | @@ -120,7 +122,7 @@ |
651 | |
652 | for (auto const& app_win : ApplicationLauncherIcon::GetManagedWindows()) |
653 | { |
654 | - if (IsLocationManaged(file_manager_->LocationForWindow(app_win))) |
655 | + if (WindowManager::Default().IsWindowMapped(app_win->window_id()) && IsLocationManaged(file_manager_->LocationForWindow(app_win))) |
656 | fm_windows.push_back(app_win); |
657 | } |
658 | |
659 | |
660 | === modified file 'launcher/TrashLauncherIcon.cpp' |
661 | --- launcher/TrashLauncherIcon.cpp 2015-12-11 15:15:47 +0000 |
662 | +++ launcher/TrashLauncherIcon.cpp 2016-08-01 13:05:54 +0000 |
663 | @@ -55,23 +55,27 @@ |
664 | SkipQuirkAnimation(Quirk::VISIBLE); |
665 | SetShortcut('t'); |
666 | |
667 | - glib::Object<GFile> location(g_file_new_for_uri(TRASH_URI.c_str())); |
668 | - |
669 | - glib::Error err; |
670 | - trash_monitor_ = g_file_monitor_directory(location, G_FILE_MONITOR_NONE, cancellable_, &err); |
671 | - g_file_monitor_set_rate_limit(trash_monitor_, 1000); |
672 | - |
673 | - if (err) |
674 | - { |
675 | - LOG_ERROR(logger) << "Could not create file monitor for trash uri: " << err; |
676 | - } |
677 | - else |
678 | - { |
679 | - glib_signals_.Add<void, GFileMonitor*, GFile*, GFile*, GFileMonitorEvent>(trash_monitor_, "changed", |
680 | - [this] (GFileMonitor*, GFile*, GFile*, GFileMonitorEvent) { |
681 | - UpdateTrashIcon(); |
682 | - }); |
683 | - } |
684 | + _source_manager.AddIdle([this]{ |
685 | + glib::Object<GFile> location(g_file_new_for_uri(TRASH_URI.c_str())); |
686 | + |
687 | + glib::Error err; |
688 | + trash_monitor_ = g_file_monitor_directory(location, G_FILE_MONITOR_NONE, cancellable_, &err); |
689 | + g_file_monitor_set_rate_limit(trash_monitor_, 1000); |
690 | + |
691 | + if (err) |
692 | + { |
693 | + LOG_ERROR(logger) << "Could not create file monitor for trash uri: " << err; |
694 | + } |
695 | + else |
696 | + { |
697 | + glib_signals_.Add<void, GFileMonitor*, GFile*, GFile*, GFileMonitorEvent>(trash_monitor_, "changed", |
698 | + [this] (GFileMonitor*, GFile*, GFile*, GFileMonitorEvent) { |
699 | + UpdateTrashIcon(); |
700 | + }); |
701 | + } |
702 | + |
703 | + return false; |
704 | + }); |
705 | |
706 | UpdateTrashIcon(); |
707 | UpdateStorageWindows(); |
708 | |
709 | === modified file 'launcher/VolumeLauncherIcon.cpp' |
710 | --- launcher/VolumeLauncherIcon.cpp 2016-02-25 13:42:10 +0000 |
711 | +++ launcher/VolumeLauncherIcon.cpp 2016-08-01 13:05:54 +0000 |
712 | @@ -108,7 +108,7 @@ |
713 | |
714 | auto conn = std::make_shared<sigc::connection>(); |
715 | *conn = volume_->ejected.connect([this, conn] { |
716 | - notification_->Display(volume_->GetIconName(), volume_->GetName()); |
717 | + notification_->Display(volume_->GetName()); |
718 | conn->disconnect(); |
719 | }); |
720 | connections_.Add(*conn); |
721 | |
722 | === modified file 'lockscreen/LockScreenAcceleratorController.cpp' |
723 | --- lockscreen/LockScreenAcceleratorController.cpp 2016-07-05 10:22:08 +0000 |
724 | +++ lockscreen/LockScreenAcceleratorController.cpp 2016-08-01 13:05:54 +0000 |
725 | @@ -194,10 +194,20 @@ |
726 | CompOption::Vector options; |
727 | |
728 | if (action.state() & CompAction::StateInitKey) |
729 | - action.initiate()(&action, 0, options); |
730 | + { |
731 | + auto const& initiate_cb = action.initiate(); |
732 | + |
733 | + if (!initiate_cb.empty()) |
734 | + initiate_cb(&action, 0, options); |
735 | + } |
736 | |
737 | if (action.state() & CompAction::StateTermKey) |
738 | - action.terminate()(&action, CompAction::StateTermTapped, options); |
739 | + { |
740 | + auto const& terminate_cb = action.terminate(); |
741 | + |
742 | + if (!terminate_cb.empty()) |
743 | + terminate_cb(&action, CompAction::StateTermTapped, options); |
744 | + } |
745 | } |
746 | |
747 | Accelerators::Ptr const& AcceleratorController::GetAccelerators() const |
748 | |
749 | === modified file 'plugins/unityshell/src/unityshell.cpp' |
750 | --- plugins/unityshell/src/unityshell.cpp 2016-07-05 10:22:42 +0000 |
751 | +++ plugins/unityshell/src/unityshell.cpp 2016-08-01 13:05:54 +0000 |
752 | @@ -3013,9 +3013,9 @@ |
753 | wAttrib.opacity = 0.0; |
754 | int old_index = gWindow->glPaintGetCurrentIndex(); |
755 | gWindow->glPaintSetCurrentIndex(MAXSHORT); |
756 | + deco_win_->Paint(matrix, wAttrib, region, mask); |
757 | bool ret = gWindow->glPaint(wAttrib, matrix, region, mask); |
758 | gWindow->glPaintSetCurrentIndex(old_index); |
759 | - deco_win_->Paint(matrix, wAttrib, region, mask); |
760 | return ret; |
761 | } |
762 | } |
763 | @@ -3357,6 +3357,7 @@ |
764 | PluginAdapter::Default().UpdateShowDesktopState(); |
765 | break; |
766 | case CompWindowNotifyBeforeDestroy: |
767 | + deco_win_->Undecorate(); |
768 | being_destroyed.emit(); |
769 | break; |
770 | case CompWindowNotifyMinimize: |
771 | |
772 | === modified file 'plugins/unityshell/unityshell.xml.in' |
773 | --- plugins/unityshell/unityshell.xml.in 2016-04-05 13:23:27 +0000 |
774 | +++ plugins/unityshell/unityshell.xml.in 2016-08-01 13:05:54 +0000 |
775 | @@ -39,6 +39,8 @@ |
776 | <plugin>compiztoolbox</plugin> |
777 | <plugin>scale</plugin> |
778 | <plugin>expo</plugin> |
779 | + <plugin>move</plugin> |
780 | + <plugin>resize</plugin> |
781 | </requirement> |
782 | <conflict> |
783 | <plugin>decor</plugin> |
784 | |
785 | === modified file 'tests/test_mock_devices.h' |
786 | --- tests/test_mock_devices.h 2016-01-24 14:35:49 +0000 |
787 | +++ tests/test_mock_devices.h 2016-08-01 13:05:54 +0000 |
788 | @@ -101,7 +101,7 @@ |
789 | typedef std::shared_ptr<MockDeviceNotificationDisplay> Ptr; |
790 | typedef testing::NiceMock<MockDeviceNotificationDisplay> Nice; |
791 | |
792 | - MOCK_METHOD2(Display, void(std::string const& icon_name, std::string const& volume_name)); |
793 | + MOCK_METHOD1(Display, void(std::string const& volume_name)); |
794 | }; |
795 | |
796 | } // anonymous namespace |
797 | |
798 | === modified file 'tests/test_unity_window_view.cpp' |
799 | --- tests/test_unity_window_view.cpp 2016-03-31 02:03:55 +0000 |
800 | +++ tests/test_unity_window_view.cpp 2016-08-01 13:05:54 +0000 |
801 | @@ -82,12 +82,18 @@ |
802 | view.closable = true; |
803 | ASSERT_NE(view.close_button_, nullptr); |
804 | |
805 | + auto weak_ptr = nux::ObjectWeakPtr<IconTexture>(view.close_button_); |
806 | + ASSERT_TRUE(weak_ptr.IsValid()); |
807 | + |
808 | EXPECT_EQ(view.close_button_->texture(), view.style()->GetTexture(view.scale, WindowTextureType::CLOSE_ICON)); |
809 | EXPECT_EQ(view.close_button_->GetParentObject(), &view); |
810 | |
811 | int padding = view.style()->GetCloseButtonPadding().CP(view.scale); |
812 | EXPECT_EQ(view.close_button_->GetBaseX(), padding); |
813 | EXPECT_EQ(view.close_button_->GetBaseY(), padding); |
814 | + |
815 | + view.closable = false; |
816 | + ASSERT_FALSE(weak_ptr.IsValid()); |
817 | } |
818 | |
819 | TEST_F(TestUnityWindowView, CloseButtonStates) |
820 | |
821 | === modified file 'tests/test_volume_launcher_icon.cpp' |
822 | --- tests/test_volume_launcher_icon.cpp 2016-01-24 14:35:49 +0000 |
823 | +++ tests/test_volume_launcher_icon.cpp 2016-08-01 13:05:54 +0000 |
824 | @@ -481,7 +481,7 @@ |
825 | auto menuitem = GetMenuItemAtIndex(5); |
826 | |
827 | EXPECT_CALL(*volume_, Eject()); |
828 | - EXPECT_CALL(*notifications_, Display(volume_->GetIconName(), volume_->GetName())); |
829 | + EXPECT_CALL(*notifications_, Display(volume_->GetName())); |
830 | |
831 | ASSERT_STREQ(dbusmenu_menuitem_property_get(menuitem, DBUSMENU_MENUITEM_PROP_LABEL), "Eject"); |
832 | EXPECT_TRUE(dbusmenu_menuitem_property_get_bool(menuitem, DBUSMENU_MENUITEM_PROP_VISIBLE)); |
833 | @@ -573,7 +573,7 @@ |
834 | .WillRepeatedly(Return(true)); |
835 | |
836 | EXPECT_CALL(*volume_, Eject()); |
837 | - EXPECT_CALL(*notifications_, Display(volume_->GetIconName(), volume_->GetName())); |
838 | + EXPECT_CALL(*notifications_, Display(volume_->GetName())); |
839 | icon_->EjectAndShowNotification(); |
840 | } |
841 | |
842 | |
843 | === modified file 'tools/CMakeLists.txt' |
844 | --- tools/CMakeLists.txt 2016-02-09 01:26:22 +0000 |
845 | +++ tools/CMakeLists.txt 2016-08-01 13:05:54 +0000 |
846 | @@ -6,3 +6,25 @@ |
847 | configure_file (${CMAKE_CURRENT_SOURCE_DIR}/unity.cmake ${CMAKE_BINARY_DIR}/bin/unity) |
848 | install(FILES ${CMAKE_BINARY_DIR}/bin/unity PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ |
849 | GROUP_EXECUTE WORLD_READ WORLD_EXECUTE DESTINATION ${CMAKE_INSTALL_BINDIR}) |
850 | + |
851 | +# |
852 | +# unity-active-plugins-safety-check |
853 | +# |
854 | +pkg_check_modules(UAPSC_DEPS REQUIRED libcompizconfig) |
855 | + |
856 | +set(CFLAGS |
857 | + ${UAPSC_DEPS_CFLAGS} |
858 | + ${UAPSC_DEPS_CFLAGS_OTHER} |
859 | + ) |
860 | + |
861 | +string (REPLACE ";" " " CFLAGS "${CFLAGS}") |
862 | +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CFLAGS}") |
863 | + |
864 | +set(LIBS ${UAPSC_DEPS_LIBRARIES}) |
865 | + |
866 | +set(LIB_PATHS ${UAPSC_DEPS_LIBRARY_DIRS}) |
867 | +link_directories(${LIB_PATHS}) |
868 | + |
869 | +add_executable(unity-active-plugins-safety-check unity_active_plugins_safety_check.cpp) |
870 | +target_link_libraries(unity-active-plugins-safety-check ${LIBS}) |
871 | +install(TARGETS unity-active-plugins-safety-check DESTINATION ${CMAKE_INSTALL_LIBDIR}/unity/) |
872 | |
873 | === modified file 'tools/unity.cmake' |
874 | --- tools/unity.cmake 2016-04-08 18:13:40 +0000 |
875 | +++ tools/unity.cmake 2016-08-01 13:05:54 +0000 |
876 | @@ -59,6 +59,12 @@ |
877 | |
878 | os.environ['COMPIZ_CONFIG_PROFILE'] = 'ubuntu' |
879 | |
880 | + try: |
881 | + if subprocess.call('/usr/lib/nux/unity_support_test -f'.split()) > 0: |
882 | + os.environ['COMPIZ_CONFIG_PROFILE'] = 'ubuntu-lowgfx' |
883 | + except: |
884 | + pass |
885 | + |
886 | if not 'DISPLAY' in os.environ: |
887 | # take an optimistic chance and warn about it :) |
888 | print("WARNING: no DISPLAY variable set, setting it to :0") |
889 | |
890 | === added file 'tools/unity_active_plugins_safety_check.cpp' |
891 | --- tools/unity_active_plugins_safety_check.cpp 1970-01-01 00:00:00 +0000 |
892 | +++ tools/unity_active_plugins_safety_check.cpp 2016-08-01 13:05:54 +0000 |
893 | @@ -0,0 +1,83 @@ |
894 | +/* |
895 | + * Copyright (C) 2016 Canonical Ltd |
896 | + * |
897 | + * This program is free software: you can redistribute it and/or modify |
898 | + * it under the terms of the GNU General Public License version 3 as |
899 | + * published by the Free Software Foundation. |
900 | + * |
901 | + * This program is distributed in the hope that it will be useful, |
902 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of |
903 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
904 | + * GNU General Public License for more details. |
905 | + * |
906 | + * You should have received a copy of the GNU General Public License |
907 | + * along with this program. If not, see <http://www.gnu.org/licenses/>. |
908 | + * |
909 | + * Authored by: Andrea Azzarone <andrea.azzarone@canonical.com> |
910 | + */ |
911 | + |
912 | +#include <ccs.h> |
913 | +#include <gio/gio.h> |
914 | + |
915 | +#include <iostream> |
916 | +#include <string> |
917 | + |
918 | +extern const CCSInterfaceTable ccsDefaultInterfaceTable; |
919 | + |
920 | +void PluginSetActiveWithDeps(CCSContext* context, std::string const& plugin_name) |
921 | +{ |
922 | + if (plugin_name.empty()) |
923 | + return; |
924 | + |
925 | + auto plugin = ccsFindPlugin(context, plugin_name.c_str()); |
926 | + |
927 | + if (!plugin) |
928 | + return; |
929 | + |
930 | + auto reqs = ccsPluginGetRequiresPlugins(plugin); |
931 | + for (auto req = reqs; req; req = req->next) |
932 | + { |
933 | + if (req->data && req->data->value) |
934 | + { |
935 | + std::string name = req->data->value; |
936 | + PluginSetActiveWithDeps(context, name.c_str()); |
937 | + } |
938 | + } |
939 | + |
940 | + if (!ccsPluginIsActive(context, plugin_name.c_str())) { |
941 | + std::cout << "Setting plugin '" << plugin_name << "' to active" << std::endl; |
942 | + ccsPluginSetActive(plugin, true); |
943 | + } |
944 | + |
945 | + auto conflicts = ccsPluginGetConflictPlugins(plugin); |
946 | + for (auto con = conflicts; con; con = con->next) |
947 | + { |
948 | + if (con->data && con->data->value) |
949 | + { |
950 | + std::string name = con->data->value; |
951 | + auto plugin = ccsFindPlugin(context, name.c_str()); |
952 | + |
953 | + if (ccsPluginIsActive(context, name.c_str())) |
954 | + { |
955 | + std::cout << "Setting plugin '" << name << "' to non-active" << std::endl; |
956 | + ccsPluginSetActive(plugin, false); |
957 | + } |
958 | + } |
959 | + } |
960 | +} |
961 | + |
962 | +int main() |
963 | +{ |
964 | + auto context = ccsContextNew (0, &ccsDefaultInterfaceTable); |
965 | + |
966 | + if (!context) |
967 | + return -1; |
968 | + |
969 | + PluginSetActiveWithDeps(context, "unityshell"); |
970 | + |
971 | + ccsWriteChangedSettings(context); |
972 | + g_settings_sync(); |
973 | + ccsFreeContext(context); |
974 | + |
975 | + return 0; |
976 | +} |
977 | |
978 | === modified file 'unity-shared/CompizUtils.cpp' |
979 | --- unity-shared/CompizUtils.cpp 2015-11-02 14:58:01 +0000 |
980 | +++ unity-shared/CompizUtils.cpp 2016-08-01 13:05:54 +0000 |
981 | @@ -211,11 +211,10 @@ |
982 | } |
983 | } |
984 | |
985 | - if (region.boundingRect() != win->geometry()) // Shaped windows |
986 | - return elements; |
987 | + elements |= DecorationElement::SHADOW; |
988 | |
989 | - if (rectangular) |
990 | - elements |= DecorationElement::SHADOW; |
991 | + if (!rectangular) |
992 | + elements |= DecorationElement::SHAPED; |
993 | |
994 | if (!win->overrideRedirect() && |
995 | (win->type() & DECORABLE_WINDOW_TYPES) && |
996 | |
997 | === modified file 'unity-shared/CompizUtils.h' |
998 | --- unity-shared/CompizUtils.h 2015-11-02 14:58:01 +0000 |
999 | +++ unity-shared/CompizUtils.h 2016-08-01 13:05:54 +0000 |
1000 | @@ -133,7 +133,8 @@ |
1001 | NONE = 0, |
1002 | EDGE = (1 << 0), |
1003 | SHADOW = (1 << 1), |
1004 | - BORDER = (1 << 2), |
1005 | + SHAPED = (1 << 2), |
1006 | + BORDER = (1 << 3), |
1007 | FULL = EDGE|SHADOW|BORDER |
1008 | }; |
1009 | } |
1010 | |
1011 | === modified file 'unity-shared/PluginAdapter.cpp' |
1012 | --- unity-shared/PluginAdapter.cpp 2016-03-18 18:58:26 +0000 |
1013 | +++ unity-shared/PluginAdapter.cpp 2016-08-01 13:05:54 +0000 |
1014 | @@ -630,7 +630,7 @@ |
1015 | CompWindow* window = m_Screen->findWindow(window_id); |
1016 | if (window) |
1017 | return window->mapNum () > 0; |
1018 | - return true; |
1019 | + return false; |
1020 | } |
1021 | |
1022 | bool PluginAdapter::IsWindowVisible(Window window_id) const |
1023 | |
1024 | === modified file 'unity-shared/TextInput.cpp' |
1025 | --- unity-shared/TextInput.cpp 2016-03-31 05:57:11 +0000 |
1026 | +++ unity-shared/TextInput.cpp 2016-08-01 13:05:54 +0000 |
1027 | @@ -104,7 +104,6 @@ |
1028 | , scale(1.0) |
1029 | , bg_layer_(new nux::ColorLayer(nux::Color(0xff595853), true)) |
1030 | , caps_lock_on(false) |
1031 | - , num_lock_on(false) |
1032 | , last_width_(-1) |
1033 | , last_height_(-1) |
1034 | { |
1035 | @@ -146,9 +145,8 @@ |
1036 | |
1037 | // Caps lock warning |
1038 | warning_ = new IconTexture(LoadWarningIcon(DEFAULT_ICON_SIZE.CP(scale))); |
1039 | - warning_->SetVisible(caps_lock_on() || num_lock_on()); |
1040 | + warning_->SetVisible(caps_lock_on()); |
1041 | layout_->AddView(warning_, 0, nux::MINOR_POSITION_CENTER, nux::MINOR_SIZE_FULL); |
1042 | - num_lock_on.changed.connect(sigc::mem_fun(this, &TextInput::OnLockStateChanged)); |
1043 | caps_lock_on.changed.connect(sigc::mem_fun(this, &TextInput::OnLockStateChanged)); |
1044 | |
1045 | show_lock_warnings.changed.connect(sigc::hide(sigc::mem_fun(this, &TextInput::CheckLocks))); |
1046 | @@ -249,7 +247,6 @@ |
1047 | { |
1048 | GdkKeymap* keymap = gdk_keymap_get_default(); |
1049 | caps_lock_on = gdk_keymap_get_caps_lock_state(keymap) ? true : false; |
1050 | - num_lock_on = gdk_keymap_get_num_lock_state(keymap) ? true : false; |
1051 | } |
1052 | |
1053 | void TextInput::OnLockStateChanged(bool) |
1054 | @@ -260,8 +257,8 @@ |
1055 | return; |
1056 | } |
1057 | |
1058 | - warning_->SetVisible(caps_lock_on() || num_lock_on()); |
1059 | - warning_->SetOpacity((num_lock_on() && !caps_lock_on()) ? 0.3 : 1.0); |
1060 | + warning_->SetVisible(caps_lock_on()); |
1061 | + warning_->SetOpacity(1.0); |
1062 | warning_tooltip_.Release(); |
1063 | QueueRelayout(); |
1064 | QueueDraw(); |
1065 | @@ -345,18 +342,10 @@ |
1066 | |
1067 | pango_layout_set_height(layout, -1); //avoid wrap lines |
1068 | |
1069 | - if (caps_lock_on() && num_lock_on()) |
1070 | - { |
1071 | - pango_layout_set_text(layout, _("Caps lock and Num lock are on"), -1); |
1072 | - } |
1073 | - else if (caps_lock_on()) |
1074 | + if (caps_lock_on()) |
1075 | { |
1076 | pango_layout_set_text(layout, _("Caps lock is on"), -1); |
1077 | } |
1078 | - else if (num_lock_on()) |
1079 | - { |
1080 | - pango_layout_set_text(layout, _("Num lock is on"), -1); |
1081 | - } |
1082 | |
1083 | nux::Size extents; |
1084 | pango_layout_get_pixel_size(layout, &extents.width, &extents.height); |
1085 | |
1086 | === modified file 'unity-shared/TextInput.h' |
1087 | --- unity-shared/TextInput.h 2016-03-31 05:57:11 +0000 |
1088 | +++ unity-shared/TextInput.h 2016-08-01 13:05:54 +0000 |
1089 | @@ -124,7 +124,6 @@ |
1090 | SearchBarSpinner* spinner_; |
1091 | |
1092 | nux::Property<bool> caps_lock_on; |
1093 | - nux::Property<bool> num_lock_on; |
1094 | int last_width_; |
1095 | int last_height_; |
1096 | |
1097 | |
1098 | === modified file 'unity-shared/UnityWindowView.cpp' |
1099 | --- unity-shared/UnityWindowView.cpp 2016-07-05 10:22:42 +0000 |
1100 | +++ unity-shared/UnityWindowView.cpp 2016-08-01 13:05:54 +0000 |
1101 | @@ -145,7 +145,12 @@ |
1102 | { |
1103 | if (!closable) |
1104 | { |
1105 | - close_button_ = nullptr; |
1106 | + if (close_button_) |
1107 | + { |
1108 | + close_button_->UnParentObject(); |
1109 | + close_button_ = nullptr; |
1110 | + } |
1111 | + |
1112 | return; |
1113 | } |
1114 | |
1115 | |
1116 | === renamed file 'debian/unity7.conf' => 'unity7.conf.in' |
1117 | --- debian/unity7.conf 2016-07-05 10:22:49 +0000 |
1118 | +++ unity7.conf.in 2016-08-01 13:05:54 +0000 |
1119 | @@ -21,6 +21,9 @@ |
1120 | |
1121 | echo "Using compiz profile '$compiz_profile'" |
1122 | initctl set-env -g COMPIZ_CONFIG_PROFILE="$compiz_profile" |
1123 | + export COMPIZ_CONFIG_PROFILE="$compiz_profile" |
1124 | + |
1125 | + ${CMAKE_INSTALL_FULL_LIBDIR}/unity/unity-active-plugins-safety-check |
1126 | end script |
1127 | |
1128 | respawn |
+1