Merge lp:~alan-griffiths/miral/miral-shell-window-titles into lp:miral

Proposed by Alan Griffiths
Status: Merged
Approved by: Gerry Boland
Approved revision: 421
Merged at revision: 420
Proposed branch: lp:~alan-griffiths/miral/miral-shell-window-titles
Merge into: lp:miral
Diff against target: 93 lines (+23/-3)
3 files modified
miral-shell/titlebar_provider.cpp (+19/-1)
miral-shell/titlebar_provider.h (+3/-1)
miral-shell/titlebar_window_manager.cpp (+1/-1)
To merge this branch: bzr merge lp:~alan-griffiths/miral/miral-shell-window-titles
Reviewer Review Type Date Requested Status
Gerry Boland (community) Approve
Review via email: mp+309470@code.launchpad.net

Commit message

[miral-shell] Fix glitches by repainting titlebar on resize

To post a comment you must log in.
Revision history for this message
Gerry Boland (gerboland) wrote :

Confirmed fix

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'miral-shell/titlebar_provider.cpp'
2--- miral-shell/titlebar_provider.cpp 2016-10-27 10:32:15 +0000
3+++ miral-shell/titlebar_provider.cpp 2016-10-27 14:08:03 +0000
4@@ -218,6 +218,8 @@
5
6 void TitlebarProvider::paint_titlebar_for(miral::WindowInfo const& info, int intensity)
7 {
8+ this->intensity = intensity;
9+
10 if (auto data = find_titlebar_data(info.window()))
11 {
12 auto const title = info.name();
13@@ -254,14 +256,18 @@
14 }
15 }
16
17-void TitlebarProvider::resize_titlebar_for(miral::Window const& window, Size const& size)
18+void TitlebarProvider::resize_titlebar_for(miral::WindowInfo const& window_info, Size const& size)
19 {
20+ auto const window = window_info.window();
21+
22 if (window.size().width == size.width)
23 return;
24
25 if (auto titlebar_window = find_titlebar_window(window))
26 {
27 titlebar_window.resize({size.width, title_bar_height});
28+
29+ repaint_titlebar_for(window_info);
30 }
31 }
32
33@@ -314,6 +320,18 @@
34 }
35
36 tools.modify_window(titlebar, modifications);
37+ repaint_titlebar_for(window_info);
38+ }
39+}
40+
41+void TitlebarProvider::repaint_titlebar_for(miral::WindowInfo const& window_info)
42+{
43+ if (auto data = find_titlebar_data(window_info.window()))
44+ {
45+ auto const title = window_info.name();
46+
47+ if (auto surface = data->titlebar.load())
48+ enqueue_work([this, surface, title]{ paint_surface(surface, title, intensity); });
49 }
50 }
51
52
53=== modified file 'miral-shell/titlebar_provider.h'
54--- miral-shell/titlebar_provider.h 2016-10-26 09:20:13 +0000
55+++ miral-shell/titlebar_provider.h 2016-10-27 14:08:03 +0000
56@@ -69,7 +69,7 @@
57 void place_new_titlebar(miral::WindowSpecification& window_spec);
58 void paint_titlebar_for(miral::WindowInfo const& window, int intensity);
59 void destroy_titlebar_for(miral::Window const& window);
60- void resize_titlebar_for(miral::Window const& window, mir::geometry::Size const& size);
61+ void resize_titlebar_for(miral::WindowInfo const& window_info, mir::geometry::Size const& size);
62 void advise_new_titlebar(miral::WindowInfo const& window_info);
63 void advise_state_change(miral::WindowInfo const& window_info, MirSurfaceState state);
64
65@@ -92,6 +92,7 @@
66 std::mutex mutable mutex;
67 miral::toolkit::Connection connection;
68 std::weak_ptr<mir::scene::Session> weak_session;
69+ std::atomic<int> intensity{0xff};
70
71 SurfaceMap window_to_titlebar;
72 TitleMap windows_awaiting_titlebar;
73@@ -99,6 +100,7 @@
74 static void insert(MirSurface* surface, Data* data);
75 Data* find_titlebar_data(miral::Window const& window);
76 miral::Window find_titlebar_window(miral::Window const& window) const;
77+ void repaint_titlebar_for(miral::WindowInfo const& window_info);
78 };
79
80
81
82=== modified file 'miral-shell/titlebar_window_manager.cpp'
83--- miral-shell/titlebar_window_manager.cpp 2016-10-26 10:24:26 +0000
84+++ miral-shell/titlebar_window_manager.cpp 2016-10-27 14:08:03 +0000
85@@ -323,7 +323,7 @@
86 {
87 CanonicalWindowManagerPolicy::advise_resize(window_info, new_size);
88
89- titlebar_provider->resize_titlebar_for(window_info.window(), new_size);
90+ titlebar_provider->resize_titlebar_for(window_info, new_size);
91 }
92
93 void TitlebarWindowManagerPolicy::advise_delete_window(WindowInfo const& window_info)

Subscribers

People subscribed via source and target branches