~ubuntu-branches/ubuntu/natty/gnome-do/natty

« back to all changes in this revision

Viewing changes to Do.Interface.Linux.Docky/src/Docky.Interface/Docky.Interface.Menus/AbstractMenuButtonArgs.cs

  • Committer: Bazaar Package Importer
  • Author(s): Iain Lane, Daniel T Chen, Iain Lane, Mirco Bauer
  • Date: 2009-03-22 22:44:39 UTC
  • mfrom: (0.2.2 upstream)
  • mto: This revision was merged to the branch mainline in revision 14.
  • Revision ID: james.westby@ubuntu.com-20090322224439-0dndhbvyqz1u2iu2
[ Daniel T Chen ]
* New upstream release (LP: #344578).
  + Gnome Do causes keyboard keys to be remapped (LP: #308143)
  + Docky window too small when summoned (LP: #317381)
  + Minimize/Maximize does not work on all windows (LP: #317908)
  + Docky blocks drag and drop over large areas of the screen
    (LP: #318471)
  + Docky fails to autohide properly when changing themes
    (LP: #318672)
  + Paste via ctrl+v does not work in 1st pane (LP: #318922)
  + Autostart is in wrong assembly (LP: #319114)
  + Docky has no results list (LP: #319797)
  + Docky trash applet does not reflect current state
    (LP: #320621)
  + Docky panels splits into two when over filled (LP: #324648)
  + Docky ui division is inconsistent and confusing
    (LP: #324718)
  + poor performance with two screens (LP: #323294)
  + Docky trash applet doesn't check if trash exists
    (LP: #323453)
  + docky panel splits into two when overfilled (LP: #324648)
  + Docky's UI division is inconsistent and confusing
    (LP: #324718)
  + Do crashes when using a pastebin launcher with docky
    (LP: #325178)
  + Make docky aware of icon theme switch (LP: #328721)
  + Docky doesn't update icon status for some apps that minimize
    to system tray. (LP: #329120)
  + Docky does not work properly with pull-down window
    (LP: #334663)
  + sensitivity of zooming the icons in the dock isn't
    configurable (LP: #336214)
  + Regression: In 0.8.1, "Request attention" is no longer
    indicated (LP: #337594)
  + Clock's Calendar mode auto-hides when leaving the bounds of
    the original dock (LP: #337783)
  + gnome-do does not notice change of icon theme (LP: #204368)
  + Thumbnails are never displayed when files have spaces in
    their names (LP: #311551)
  + Open improperly escapes URLs. (LP: #317416)
  + Docky: Right-click dialog appears on wrong monitor
    (LP: #319062)
  + Dragging items off Docky possible in summon mode
    (LP: #319452)
  + Docky shows icon according to the filename (LP: #320892)
  + Mouse click inactive when Do(cky) is summoned (LP: #324937)
  + Docky trash don't have a right-click menu (LP: #317947)
  + Polish docky's window name labels (LP: #318487)
  + Docky: Scroll on window icon should switch between windows
    of that app (LP: #319805)
  + Docky does not preserve window stack (z?) order when
    switching apps by clicking on app icon (LP: #326661)
  + Docky window switching should be easier. (LP: #327079)
  + Color of indicators on Docky cannot be changed
    (LP: #332936)
  + Do's ResultWindow is using wrong text color (LP: #288771)
  + Docky won't unhide after rev 1053 (LP: #337113)
  + Do's icon label in Docky should be "GNOME Do" instead of
    "Summon GNOME Do" (LP: #338496)
* debian/control:
  + Add librsvg2-2.18-cil build-dep
* debian/patches/03_show_in_all_DEs
  + Drop; fixed in new upstream
* debian/gnome-do.1
  + Update for new version. 

[ Iain Lane ]
* Merge changes with Ubuntu Jaunty
* Autostart behaviour has been fixed upstream (Closes: #513741, #516194).
* debian/patches/10_application_search_path.dpatch: Add. Fix search path so
  that applications are properly indexed. Patch backported from upstream.
* debian/control: Add myself to Uploaders. 
* Really bump versioned dep on libgtk2.0-cil
* debian/control, debian/rules, debian/watch,
  debian/patches/00_remove_bundledlibs.dpatch, debian/README.source:
  Upstream source needs repackaging due to shipped copy of gmcs.exe

[ Mirco Bauer ]
* debian/rules:
  + Made get-orig-source target policy conform.
  + Use dh override targets instead of sequence injection.
* debian/control:
  + Bumped debhelper build-dep to >= 7.0.50
  + Bumped Standards-Version to 3.8.1 (no changes needed)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
// AbstractMenuButtonArgs.cs
 
2
// 
 
3
// Copyright (C) 2008 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
 
 
19
using System;
 
20
 
 
21
using Cairo;
 
22
using Gdk;
 
23
using Gtk;
 
24
using Mono.Unix;
 
25
 
 
26
using Docky.Core;
 
27
using Docky.Utilities;
 
28
 
 
29
using Do.Interface;
 
30
using Do.Interface.CairoUtils;
 
31
using Do.Platform;
 
32
 
 
33
namespace Docky.Interface.Menus
 
34
{
 
35
        public abstract class AbstractMenuButtonArgs : AbstractMenuArgs
 
36
        {
 
37
                const string FormatString = "{0}";
 
38
                const int WidthBuffer = 4;
 
39
                const int Height = 22;
 
40
                
 
41
                Gtk.Widget widget;
 
42
                bool hovered;
 
43
                
 
44
                public bool Dark { get; set; }
 
45
                
 
46
                public virtual double IconOpacity {
 
47
                        get { return 1; }
 
48
                }
 
49
                
 
50
                public override Gtk.Widget Widget { 
 
51
                        get {
 
52
                                if (widget == null)
 
53
                                        widget = BuildWidget ();
 
54
                                return widget;
 
55
                        }
 
56
                }
 
57
                
 
58
                protected virtual string Description { get; set; }
 
59
                
 
60
                protected virtual string Icon { get; set; }
 
61
                
 
62
                protected virtual bool UseTooltip { get; set; }
 
63
                
 
64
                public AbstractMenuButtonArgs ()
 
65
                {
 
66
                        
 
67
                }
 
68
                
 
69
                public AbstractMenuButtonArgs (string description, string icon)
 
70
                {
 
71
                        Description = GLib.Markup.EscapeText (Catalog.GetString (description));
 
72
                        Icon = icon;
 
73
                }
 
74
                
 
75
                Widget BuildWidget ()
 
76
                {
 
77
                        DrawingArea button = new DrawingArea ();
 
78
                        
 
79
                        button.ExposeEvent += HandleExposeEvent;
 
80
                        button.EnterNotifyEvent += HandleEnterNotifyEvent;
 
81
                        button.LeaveNotifyEvent += HandleLeaveNotifyEvent; 
 
82
                        button.ButtonReleaseEvent += HandleButtonReleaseEvent; 
 
83
                        
 
84
                        button.AddEvents ((int) (EventMask.EnterNotifyMask | EventMask.LeaveNotifyMask | EventMask.ButtonReleaseMask));
 
85
                        button.HeightRequest = Height;
 
86
 
 
87
                        button.SetCompositeColormap ();
 
88
                        if (UseTooltip)
 
89
                                button.TooltipText = Description;
 
90
                        
 
91
                        return button;
 
92
                }
 
93
                
 
94
                void HandleButtonReleaseEvent(object o, ButtonReleaseEventArgs args)
 
95
                {
 
96
                        Action ();
 
97
                        base.OnActivated ();
 
98
                }
 
99
 
 
100
                void HandleLeaveNotifyEvent(object o, LeaveNotifyEventArgs args)
 
101
                {
 
102
                        (o as Widget).QueueDraw ();
 
103
                        hovered = false;
 
104
                }
 
105
 
 
106
                void HandleEnterNotifyEvent(object o, EnterNotifyEventArgs args)
 
107
                {
 
108
                        (o as Widget).QueueDraw ();
 
109
                        hovered = true;
 
110
                }
 
111
 
 
112
                void HandleExposeEvent(object o, ExposeEventArgs args)
 
113
                {
 
114
                        using (Context cr = CairoHelper.Create (args.Event.Window)) {
 
115
                                Gdk.Rectangle area = args.Event.Area;
 
116
                                cr.AlphaFill ();
 
117
                                LinearGradient lg = new LinearGradient (area.X, area.Y, area.X, area.Y + area.Height);
 
118
                                
 
119
                                Cairo.Color background = (Dark) ? DockPopupMenu.BackgroundColor.ShadeColor (.7) : DockPopupMenu.BackgroundColor;
 
120
                                if (hovered) {
 
121
                                        Cairo.Color high = background
 
122
                                                    .ConvertToGdk ()
 
123
                                                        .SetMinimumValue (25)
 
124
                                                        .ConvertToCairo (background.A);
 
125
                                        
 
126
                                        lg.AddColorStop (0, high);
 
127
                                        lg.AddColorStop (1, background);
 
128
                                } else {
 
129
                                        lg.AddColorStop (0, background);
 
130
                                        lg.AddColorStop (1, background);
 
131
                                }
 
132
                                cr.Pattern = lg;
 
133
                                cr.Paint ();
 
134
                                lg.Destroy ();
 
135
                                
 
136
                                int width = area.Width - WidthBuffer * 2 - 25;
 
137
                                
 
138
                                TextRenderContext renderContext = new TextRenderContext (cr, string.Format (FormatString, Description), width);
 
139
                                
 
140
                                renderContext.LeftCenteredPoint = new Gdk.Point (area.X + WidthBuffer + 25, area.Y + area.Height / 2);
 
141
                                renderContext.Alignment = Pango.Alignment.Left;
 
142
                                renderContext.EllipsizeMode = Pango.EllipsizeMode.End;
 
143
                                
 
144
                                DockServices.DrawingService.TextPathAtPoint (renderContext);
 
145
                                
 
146
                                cr.Color = new Cairo.Color (1, 1, 1);
 
147
                                cr.Fill ();
 
148
                                
 
149
                                Gdk.Pixbuf pbuf = GetPixbuf (Height - 8);
 
150
                                CairoHelper.SetSourcePixbuf (cr, pbuf, WidthBuffer, (Height - pbuf.Height) / 2);
 
151
                                cr.PaintWithAlpha (IconOpacity);
 
152
                                pbuf.Dispose ();
 
153
                        }
 
154
                }
 
155
                
 
156
                protected virtual Gdk.Pixbuf GetPixbuf (int size)
 
157
                {
 
158
                        return IconProvider.PixbufFromIconName (Icon, size);
 
159
                }
 
160
                
 
161
                public abstract void Action ();
 
162
                
 
163
                public AbstractMenuButtonArgs AsDark ()
 
164
                {
 
165
                        Dark = true;
 
166
                        return this;
 
167
                }
 
168
                
 
169
                public override void Dispose ()
 
170
                {
 
171
                        Widget.Destroy ();
 
172
                        base.Dispose ();
 
173
                }
 
174
 
 
175
        }
 
176
}