Do

Merge lp:~jassmith/do/painterservice into lp:do

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

Fixes bug where clock painter stops working after monitor switch

Revision history for this message
David Siegel (djsiegel-deactivatedaccount) wrote :

Looks great to me.

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/Makefile.am'
2--- Do.Interface.Linux.Docky/Makefile.am 2009-03-04 20:41:38 +0000
3+++ Do.Interface.Linux.Docky/Makefile.am 2009-03-05 05:00:17 +0000
4@@ -59,7 +59,6 @@
5 src/Docky.Interface/IRightClickable.cs \
6 src/Docky.Interface/ItemPositionProvider.cs \
7 src/Docky.Interface/LayoutUtils.cs \
8- src/Docky.Interface/PainterService.cs \
9 src/Docky.Interface/PaintNeededArgs.cs \
10 src/Docky.Interface/UpdateRequestArgs.cs \
11 src/Docky.Interface/Util.cs \
12
13=== modified file 'Do.Interface.Linux.Docky/src/Docky.Core/Docky.Core.Default/PainterService.cs'
14--- Do.Interface.Linux.Docky/src/Docky.Core/Docky.Core.Default/PainterService.cs 2009-02-03 09:37:39 +0000
15+++ Do.Interface.Linux.Docky/src/Docky.Core/Docky.Core.Default/PainterService.cs 2009-03-05 05:00:17 +0000
16@@ -17,6 +17,7 @@
17 //
18
19 using System;
20+using System.Collections.Generic;
21
22 using Do.Platform;
23
24@@ -31,24 +32,59 @@
25 {
26
27
28+ ICollection<IDockPainter> painters;
29+
30 #region IPainterService implementation
31+
32+ public event EventHandler PainterHideRequest;
33+ public event EventHandler PainterShowRequest;
34+
35 public void RegisterPainter (IDockPainter painter)
36 {
37- Log<PainterService>.Error ("Default Painter Services cannot register painters");
38+ painters.Add (painter);
39+ painter.ShowRequested += HandleShowRequested;
40+ painter.HideRequested += HandleHideRequested;
41+ }
42+
43+ void HandleHideRequested(object sender, EventArgs e)
44+ {
45+ IDockPainter painter = sender as IDockPainter;
46+ if (painter == null || PainterHideRequest == null)
47+ return;
48+
49+ PainterHideRequest (sender, e);
50+ }
51+
52+ void HandleShowRequested(object sender, EventArgs e)
53+ {
54+ IDockPainter painter = sender as IDockPainter;
55+ if (painter == null || PainterShowRequest == null)
56+ return;
57+
58+ PainterShowRequest (sender, e);
59+ }
60+
61+ #endregion
62+
63+ public PainterService ()
64+ {
65+ painters = new List<IDockPainter> ();
66 }
67
68 #region IDisposable implementation
69
70 public void Dispose ()
71 {
72+ DockServices.UnregisterService (this);
73+
74+ foreach (IDockPainter painter in painters) {
75+ painter.ShowRequested -= HandleShowRequested;
76+ painter.HideRequested -= HandleHideRequested;
77+ painter.Dispose ();
78+ }
79+ painters.Clear ();
80 }
81
82- #endregion
83-
84-
85- #endregion
86-
87-
88-
89+ #endregion
90 }
91 }
92
93=== modified file 'Do.Interface.Linux.Docky/src/Docky.Core/IPainterService.cs'
94--- Do.Interface.Linux.Docky/src/Docky.Core/IPainterService.cs 2009-02-03 09:37:39 +0000
95+++ Do.Interface.Linux.Docky/src/Docky.Core/IPainterService.cs 2009-03-05 05:00:17 +0000
96@@ -25,6 +25,10 @@
97
98 public interface IPainterService : IDockService
99 {
100+ event EventHandler PainterHideRequest;
101+
102+ event EventHandler PainterShowRequest;
103+
104 void RegisterPainter (IDockPainter painter);
105 }
106 }
107
108=== modified file 'Do.Interface.Linux.Docky/src/Docky.Interface/DockArea.cs'
109--- Do.Interface.Linux.Docky/src/Docky.Interface/DockArea.cs 2009-03-04 16:10:30 +0000
110+++ Do.Interface.Linux.Docky/src/Docky.Interface/DockArea.cs 2009-03-05 05:34:14 +0000
111@@ -123,8 +123,6 @@
112
113 bool CursorIsOverDockArea { get; set; }
114
115- PainterService PainterService { get; set; }
116-
117 ModifierType CursorModifier { get; set; }
118
119 ReadOnlyCollection<AbstractDockItem> DockItems {
120@@ -204,10 +202,6 @@
121 SetSize ();
122 SetSizeRequest (Width, Height);
123
124- PainterService = new PainterService (this);
125- PainterService.BuildPainters ();
126- DockServices.RegisterService (PainterService);
127-
128 PositionProvider = new ItemPositionProvider (this);
129
130 AnimationState = new DockAnimationState ();
131@@ -253,6 +247,9 @@
132 DockServices.ItemsService.DockItemsChanged += OnDockItemsChanged;
133 DockServices.ItemsService.ItemNeedsUpdate += HandleItemNeedsUpdate;
134 DockPreferences.IconSizeChanged += HandleIconSizeChanged;
135+
136+ DockServices.PainterService.PainterShowRequest += HandlePainterShowRequest;
137+ DockServices.PainterService.PainterHideRequest += HandlePainterHideRequest;
138
139 PopupMenu.Hidden += OnDockItemMenuHidden;
140 PopupMenu.Shown += OnDockItemMenuShown;
141@@ -273,9 +270,14 @@
142 DockServices.ItemsService.DockItemsChanged -= OnDockItemsChanged;
143 DockServices.ItemsService.ItemNeedsUpdate -= HandleItemNeedsUpdate;
144 DockPreferences.IconSizeChanged -= HandleIconSizeChanged;
145+
146+ DockServices.PainterService.PainterShowRequest -= HandlePainterShowRequest;
147+ DockServices.PainterService.PainterHideRequest -= HandlePainterHideRequest;
148
149 PopupMenu.Hidden -= OnDockItemMenuHidden;
150 PopupMenu.Shown -= OnDockItemMenuShown;
151+
152+ Services.Core.UniverseInitialized -= HandleUniverseInitialized;
153 }
154
155 void BuildAnimationStateEngine ()
156@@ -311,6 +313,7 @@
157 void HandleUniverseInitialized(object sender, EventArgs e)
158 {
159 GLib.Timeout.Add (2000, delegate {
160+ DockServices.ItemsService.ForceUpdate ();
161 SetIconRegions ();
162 return false;
163 });
164@@ -336,6 +339,51 @@
165 AnimatedDraw ();
166 }
167
168+ void HandlePainterHideRequest(object sender, EventArgs e)
169+ {
170+ IDockPainter painter = sender as IDockPainter;
171+ if (Painter != painter)
172+ return;
173+
174+ Painter = null;
175+ PainterOverlayVisible = false;
176+ interface_change_time = DateTime.UtcNow;
177+
178+ SetParentInputMask ();
179+ AnimatedDraw ();
180+
181+ GLib.Timeout.Add (500, () => {
182+ DockServices.ItemsService.ForceUpdate ();
183+ return false;
184+ });
185+
186+ window.UnpresentWindow ();
187+ RegisterGtkDragSource ();
188+ }
189+
190+ void HandlePainterShowRequest(object sender, EventArgs e)
191+ {
192+ IDockPainter painter = sender as IDockPainter;
193+ if (Painter == painter)
194+ return;
195+
196+ if (Painter == null || Painter.Interruptable) {
197+ if (Painter != null)
198+ Painter.Interrupt ();
199+ Painter = painter;
200+ PainterOverlayVisible = true;
201+ interface_change_time = DateTime.UtcNow;
202+
203+ SetParentInputMask ();
204+ AnimatedDraw ();
205+ } else {
206+ painter.Interrupt ();
207+ }
208+
209+ window.PresentWindow ();
210+ UnregisterGtkDragSource ();
211+ }
212+
213 void ResetCursorTimer ()
214 {
215 if (disposed)
216@@ -622,50 +670,6 @@
217 }
218 }
219
220- public bool RequestShowPainter (IDockPainter painter)
221- {
222- if (Painter == painter)
223- return true;
224-
225- if (Painter == null || Painter.Interruptable) {
226- if (Painter != null)
227- Painter.Interrupt ();
228- Painter = painter;
229- PainterOverlayVisible = true;
230- interface_change_time = DateTime.UtcNow;
231-
232- SetParentInputMask ();
233- AnimatedDraw ();
234- } else {
235- return false;
236- }
237- window.PresentWindow ();
238- UnregisterGtkDragSource ();
239- return true;
240- }
241-
242- public bool RequestHidePainter (IDockPainter painter)
243- {
244- if (Painter != painter)
245- return false;
246-
247- Painter = null;
248- PainterOverlayVisible = false;
249- interface_change_time = DateTime.UtcNow;
250-
251- SetParentInputMask ();
252- AnimatedDraw ();
253-
254- GLib.Timeout.Add (500, () => {
255- DockServices.ItemsService.ForceUpdate ();
256- return false;
257- });
258-
259- window.UnpresentWindow ();
260- RegisterGtkDragSource ();
261- return true;
262- }
263-
264 void InterruptPainter ()
265 {
266 if (Painter == null || !Painter.Interruptable) return;
267@@ -713,9 +717,6 @@
268 Painter.PaintNeeded -= HandlePaintNeeded;
269 }
270
271- DockServices.UnregisterService (PainterService);
272- PainterService.Dispose ();
273-
274 window = null;
275
276 if (cursor_timer > 0)
277
278=== modified file 'Do.Interface.Linux.Docky/src/Docky.Interface/DockWindow.cs'
279--- Do.Interface.Linux.Docky/src/Docky.Interface/DockWindow.cs 2009-03-03 13:59:44 +0000
280+++ Do.Interface.Linux.Docky/src/Docky.Interface/DockWindow.cs 2009-03-05 05:00:17 +0000
281@@ -77,6 +77,8 @@
282
283 interop_service = new DoInteropService (controller);
284 Core.DockServices.RegisterService (interop_service);
285+
286+ Core.DockServices.PainterService.RegisterPainter (new Painters.SummonModeRenderer ());
287
288 RegisterEvents ();
289 Build ();
290
291=== removed file 'Do.Interface.Linux.Docky/src/Docky.Interface/PainterService.cs'
292--- Do.Interface.Linux.Docky/src/Docky.Interface/PainterService.cs 2009-02-23 06:09:46 +0000
293+++ Do.Interface.Linux.Docky/src/Docky.Interface/PainterService.cs 1970-01-01 00:00:00 +0000
294@@ -1,94 +0,0 @@
295-// PainterService.cs
296-//
297-// Copyright (C) 2009 GNOME Do
298-//
299-// This program is free software: you can redistribute it and/or modify
300-// it under the terms of the GNU General Public License as published by
301-// the Free Software Foundation, either version 3 of the License, or
302-// (at your option) any later version.
303-//
304-// This program is distributed in the hope that it will be useful,
305-// but WITHOUT ANY WARRANTY; without even the implied warranty of
306-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
307-// GNU General Public License for more details.
308-//
309-// You should have received a copy of the GNU General Public License
310-// along with this program. If not, see <http://www.gnu.org/licenses/>.
311-//
312-
313-using System;
314-using System.Collections.Generic;
315-
316-using Docky.Core;
317-
318-namespace Docky.Interface
319-{
320-
321-
322- internal class PainterService : IPainterService
323- {
324- ICollection<IDockPainter> painters;
325- DockArea parent;
326-
327- #region IPainterService implementation
328-
329- public void RegisterPainter (IDockPainter painter)
330- {
331- painters.Add (painter);
332- painter.ShowRequested += HandleShowRequested;
333- painter.HideRequested += HandleHideRequested;
334- }
335-
336- void HandleHideRequested(object sender, EventArgs e)
337- {
338- IDockPainter painter = sender as IDockPainter;
339- if (painter == null)
340- return;
341-
342- parent.RequestHidePainter (painter);
343- }
344-
345- void HandleShowRequested(object sender, EventArgs e)
346- {
347- IDockPainter painter = sender as IDockPainter;
348- if (painter == null)
349- return;
350-
351- bool shown = parent.RequestShowPainter (painter);
352- if (!shown)
353- painter.Interrupt ();
354- }
355-
356- #endregion
357-
358- internal PainterService (DockArea parent)
359- {
360- this.parent = parent;
361- painters = new List<IDockPainter> ();
362- }
363-
364- public void BuildPainters ()
365- {
366- RegisterPainter (new Painters.SummonModeRenderer ());
367- }
368-
369- #region IDisposable implementation
370-
371- public void Dispose ()
372- {
373- DockServices.UnregisterService (this);
374-
375- foreach (IDockPainter painter in painters) {
376- painter.ShowRequested -= HandleShowRequested;
377- painter.HideRequested -= HandleHideRequested;
378- painter.Dispose ();
379- }
380- painters.Clear ();
381-
382- parent = null;
383- }
384-
385- #endregion
386-
387- }
388-}