rpms/gnome-desktop/devel gnome-desktop-2.23.92-fade.patch, NONE, 1.1 gnome-desktop.spec, 1.163, 1.164
Ray Strode
rstrode at fedoraproject.org
Fri Sep 19 03:02:19 UTC 2008
Author: rstrode
Update of /cvs/pkgs/rpms/gnome-desktop/devel
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv32495
Modified Files:
gnome-desktop.spec
Added Files:
gnome-desktop-2.23.92-fade.patch
Log Message:
- Add new api for doing desktop background change transition
gnome-desktop-2.23.92-fade.patch:
--- NEW FILE gnome-desktop-2.23.92-fade.patch ---
diff -up gnome-desktop-2.23.92/libgnome-desktop/gnome-bg.c.fade gnome-desktop-2.23.92/libgnome-desktop/gnome-bg.c
--- gnome-desktop-2.23.92/libgnome-desktop/gnome-bg.c.fade 2008-09-08 15:43:13.000000000 -0400
+++ gnome-desktop-2.23.92/libgnome-desktop/gnome-bg.c 2008-09-18 22:34:56.000000000 -0400
@@ -37,11 +37,15 @@ Author: Soren Sandmann <sandmann at redhat.
#include <X11/Xlib.h>
#include <X11/Xatom.h>
+#include <cairo.h>
+#include <cairo-xlib.h>
+
#include <gconf/gconf-client.h>
#include <libgnomeui/libgnomeui.h>
#define GNOME_DESKTOP_USE_UNSTABLE_API
#include <libgnomeui/gnome-bg.h>
+#include <libgnomeui/gnome-bg-crossfade.h>
#define BG_KEY_DRAW_BACKGROUND GNOME_BG_KEY_DIR "/draw_background"
#define BG_KEY_PRIMARY_COLOR GNOME_BG_KEY_DIR "/primary_color"
@@ -1012,52 +1016,88 @@ gnome_bg_create_thumbnail (GnomeBG
}
-/* Set the root pixmap, and properties pointing to it. We
- * do this atomically with XGrabServer to make sure that
- * we won't leak the pixmap if somebody else it setting
- * it at the same time. (This assumes that they follow the
- * same conventions we do)
- */
-void
-gnome_bg_set_pixmap_as_root (GdkScreen *screen, GdkPixmap *pixmap)
+static GdkPixmap *
+gnome_bg_set_root_pixmap_id (GdkScreen *screen,
+ GdkPixmap *pixmap,
+ gboolean copy_old_root)
{
int result;
gint format;
gulong nitems;
gulong bytes_after;
- guchar *data_esetroot;
+ guchar *data;
Pixmap pixmap_id;
Atom type;
Display *display;
int screen_num;
-
- g_return_if_fail (screen != NULL);
- g_return_if_fail (pixmap != NULL);
+ GdkPixmap *old_root_pixmap;
screen_num = gdk_screen_get_number (screen);
-
- data_esetroot = NULL;
+ old_root_pixmap = NULL;
+ data = NULL;
display = GDK_DISPLAY_XDISPLAY (gdk_screen_get_display (screen));
XGrabServer (display);
+
+ if (copy_old_root) {
+ result = XGetWindowProperty (display,
+ RootWindow (display, screen_num),
+ gdk_x11_get_xatom_by_name ("_XROOTPMAP_ID"),
+ 0L, 1L, False, XA_PIXMAP,
+ &type, &format, &nitems, &bytes_after,
+ &data);
+
+ if (data != NULL) {
+ if (result == Success && type == XA_PIXMAP &&
+ format == 32 && nitems == 1) {
+ GdkPixmap *source_pixmap;
+ int width, height;
+ cairo_t *cr;
+ cairo_pattern_t *pattern;
+
+ source_pixmap = gdk_pixmap_foreign_new (*(Pixmap *) data);
+ gdk_drawable_set_colormap (source_pixmap, gdk_screen_get_default_colormap (screen));
+
+ width = gdk_screen_get_width (screen);
+ height = gdk_screen_get_width (screen);
+
+ old_root_pixmap = gdk_pixmap_new (source_pixmap, width, height, -1);
+
+ cr = gdk_cairo_create (old_root_pixmap);
+ gdk_cairo_set_source_pixmap (cr, source_pixmap, 0, 0);
+ pattern = cairo_get_source (cr);
+ cairo_pattern_set_extend (pattern, CAIRO_EXTEND_REPEAT);
+ cairo_paint (cr);
+
+ if (cairo_status (cr) != CAIRO_STATUS_SUCCESS) {
+ g_object_unref (old_root_pixmap);
+ old_root_pixmap = NULL;
+ }
+ cairo_destroy (cr);
+
+ g_object_unref (source_pixmap);
+ }
+ XFree (data);
+ }
+ }
result = XGetWindowProperty (
display, RootWindow (display, screen_num),
gdk_x11_get_xatom_by_name ("ESETROOT_PMAP_ID"),
0L, 1L, False, XA_PIXMAP,
&type, &format, &nitems, &bytes_after,
- &data_esetroot);
+ &data);
- if (data_esetroot != NULL) {
+ if (data!= NULL) {
if (result == Success && type == XA_PIXMAP &&
format == 32 &&
nitems == 1) {
gdk_error_trap_push ();
- XKillClient (display, *(Pixmap *)data_esetroot);
+ XKillClient (display, *(Pixmap *)data);
gdk_flush ();
gdk_error_trap_pop ();
}
- XFree (data_esetroot);
+ XFree (data);
}
pixmap_id = GDK_WINDOW_XWINDOW (pixmap);
@@ -1071,13 +1111,68 @@ gnome_bg_set_pixmap_as_root (GdkScreen *
32, PropModeReplace,
(guchar *) &pixmap_id, 1);
- XSetWindowBackgroundPixmap (display, RootWindow (display, screen_num),
- pixmap_id);
- XClearWindow (display, RootWindow (display, screen_num));
-
XUngrabServer (display);
XFlush (display);
+ return old_root_pixmap;
+}
+
+/* Set the root pixmap, and properties pointing to it. We
+ * do this atomically with XGrabServer to make sure that
+ * we won't leak the pixmap if somebody else it setting
+ * it at the same time. (This assumes that they follow the
+ * same conventions we do)
+ */
+void
+gnome_bg_set_pixmap_as_root (GdkScreen *screen, GdkPixmap *pixmap)
+{
+ Display *display;
+ int screen_num;
+
+ g_return_if_fail (screen != NULL);
+ g_return_if_fail (pixmap != NULL);
+
+ screen_num = gdk_screen_get_number (screen);
+ display = GDK_DISPLAY_XDISPLAY (gdk_screen_get_display (screen));
+
+ gnome_bg_set_root_pixmap_id (screen, pixmap, FALSE);
+
+ XSetWindowBackgroundPixmap (display, RootWindow (display, screen_num),
+ GDK_PIXMAP_XID (pixmap));
+ XClearWindow (display, RootWindow (display, screen_num));
+
+}
+
+GnomeBGCrossfade *
+gnome_bg_set_pixmap_as_root_with_crossfade (GdkScreen *screen,
+ GdkPixmap *pixmap,
+ GMainContext *context)
+{
+ Display *display;
+ GdkWindow *root_window;
+ GdkPixmap *old_pixmap;
+ int screen_num;
+ int width, height;
+ GnomeBGCrossfade *fade;
+
+ g_return_val_if_fail (screen != NULL, 0);
+ g_return_val_if_fail (pixmap != NULL, 0);
+
+ root_window = gdk_screen_get_root_window (screen);
+
+ width = gdk_screen_get_width (screen);
+ height = gdk_screen_get_height (screen);
+
+ fade = gnome_bg_crossfade_new (width, height);
+
+ old_pixmap = gnome_bg_set_root_pixmap_id (screen, pixmap, TRUE);
+
+ gnome_bg_crossfade_set_start_pixmap (fade, old_pixmap);
+ gnome_bg_crossfade_set_end_pixmap (fade, pixmap);
+
+ gnome_bg_crossfade_start (fade, root_window, context);
+
+ return fade;
}
diff -up /dev/null gnome-desktop-2.23.92/libgnome-desktop/gnome-bg-crossfade.c
--- /dev/null 2008-09-18 15:36:53.295258620 -0400
+++ gnome-desktop-2.23.92/libgnome-desktop/gnome-bg-crossfade.c 2008-09-18 22:34:56.000000000 -0400
@@ -0,0 +1,429 @@
+/* gnome-bg-crossfade.h - fade window background between two pixmaps
+ *
+ * Copyright (C) 2008 Red Hat, Inc.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public License
+ * as published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program 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 Library General Public
+ * License along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ *
+ * Author: Ray Strode <rstrode at redhat.com>
+*/
+
+#include <string.h>
+#include <math.h>
+#include <stdarg.h>
+
+#include <gio/gio.h>
+
+#include <gdk/gdk.h>
+#include <gdk/gdkx.h>
+#include <X11/Xlib.h>
+#include <X11/Xatom.h>
+
+#include <cairo.h>
+#include <cairo-xlib.h>
+
+#include <libgnomeui/libgnomeui.h>
+
+#define GNOME_DESKTOP_USE_UNSTABLE_API
+#include <libgnomeui/gnome-bg.h>
+#include "libgnomeui/gnome-bg-crossfade.h"
+
+struct _GnomeBGCrossfadePrivate
+{
+ GObject parent_instance;
+ GdkWindow *window;
+ int width;
+ int height;
+ GdkPixmap *fading_pixmap;
+ GdkPixmap *end_pixmap;
+ gdouble start_time;
+ guint timeout_id;
+};
+
+enum {
+ PROP_0,
+ PROP_WIDTH,
+ PROP_HEIGHT,
+};
+
+enum {
+ FINISHED,
+ NUMBER_OF_SIGNALS
+};
+
+static guint signals[NUMBER_OF_SIGNALS] = { 0 };
+
+G_DEFINE_TYPE (GnomeBGCrossfade, gnome_bg_crossfade, G_TYPE_OBJECT)
+#define GNOME_BG_CROSSFADE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o),\
+ GNOME_TYPE_BG_CROSSFADE,\
+ GnomeBGCrossfadePrivate))
+
+static void
+gnome_bg_crossfade_set_property (GObject *object,
+ guint property_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ GnomeBGCrossfade *fade;
+
+ g_assert (GNOME_IS_BG_CROSSFADE (object));
+
+ fade = GNOME_BG_CROSSFADE (object);
+
+ switch (property_id)
+ {
+ case PROP_WIDTH:
+ fade->priv->width = g_value_get_int (value);
+ break;
+ case PROP_HEIGHT:
+ fade->priv->height = g_value_get_int (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ break;
+ }
+}
+
+static void
+gnome_bg_crossfade_get_property (GObject *object,
+ guint property_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ GnomeBGCrossfade *fade;
+
+ g_assert (GNOME_IS_BG_CROSSFADE (object));
+
+ fade = GNOME_BG_CROSSFADE (object);
+
+ switch (property_id)
+ {
+ case PROP_WIDTH:
+ g_value_set_int (value, fade->priv->width);
+ break;
+ case PROP_HEIGHT:
+ g_value_set_int (value, fade->priv->height);
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ break;
+ }
+}
+
+static void
+gnome_bg_crossfade_finalize (GObject *object)
+{
+ GnomeBGCrossfade *fade;
+
+ fade = GNOME_BG_CROSSFADE (object);
+
+ if (fade->priv->fading_pixmap != NULL) {
+ g_object_unref (fade->priv->fading_pixmap);
+ fade->priv->fading_pixmap = NULL;
+ }
+
+ if (fade->priv->end_pixmap != NULL) {
+ g_object_unref (fade->priv->end_pixmap);
+ fade->priv->end_pixmap = NULL;
+ }
+
+ if (fade->priv->timeout_id != 0) {
+ g_source_remove (fade->priv->timeout_id);
+ fade->priv->timeout_id = 0;
+ }
+
+}
+
+static void
+gnome_bg_crossfade_class_init (GnomeBGCrossfadeClass *fade_class)
+{
+ GObjectClass *gobject_class;
+
+ gobject_class = G_OBJECT_CLASS (fade_class);
+
+ gobject_class->get_property = gnome_bg_crossfade_get_property;
+ gobject_class->set_property = gnome_bg_crossfade_set_property;
+ gobject_class->finalize = gnome_bg_crossfade_finalize;
+
+ g_object_class_install_property (gobject_class,
+ PROP_WIDTH,
+ g_param_spec_int ("width",
+ "Window Width",
+ "Width of window to fade",
+ 0, G_MAXINT, 0,
+ G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE));
+
+ g_object_class_install_property (gobject_class,
+ PROP_HEIGHT,
+ g_param_spec_int ("height", "Window Height",
+ "Height of window to fade on",
+ 0, G_MAXINT, 0,
+ G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE));
+ signals[FINISHED] = g_signal_new ("finished",
+ G_OBJECT_CLASS_TYPE (gobject_class),
+ G_SIGNAL_RUN_LAST, 0, NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+
+ g_type_class_add_private (gobject_class, sizeof (GnomeBGCrossfadePrivate));
+}
+
+static void
+gnome_bg_crossfade_init (GnomeBGCrossfade *fade)
+{
+ fade->priv = GNOME_BG_CROSSFADE_GET_PRIVATE (fade);
+}
+
+GnomeBGCrossfade *
+gnome_bg_crossfade_new (int width,
+ int height)
+{
+ GObject *object;
+
+ object = g_object_new (GNOME_TYPE_BG_CROSSFADE,
+ "width", width,
+ "height", height, NULL);
+
+ return (GnomeBGCrossfade *) object;
+}
+
+static GdkPixmap *
+copy_pixmap (GdkPixmap *pixmap,
+ int width,
+ int height)
+{
+ GdkPixmap *copy;
+ cairo_t *cr;
+
+ copy = gdk_pixmap_new (pixmap, width, height, pixmap == NULL? 24 : -1);
+
+ cr = gdk_cairo_create (copy);
+
+ if (pixmap != NULL) {
+ cairo_pattern_t *pattern;
+ gdk_cairo_set_source_pixmap (cr, pixmap, 0.0, 0.0);
+ pattern = cairo_get_source (cr);
+ cairo_pattern_set_extend (pattern, CAIRO_EXTEND_REPEAT);
+ } else {
+ GtkStyle *style;
+ style = gtk_widget_get_default_style ();
+ gdk_cairo_set_source_color (cr, &style->bg[GTK_STATE_NORMAL]);
+ }
+
+ cairo_paint (cr);
+
+ if (cairo_status (cr) != CAIRO_STATUS_SUCCESS) {
+ g_object_unref (copy);
+ copy = NULL;
+ }
+ cairo_destroy (cr);
+
+ return copy;
+}
+
+gboolean
+gnome_bg_crossfade_set_start_pixmap (GnomeBGCrossfade *fade,
+ GdkPixmap *pixmap)
+{
+ g_return_val_if_fail (GNOME_IS_BG_CROSSFADE (fade), FALSE);
+
+ if (fade->priv->fading_pixmap != NULL) {
+ g_object_unref (fade->priv->fading_pixmap);
+ fade->priv->fading_pixmap = NULL;
+ }
+
+ fade->priv->fading_pixmap = copy_pixmap (pixmap,
+ fade->priv->width,
+ fade->priv->height);
+
+ return fade->priv->fading_pixmap != NULL;
+}
+
+gboolean
+gnome_bg_crossfade_set_end_pixmap (GnomeBGCrossfade *fade,
+ GdkPixmap *pixmap)
+{
+ g_return_val_if_fail (GNOME_IS_BG_CROSSFADE (fade), FALSE);
+
+ if (fade->priv->end_pixmap != NULL) {
+ g_object_unref (fade->priv->end_pixmap);
+ fade->priv->end_pixmap = NULL;
+ }
+
+ fade->priv->end_pixmap = copy_pixmap (pixmap,
+ fade->priv->width,
+ fade->priv->height);
+
+ return fade->priv->end_pixmap != NULL;
+}
+
+static gdouble
+get_current_time (void)
+{
+ const double microseconds_per_second = 1000000.0;
+ double timestamp;
+ GTimeVal now;
+
+ g_get_current_time (&now);
+
+ timestamp = ((microseconds_per_second * now.tv_sec) + now.tv_usec) /
+ microseconds_per_second;
+
+ return timestamp;
+}
+
+static gboolean
+animations_are_disabled (GnomeBGCrossfade *fade)
+{
+ GtkSettings *settings;
+ GdkScreen *screen;
+ gboolean are_enabled;
+
+ if (fade->priv->window == NULL) {
+ return FALSE;
+ }
+
+ screen = gdk_drawable_get_screen (fade->priv->window);
+
+ settings = gtk_settings_get_for_screen (screen);
+
+ g_object_get (settings, "gtk-enable-animatins", &are_enabled, NULL);
+
+ return !are_enabled;
+}
+
+static gboolean
+on_tick (GnomeBGCrossfade *fade)
+{
+ gdouble now, percent_done;
+ cairo_t *cr;
+
+ g_return_val_if_fail (GNOME_IS_BG_CROSSFADE (fade), FALSE);
+
+ now = get_current_time ();
+
+ percent_done = (now - fade->priv->start_time) / .5;
+
+ percent_done = CLAMP (percent_done, 0.0, 1.0);
+
+ if (fade->priv->fading_pixmap == NULL) {
+ return FALSE;
+ }
+
+ if (animations_are_disabled (fade)) {
+ return FALSE;
+ }
+
+ /* We accumulate the results in place for performance reasons.
+ *
+ * This means 1) The fade is exponential, not linear (looks good!)
+ * 2) The rate of fade is not independent of frame rate. Slower machines
+ * will get a slower fade (but never longer than .5 seconds), and
+ * even the fastest machines will get *some* fade because the framerate
+ * is capped.
+ */
+
+ cr = gdk_cairo_create (fade->priv->fading_pixmap);
+
+ gdk_cairo_set_source_pixmap (cr, fade->priv->end_pixmap,
+ 0.0, 0.0);
+ cairo_paint_with_alpha (cr, percent_done);
+
+ if (cairo_status (cr) == CAIRO_STATUS_SUCCESS) {
+ if (GDK_WINDOW_TYPE (fade->priv->window) == GDK_WINDOW_FOREIGN ||
+ GDK_WINDOW_TYPE (fade->priv->window) == GDK_WINDOW_ROOT) {
+ GdkDisplay *display;
+
+ display = gdk_drawable_get_display (fade->priv->window);
+ gdk_window_clear (fade->priv->window);
+ } else {
+ gdk_window_invalidate_rect (fade->priv->window, NULL, FALSE);
+ }
+ }
+ cairo_destroy (cr);
+
+ return percent_done <= .99;
+}
+
+static void
+on_finished (GnomeBGCrossfade *fade)
+{
+ if (fade->priv->end_pixmap != NULL) {
+ gdk_window_set_back_pixmap (fade->priv->window,
+ fade->priv->end_pixmap,
+ FALSE);
+ }
+
+ if (fade->priv->fading_pixmap != NULL) {
+ g_object_unref (fade->priv->fading_pixmap);
+ fade->priv->fading_pixmap = NULL;
+ }
+
+ if (fade->priv->end_pixmap != NULL) {
+ g_object_unref (fade->priv->end_pixmap);
+ fade->priv->end_pixmap = NULL;
+ }
+
+ fade->priv->timeout_id = 0;
+
+ g_signal_emit (fade, signals[FINISHED], 0);
+}
+
+void
+gnome_bg_crossfade_start (GnomeBGCrossfade *fade,
+ GdkWindow *window,
+ GMainContext *context)
+{
+ GSource *source;
+
+ g_return_if_fail (GNOME_IS_BG_CROSSFADE (fade));
+ g_return_if_fail (fade->priv->fading_pixmap != NULL);
+ g_return_if_fail (fade->priv->end_pixmap != NULL);
+ g_return_if_fail (!gnome_bg_crossfade_is_started (fade));
+
+ fade->priv->start_time = get_current_time ();
+
+ source = g_timeout_source_new (1000 / 30.0);
+ g_source_set_callback (source,
+ (GSourceFunc) on_tick,
+ fade,
+ (GDestroyNotify) on_finished);
+ fade->priv->timeout_id = g_source_attach (source, context);
+ g_source_unref (source);
+
+ fade->priv->window = window;
+ gdk_window_set_back_pixmap (fade->priv->window,
+ fade->priv->fading_pixmap,
+ FALSE);
+}
+
+gboolean
+gnome_bg_crossfade_is_started (GnomeBGCrossfade *fade)
+{
+ g_return_val_if_fail (GNOME_IS_BG_CROSSFADE (fade), FALSE);
+
+ return fade->priv->timeout_id != 0;
+}
+
+void
+gnome_bg_crossfade_stop (GnomeBGCrossfade *fade)
+{
+ g_return_if_fail (GNOME_IS_BG_CROSSFADE (fade));
+
+ if (fade->priv->timeout_id != 0) {
+ g_source_remove (fade->priv->timeout_id);
+ }
+}
diff -up /dev/null gnome-desktop-2.23.92/libgnome-desktop/libgnomeui/gnome-bg-crossfade.h
--- /dev/null 2008-09-18 15:36:53.295258620 -0400
+++ gnome-desktop-2.23.92/libgnome-desktop/libgnomeui/gnome-bg-crossfade.h 2008-09-18 22:34:56.000000000 -0400
@@ -0,0 +1,79 @@
+/* gnome-bg-crossfade.h - fade window background between two pixmaps
+
+ Copyright 2008, Red Hat, Inc.
+
+ This file is part of the Gnome Library.
+
+ The Gnome Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ The Gnome 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 Library General Public
+ License along with the Gnome Library; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+
+ Author: Ray Strode <rstrode at redhat.com>
+*/
+
+#ifndef __GNOME_BG_CROSSFADE_H__
+#define __GNOME_BG_CROSSFADE_H__
+
+#ifndef GNOME_DESKTOP_USE_UNSTABLE_API
+#error GnomeBGCrossfade is unstable API. You must define GNOME_DESKTOP_USE_UNSTABLE_API before including gnome-bg-crossfade.h
+#endif
+
+#include <libgnomeui/libgnomeui.h>
+#include <gdk/gdk.h>
+
+G_BEGIN_DECLS
+
+#define GNOME_TYPE_BG_CROSSFADE (gnome_bg_crossfade_get_type ())
+#define GNOME_BG_CROSSFADE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GNOME_TYPE_BG_CROSSFADE, GnomeBGCrossfade))
+#define GNOME_BG_CROSSFADE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GNOME_TYPE_BG_CROSSFADE, GnomeBGCrossfadeClass))
+#define GNOME_IS_BG_CROSSFADE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GNOME_TYPE_BG_CROSSFADE))
+#define GNOME_IS_BG_CROSSFADE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GNOME_TYPE_BG_CROSSFADE))
+#define GNOME_BG_CROSSFADE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GNOME_TYPE_BG_CROSSFADE, GnomeBGCrossfadeClass))
+
+typedef struct _GnomeBGCrossfadePrivate GnomeBGCrossfadePrivate;
+typedef struct _GnomeBGCrossfade GnomeBGCrossfade;
+typedef struct _GnomeBGCrossfadeClass GnomeBGCrossfadeClass;
+
+struct _GnomeBGCrossfade
+{
+ GObject parent_object;
+
+ GnomeBGCrossfadePrivate *priv;
+};
+
+struct _GnomeBGCrossfadeClass
+{
+ GObjectClass parent_class;
+
+ void (* finished) (GnomeBGCrossfade *fade);
+};
+
+GType gnome_bg_crossfade_get_type (void);
+GnomeBGCrossfade *gnome_bg_crossfade_new (int width, int height);
+gboolean gnome_bg_crossfade_set_start_pixmap (GnomeBGCrossfade *fade,
+ GdkPixmap *pixmap);
+
+gboolean gnome_bg_crossfade_set_end_pixmap (GnomeBGCrossfade *fade,
+ GdkPixmap *pixmap);
+void gnome_bg_crossfade_set_context (GnomeBGCrossfade *fade,
+ GMainContext *context);
+void gnome_bg_crossfade_start (GnomeBGCrossfade *fade,
+ GdkWindow *window,
+ GMainContext *context);
+gboolean gnome_bg_crossfade_is_started (GnomeBGCrossfade *fade);
+void gnome_bg_crossfade_stop (GnomeBGCrossfade *fade);
+
+G_END_DECLS
+
+#endif
diff -up gnome-desktop-2.23.92/libgnome-desktop/libgnomeui/gnome-bg.h.fade gnome-desktop-2.23.92/libgnome-desktop/libgnomeui/gnome-bg.h
--- gnome-desktop-2.23.92/libgnome-desktop/libgnomeui/gnome-bg.h.fade 2008-09-18 22:38:29.000000000 -0400
+++ gnome-desktop-2.23.92/libgnome-desktop/libgnomeui/gnome-bg.h 2008-09-18 22:39:31.000000000 -0400
@@ -33,6 +33,8 @@
#include <gdk/gdk.h>
#include <gconf/gconf-client.h>
+#include <libgnomeui/gnome-bg-crossfade.h>
+
G_BEGIN_DECLS
#define GNOME_TYPE_BG (gnome_bg_get_type ())
@@ -109,6 +111,9 @@ gboolean gnome_bg_changes_with_s
void gnome_bg_set_pixmap_as_root (GdkScreen *screen,
GdkPixmap *pixmap);
+GnomeBGCrossfade *gnome_bg_set_pixmap_as_root_with_crossfade (GdkScreen *screen,
+ GdkPixmap *pixmap,
+ GMainContext *context);
G_END_DECLS
diff -up gnome-desktop-2.23.92/libgnome-desktop/libgnomeui/Makefile.am.fade gnome-desktop-2.23.92/libgnome-desktop/libgnomeui/Makefile.am
--- gnome-desktop-2.23.92/libgnome-desktop/libgnomeui/Makefile.am.fade 2008-09-08 15:43:13.000000000 -0400
+++ gnome-desktop-2.23.92/libgnome-desktop/libgnomeui/Makefile.am 2008-09-18 22:34:56.000000000 -0400
@@ -3,6 +3,7 @@ libgnomeui_desktop_HEADERS = \
gnome-ditem-edit.h \
gnome-hint.h \
gnome-bg.h \
+ gnome-bg-crossfade.h \
gnome-rr.h \
gnome-rr-config.h \
gnome-rr-labeler.h
diff -up gnome-desktop-2.23.92/libgnome-desktop/Makefile.am.fade gnome-desktop-2.23.92/libgnome-desktop/Makefile.am
--- gnome-desktop-2.23.92/libgnome-desktop/Makefile.am.fade 2008-09-08 15:43:13.000000000 -0400
+++ gnome-desktop-2.23.92/libgnome-desktop/Makefile.am 2008-09-18 22:34:56.000000000 -0400
@@ -21,6 +21,7 @@ libgnome_desktop_2_la_SOURCES = \
gnome-ditem-edit.c \
gnome-hint.c \
gnome-bg.c \
+ gnome-bg-crossfade.c \
display-name.c \
gnome-rr.c \
gnome-rr-config.c \
Index: gnome-desktop.spec
===================================================================
RCS file: /cvs/pkgs/rpms/gnome-desktop/devel/gnome-desktop.spec,v
retrieving revision 1.163
retrieving revision 1.164
diff -u -r1.163 -r1.164
--- gnome-desktop.spec 8 Sep 2008 23:49:27 -0000 1.163
+++ gnome-desktop.spec 19 Sep 2008 03:01:48 -0000 1.164
@@ -12,7 +12,7 @@
Summary: Package containing code shared among gnome-panel, gnome-session, nautilus, etc
Name: gnome-desktop
Version: 2.23.92
-Release: 1%{?dist}
+Release: 2%{?dist}
URL: http://www.gnome.org
Source0: http://download.gnome.org/sources/gnome-desktop/2.23/%{name}-%{version}.tar.bz2
License: GPLv2+ and LGPLv2+
@@ -22,6 +22,7 @@
# http://bugzilla.gnome.org/show_bug.cgi?id=549960
Patch2: rr-leaks.patch
Patch3: clone-modes.patch
+Patch4: gnome-desktop-2.23.92-fade.patch
Requires: redhat-menus
Requires: pycairo
@@ -76,8 +77,10 @@
%setup -q
%patch2 -p1 -b .rr-leaks
%patch3 -p0 -b .clone-modes
+%patch4 -p1 -b .fade
%build
+autoreconf
%configure --with-gnome-distributor="Red Hat, Inc" --disable-scrollkeeper
make %{?_smp_mflags}
@@ -121,6 +124,9 @@
%doc %{_datadir}/gtk-doc/html/gnome-desktop/
%changelog
+* Thu Sep 18 2008 Ray Strode <rstrode at redhat.com> - 2.23.92-2
+- Add new api for doing desktop background change transition
+
* Mon Sep 8 2008 Matthias Clasen <mclasen at redhat.com> - 2.23.92-1
- Update to 2.23.92
More information about the fedora-extras-commits
mailing list