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
- From: abock svn gnome org
- To: svn-commits-list gnome org
- Subject: 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
- Date: Sat, 21 Jun 2008 04:20:29 +0000 (UTC)
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]