banshee r4179 - in trunk/banshee: . build build/m4/banshee src src/Backends src/Backends/Banshee.NowPlaying.X11 src/Backends/Banshee.NowPlaying.X11/Banshee.NowPlaying.X11 src/Backends/Banshee.NowPlaying.X11/libbnpx11 src/Extensions/Banshee.InternetRadio src/Extensions/Banshee.NowPlaying src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying



Author: abock
Date: Sat Jun 21 04:20:29 2008
New Revision: 4179
URL: http://svn.gnome.org/viewvc/banshee?rev=4179&view=rev

Log:
2008-06-21  Aaron Bockover  <abock gnome org>

    * src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying.addin.xml: Define
    the new FullscreenAdapter extension point

    * src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/FullscreenAdapter.cs:
    The manager fullscreen adapter that also provides stock GTK fullscreening

    * src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/FullscreenWindow.cs:
    Get rid of the type hint since it really confuses older Compiz (on 10.3)

    * src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/IFullscreenAdapter.cs:
    A basic interface for FullscreenAdapter extensions which allow platforms
    to define solid fullscreen behavior above and beyond that which stock
    GTK can provide

    * src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/NowPlayingInterface.cs:
    Use the FullscreenAdapter stuff to go fullscreen

    * src/Backends/Banshee.NowPlaying.X11/Banshee.NowPlaying.X11: An X11
    specific backend for providing an IFullscreenAdapter extension to the
    now playing video extension; this binds the hard and valued work of
    BaconResize found in Totem. Respek.

    * build/m4/banshee/bnpx11.m4:
    * src/Backends/Banshee.NowPlaying.X11/libbnpx11/bacon-resize.c:
    * src/Backends/Banshee.NowPlaying.X11/libbnpx11/bacon-resize.h: Lovingly
    borrowed from our good friends, Totem. <3 Bastien. That is, the X11/XRandR
    support for doing proper fullscreen in some annoying situations, and the
    configure foo to detect it at build time



Added:
   trunk/banshee/build/m4/banshee/bnpx11.m4
   trunk/banshee/src/Backends/Banshee.NowPlaying.X11/
   trunk/banshee/src/Backends/Banshee.NowPlaying.X11/Banshee.NowPlaying.X11/
   trunk/banshee/src/Backends/Banshee.NowPlaying.X11/Banshee.NowPlaying.X11.addin.xml
   trunk/banshee/src/Backends/Banshee.NowPlaying.X11/Banshee.NowPlaying.X11.mdp
   trunk/banshee/src/Backends/Banshee.NowPlaying.X11/Banshee.NowPlaying.X11/FullscreenAdapter.cs
   trunk/banshee/src/Backends/Banshee.NowPlaying.X11/Makefile.am
   trunk/banshee/src/Backends/Banshee.NowPlaying.X11/libbnpx11/
   trunk/banshee/src/Backends/Banshee.NowPlaying.X11/libbnpx11/Makefile.am
   trunk/banshee/src/Backends/Banshee.NowPlaying.X11/libbnpx11/bacon-resize.c
   trunk/banshee/src/Backends/Banshee.NowPlaying.X11/libbnpx11/bacon-resize.h
   trunk/banshee/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/FullscreenAdapter.cs
   trunk/banshee/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/IFullscreenAdapter.cs
Modified:
   trunk/banshee/ChangeLog
   trunk/banshee/build/build.environment.mk
   trunk/banshee/configure.ac
   trunk/banshee/src/Backends/Backends.mds
   trunk/banshee/src/Backends/Makefile.am
   trunk/banshee/src/Extensions/Banshee.InternetRadio/Banshee.InternetRadio.mdp
   trunk/banshee/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying.addin.xml
   trunk/banshee/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying.mdp
   trunk/banshee/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/FullscreenWindow.cs
   trunk/banshee/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/NowPlayingInterface.cs
   trunk/banshee/src/Extensions/Banshee.NowPlaying/Makefile.am
   trunk/banshee/src/Makefile.am

Modified: trunk/banshee/build/build.environment.mk
==============================================================================
--- trunk/banshee/build/build.environment.mk	(original)
+++ trunk/banshee/build/build.environment.mk	Sat Jun 21 04:20:29 2008
@@ -100,12 +100,6 @@
 REF_DAP_MTP = $(LINK_DAP_DEPS) $(LINK_MTP_DEPS)
 REF_DAP_IPOD = $(LINK_DAP_DEPS) $(LINK_IPOD)
 
-# Backends
-REF_BACKEND_GNOME = $(LINK_BANSHEE_SERVICES_DEPS) $(LINK_BANSHEE_THICKCLIENT_DEPS) $(LINK_GCONF) $(LINK_GNOME)
-REF_BACKEND_GSTREAMER = $(LINK_BANSHEE_SERVICES_DEPS) $(LINK_GLIB)
-REF_BACKEND_UNIX = $(LINK_BANSHEE_CORE_DEPS) $(LINK_MONO_POSIX)
-REF_BACKEND_HAL = $(LINK_BANSHEE_SERVICES_DEPS) $(LINK_DBUS)
-
 # Extensions
 REF_EXTENSION_AUDIOCD = $(LINK_BANSHEE_THICKCLIENT_DEPS) $(LINK_MUSICBRAINZ_DEPS)
 REF_EXTENSION_BOOKMARKS = $(LINK_BANSHEE_THICKCLIENT_DEPS)
@@ -120,9 +114,20 @@
 REF_EXTENSION_PLAYQUEUE = $(LINK_BANSHEE_THICKCLIENT_DEPS)
 REF_EXTENSION_LASTFM = $(LINK_BANSHEE_THICKCLIENT_DEPS) $(LINK_MONO_MEDIA) $(LINK_LASTFM) $(LINK_LASTFM_GUI)
 REF_EXTENSION_NOWPLAYING = $(LINK_BANSHEE_THICKCLIENT_DEPS)
+LINK_EXTENSION_NOWPLAYING = -r:$(DIR_BIN)/Banshee.NowPlaying.dll
+LINK_EXTENSION_NOWPLAYING_DEPS = $(REF_EXTENSION_NOWPLAYING) \
+	$(LINK_EXTENSION_NOWPLAYING)
 REF_EXTENSION_PODCASTING = $(LINK_MIGO_DEPS) $(LINK_BANSHEE_THICKCLIENT_DEPS)
 REF_EXTENSION_SAMPLE = $(LINK_BANSHEE_THICKCLIENT_DEPS)
 
+# Backends
+REF_BACKEND_GNOME = $(LINK_BANSHEE_SERVICES_DEPS) $(LINK_BANSHEE_THICKCLIENT_DEPS) $(LINK_GCONF) $(LINK_GNOME)
+REF_BACKEND_GSTREAMER = $(LINK_BANSHEE_SERVICES_DEPS) $(LINK_GLIB)
+REF_BACKEND_UNIX = $(LINK_BANSHEE_CORE_DEPS) $(LINK_MONO_POSIX)
+REF_BACKEND_HAL = $(LINK_BANSHEE_SERVICES_DEPS) $(LINK_DBUS)
+REF_BACKEND_BNPX11 = $(LINK_EXTENSION_NOWPLAYING_DEPS)
+
+
 # Build rules
 # Ignoring 0278 due to a bug in gmcs: 
 # http://bugzilla.ximian.com/show_bug.cgi?id=79998

Added: trunk/banshee/build/m4/banshee/bnpx11.m4
==============================================================================
--- (empty file)
+++ trunk/banshee/build/m4/banshee/bnpx11.m4	Sat Jun 21 04:20:29 2008
@@ -0,0 +1,36 @@
+dnl Stolen with gratitude from Totem's configure.in
+
+AC_DEFUN([BANSHEE_CHECK_NOW_PLAYING_X11],
+[
+	have_x11=no
+	if test x$(pkg-config --variable=target gtk+-2.0) = xx11; then
+		PKG_CHECK_MODULES(BNPX_GTK, gtk+-2.0 >= 2.8 gdk-x11-2.0 >= 2.8)
+
+		AC_PATH_X
+
+		have_x11=yes
+
+		if test x"$x_includes" != x"NONE" && test -n "$x_includes" ; then
+			X_INCLUDES=-I`echo $x_includes | sed -e "s/:/ -I/g"`
+		fi
+		if test x"$x_libraries" != x"NONE" && test -n "$x_libraries" ; then
+			X_LIBRARIES=-L`echo $x_libraries | sed -e "s/:/ -L/g"`
+		fi
+		BNPX_CFLAGS="$X_INCLUDES $CFLAGS"
+		BNPX_LIBS="$X_LIBRARIES $LIBS"
+	
+		PKG_CHECK_MODULES(XVIDMODE, xrandr >= 1.1.1 xxf86vm >= 1.0.1,
+			have_xvidmode=yes, have_xvidmode=no)
+
+		if test x$have_xvidmode = xyes; then
+			AC_DEFINE(HAVE_XVIDMODE,, [Define this if you have the XVidMode and XRandR extension installed])
+		fi
+
+		dnl Explicit link against libX11 to avoid problems with crappy linkers
+		BNPX_LIBS="$X_LIBRARIES -lX11"
+		AC_SUBST(BNPX_LIBS)
+		AC_SUBST(BNPX_CFLAGS)
+	fi
+	AM_CONDITIONAL(HAVE_XVIDMODE, [test x$have_xvidmode = xyes])
+])
+

Modified: trunk/banshee/configure.ac
==============================================================================
--- trunk/banshee/configure.ac	(original)
+++ trunk/banshee/configure.ac	Sat Jun 21 04:20:29 2008
@@ -33,6 +33,8 @@
 #BANSHEE_CHECK_NAUTILUS_BURN
 BANSHEE_CHECK_GSTREAMER
 
+BANSHEE_CHECK_NOW_PLAYING_X11
+
 dnl Mono and gmcs
 SHAMROCK_CHECK_MONO_MODULE(1.2.2)
 SHAMROCK_FIND_MONO_2_0_COMPILER
@@ -138,6 +140,8 @@
 src/Backends/Banshee.GStreamer/Makefile
 src/Backends/Banshee.Hal/Makefile
 src/Backends/Banshee.Unix/Makefile
+src/Backends/Banshee.NowPlaying.X11/Makefile
+src/Backends/Banshee.NowPlaying.X11/libbnpx11/Makefile
 
 src/Libraries/Makefile
 src/Libraries/Hyena/Makefile
@@ -193,6 +197,7 @@
     DAAP Support:      ${enable_daap}	(unstable)
     Podcast Support:   ${enable_podcast}
     Boo Scripting:     ${enable_boo}
+    X11 Video Support: ${have_xvidmode}
 
     Unit Tests:        ${do_tests}	(requires nunit >= ${NUNIT_REQUIRED})
 "

Modified: trunk/banshee/src/Backends/Backends.mds
==============================================================================
--- trunk/banshee/src/Backends/Backends.mds	(original)
+++ trunk/banshee/src/Backends/Backends.mds	Sat Jun 21 04:20:29 2008
@@ -5,6 +5,7 @@
       <Entry build="True" name="Banshee.Gnome" configuration="Debug" />
       <Entry build="True" name="Banshee.Unix" configuration="Debug" />
       <Entry build="True" name="Banshee.Hal" configuration="Debug" />
+      <Entry build="True" name="Banshee.NowPlaying.X11" configuration="Debug" />
     </Configuration>
   </Configurations>
   <StartMode startupentry="Banshee.GStreamer" single="True">
@@ -12,11 +13,13 @@
     <Execute type="None" entry="Banshee.Gnome" />
     <Execute type="None" entry="Banshee.Unix" />
     <Execute type="None" entry="Banshee.Hal" />
+    <Execute type="None" entry="Banshee.NowPlaying.X11" />
   </StartMode>
   <Entries>
     <Entry filename="Banshee.GStreamer/Banshee.GStreamer.mdp" />
     <Entry filename="Banshee.Gnome/Banshee.Gnome.mdp" />
     <Entry filename="Banshee.Unix/Banshee.Unix.mdp" />
     <Entry filename="Banshee.Hal/Banshee.Hal.mdp" />
+    <Entry filename="Banshee.NowPlaying.X11/Banshee.NowPlaying.X11.mdp" />
   </Entries>
 </Combine>
\ No newline at end of file

Added: trunk/banshee/src/Backends/Banshee.NowPlaying.X11/Banshee.NowPlaying.X11.addin.xml
==============================================================================
--- (empty file)
+++ trunk/banshee/src/Backends/Banshee.NowPlaying.X11/Banshee.NowPlaying.X11.addin.xml	Sat Jun 21 04:20:29 2008
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Addin 
+    id="Banshee.NowPlaying.X11"
+    version="1.0"
+    compatVersion="1.0"
+    copyright="Â 2008 Novell Inc. Licensed under the MIT X11 license."
+    category="required:Backends"
+    description="Provides an X11 backend for video support, which enables proper fullscreen support."
+    defaultEnabled="true">
+
+  <Dependencies>
+    <Addin id="Banshee.Core" version="1.0"/>
+    <Addin id="Banshee.Services" version="1.0"/>
+    <Addin id="Banshee.NowPlaying" version="1.0"/>
+  </Dependencies>
+  
+  <Extension path="/Banshee/NowPlaying/FullscreenAdapter">
+    <FullscreenAdapter class="Banshee.NowPlaying.X11.FullscreenAdapter"/>
+  </Extension>
+
+</Addin>

Added: trunk/banshee/src/Backends/Banshee.NowPlaying.X11/Banshee.NowPlaying.X11.mdp
==============================================================================
--- (empty file)
+++ trunk/banshee/src/Backends/Banshee.NowPlaying.X11/Banshee.NowPlaying.X11.mdp	Sat Jun 21 04:20:29 2008
@@ -0,0 +1,32 @@
+<Project name="Banshee.NowPlaying.X11" fileversion="2.0" language="C#" clr-version="Net_2_0" UseParentDirectoryAsNamespace="True" ctype="DotNetProject">
+  <Configurations active="Debug">
+    <Configuration name="Debug" ctype="DotNetProjectConfiguration">
+      <Output directory="../../../bin" assemblyKeyFile="." assembly="Banshee.NowPlaying.X11" />
+      <Build debugmode="True" target="Library" />
+      <Execution runwithwarnings="True" consolepause="True" runtime="MsNet" clr-version="Net_2_0" />
+      <CodeGeneration compiler="Mcs" warninglevel="4" optimize="True" unsafecodeallowed="False" generateoverflowchecks="True" generatexmldocumentation="False" ctype="CSharpCompilerParameters" />
+    </Configuration>
+  </Configurations>
+  <Contents>
+    <File name="Banshee.NowPlaying.X11/FullscreenAdapter.cs" subtype="Code" buildaction="Compile" />
+    <File name="Banshee.NowPlaying.X11.addin.xml" subtype="Code" buildaction="EmbedAsResource" />
+    <File name="libbnpx11/bacon-resize.c" subtype="Code" buildaction="Nothing" />
+    <File name="libbnpx11/bacon-resize.h" subtype="Code" buildaction="Nothing" />
+  </Contents>
+  <References>
+    <ProjectReference type="Gac" localcopy="True" refto="System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+    <ProjectReference type="Project" localcopy="True" refto="Banshee.NowPlaying" />
+    <ProjectReference type="Gac" localcopy="True" refto="gtk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
+    <ProjectReference type="Gac" localcopy="True" refto="gdk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
+    <ProjectReference type="Gac" localcopy="True" refto="glib-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
+  </References>
+  <MonoDevelop.Autotools.MakefileInfo IntegrationEnabled="True" RelativeMakefileName="./Makefile.am">
+    <BuildFilesVar Sync="True" Name="SOURCES" />
+    <DeployFilesVar />
+    <ResourcesVar Sync="True" Name="RESOURCES" />
+    <OthersVar />
+    <GacRefVar />
+    <AsmRefVar />
+    <ProjectRefVar />
+  </MonoDevelop.Autotools.MakefileInfo>
+</Project>
\ No newline at end of file

Added: trunk/banshee/src/Backends/Banshee.NowPlaying.X11/Banshee.NowPlaying.X11/FullscreenAdapter.cs
==============================================================================
--- (empty file)
+++ trunk/banshee/src/Backends/Banshee.NowPlaying.X11/Banshee.NowPlaying.X11/FullscreenAdapter.cs	Sat Jun 21 04:20:29 2008
@@ -0,0 +1,134 @@
+//
+// FullScreenAdapter.cs
+//
+// Author:
+//   Aaron Bockover <abockover novell com>
+//
+// Copyright (C) 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 Gtk;
+
+using Hyena;
+using Banshee.NowPlaying;
+
+namespace Banshee.NowPlaying.X11
+{
+    public class FullscreenAdapter : IFullscreenAdapter
+    {
+        private class BaconResize : GLib.InitiallyUnowned
+        {
+            [DllImport ("libbnpx11")]
+            private static extern IntPtr bacon_resize_get_type ();
+    
+            public static new GLib.GType GType {
+                get { return new GLib.GType (bacon_resize_get_type ()); }
+            }
+        
+            public BaconResize (Gtk.Window window) : base (IntPtr.Zero)
+            {
+                this.window = window;
+                
+                GLib.Value window_val = new GLib.Value (window);
+                CreateNativeObject (
+                    new string [] { "video-widget" }, 
+                    new GLib.Value [] { window_val }
+                );
+                window_val.Dispose ();
+            }
+            
+            private Window window;
+            public Window Window {
+                get { return window; }
+            }
+            
+            [DllImport ("libbnpx11")]
+            private static extern void bacon_resize_resize (IntPtr handle);
+            
+            public void Resize ()
+            {
+                bacon_resize_resize (Handle);
+            }
+            
+            [DllImport ("libbnpx11")]
+            private static extern void bacon_resize_restore (IntPtr handle);
+            
+            public void Restore ()
+            {
+                bacon_resize_restore (Handle);
+            }
+            
+            [GLib.Property ("have-xvidmode")]
+            public bool HaveXVidMode {
+                get {
+                    GLib.Value value = GetProperty ("have-xvidmode");
+                    bool ret = (bool)value;
+                    value.Dispose ();
+                    return ret;
+                }
+            }
+        }
+        
+        private BaconResize resize;
+        
+        public void Fullscreen (Window window, bool fullscreen)
+        {
+            // Create the Bacon X11 Resizer if we haven't before or the window changes
+            if (resize == null || resize.Window != window) {
+                if (resize != null) {
+                    resize.Dispose ();
+                }
+                
+                resize = new BaconResize (window);
+                Log.DebugFormat ("X11 Fullscreen Window Set (HaveXVidMode = {0})", resize.HaveXVidMode);
+            }
+            
+            // Do the default GTK fullscreen operation
+            if (fullscreen) {
+                window.Fullscreen ();
+            } else {
+                window.Unfullscreen ();
+            }
+            
+            // Skip if we don't support xvidmode, otherwise do the good resizing
+            if (!resize.HaveXVidMode) {
+                return;
+            }
+            
+            if (fullscreen) {
+                resize.Resize ();
+            } else {
+                resize.Restore ();
+            }
+        }
+        
+        public void Dispose ()
+        {
+            if (resize != null) {
+                resize.Dispose ();
+                resize = null;
+            }
+        }
+    }
+}

Added: trunk/banshee/src/Backends/Banshee.NowPlaying.X11/Makefile.am
==============================================================================
--- (empty file)
+++ trunk/banshee/src/Backends/Banshee.NowPlaying.X11/Makefile.am	Sat Jun 21 04:20:29 2008
@@ -0,0 +1,13 @@
+SUBDIRS = libbnpx11
+
+ASSEMBLY = Banshee.NowPlaying.X11
+TARGET = library
+LINK = $(REF_BACKEND_BNPX11)
+INSTALL_DIR = $(BACKENDS_INSTALL_DIR)
+
+SOURCES = Banshee.NowPlaying.X11/FullscreenAdapter.cs
+
+RESOURCES = Banshee.NowPlaying.X11.addin.xml
+
+include $(top_srcdir)/build/build.mk
+

Added: trunk/banshee/src/Backends/Banshee.NowPlaying.X11/libbnpx11/Makefile.am
==============================================================================
--- (empty file)
+++ trunk/banshee/src/Backends/Banshee.NowPlaying.X11/libbnpx11/Makefile.am	Sat Jun 21 04:20:29 2008
@@ -0,0 +1,23 @@
+bnpx11dir = $(pkglibdir)/Backends
+bnpx11_LTLIBRARIES = libbnpx11.la
+
+libbnpx11_la_SOURCES = \
+	bacon-resize.c \
+	bacon-resize.h
+
+libbnpx11_la_CFLAGS = $(BNPX_CFLAGS) $(BNPX_GTK_CFLAGS)
+libbnpx11_la_LIBADD = $(BNPX_LIBS) $(BNPX_GTK_LIBS) -lX11 -lXxf86vm
+libbnpx11_la_LDFLAGS = -avoid-version -module
+
+noinst_HEADERS = bacon-resize.h
+
+all: $(top_builddir)/bin/libbnpx11.so
+
+$(top_builddir)/bin/libbnpx11.so: .libs/libbnpx11.so
+	mkdir -p $(top_builddir)/bin
+	cp -f $< $@
+
+CLEANFILES = $(top_builddir)/bin/libbnpx11.so
+
+MAINTAINERCLEANFILES = Makefile.in
+

Added: trunk/banshee/src/Backends/Banshee.NowPlaying.X11/libbnpx11/bacon-resize.c
==============================================================================
--- (empty file)
+++ trunk/banshee/src/Backends/Banshee.NowPlaying.X11/libbnpx11/bacon-resize.c	Sat Jun 21 04:20:29 2008
@@ -0,0 +1,348 @@
+/* bacon-resize.c
+ * Copyright (C) 2003-2004, Bastien Nocera <hadess hadess net>
+ * All rights reserved.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Cambridge, MA 02139, USA.
+ */
+
+#include "config.h"
+#include "bacon-resize.h"
+#include <glib.h>
+
+#ifdef HAVE_XVIDMODE
+#include <gdk/gdkx.h>
+#include <gdk/gdk.h>
+#include <X11/X.h>
+#include <X11/Xlib.h>
+#include <X11/Xproto.h>
+
+#include <X11/extensions/xf86vmode.h>
+#include <X11/extensions/Xrandr.h>
+#include <X11/extensions/Xrender.h>
+#endif
+
+static void bacon_resize_class_init	(BaconResizeClass *klass);
+static void bacon_resize_init		(BaconResize *ggo);
+static void bacon_resize_set_property	(GObject *object,
+					 guint property_id,
+					 const GValue *value,
+					 GParamSpec *pspec);
+static void bacon_resize_get_property	(GObject *object,
+					 guint property_id,
+					 GValue *value,
+					 GParamSpec *pspec);
+#ifdef HAVE_XVIDMODE
+static void bacon_resize_finalize	(GObject *object);
+#endif /* HAVE_XVIDMODE */
+
+static void set_video_widget		(BaconResize *resize,
+					 GtkWidget *video_widget);
+static void screen_changed_cb		(GtkWidget *video_widget,
+					 GdkScreen *previous_screen,
+					 BaconResize *resize);
+
+struct BaconResizePrivate {
+	gboolean have_xvidmode;
+	gboolean resized;
+	GtkWidget *video_widget;
+#ifdef HAVE_XVIDMODE
+	/* XRandR */
+	XRRScreenConfiguration *xr_screen_conf;
+	XRRScreenSize *xr_sizes;
+	Rotation xr_current_rotation;
+	SizeID xr_original_size;
+#endif
+};
+
+enum {
+	PROP_HAVE_XVIDMODE = 1,
+	PROP_VIDEO_WIDGET
+};
+
+G_DEFINE_TYPE (BaconResize, bacon_resize, G_TYPE_OBJECT)
+
+static void
+bacon_resize_class_init (BaconResizeClass *klass)
+{
+	GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+	g_type_class_add_private (klass, sizeof (BaconResizePrivate));
+
+	object_class->set_property = bacon_resize_set_property;
+	object_class->get_property = bacon_resize_get_property;
+#ifdef HAVE_XVIDMODE
+	object_class->finalize = bacon_resize_finalize;
+#endif /* HAVE_XVIDMODE */
+
+	g_object_class_install_property (object_class, PROP_HAVE_XVIDMODE,
+					 g_param_spec_boolean ("have-xvidmode", NULL, NULL,
+							       FALSE, G_PARAM_READABLE));
+
+	g_object_class_install_property (object_class, PROP_VIDEO_WIDGET,
+					 g_param_spec_object ("video-widget", "video-widget",
+						 	      "The related video widget",
+							      GTK_TYPE_WIDGET,
+							      G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
+}
+
+static void
+bacon_resize_init (BaconResize *resize)
+{
+	resize->priv = G_TYPE_INSTANCE_GET_PRIVATE (resize, BACON_TYPE_RESIZE, BaconResizePrivate);
+
+	resize->priv->have_xvidmode = FALSE;
+	resize->priv->resized = FALSE;
+}
+
+BaconResize *
+bacon_resize_new (GtkWidget *video_widget)
+{
+	return BACON_RESIZE (g_object_new (BACON_TYPE_RESIZE, "video-widget", video_widget, NULL));
+}
+
+#ifdef HAVE_XVIDMODE
+static void
+bacon_resize_finalize (GObject *object)
+{
+	BaconResize *self = BACON_RESIZE (object);
+
+	g_signal_handlers_disconnect_by_func (self->priv->video_widget, screen_changed_cb, self);
+
+	G_OBJECT_CLASS (bacon_resize_parent_class)->finalize (object);
+}
+#endif /* HAVE_XVIDMODE */
+
+static void
+bacon_resize_set_property (GObject *object,
+			   guint property_id,
+			   const GValue *value,
+			   GParamSpec *pspec)
+{
+	switch (property_id)
+	{
+	case PROP_VIDEO_WIDGET:
+		set_video_widget (BACON_RESIZE (object), GTK_WIDGET (g_value_get_object (value)));
+		break;
+	default:
+		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+	}
+}
+
+static void
+bacon_resize_get_property (GObject *object,
+			   guint property_id,
+			   GValue *value,
+			   GParamSpec *pspec)
+{
+	switch (property_id)
+	{
+	case PROP_HAVE_XVIDMODE:
+		g_value_set_boolean (value, BACON_RESIZE (object)->priv->have_xvidmode);
+		break;
+	default:
+		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+	}
+}
+
+static void
+set_video_widget (BaconResize *resize, GtkWidget *video_widget)
+{
+#ifdef HAVE_XVIDMODE
+	GdkDisplay *display;
+	GdkScreen *screen;
+	int event_basep, error_basep;
+	XRRScreenConfiguration *xr_screen_conf;
+#endif
+	g_return_if_fail (GTK_WIDGET_REALIZED (video_widget));
+
+	resize->priv->video_widget = video_widget;
+
+#ifdef HAVE_XVIDMODE
+	display = gtk_widget_get_display (video_widget);
+	screen = gtk_widget_get_screen (video_widget);
+
+	g_signal_connect (G_OBJECT (video_widget),
+			  "screen-changed", G_CALLBACK (screen_changed_cb), resize);
+
+	XLockDisplay (GDK_DISPLAY_XDISPLAY (display));
+
+	if (!XF86VidModeQueryExtension (GDK_DISPLAY_XDISPLAY (display), &event_basep, &error_basep))
+		goto bail;
+
+	if (!XRRQueryExtension (GDK_DISPLAY_XDISPLAY (display), &event_basep, &error_basep))
+		goto bail;
+
+	/* We don't use the output here, checking whether XRRGetScreenInfo works */
+	xr_screen_conf = XRRGetScreenInfo (GDK_DISPLAY_XDISPLAY (display), GDK_WINDOW_XWINDOW (gdk_screen_get_root_window (screen)));
+	if (xr_screen_conf == NULL)
+		goto bail;
+ 
+	XRRFreeScreenConfigInfo (xr_screen_conf);
+	XUnlockDisplay (GDK_DISPLAY_XDISPLAY (display));
+	resize->priv->have_xvidmode = TRUE;
+	return;
+
+bail:
+	XUnlockDisplay (GDK_DISPLAY_XDISPLAY (display));
+	resize->priv->have_xvidmode = FALSE;
+#endif /* HAVE_XVIDMODE */
+}
+
+static void screen_changed_cb (GtkWidget *video_widget, GdkScreen *previous_screen, BaconResize *resize)
+{
+#ifdef HAVE_XVIDMODE
+	if (resize->priv->resized == TRUE)
+		bacon_resize_resize (resize);
+	else
+		bacon_resize_restore (resize);
+#endif /* HAVE_XVIDMODE */
+}
+
+void
+bacon_resize_resize (BaconResize *resize)
+{
+#ifdef HAVE_XVIDMODE
+	int width, height, i, xr_nsize, res, dotclock;
+	XF86VidModeModeLine modeline;
+	XRRScreenSize *xr_sizes;
+	gboolean found = FALSE;
+	GdkWindow *root;
+	GdkScreen *screen;
+	Display *Display;
+
+	g_return_if_fail (GTK_IS_WIDGET (resize->priv->video_widget));
+	g_return_if_fail (GTK_WIDGET_REALIZED (resize->priv->video_widget));
+
+	Display = GDK_DRAWABLE_XDISPLAY (resize->priv->video_widget->window);
+	if (Display == NULL)
+		return;
+
+	XLockDisplay (Display);
+
+	screen = gtk_widget_get_screen (resize->priv->video_widget);
+	root = gdk_screen_get_root_window (screen);
+
+	/* XF86VidModeGetModeLine just doesn't work nicely with multiple monitors */
+	if (gdk_screen_get_n_monitors (screen) > 1)
+		goto bail;
+
+	res = XF86VidModeGetModeLine (Display, GDK_SCREEN_XNUMBER (screen), &dotclock, &modeline);
+	if (!res)
+		goto bail;
+
+	/* Check if there's a viewport */
+	width = gdk_screen_get_width (screen);
+	height = gdk_screen_get_height (screen);
+
+	if (width <= modeline.hdisplay && height <= modeline.vdisplay)
+		goto bail;
+
+	gdk_error_trap_push ();
+
+	/* Find the XRandR mode that corresponds to the real size */
+	resize->priv->xr_screen_conf = XRRGetScreenInfo (Display, GDK_WINDOW_XWINDOW (root));
+	xr_sizes = XRRConfigSizes (resize->priv->xr_screen_conf, &xr_nsize);
+	resize->priv->xr_original_size = XRRConfigCurrentConfiguration (resize->priv->xr_screen_conf, &(resize->priv->xr_current_rotation));
+	if (gdk_error_trap_pop ()) {
+		g_warning ("XRRConfigSizes or XRRConfigCurrentConfiguration failed");
+		goto bail;
+	}
+
+	for (i = 0; i < xr_nsize; i++) {
+		if (modeline.hdisplay == xr_sizes[i].width && modeline.vdisplay == xr_sizes[i].height) {
+			found = TRUE;
+			break;
+		}
+	}
+
+	if (!found)
+		goto bail;
+
+	gdk_error_trap_push ();
+	XRRSetScreenConfig (Display,
+			resize->priv->xr_screen_conf,
+			GDK_WINDOW_XWINDOW (root),
+			(SizeID) i,
+			resize->priv->xr_current_rotation,
+			CurrentTime);
+	gdk_flush ();
+	if (gdk_error_trap_pop ())
+		g_warning ("XRRSetScreenConfig failed");
+	else
+		resize->priv->resized = TRUE;
+
+bail:
+	XUnlockDisplay (Display);
+#endif /* HAVE_XVIDMODE */
+}
+
+void
+bacon_resize_restore (BaconResize *resize)
+{
+#ifdef HAVE_XVIDMODE
+	int width, height, res, dotclock;
+	XF86VidModeModeLine modeline;
+	GdkWindow *root;
+	GdkScreen *screen;
+	Display *Display;
+
+	g_return_if_fail (GTK_IS_WIDGET (resize->priv->video_widget));
+	g_return_if_fail (GTK_WIDGET_REALIZED (resize->priv->video_widget));
+
+	/* We haven't called bacon_resize_resize before, or it exited
+	 * as we didn't need a resize. */
+	if (resize->priv->xr_screen_conf == NULL)
+		return;
+
+	Display = GDK_DRAWABLE_XDISPLAY (resize->priv->video_widget->window);
+	if (Display == NULL)
+		return;
+
+	XLockDisplay (Display);
+
+	screen = gtk_widget_get_screen (resize->priv->video_widget);
+	root = gdk_screen_get_root_window (screen);
+	res = XF86VidModeGetModeLine (Display, GDK_SCREEN_XNUMBER (screen), &dotclock, &modeline);
+	if (!res)
+		goto bail;
+
+	/* Check if there's a viewport */
+	width = gdk_screen_get_width (screen);
+	height = gdk_screen_get_height (screen);
+
+	if (width > modeline.hdisplay && height > modeline.vdisplay)
+		goto bail;
+
+	gdk_error_trap_push ();
+	XRRSetScreenConfig (Display,
+			resize->priv->xr_screen_conf,
+			GDK_WINDOW_XWINDOW (root),
+			resize->priv->xr_original_size,
+			resize->priv->xr_current_rotation,
+			CurrentTime);
+	gdk_flush ();
+	if (gdk_error_trap_pop ())
+		g_warning ("XRRSetScreenConfig failed");
+	else
+		resize->priv->resized = FALSE;
+
+	XRRFreeScreenConfigInfo (resize->priv->xr_screen_conf);
+	resize->priv->xr_screen_conf = NULL;
+
+bail:
+	XUnlockDisplay (Display);
+#endif
+}
+

Added: trunk/banshee/src/Backends/Banshee.NowPlaying.X11/libbnpx11/bacon-resize.h
==============================================================================
--- (empty file)
+++ trunk/banshee/src/Backends/Banshee.NowPlaying.X11/libbnpx11/bacon-resize.h	Sat Jun 21 04:20:29 2008
@@ -0,0 +1,55 @@
+/* bacon-resize.h
+ * Copyright (C) 2003-2004, Bastien Nocera <hadess hadess net>
+ * All rights reserved.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Cambridge, MA 02139, USA.
+ */
+
+#ifndef BACON_RESIZE_H
+#define BACON_RESIZE_H
+
+#include <glib.h>
+#include <glib-object.h>
+#include <gtk/gtkwidget.h>
+
+G_BEGIN_DECLS
+
+#define BACON_TYPE_RESIZE		(bacon_resize_get_type ())
+#define BACON_RESIZE(obj)		(G_TYPE_CHECK_INSTANCE_CAST ((obj), BACON_TYPE_RESIZE, BaconResize))
+#define BACON_RESIZE_CLASS(klass)	(G_TYPE_CHECK_CLASS_CAST ((klass), BACON_TYPE_RESIZE, BaconResizeClass))
+#define BACON_IS_RESIZE(obj)		(G_TYPE_CHECK_INSTANCE_TYPE ((obj), BACON_TYPE_RESIZE))
+#define BACON_IS_RESIZE_CLASS(klass)	(G_TYPE_CHECK_CLASS_TYPE ((klass), BACON_TYPE_RESIZE))
+
+typedef struct BaconResize		BaconResize;
+typedef struct BaconResizeClass		BaconResizeClass;
+typedef struct BaconResizePrivate	BaconResizePrivate;
+
+struct BaconResize {
+	GObject parent;
+	BaconResizePrivate *priv;
+};
+
+struct BaconResizeClass {
+	GObjectClass parent_class;
+};
+
+GType bacon_resize_get_type	(void);
+BaconResize *bacon_resize_new	(GtkWidget *video_widget);
+void bacon_resize_resize	(BaconResize *resize);
+void bacon_resize_restore	(BaconResize *resize);
+
+G_END_DECLS
+
+#endif /* BACON_RESIZE_H */

Modified: trunk/banshee/src/Backends/Makefile.am
==============================================================================
--- trunk/banshee/src/Backends/Makefile.am	(original)
+++ trunk/banshee/src/Backends/Makefile.am	Sat Jun 21 04:20:29 2008
@@ -2,7 +2,8 @@
 	Banshee.Hal \
 	Banshee.Gnome \
 	Banshee.GStreamer \
-	Banshee.Unix
+	Banshee.Unix \
+	Banshee.NowPlaying.X11
 
 MAINTAINERCLEANFILES = Makefile.in
 

Modified: trunk/banshee/src/Extensions/Banshee.InternetRadio/Banshee.InternetRadio.mdp
==============================================================================
--- trunk/banshee/src/Extensions/Banshee.InternetRadio/Banshee.InternetRadio.mdp	(original)
+++ trunk/banshee/src/Extensions/Banshee.InternetRadio/Banshee.InternetRadio.mdp	Sat Jun 21 04:20:29 2008
@@ -32,4 +32,4 @@
     <AsmRefVar />
     <ProjectRefVar />
   </MonoDevelop.Autotools.MakefileInfo>
-</Project>
+</Project>
\ No newline at end of file

Modified: trunk/banshee/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying.addin.xml
==============================================================================
--- trunk/banshee/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying.addin.xml	(original)
+++ trunk/banshee/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying.addin.xml	Sat Jun 21 04:20:29 2008
@@ -24,4 +24,8 @@
     <Source class="Banshee.NowPlaying.NowPlayingSource"/>
   </Extension>
 
+  <ExtensionPoint path="/Banshee/NowPlaying/FullscreenAdapter">
+    <ExtensionNode name="FullscreenAdapter"/>
+  </ExtensionPoint>
+
 </Addin>

Modified: trunk/banshee/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying.mdp
==============================================================================
--- trunk/banshee/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying.mdp	(original)
+++ trunk/banshee/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying.mdp	Sat Jun 21 04:20:29 2008
@@ -18,6 +18,8 @@
     <File name="Banshee.NowPlaying/XOverlayVideoDisplay.cs" subtype="Code" buildaction="Compile" />
     <File name="Banshee.NowPlaying/OverlayWindow.cs" subtype="Code" buildaction="Compile" />
     <File name="Banshee.NowPlaying/FullscreenControls.cs" subtype="Code" buildaction="Compile" />
+    <File name="Banshee.NowPlaying/IFullscreenAdapter.cs" subtype="Code" buildaction="Compile" />
+    <File name="Banshee.NowPlaying/FullscreenAdapter.cs" subtype="Code" buildaction="Compile" />
   </Contents>
   <References>
     <ProjectReference type="Project" localcopy="True" refto="Banshee.Core" />

Added: trunk/banshee/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/FullscreenAdapter.cs
==============================================================================
--- (empty file)
+++ trunk/banshee/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/FullscreenAdapter.cs	Sat Jun 21 04:20:29 2008
@@ -0,0 +1,107 @@
+//
+// FullscreenAdapter.cs
+//
+// Author:
+//   Aaron Bockover <abockover novell com>
+//
+// Copyright (C) 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 Gtk;
+using Mono.Addins;
+
+using Hyena;
+
+namespace Banshee.NowPlaying
+{
+    public class FullscreenAdapter : IFullscreenAdapter
+    {
+        private IFullscreenAdapter adapter;
+        private bool probed = false;
+        private bool first_fullscreen = false;
+        
+        public void Fullscreen (Window window, bool fullscreen)
+        {
+            if (!first_fullscreen && !fullscreen) {
+                return;
+            } else if (fullscreen) {
+                first_fullscreen = true;
+            }
+        
+            if (adapter != null) {
+                try {
+                    adapter.Fullscreen (window, fullscreen);
+                } catch (Exception e) {
+                    Log.Exception ("IFullscreenAdapter extension failed, so disabling", e);
+                    DisposeAdapter ();
+                }   
+                
+                return;
+            } else if (probed) {
+                DefaultFullscreen (window, fullscreen);
+                return;
+            }
+            
+            foreach (TypeExtensionNode node in AddinManager.GetExtensionNodes ("/Banshee/NowPlaying/FullscreenAdapter")) {
+                try {
+                    adapter = (IFullscreenAdapter)node.CreateInstance (typeof (IFullscreenAdapter));
+                    Log.DebugFormat ("Loaded IFullscreenAdapter: {0}", adapter.GetType ().FullName);
+                    break;
+                } catch (Exception e) {
+                    Log.Exception ("IFullscreenAdapter extension failed to load", e);
+                }
+            }
+            
+            probed = true;
+            Fullscreen (window, fullscreen);
+        }
+        
+        public void Dispose ()
+        {
+            DisposeAdapter ();
+            probed = false;
+        }
+        
+        private void DisposeAdapter ()
+        {
+            if (adapter != null) {
+                try {
+                    adapter.Dispose ();
+                } catch (Exception e) {
+                    Log.Exception ("IFullscreenAdapter failed to dispose", e);
+                }
+                
+                adapter = null;
+            }
+        }
+        
+        private void DefaultFullscreen (Window window, bool fullscreen)
+        {
+            if (fullscreen) {
+                window.Fullscreen ();
+            } else {
+                window.Unfullscreen ();
+            }
+        }
+    }
+}

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	Sat Jun 21 04:20:29 2008
@@ -109,10 +109,6 @@
             Decorated = false;
             CanFocus = true;
             
-            // FIXME: Not really correct, but prevents Compiz from 
-            // doing strange things with the window
-            TypeHint = Gdk.WindowTypeHint.Notification;
-            
             ConfigureWindow ();
         }
         

Added: trunk/banshee/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/IFullscreenAdapter.cs
==============================================================================
--- (empty file)
+++ trunk/banshee/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/IFullscreenAdapter.cs	Sat Jun 21 04:20:29 2008
@@ -0,0 +1,38 @@
+//
+// IFullscreenAdapter.cs
+//
+// Author:
+//   Aaron Bockover <abockover novell com>
+//
+// Copyright (C) 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 Gtk;
+
+namespace Banshee.NowPlaying
+{
+    public interface IFullscreenAdapter : IDisposable
+    {
+        void Fullscreen (Gtk.Window window, bool fullscreen);
+    }
+}

Modified: trunk/banshee/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/NowPlayingInterface.cs
==============================================================================
--- trunk/banshee/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/NowPlayingInterface.cs	(original)
+++ trunk/banshee/src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/NowPlayingInterface.cs	Sat Jun 21 04:20:29 2008
@@ -44,6 +44,7 @@
         private VideoDisplay video_display;
         private Hyena.Widgets.RoundedFrame frame;
         private Gtk.Window video_window;
+        private FullscreenAdapter fullscreen_adapter;
 
         public VideoDisplay VideoDisplay {
             get { return video_display; }
@@ -71,6 +72,8 @@
             frame.Show ();
             
             PackStart (frame, true, true, 0);
+            
+            fullscreen_adapter = new FullscreenAdapter ();
         }
         
         private void MoveVideoExternal (bool hidden)
@@ -151,8 +154,9 @@
             if (fullscreen) {
                 MoveVideoExternal (true);
                 video_window.ShowAll ();
-                video_window.Fullscreen ();
+                fullscreen_adapter.Fullscreen (video_window, true);
             } else {
+                fullscreen_adapter.Fullscreen (video_window, false);
                 video_window.Hide ();
             }
         }

Modified: trunk/banshee/src/Extensions/Banshee.NowPlaying/Makefile.am
==============================================================================
--- trunk/banshee/src/Extensions/Banshee.NowPlaying/Makefile.am	(original)
+++ trunk/banshee/src/Extensions/Banshee.NowPlaying/Makefile.am	Sat Jun 21 04:20:29 2008
@@ -4,8 +4,10 @@
 INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
 
 SOURCES =  \
+	Banshee.NowPlaying/FullscreenAdapter.cs \
 	Banshee.NowPlaying/FullscreenControls.cs \
 	Banshee.NowPlaying/FullscreenWindow.cs \
+	Banshee.NowPlaying/IFullscreenAdapter.cs \
 	Banshee.NowPlaying/NowPlayingInterface.cs \
 	Banshee.NowPlaying/NowPlayingSource.cs \
 	Banshee.NowPlaying/OverlayWindow.cs \

Modified: trunk/banshee/src/Makefile.am
==============================================================================
--- trunk/banshee/src/Makefile.am	(original)
+++ trunk/banshee/src/Makefile.am	Sat Jun 21 04:20:29 2008
@@ -2,9 +2,9 @@
 	Libraries \
 	Core \
 	Clients \
-	Backends \
 	Dap \
-	Extensions
+	Extensions \
+	Backends
 
 EXTRA_DIST = AssemblyInfo.cs.in
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]