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
=== modified file 'Do.Interface.Linux.Docky/Makefile.am'
--- Do.Interface.Linux.Docky/Makefile.am 2009-03-04 20:41:38 +0000
+++ Do.Interface.Linux.Docky/Makefile.am 2009-03-05 05:00:17 +0000
@@ -59,7 +59,6 @@
59 src/Docky.Interface/IRightClickable.cs \59 src/Docky.Interface/IRightClickable.cs \
60 src/Docky.Interface/ItemPositionProvider.cs \60 src/Docky.Interface/ItemPositionProvider.cs \
61 src/Docky.Interface/LayoutUtils.cs \61 src/Docky.Interface/LayoutUtils.cs \
62 src/Docky.Interface/PainterService.cs \
63 src/Docky.Interface/PaintNeededArgs.cs \62 src/Docky.Interface/PaintNeededArgs.cs \
64 src/Docky.Interface/UpdateRequestArgs.cs \63 src/Docky.Interface/UpdateRequestArgs.cs \
65 src/Docky.Interface/Util.cs \64 src/Docky.Interface/Util.cs \
6665
=== modified file 'Do.Interface.Linux.Docky/src/Docky.Core/Docky.Core.Default/PainterService.cs'
--- Do.Interface.Linux.Docky/src/Docky.Core/Docky.Core.Default/PainterService.cs 2009-02-03 09:37:39 +0000
+++ Do.Interface.Linux.Docky/src/Docky.Core/Docky.Core.Default/PainterService.cs 2009-03-05 05:00:17 +0000
@@ -17,6 +17,7 @@
17//17//
1818
19using System;19using System;
20using System.Collections.Generic;
2021
21using Do.Platform;22using Do.Platform;
2223
@@ -31,24 +32,59 @@
31 {32 {
32 33
33 34
35 ICollection<IDockPainter> painters;
36
34 #region IPainterService implementation37 #region IPainterService implementation
38
39 public event EventHandler PainterHideRequest;
40 public event EventHandler PainterShowRequest;
41
35 public void RegisterPainter (IDockPainter painter)42 public void RegisterPainter (IDockPainter painter)
36 {43 {
37 Log<PainterService>.Error ("Default Painter Services cannot register painters");44 painters.Add (painter);
45 painter.ShowRequested += HandleShowRequested;
46 painter.HideRequested += HandleHideRequested;
47 }
48
49 void HandleHideRequested(object sender, EventArgs e)
50 {
51 IDockPainter painter = sender as IDockPainter;
52 if (painter == null || PainterHideRequest == null)
53 return;
54
55 PainterHideRequest (sender, e);
56 }
57
58 void HandleShowRequested(object sender, EventArgs e)
59 {
60 IDockPainter painter = sender as IDockPainter;
61 if (painter == null || PainterShowRequest == null)
62 return;
63
64 PainterShowRequest (sender, e);
65 }
66
67 #endregion
68
69 public PainterService ()
70 {
71 painters = new List<IDockPainter> ();
38 }72 }
3973
40 #region IDisposable implementation 74 #region IDisposable implementation
41 75
42 public void Dispose ()76 public void Dispose ()
43 {77 {
78 DockServices.UnregisterService (this);
79
80 foreach (IDockPainter painter in painters) {
81 painter.ShowRequested -= HandleShowRequested;
82 painter.HideRequested -= HandleHideRequested;
83 painter.Dispose ();
84 }
85 painters.Clear ();
44 }86 }
45 87
46 #endregion 88 #endregion
47
48
49 #endregion
50
51
52
53 }89 }
54}90}
5591
=== modified file 'Do.Interface.Linux.Docky/src/Docky.Core/IPainterService.cs'
--- Do.Interface.Linux.Docky/src/Docky.Core/IPainterService.cs 2009-02-03 09:37:39 +0000
+++ Do.Interface.Linux.Docky/src/Docky.Core/IPainterService.cs 2009-03-05 05:00:17 +0000
@@ -25,6 +25,10 @@
25 25
26 public interface IPainterService : IDockService26 public interface IPainterService : IDockService
27 {27 {
28 event EventHandler PainterHideRequest;
29
30 event EventHandler PainterShowRequest;
31
28 void RegisterPainter (IDockPainter painter);32 void RegisterPainter (IDockPainter painter);
29 }33 }
30}34}
3135
=== modified file 'Do.Interface.Linux.Docky/src/Docky.Interface/DockArea.cs'
--- Do.Interface.Linux.Docky/src/Docky.Interface/DockArea.cs 2009-03-04 16:10:30 +0000
+++ Do.Interface.Linux.Docky/src/Docky.Interface/DockArea.cs 2009-03-05 05:34:14 +0000
@@ -123,8 +123,6 @@
123 123
124 bool CursorIsOverDockArea { get; set; }124 bool CursorIsOverDockArea { get; set; }
125125
126 PainterService PainterService { get; set; }
127
128 ModifierType CursorModifier { get; set; }126 ModifierType CursorModifier { get; set; }
129 127
130 ReadOnlyCollection<AbstractDockItem> DockItems { 128 ReadOnlyCollection<AbstractDockItem> DockItems {
@@ -204,10 +202,6 @@
204 SetSize ();202 SetSize ();
205 SetSizeRequest (Width, Height);203 SetSizeRequest (Width, Height);
206 204
207 PainterService = new PainterService (this);
208 PainterService.BuildPainters ();
209 DockServices.RegisterService (PainterService);
210
211 PositionProvider = new ItemPositionProvider (this);205 PositionProvider = new ItemPositionProvider (this);
212 206
213 AnimationState = new DockAnimationState ();207 AnimationState = new DockAnimationState ();
@@ -253,6 +247,9 @@
253 DockServices.ItemsService.DockItemsChanged += OnDockItemsChanged;247 DockServices.ItemsService.DockItemsChanged += OnDockItemsChanged;
254 DockServices.ItemsService.ItemNeedsUpdate += HandleItemNeedsUpdate;248 DockServices.ItemsService.ItemNeedsUpdate += HandleItemNeedsUpdate;
255 DockPreferences.IconSizeChanged += HandleIconSizeChanged; 249 DockPreferences.IconSizeChanged += HandleIconSizeChanged;
250
251 DockServices.PainterService.PainterShowRequest += HandlePainterShowRequest;
252 DockServices.PainterService.PainterHideRequest += HandlePainterHideRequest;
256253
257 PopupMenu.Hidden += OnDockItemMenuHidden;254 PopupMenu.Hidden += OnDockItemMenuHidden;
258 PopupMenu.Shown += OnDockItemMenuShown;255 PopupMenu.Shown += OnDockItemMenuShown;
@@ -273,9 +270,14 @@
273 DockServices.ItemsService.DockItemsChanged -= OnDockItemsChanged;270 DockServices.ItemsService.DockItemsChanged -= OnDockItemsChanged;
274 DockServices.ItemsService.ItemNeedsUpdate -= HandleItemNeedsUpdate;271 DockServices.ItemsService.ItemNeedsUpdate -= HandleItemNeedsUpdate;
275 DockPreferences.IconSizeChanged -= HandleIconSizeChanged; 272 DockPreferences.IconSizeChanged -= HandleIconSizeChanged;
273
274 DockServices.PainterService.PainterShowRequest -= HandlePainterShowRequest;
275 DockServices.PainterService.PainterHideRequest -= HandlePainterHideRequest;
276276
277 PopupMenu.Hidden -= OnDockItemMenuHidden;277 PopupMenu.Hidden -= OnDockItemMenuHidden;
278 PopupMenu.Shown -= OnDockItemMenuShown;278 PopupMenu.Shown -= OnDockItemMenuShown;
279
280 Services.Core.UniverseInitialized -= HandleUniverseInitialized;
279 }281 }
280 282
281 void BuildAnimationStateEngine ()283 void BuildAnimationStateEngine ()
@@ -311,6 +313,7 @@
311 void HandleUniverseInitialized(object sender, EventArgs e)313 void HandleUniverseInitialized(object sender, EventArgs e)
312 {314 {
313 GLib.Timeout.Add (2000, delegate {315 GLib.Timeout.Add (2000, delegate {
316 DockServices.ItemsService.ForceUpdate ();
314 SetIconRegions ();317 SetIconRegions ();
315 return false;318 return false;
316 });319 });
@@ -336,6 +339,51 @@
336 AnimatedDraw ();339 AnimatedDraw ();
337 }340 }
338 341
342 void HandlePainterHideRequest(object sender, EventArgs e)
343 {
344 IDockPainter painter = sender as IDockPainter;
345 if (Painter != painter)
346 return;
347
348 Painter = null;
349 PainterOverlayVisible = false;
350 interface_change_time = DateTime.UtcNow;
351
352 SetParentInputMask ();
353 AnimatedDraw ();
354
355 GLib.Timeout.Add (500, () => {
356 DockServices.ItemsService.ForceUpdate ();
357 return false;
358 });
359
360 window.UnpresentWindow ();
361 RegisterGtkDragSource ();
362 }
363
364 void HandlePainterShowRequest(object sender, EventArgs e)
365 {
366 IDockPainter painter = sender as IDockPainter;
367 if (Painter == painter)
368 return;
369
370 if (Painter == null || Painter.Interruptable) {
371 if (Painter != null)
372 Painter.Interrupt ();
373 Painter = painter;
374 PainterOverlayVisible = true;
375 interface_change_time = DateTime.UtcNow;
376
377 SetParentInputMask ();
378 AnimatedDraw ();
379 } else {
380 painter.Interrupt ();
381 }
382
383 window.PresentWindow ();
384 UnregisterGtkDragSource ();
385 }
386
339 void ResetCursorTimer ()387 void ResetCursorTimer ()
340 {388 {
341 if (disposed)389 if (disposed)
@@ -622,50 +670,6 @@
622 }670 }
623 }671 }
624672
625 public bool RequestShowPainter (IDockPainter painter)
626 {
627 if (Painter == painter)
628 return true;
629
630 if (Painter == null || Painter.Interruptable) {
631 if (Painter != null)
632 Painter.Interrupt ();
633 Painter = painter;
634 PainterOverlayVisible = true;
635 interface_change_time = DateTime.UtcNow;
636
637 SetParentInputMask ();
638 AnimatedDraw ();
639 } else {
640 return false;
641 }
642 window.PresentWindow ();
643 UnregisterGtkDragSource ();
644 return true;
645 }
646
647 public bool RequestHidePainter (IDockPainter painter)
648 {
649 if (Painter != painter)
650 return false;
651
652 Painter = null;
653 PainterOverlayVisible = false;
654 interface_change_time = DateTime.UtcNow;
655
656 SetParentInputMask ();
657 AnimatedDraw ();
658
659 GLib.Timeout.Add (500, () => {
660 DockServices.ItemsService.ForceUpdate ();
661 return false;
662 });
663
664 window.UnpresentWindow ();
665 RegisterGtkDragSource ();
666 return true;
667 }
668
669 void InterruptPainter ()673 void InterruptPainter ()
670 {674 {
671 if (Painter == null || !Painter.Interruptable) return;675 if (Painter == null || !Painter.Interruptable) return;
@@ -713,9 +717,6 @@
713 Painter.PaintNeeded -= HandlePaintNeeded;717 Painter.PaintNeeded -= HandlePaintNeeded;
714 }718 }
715 719
716 DockServices.UnregisterService (PainterService);
717 PainterService.Dispose ();
718
719 window = null;720 window = null;
720 721
721 if (cursor_timer > 0)722 if (cursor_timer > 0)
722723
=== modified file 'Do.Interface.Linux.Docky/src/Docky.Interface/DockWindow.cs'
--- Do.Interface.Linux.Docky/src/Docky.Interface/DockWindow.cs 2009-03-03 13:59:44 +0000
+++ Do.Interface.Linux.Docky/src/Docky.Interface/DockWindow.cs 2009-03-05 05:00:17 +0000
@@ -77,6 +77,8 @@
7777
78 interop_service = new DoInteropService (controller);78 interop_service = new DoInteropService (controller);
79 Core.DockServices.RegisterService (interop_service);79 Core.DockServices.RegisterService (interop_service);
80
81 Core.DockServices.PainterService.RegisterPainter (new Painters.SummonModeRenderer ());
8082
81 RegisterEvents ();83 RegisterEvents ();
82 Build ();84 Build ();
8385
=== removed file 'Do.Interface.Linux.Docky/src/Docky.Interface/PainterService.cs'
--- Do.Interface.Linux.Docky/src/Docky.Interface/PainterService.cs 2009-02-23 06:09:46 +0000
+++ Do.Interface.Linux.Docky/src/Docky.Interface/PainterService.cs 1970-01-01 00:00:00 +0000
@@ -1,94 +0,0 @@
1// PainterService.cs
2//
3// Copyright (C) 2009 GNOME Do
4//
5// This program is free software: you can redistribute it and/or modify
6// it under the terms of the GNU General Public License as published by
7// the Free Software Foundation, either version 3 of the License, or
8// (at your option) any later version.
9//
10// This program is distributed in the hope that it will be useful,
11// but WITHOUT ANY WARRANTY; without even the implied warranty of
12// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13// GNU General Public License for more details.
14//
15// You should have received a copy of the GNU General Public License
16// along with this program. If not, see <http://www.gnu.org/licenses/>.
17//
18
19using System;
20using System.Collections.Generic;
21
22using Docky.Core;
23
24namespace Docky.Interface
25{
26
27
28 internal class PainterService : IPainterService
29 {
30 ICollection<IDockPainter> painters;
31 DockArea parent;
32
33 #region IPainterService implementation
34
35 public void RegisterPainter (IDockPainter painter)
36 {
37 painters.Add (painter);
38 painter.ShowRequested += HandleShowRequested;
39 painter.HideRequested += HandleHideRequested;
40 }
41
42 void HandleHideRequested(object sender, EventArgs e)
43 {
44 IDockPainter painter = sender as IDockPainter;
45 if (painter == null)
46 return;
47
48 parent.RequestHidePainter (painter);
49 }
50
51 void HandleShowRequested(object sender, EventArgs e)
52 {
53 IDockPainter painter = sender as IDockPainter;
54 if (painter == null)
55 return;
56
57 bool shown = parent.RequestShowPainter (painter);
58 if (!shown)
59 painter.Interrupt ();
60 }
61
62 #endregion
63
64 internal PainterService (DockArea parent)
65 {
66 this.parent = parent;
67 painters = new List<IDockPainter> ();
68 }
69
70 public void BuildPainters ()
71 {
72 RegisterPainter (new Painters.SummonModeRenderer ());
73 }
74
75 #region IDisposable implementation
76
77 public void Dispose ()
78 {
79 DockServices.UnregisterService (this);
80
81 foreach (IDockPainter painter in painters) {
82 painter.ShowRequested -= HandleShowRequested;
83 painter.HideRequested -= HandleHideRequested;
84 painter.Dispose ();
85 }
86 painters.Clear ();
87
88 parent = null;
89 }
90
91 #endregion
92
93 }
94}