Do

Merge lp:~jassmith/do/docky-multimon into lp:do

Proposed by Jason Smith
Status: Merged
Approved by: Alex Launi
Approved revision: 1085
Merged at revision: not available
Proposed branch: lp:~jassmith/do/docky-multimon
Merge into: lp:do
Diff against target: None lines
To merge this branch: bzr merge lp:~jassmith/do/docky-multimon
Reviewer Review Type Date Requested Status
Alex Launi (community) Approve
Review via email: mp+4366@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Jason Smith (jassmith) wrote :

Fixes the following issues

- Docky does not notice when monitors are disabled/enabled
- Docky "disappears" when switch monitors for a couple seconds
- Docky does not notice when monitor resolution changes

Additionally this branch prevents Docky from tearing itself apart and putting itself back together just to switch monitors. Instead now it switches live only disposing and rebuilding buffer surfaces.

Revision history for this message
Alex Launi (alexlauni) wrote :

Looks rad, fixes some important bugs.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'Do.Interface.Linux.Docky/src/Docky.Interface/DockArea.cs'
2--- Do.Interface.Linux.Docky/src/Docky.Interface/DockArea.cs 2009-03-11 04:55:37 +0000
3+++ Do.Interface.Linux.Docky/src/Docky.Interface/DockArea.cs 2009-03-11 06:03:30 +0000
4@@ -200,7 +200,6 @@
5 this.window = window;
6
7 SetSize ();
8- SetSizeRequest (Width, Height);
9
10 PositionProvider = new ItemPositionProvider (this);
11
12@@ -240,17 +239,23 @@
13
14 Width = geo.Width;
15 Height = 300;
16+
17+ SetSizeRequest (Width, Height);
18 }
19
20 void RegisterEvents ()
21 {
22 DockServices.ItemsService.DockItemsChanged += OnDockItemsChanged;
23 DockServices.ItemsService.ItemNeedsUpdate += HandleItemNeedsUpdate;
24+
25+ DockPreferences.MonitorChanged += HandleMonitorChanged;
26 DockPreferences.IconSizeChanged += HandleIconSizeChanged;
27
28 DockServices.PainterService.PainterShowRequest += HandlePainterShowRequest;
29 DockServices.PainterService.PainterHideRequest += HandlePainterHideRequest;
30
31+ Screen.SizeChanged += HandleSizeChanged;
32+
33 PopupMenu.Hidden += OnDockItemMenuHidden;
34 PopupMenu.Shown += OnDockItemMenuShown;
35
36@@ -269,11 +274,15 @@
37 {
38 DockServices.ItemsService.DockItemsChanged -= OnDockItemsChanged;
39 DockServices.ItemsService.ItemNeedsUpdate -= HandleItemNeedsUpdate;
40+
41+ DockPreferences.MonitorChanged -= HandleMonitorChanged;
42 DockPreferences.IconSizeChanged -= HandleIconSizeChanged;
43
44 DockServices.PainterService.PainterShowRequest -= HandlePainterShowRequest;
45 DockServices.PainterService.PainterHideRequest -= HandlePainterHideRequest;
46
47+ Screen.SizeChanged -= HandleSizeChanged;
48+
49 PopupMenu.Hidden -= OnDockItemMenuHidden;
50 PopupMenu.Shown -= OnDockItemMenuShown;
51
52@@ -310,6 +319,26 @@
53 AnimatedDraw ();
54 }
55
56+ void HandleMonitorChanged()
57+ {
58+ Reconfigure ();
59+ }
60+
61+ void HandleSizeChanged(object sender, EventArgs e)
62+ {
63+ Reconfigure ();
64+ }
65+
66+ void Reconfigure ()
67+ {
68+ SetSize ();
69+ ResetBuffers ();
70+ PositionProvider.ForceUpdate ();
71+ SetParentInputMask ();
72+ SetIconRegions ();
73+ window.DelaySetStruts ();
74+ }
75+
76 void HandleUniverseInitialized(object sender, EventArgs e)
77 {
78 GLib.Timeout.Add (2000, delegate {
79
80=== modified file 'Do.Interface.Linux.Docky/src/Docky.Interface/DockArea_Rendering.cs'
81--- Do.Interface.Linux.Docky/src/Docky.Interface/DockArea_Rendering.cs 2009-03-04 22:02:10 +0000
82+++ Do.Interface.Linux.Docky/src/Docky.Interface/DockArea_Rendering.cs 2009-03-11 06:03:30 +0000
83@@ -663,5 +663,30 @@
84 {
85 RenderData.ForceFullRender = true;
86 }
87+
88+ void ResetBuffers()
89+ {
90+ if (backbuffer != null) {
91+ backbuffer.Destroy ();
92+ backbuffer = null;
93+ }
94+
95+ if (dock_icon_buffer != null) {
96+ dock_icon_buffer.Destroy ();
97+ dock_icon_buffer = null;
98+ }
99+
100+ if (input_area_buffer != null) {
101+ input_area_buffer.Destroy ();
102+ input_area_buffer = null;
103+ }
104+
105+ foreach (Surface sr in painter_surfaces.Values) {
106+ sr.Destroy ();
107+ }
108+ painter_surfaces.Clear ();
109+
110+ RequestFullRender ();
111+ }
112 }
113 }
114
115=== modified file 'Do.Interface.Linux.Docky/src/Docky.Interface/DockWindow.cs'
116--- Do.Interface.Linux.Docky/src/Docky.Interface/DockWindow.cs 2009-03-05 05:00:17 +0000
117+++ Do.Interface.Linux.Docky/src/Docky.Interface/DockWindow.cs 2009-03-11 06:03:30 +0000
118@@ -131,15 +131,8 @@
119
120 void HandleMonitorChanged()
121 {
122- Remove (dock_area);
123- dock_area.Dispose ();
124-
125 // bring us back down to "minimum" size
126 Resize (1, 1);
127-
128- dock_area = new DockArea (this);
129- Add (dock_area);
130- ShowAll ();
131 DelaySetStruts ();
132 }
133
134
135=== modified file 'Do.Interface.Linux.Docky/src/Docky.Interface/ItemPositionProvider.cs'
136--- Do.Interface.Linux.Docky/src/Docky.Interface/ItemPositionProvider.cs 2009-03-10 04:07:15 +0000
137+++ Do.Interface.Linux.Docky/src/Docky.Interface/ItemPositionProvider.cs 2009-03-11 06:03:30 +0000
138@@ -106,14 +106,12 @@
139
140 void HandleDockItemsChanged(IEnumerable<AbstractDockItem> items)
141 {
142- static_positions.Clear ();
143- MinimumDockArea = CalculateMinimumArea ();
144+ ForceUpdate ();
145 }
146
147 void HandleIconSizeChanged ()
148 {
149- static_positions.Clear ();
150- MinimumDockArea = CalculateMinimumArea ();
151+ ForceUpdate ();
152 }
153
154 Rectangle CalculateMinimumArea ()
155@@ -137,6 +135,12 @@
156 return rect;
157 }
158
159+ public void ForceUpdate ()
160+ {
161+ static_positions.Clear ();
162+ MinimumDockArea = CalculateMinimumArea ();
163+ }
164+
165 public Rectangle DockArea (double zoomByEntryTime, Gdk.Point cursor)
166 {
167 Cairo.PointD startPosition, endPosition;