[f-spot] Replace old, slow SlideView screensaver view
- From: Gabriel Burt <gburt src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [f-spot] Replace old, slow SlideView screensaver view
- Date: Wed, 3 Feb 2010 23:13:28 +0000 (UTC)
commit d01c272907f2fef5195d92051157f56286d19033
Author: Gabriel Burt <gabriel burt gmail com>
Date: Tue Feb 2 16:46:54 2010 -0800
Replace old, slow SlideView screensaver view
Use the new SlideShow code instead
Fixes bgo #608849
.../Tools/ScreensaverConfig/ScreensaverConfig.cs | 5 +-
src/Core/App.cs | 17 +-
src/Makefile.am | 2 +-
src/Preferences.cs | 3 +
src/SingleView.cs | 13 -
src/SlideView.cs | 558 --------------------
src/Widgets/SlideShow.cs | 13 +-
src/XScreenSaverSlide.cs | 60 +++
8 files changed, 86 insertions(+), 585 deletions(-)
---
diff --git a/extensions/Tools/ScreensaverConfig/ScreensaverConfig.cs b/extensions/Tools/ScreensaverConfig/ScreensaverConfig.cs
index 969fbfa..8824ddf 100644
--- a/extensions/Tools/ScreensaverConfig/ScreensaverConfig.cs
+++ b/extensions/Tools/ScreensaverConfig/ScreensaverConfig.cs
@@ -27,9 +27,8 @@ namespace ScreensaverConfig
const string SaverMode = "single";
const string GNOME_SCREENSAVER_THEME = "/apps/gnome-screensaver/themes";
const string GNOME_SCREENSAVER_MODE = "/apps/gnome-screensaver/mode";
- const string SCREENSAVER = "screensaver/";
- const string SCREENSAVER_TAG = Preferences.APP_FSPOT + SCREENSAVER + "tag_id";
- const string SCREENSAVER_DELAY = Preferences.APP_FSPOT + SCREENSAVER + "delay";
+ const string SCREENSAVER_TAG = Preferences.SCREENSAVER_TAG;
+ const string SCREENSAVER_DELAY = Preferences.SCREENSAVER_DELAY;
const double default_delay = 2.0;
public void Run (object o, EventArgs e)
diff --git a/src/Core/App.cs b/src/Core/App.cs
index 4c847da..a68e072 100644
--- a/src/Core/App.cs
+++ b/src/Core/App.cs
@@ -231,7 +231,7 @@ namespace FSpot
void HandleSlideshow (string tagname)
{
Tag tag;
- SlideView slideview = null;
+ FSpot.Widgets.SlideShow slideshow = null;
if (!String.IsNullOrEmpty (tagname))
tag = Database.Tags.GetTagByName (tagname);
@@ -246,17 +246,18 @@ namespace FSpot
else
photos = new Photo [0];
- var delay = Math.Max (1.0, Preferences.Get<double> (Preferences.APP_FSPOT + "screensaver/delay"));
+ // Minimum delay 1 second; default is 4s
+ var delay = Math.Max (1.0, Preferences.Get<double> (Preferences.SCREENSAVER_DELAY));
+
var window = new XScreenSaverSlide ();
window.ModifyFg (Gtk.StateType.Normal, new Gdk.Color (127, 127, 127));
window.ModifyBg (Gtk.StateType.Normal, new Gdk.Color (0, 0, 0));
if (photos.Length > 0) {
Array.Sort (photos, new Photo.RandomSort ());
- Gdk.Pixbuf black = new Gdk.Pixbuf (Gdk.Colorspace.Rgb, false, 8, 1, 1);
- black.Fill (0x00000000);
- slideview = new SlideView (black, photos, delay);
- window.Add (slideview);
+ slideshow = new FSpot.Widgets.SlideShow (new BrowsablePointer (new PhotoList (photos), 0), (uint)(delay * 1000), true);
+ slideshow.Transition = new FSpot.Widgets.DissolveTransition ();
+ window.Add (slideshow);
} else {
Gtk.HBox outer = new Gtk.HBox ();
Gtk.HBox hbox = new Gtk.HBox ();
@@ -304,8 +305,8 @@ namespace FSpot
Register (window);
GLib.Idle.Add (delegate {
- if (slideview != null)
- slideview.Play ();
+ if (slideshow != null)
+ slideshow.Start ();
return false;
});
}
diff --git a/src/Makefile.am b/src/Makefile.am
index 8d7eb29..35800c1 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -242,7 +242,7 @@ F_SPOT_CSDISTFILES = \
$(srcdir)/RollStore.cs \
$(srcdir)/SelectionDataExtensions.cs \
$(srcdir)/SendEmail.cs \
- $(srcdir)/SlideView.cs \
+ $(srcdir)/XScreenSaverSlide.cs \
$(srcdir)/SingleView.cs \
$(srcdir)/SimpleCalendar.cs \
$(srcdir)/Sharpener.cs \
diff --git a/src/Preferences.cs b/src/Preferences.cs
index 144eab7..19d4fd3 100644
--- a/src/Preferences.cs
+++ b/src/Preferences.cs
@@ -66,6 +66,7 @@ namespace FSpot
public const string IMPORT_GUI_ROLL_HISTORY = APP_FSPOT + "import/gui_roll_history";
public const string SCREENSAVER_TAG = APP_FSPOT + "screensaver/tag_id";
+ public const string SCREENSAVER_DELAY = APP_FSPOT + "screensaver/delay";
public const string STORAGE_PATH = APP_FSPOT + "import/storage_path";
@@ -145,6 +146,8 @@ namespace FSpot
case SCREENSAVER_TAG:
return 1;
+ case SCREENSAVER_DELAY:
+ return 4.0;
case STORAGE_PATH:
return System.IO.Path.Combine (FSpot.Global.HomeDirectory, Catalog.GetString("Photos"));
case EXPORT_EMAIL_SIZE:
diff --git a/src/SingleView.cs b/src/SingleView.cs
index 6cf74e1..99369bc 100644
--- a/src/SingleView.cs
+++ b/src/SingleView.cs
@@ -360,19 +360,6 @@ namespace FSpot {
chooser.Destroy ();
}
- private bool SlideShow ()
- {
- IBrowsableItem [] items = new IBrowsableItem [collection.Count];
- for (int i = 0; i < collection.Count; i++) {
- items [i] = collection [i];
- }
-
- FSpot.FullSlide full = new FSpot.FullSlide (Window, items);
- full.Play ();
- this.Window.GdkWindow.Cursor = null;
- return false;
- }
-
private void HandleViewFullscreen (object sender, System.EventArgs args)
{
if (fsview != null)
diff --git a/src/Widgets/SlideShow.cs b/src/Widgets/SlideShow.cs
index 8c8ba18..03d7bc9 100644
--- a/src/Widgets/SlideShow.cs
+++ b/src/Widgets/SlideShow.cs
@@ -23,7 +23,12 @@ namespace FSpot.Widgets
bool running;
BrowsablePointer item;
#region Public API
- public SlideShow (BrowsablePointer item) : base ()
+
+ public SlideShow (BrowsablePointer item) : this (item, 6000, false)
+ {
+ }
+
+ public SlideShow (BrowsablePointer item, uint interval_ms, bool init) : base ()
{
this.item = item;
DoubleBuffered = false;
@@ -37,8 +42,12 @@ namespace FSpot.Widgets
transitions.Add (transition.Transition);
}
- flip = new Delay (6000, delegate {item.MoveNext (true); return true;});
+ flip = new Delay (interval_ms, delegate {item.MoveNext (true); return true;});
animation = new DoubleAnimation (0, 1, new TimeSpan (0, 0, 2), HandleProgressChanged, GLib.Priority.Default);
+
+ if (init) {
+ HandleItemChanged (null, null);
+ }
}
SlideShowTransition transition;
diff --git a/src/XScreenSaverSlide.cs b/src/XScreenSaverSlide.cs
new file mode 100644
index 0000000..815c055
--- /dev/null
+++ b/src/XScreenSaverSlide.cs
@@ -0,0 +1,60 @@
+using Gtk;
+using Gdk;
+using System;
+using GLib;
+using System.Runtime.InteropServices;
+using FSpot;
+using FSpot.Utils;
+
+namespace FSpot {
+ public class XScreenSaverSlide : Gtk.Window {
+ public const string ScreenSaverEnviroment = "XSCREENSAVER_WINDOW";
+
+ public XScreenSaverSlide () : base (String.Empty)
+ {
+ }
+
+ protected override void OnRealized ()
+ {
+ string env = Environment.GetEnvironmentVariable (ScreenSaverEnviroment);
+
+ if (env != null) {
+ try {
+ env = env.ToLower ();
+
+ if (env.StartsWith ("0x"))
+ env = env.Substring (2);
+
+ uint xid = UInt32.Parse (env, System.Globalization.NumberStyles.HexNumber);
+
+ GdkWindow = Gdk.Window.ForeignNew (xid);
+ Style.Attach (GdkWindow);
+ GdkWindow.Events = EventMask.ExposureMask
+ | EventMask.StructureMask
+ | EventMask.EnterNotifyMask
+ | EventMask.LeaveNotifyMask
+ | EventMask.FocusChangeMask;
+
+ Style.SetBackground (GdkWindow, Gtk.StateType.Normal);
+ GdkWindow.SetDecorations ((Gdk.WMDecoration) 0);
+ GdkWindow.UserData = this.Handle;
+ SetFlag (WidgetFlags.Realized);
+ SizeRequest ();
+ Gdk.Rectangle geom;
+ int depth;
+ GdkWindow.GetGeometry (out geom.X, out geom.Y, out geom.Width, out geom.Height, out depth);
+ SizeAllocate (new Gdk.Rectangle (geom.X, geom.Y, geom.Width, geom.Height));
+ Resize (geom.Width, geom.Height);
+ return;
+ } catch (System.Exception e) {
+ System.Console.WriteLine (e);
+ }
+ } else {
+ System.Console.WriteLine ("{0} not set, falling back to window", ScreenSaverEnviroment);
+ }
+
+ SetSizeRequest (640, 480);
+ base.OnRealized ();
+ }
+ }
+}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]