banshee r3801 - in trunk/banshee: . src/Core/Banshee.ThickClient/Banshee.Gui.Widgets src/Core/Banshee.Widgets/Banshee.Widgets src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying src/Libraries/Hyena.Gui src/Libraries/Hyena.Gui/Hyena.Gui src/Libraries/Hyena.Gui/Hyena.Widgets
- From: abock svn gnome org
- To: svn-commits-list gnome org
- Subject: banshee r3801 - in trunk/banshee: . src/Core/Banshee.ThickClient/Banshee.Gui.Widgets src/Core/Banshee.Widgets/Banshee.Widgets src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying src/Libraries/Hyena.Gui src/Libraries/Hyena.Gui/Hyena.Gui src/Libraries/Hyena.Gui/Hyena.Widgets
- Date: Sun, 20 Apr 2008 02:22:20 +0100 (BST)
Author: abock
Date: Sun Apr 20 01:22:19 2008
New Revision: 3801
URL: http://svn.gnome.org/viewvc/banshee?rev=3801&view=rev
Log:
2008-04-19 Aaron Bockover <abock gnome org>
* src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/ConnectedVolumeButton.cs:
Added a classic ctor override
* src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/RepeatActionButton.cs:
Allow the button to have only the icon
* src/Core/Banshee.Widgets/Banshee.Widgets/VolumeButton.cs:
Added a classic mode that just pops up the slider above the widget,
which is best for fullscreen
* src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/FullscreenControls.cs:
Ensure the controls don't go away if the volume button is active
* src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/FullscreenWindow.cs:
Some fixes; increase the timeout to 5s
* src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/OverlayWindow.cs:
Make the background slightly transparent if compositing is supported
* src/Libraries/Hyena.Gui/Hyena.Gui/CompositeUtils.cs: Utilities for
dealing with awesome stuff in composited environments that doesn't
require the latest bleeding GTK; ported from F-Spot, thank you Larry
* src/Libraries/Hyena.Gui/Hyena.Widgets/RoundedFrame.cs: Fix the
frame rendering
Added:
trunk/banshee/src/Libraries/Hyena.Gui/Hyena.Gui/CompositeUtils.cs
Modified:
trunk/banshee/ChangeLog
trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/ConnectedVolumeButton.cs
trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/RepeatActionButton.cs
trunk/banshee/src/Core/Banshee.Widgets/Banshee.Widgets/VolumeButton.cs
trunk/banshee/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/FullscreenControls.cs
trunk/banshee/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/FullscreenWindow.cs
trunk/banshee/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/OverlayWindow.cs
trunk/banshee/src/Libraries/Hyena.Gui/Hyena.Gui.mdp
trunk/banshee/src/Libraries/Hyena.Gui/Hyena.Widgets/RoundedFrame.cs
trunk/banshee/src/Libraries/Hyena.Gui/Makefile.am
Modified: trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/ConnectedVolumeButton.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/ConnectedVolumeButton.cs (original)
+++ trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/ConnectedVolumeButton.cs Sun Apr 20 01:22:19 2008
@@ -43,6 +43,11 @@
ServiceManager.PlayerEngine.EventChanged += OnPlayerEngineEventChanged;
}
+ public ConnectedVolumeButton (bool classic) : this ()
+ {
+ Classic = classic;
+ }
+
private void OnPlayerEngineEventChanged (object o, PlayerEngineEventArgs args)
{
if (args.Event == PlayerEngineEvent.Volume) {
Modified: trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/RepeatActionButton.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/RepeatActionButton.cs (original)
+++ trunk/banshee/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/RepeatActionButton.cs Sun Apr 20 01:22:19 2008
@@ -44,7 +44,11 @@
private Image image = new Image ();
private Label label = new Label ();
- public RepeatActionButton ()
+ public RepeatActionButton () : this (false)
+ {
+ }
+
+ public RepeatActionButton (bool iconOnly)
{
box.Spacing = 4;
label.UseUnderline = true;
@@ -53,8 +57,11 @@
actions.Changed += delegate { OnActionChanged (); };
OnActionChanged ();
- box.PackStart (image, false, false, 0);
- box.PackStart (label, true, true, 0);
+ box.PackStart (image, false, false, (uint)(iconOnly ? 4 : 0));
+ if (!iconOnly) {
+ box.PackStart (label, true, true, 0);
+ }
+
button = new MenuButton (box, actions.CreateMenu (), false);
Add (button);
ShowAll ();
Modified: trunk/banshee/src/Core/Banshee.Widgets/Banshee.Widgets/VolumeButton.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.Widgets/Banshee.Widgets/VolumeButton.cs (original)
+++ trunk/banshee/src/Core/Banshee.Widgets/Banshee.Widgets/VolumeButton.cs Sun Apr 20 01:22:19 2008
@@ -68,11 +68,21 @@
private int previous_volume;
private uint pop_time;
private bool timeout;
+ private bool classic;
private Gdk.Pixbuf [] pixbufs;
public event VolumeChangedHandler VolumeChanged;
+ public bool Classic {
+ get { return classic; }
+ set { classic = value; }
+ }
+
+ public bool Active {
+ get { return dock == null ? false : dock.Visible; }
+ }
+
public VolumeButton() : this(0.0, 100.0, 5.0, IconSize.SmallToolbar)
{
}
@@ -120,6 +130,7 @@
dock.KeyPressEvent += OnDockKeyPressEvent;
dock.KeyReleaseEvent += OnDockKeyReleaseEvent;
dock.ScrollEvent += OnPlusMinusScollEvent;
+ dock.Hidden += OnDockHidden;
Frame frame = new Frame();
frame.Shadow = ShadowType.Out;
@@ -176,7 +187,7 @@
int x, y, m, dx, dy, sx, sy, ystartoff;
uint event_time;
double v;
-
+
if(previous_volume != (int)slider.Adjustment.Lower) {
previous_volume = Volume;
}
@@ -190,42 +201,55 @@
} else {
throw new ApplicationException("ShowDock expects EventKey, EventButton, or EventScroll");
}
-
+
+ if(classic) {
+ dock.Realize();
+ }
+
dock.Screen = Screen;
GdkWindow.GetOrigin(out x, out y);
x += Allocation.X;
- y += Allocation.Y;
-
- dock.Move(x, y - (SCALE_SIZE / 2));
- dock.ShowAll();
-
- dock.GdkWindow.GetOrigin(out dx, out dy);
- dy += dock.Allocation.Y;
-
- slider.GdkWindow.GetOrigin(out sx, out sy);
- sy += slider.Allocation.Y;
- ystartoff = sy - dy;
-
- timeout = true;
v = Volume / (adj.Upper - adj.Lower);
- x += (Allocation.Width - dock.Allocation.Width) / 2;
- y -= ystartoff;
- y -= slider.MinSliderSize / 2;
- m = slider.Allocation.Height - slider.MinSliderSize;
- y -= (int)(m * (1.0 - v));
- if(evnt is Gdk.EventButton) {
- y += (int)((Gdk.EventButton)evnt).Y;
- } else if(evnt is Gdk.EventScroll) {
- y += (int)((Gdk.EventScroll)evnt).Y;
+ if(classic) {
+ dock.Move(x + (Allocation.Width - dock.Allocation.Width) / 2, y - dock.Allocation.Height);
+ dock.ShowAll();
+ Relief = ReliefStyle.Normal;
+ State = StateType.Active;
+ } else {
+ y += Allocation.Y;
+
+ dock.Move(x, y - (SCALE_SIZE / 2));
+ dock.ShowAll();
+
+ dock.GdkWindow.GetOrigin(out dx, out dy);
+ dy += dock.Allocation.Y;
+
+ slider.GdkWindow.GetOrigin(out sx, out sy);
+ sy += slider.Allocation.Y;
+ ystartoff = sy - dy;
+
+ timeout = true;
+
+ x += (Allocation.Width - dock.Allocation.Width) / 2;
+ y -= ystartoff;
+ y -= slider.MinSliderSize / 2;
+ m = slider.Allocation.Height - slider.MinSliderSize;
+ y -= (int)(m * (1.0 - v));
+
+ if(evnt is Gdk.EventButton) {
+ y += (int)((Gdk.EventButton)evnt).Y;
+ } else if(evnt is Gdk.EventScroll) {
+ y += (int)((Gdk.EventScroll)evnt).Y;
+ }
+
+ dock.Move(x, y);
+ slider.GdkWindow.GetOrigin(out sx, out sy);
}
- dock.Move(x, y);
- slider.GdkWindow.GetOrigin(out sx, out sy);
-
- bool base_result = evnt is Gdk.EventButton
+ bool base_result = !classic && evnt is Gdk.EventButton
? base.OnButtonPressEvent((Gdk.EventButton)evnt)
: true;
@@ -247,7 +271,7 @@
return false;
}
- if(evnt is Gdk.EventButton) {
+ if(!classic && evnt is Gdk.EventButton) {
dock.GrabFocus();
Gdk.EventButton evnt_copy = (Gdk.EventButton)Gdk.EventHelper.Copy(evnt);
@@ -372,6 +396,12 @@
args.RetVal = false;
}
+ private void OnDockHidden(object o, EventArgs args)
+ {
+ State = StateType.Normal;
+ Relief = ReliefStyle.None;
+ }
+
private void OnDockButtonPressEvent(object o, ButtonPressEventArgs args)
{
if(args.Event.Type == Gdk.EventType.ButtonPress) {
Modified: trunk/banshee/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/FullscreenControls.cs
==============================================================================
--- trunk/banshee/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/FullscreenControls.cs (original)
+++ trunk/banshee/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/FullscreenControls.cs Sun Apr 20 01:22:19 2008
@@ -38,11 +38,11 @@
public class FullscreenControls : OverlayWindow
{
private InterfaceActionService action_service;
+ private ConnectedVolumeButton volume_button;
public FullscreenControls (Window toplevel, InterfaceActionService actionService) : base (toplevel, 1)
{
action_service = actionService;
- BorderWidth = 1;
AddAccelGroup (action_service.UIManager.AccelGroup);
BuildInterface ();
}
@@ -51,11 +51,14 @@
{
HBox box = new HBox ();
+ volume_button = new ConnectedVolumeButton (true);
+
box.PackStart (action_service.PlaybackActions["PreviousAction"].CreateToolItem (), false, false, 0);
box.PackStart (action_service.PlaybackActions["PlayPauseAction"].CreateToolItem (), false, false, 0);
box.PackStart (new NextButton (action_service), false, false, 0);
+ box.PackStart (new RepeatActionButton (true), false, false, 0);
box.PackStart (new ConnectedSeekSlider (SeekSliderLayout.Horizontal), true, true, 0);
- box.PackStart (new ConnectedVolumeButton (), false, false, 0);
+ box.PackStart (volume_button, false, false, 0);
Button exit = new Button (Stock.LeaveFullscreen);
exit.Relief = ReliefStyle.None;
@@ -65,5 +68,9 @@
Add (box);
box.ShowAll ();
}
+
+ public bool Active {
+ get { return volume_button.Active || IsActive; }
+ }
}
}
Modified: trunk/banshee/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/FullscreenWindow.cs
==============================================================================
--- trunk/banshee/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/FullscreenWindow.cs (original)
+++ trunk/banshee/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/FullscreenWindow.cs Sun Apr 20 01:22:19 2008
@@ -184,6 +184,7 @@
{
if (controls != null) {
controls.Hide ();
+ QueueDraw ();
}
}
@@ -199,7 +200,7 @@
get {
if (controls == null || !controls.Visible) {
return false;
- } else if (controls.IsActive) {
+ } else if (controls.Active) {
return true;
}
@@ -221,7 +222,7 @@
#region Mouse Cursor Logic
private const int CursorUpdatePositionDelay = 500; // How long (ms) before the cursor position is updated
- private const int CursorHideDelay = 2500; // How long (ms) to remain stationary before it hides
+ private const int CursorHideDelay = 5000; // How long (ms) to remain stationary before it hides
private const int CursorShowMovementThreshold = 150; // How far (px) to move before it shows again
private uint hide_cursor_timeout_id;
Modified: trunk/banshee/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/OverlayWindow.cs
==============================================================================
--- trunk/banshee/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/OverlayWindow.cs (original)
+++ trunk/banshee/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/OverlayWindow.cs Sun Apr 20 01:22:19 2008
@@ -30,6 +30,8 @@
using System;
using Gtk;
+using Hyena.Gui;
+
namespace Banshee.NowPlaying
{
public class OverlayWindow : Window
@@ -39,6 +41,7 @@
private double x_align = 0.5;
private double y_align = 1;
private double width_scale;
+ private bool composited;
public OverlayWindow (Window toplevel) : this (toplevel, 0.0)
{
@@ -74,12 +77,12 @@
protected override void OnRealized ()
{
- // composited = CompositeUtils.IsComposited (Screen) && CompositeUtils.SetRgbaColormap (this);
- // AppPaintable = composited;
+ composited = CompositeUtils.IsComposited (Screen) && CompositeUtils.SetRgbaColormap (this);
+ AppPaintable = composited;
base.OnRealized ();
- // ShapeWindow ();
+ ShapeWindow ();
Relocate ();
}
@@ -110,7 +113,7 @@
base.OnSizeAllocated (allocation);
Relocate ();
- // ShapeWindow ();
+ ShapeWindow ();
QueueDraw ();
}
@@ -125,6 +128,38 @@
Relocate ();
}
+ protected override bool OnExposeEvent (Gdk.EventExpose evnt)
+ {
+ if (!composited || evnt.Window != GdkWindow) {
+ return base.OnExposeEvent (evnt);
+ }
+
+ Cairo.Context cr = Gdk.CairoHelper.Create (evnt.Window);
+
+ Gdk.Color color = Style.Background (State);
+
+ ShapeSurface (cr, new Cairo.Color (color.Red / (double) ushort.MaxValue,
+ color.Blue / (double) ushort.MaxValue,
+ color.Green / (double) ushort.MaxValue,
+ 0.85));
+
+ ((IDisposable)cr).Dispose ();
+ return base.OnExposeEvent (evnt);
+ }
+
+ protected virtual void ShapeSurface (Cairo.Context cr, Cairo.Color color)
+ {
+ cr.Operator = Cairo.Operator.Source;
+ Cairo.Pattern pattern = new Cairo.SolidPattern (color);
+ cr.Source = pattern;
+ pattern.Destroy ();
+ cr.Paint ();
+ }
+
+ private void ShapeWindow ()
+ {
+ }
+
private void Relocate ()
{
if (!IsRealized || !toplevel.IsRealized) {
Modified: trunk/banshee/src/Libraries/Hyena.Gui/Hyena.Gui.mdp
==============================================================================
--- trunk/banshee/src/Libraries/Hyena.Gui/Hyena.Gui.mdp (original)
+++ trunk/banshee/src/Libraries/Hyena.Gui/Hyena.Gui.mdp Sun Apr 20 01:22:19 2008
@@ -66,6 +66,7 @@
<File name="Hyena.Data.Gui/IListView.cs" subtype="Code" buildaction="Compile" />
<File name="Hyena.Widgets/SmoothScrolledWindow.cs" subtype="Code" buildaction="Compile" />
<File name="Hyena.Widgets/MenuButton.cs" subtype="Code" buildaction="Compile" />
+ <File name="Hyena.Gui/CompositeUtils.cs" subtype="Code" buildaction="Compile" />
</Contents>
<References>
<ProjectReference type="Gac" localcopy="True" refto="System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
Added: trunk/banshee/src/Libraries/Hyena.Gui/Hyena.Gui/CompositeUtils.cs
==============================================================================
--- (empty file)
+++ trunk/banshee/src/Libraries/Hyena.Gui/Hyena.Gui/CompositeUtils.cs Sun Apr 20 01:22:19 2008
@@ -0,0 +1,161 @@
+//
+// CompositeUtils.cs
+//
+// Author:
+// Larry Ewing <lewing novell com>
+//
+// Copyright (C) 2007-2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Runtime.InteropServices;
+using Gdk;
+using Gtk;
+
+namespace Hyena.Gui
+{
+ public static class CompositeUtils
+ {
+ [DllImport ("libgdk-2.0-0.dll")]
+ private static extern IntPtr gdk_screen_get_rgba_visual (IntPtr screen);
+
+ [DllImport ("libgtk-win32-2.0-0.dll")]
+ private static extern void gtk_widget_input_shape_combine_mask (IntPtr raw, IntPtr shape_mask,
+ int offset_x, int offset_y);
+
+ [DllImport ("libgdk-2.0-0.dll")]
+ private static extern IntPtr gdk_screen_get_rgba_colormap (IntPtr screen);
+
+ public static Colormap GetRgbaColormap (Screen screen)
+ {
+ try {
+ IntPtr raw_ret = gdk_screen_get_rgba_colormap (screen.Handle);
+ Gdk.Colormap ret = GLib.Object.GetObject(raw_ret) as Gdk.Colormap;
+ return ret;
+ } catch {
+ Gdk.Visual visual = Gdk.Visual.GetBestWithDepth (32);
+ if (visual != null) {
+ Gdk.Colormap cmap = new Gdk.Colormap (visual, false);
+ return cmap;
+ }
+ }
+
+ return null;
+ }
+
+ public static bool SetRgbaColormap (Widget w)
+ {
+ Gdk.Colormap cmap = GetRgbaColormap (w.Screen);
+
+ if (cmap != null) {
+ w.Colormap = cmap;
+ return true;
+ }
+
+ return false;
+ }
+
+ public static Visual GetRgbaVisual (Screen screen)
+ {
+ try {
+ IntPtr raw_ret = gdk_screen_get_rgba_visual (screen.Handle);
+ Gdk.Visual ret = GLib.Object.GetObject (raw_ret) as Gdk.Visual;
+ return ret;
+ } catch {
+ Gdk.Visual visual = Gdk.Visual.GetBestWithDepth (32);
+ if (visual != null) {
+ return visual;
+ }
+ }
+ return null;
+ }
+
+ [DllImport ("libgdk-2.0-0.dll")]
+ private static extern void gdk_property_change (IntPtr window, IntPtr property, IntPtr type,
+ int format, int mode, uint [] data, int nelements);
+
+ [DllImport ("libgdk-2.0-0.dll")]
+ private static extern void gdk_property_change (IntPtr window, IntPtr property, IntPtr type,
+ int format, int mode, byte [] data, int nelements);
+
+ public static void ChangeProperty (Gdk.Window win, Atom property, Atom type, PropMode mode, uint [] data)
+ {
+ gdk_property_change (win.Handle, property.Handle, type.Handle, 32, (int)mode, data, data.Length * 4);
+ }
+
+ public static void ChangeProperty (Gdk.Window win, Atom property, Atom type, PropMode mode, byte [] data)
+ {
+ gdk_property_change (win.Handle, property.Handle, type.Handle, 8, (int)mode, data, data.Length);
+ }
+
+ [DllImport ("libgdk-2.0-0.dll")]
+ private static extern bool gdk_x11_screen_supports_net_wm_hint (IntPtr screen, IntPtr property);
+
+ public static bool SupportsHint (Screen screen, string name)
+ {
+ try {
+ Atom atom = Atom.Intern (name, false);
+ return gdk_x11_screen_supports_net_wm_hint (screen.Handle, atom.Handle);
+ } catch {
+ return false;
+ }
+ }
+
+ [DllImport ("libgdk-2.0-0.dll")]
+ private static extern bool gdk_screen_is_composited (IntPtr screen);
+
+ public static bool IsComposited (Screen screen)
+ {
+ bool composited;
+ try {
+ composited = gdk_screen_is_composited (screen.Handle);
+ } catch (EntryPointNotFoundException) {
+ Atom atom = Atom.Intern (String.Format ("_NET_WM_CM_S{0}", screen.Number), false);
+ composited = Gdk.Selection.OwnerGetForDisplay (screen.Display, atom) != null;
+ }
+
+ // FIXME check for WINDOW_OPACITY so that we support compositing on older composite manager
+ // versions before they started supporting the real check given above
+ if (!composited) {
+ composited = CompositeUtils.SupportsHint (screen, "_NET_WM_WINDOW_OPACITY");
+ }
+
+ return composited;
+ }
+
+ public static void SetWinOpacity (Gtk.Window win, double opacity)
+ {
+ CompositeUtils.ChangeProperty (win.GdkWindow,
+ Atom.Intern ("_NET_WM_WINDOW_OPACITY", false),
+ Atom.Intern ("CARDINAL", false),
+ PropMode.Replace,
+ new uint [] { (uint) (0xffffffff * opacity) }
+ );
+ }
+
+ public static void InputShapeCombineMask (Widget w, Pixmap shape_mask, int offset_x, int offset_y)
+ {
+ gtk_widget_input_shape_combine_mask (w.Handle, shape_mask == null ? IntPtr.Zero : shape_mask.Handle,
+ offset_x, offset_y);
+ }
+ }
+}
Modified: trunk/banshee/src/Libraries/Hyena.Gui/Hyena.Widgets/RoundedFrame.cs
==============================================================================
--- trunk/banshee/src/Libraries/Hyena.Gui/Hyena.Widgets/RoundedFrame.cs (original)
+++ trunk/banshee/src/Libraries/Hyena.Gui/Hyena.Widgets/RoundedFrame.cs Sun Apr 20 01:22:19 2008
@@ -159,6 +159,7 @@
if (fill_color_set) {
theme.DrawFrameBackground (cr, rect, fill_color);
} else {
+ theme.DrawFrameBackground (cr, rect, true);
theme.DrawFrameBorder (cr, rect);
}
}
Modified: trunk/banshee/src/Libraries/Hyena.Gui/Makefile.am
==============================================================================
--- trunk/banshee/src/Libraries/Hyena.Gui/Makefile.am (original)
+++ trunk/banshee/src/Libraries/Hyena.Gui/Makefile.am Sun Apr 20 01:22:19 2008
@@ -32,6 +32,7 @@
Hyena.Gui.Theming/ThemeContext.cs \
Hyena.Gui/CairoExtensions.cs \
Hyena.Gui/CleanRoomStartup.cs \
+ Hyena.Gui/CompositeUtils.cs \
Hyena.Gui/EntryEraseAction.cs \
Hyena.Gui/EntryInsertAction.cs \
Hyena.Gui/EntryUndoAdapter.cs \
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]