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



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]