rpms/gnome-screensaver/devel ask-to-die.patch, NONE, 1.1 multihead-issues.patch, NONE, 1.1 xrandr-gamma.patch, NONE, 1.1 gnome-screensaver.spec, 1.228, 1.229
Matthias Clasen
mclasen at fedoraproject.org
Mon Nov 2 04:52:16 UTC 2009
- Previous message (by thread): rpms/gnome-screensaver/F-12 0001-Disable-the-password-entry-when-using-non-password-a.patch, 1.1, NONE button-images.patch, 1.1, NONE fix-gtkbuilder-conversion.patch, 1.1, NONE gnome-screensaver-idle-delay.patch, 1.1, NONE use-gtkbuilder.patch, 1.1, NONE
- Next message (by thread): rpms/gtk2-engines/devel tooltips.patch, NONE, 1.1 gtk2-engines.spec, 1.116, 1.117 sources, 1.67, 1.68
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Author: mclasen
Update of /cvs/pkgs/rpms/gnome-screensaver/devel
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv29339
Modified Files:
gnome-screensaver.spec
Added Files:
ask-to-die.patch multihead-issues.patch xrandr-gamma.patch
Log Message:
Copy F12 work over
ask-to-die.patch:
gnome-screensaver-dialog.c | 22 +++++++++++++++++++++-
gs-window-x11.c | 24 ++++++++++++++++++++++++
2 files changed, 45 insertions(+), 1 deletion(-)
--- NEW FILE ask-to-die.patch ---
diff -Nur -x '*.orig' -x '*~' gnome-screensaver-2.28.0/src/gnome-screensaver-dialog.c gnome-screensaver-2.28.0.new/src/gnome-screensaver-dialog.c
--- gnome-screensaver-2.28.0/src/gnome-screensaver-dialog.c 2009-08-26 17:06:12.000000000 +0100
+++ gnome-screensaver-2.28.0.new/src/gnome-screensaver-dialog.c 2009-10-18 22:00:14.563679981 +0100
@@ -29,6 +29,7 @@
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
+#include <signal.h>
#include <glib/gi18n.h>
#include <gdk/gdkx.h>
@@ -326,6 +327,21 @@
}
static gboolean
+response_request_quit (void)
+{
+ printf ("REQUEST QUIT\n");
+ fflush (stdout);
+ return FALSE;
+}
+
+static gboolean
+quit_timeout_cb (gpointer data)
+{
+ gtk_main_quit ();
+ return FALSE;
+}
+
+static gboolean
auth_check_idle (GSLockPlug *plug)
{
gboolean res;
@@ -347,7 +363,11 @@
} else {
gs_debug ("Authentication failed, quitting (max failures)");
again = FALSE;
- gtk_main_quit ();
+ /* Don't quit immediately, but rather request that gnome-screensaver
+ * terminates us after it has finished the dialog shake. Time out
+ * after 5 seconds and quit anyway if this doesn't happen though */
+ g_idle_add ((GSourceFunc)response_request_quit, NULL);
+ g_timeout_add (5000, (GSourceFunc)quit_timeout_cb, NULL);
}
}
diff -Nur -x '*.orig' -x '*~' gnome-screensaver-2.28.0/src/gs-window-x11.c gnome-screensaver-2.28.0.new/src/gs-window-x11.c
--- gnome-screensaver-2.28.0/src/gs-window-x11.c 2009-10-18 21:53:27.913386916 +0100
+++ gnome-screensaver-2.28.0.new/src/gs-window-x11.c 2009-10-18 21:53:28.835892015 +0100
@@ -91,6 +91,8 @@
gint lock_pid;
gint lock_watch_id;
gint dialog_response;
+ gboolean dialog_quit_requested;
+ gboolean dialog_shake_in_progress;
gint keyboard_pid;
gint keyboard_watch_id;
@@ -1390,6 +1392,16 @@
remove_key_events (window);
}
+static void
+maybe_kill_dialog (GSWindow *window)
+{
+ if (!window->priv->dialog_shake_in_progress
+ && window->priv->dialog_quit_requested
+ && window->priv->lock_pid > 0) {
+ kill (window->priv->lock_pid, SIGTERM);
+ }
+}
+
/* very rudimentary animation for indicating an auth failure */
static void
shake_dialog (GSWindow *window)
@@ -1398,6 +1410,8 @@
guint left;
guint right;
+ window->priv->dialog_shake_in_progress = TRUE;
+
for (i = 0; i < 9; i++) {
if (i % 2 == 0) {
left = 30;
@@ -1422,6 +1436,9 @@
g_usleep (10000);
}
+
+ window->priv->dialog_shake_in_progress = FALSE;
+ maybe_kill_dialog (window);
}
static gboolean
@@ -1464,6 +1481,10 @@
window->priv->dialog_response = DIALOG_RESPONSE_CANCEL;
}
finished = TRUE;
+ } else if (strstr (line, "REQUEST QUIT") != NULL) {
+ gs_debug ("Got request for quit");
+ window->priv->dialog_quit_requested = TRUE;
+ maybe_kill_dialog (window);
}
break;
case G_IO_STATUS_EOF:
@@ -1577,6 +1598,9 @@
set_invisible_cursor (GTK_WIDGET (window)->window, FALSE);
+ window->priv->dialog_quit_requested = FALSE;
+ window->priv->dialog_shake_in_progress = FALSE;
+
result = spawn_on_window (window,
command->str,
&window->priv->lock_pid,
multihead-issues.patch:
gs-manager.c | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)
--- NEW FILE multihead-issues.patch ---
diff -up gnome-screensaver-2.28.0/src/gs-manager.c.multihead-issues gnome-screensaver-2.28.0/src/gs-manager.c
--- gnome-screensaver-2.28.0/src/gs-manager.c.multihead-issues 2009-08-19 19:19:14.000000000 -0400
+++ gnome-screensaver-2.28.0/src/gs-manager.c 2009-10-23 19:48:08.306135389 -0400
@@ -1450,6 +1450,9 @@ gs_manager_create_window_for_monitor (GS
connect_window_signals (manager, window);
manager->priv->windows = g_slist_append (manager->priv->windows, window);
+
+ if (manager->priv->active && !manager->priv->fading)
+ gtk_widget_show (window);
}
static void
@@ -1471,21 +1474,25 @@ on_screen_monitors_changed (GdkScreen *s
if (n_monitors > n_windows) {
/* add more windows */
for (i = n_windows; i < n_monitors; i++) {
- gs_manager_create_window_for_monitor (manager, screen, i - 1);
+ gs_manager_create_window_for_monitor (manager, screen, i);
}
} else {
/* remove the extra windows */
- for (l = manager->priv->windows; l != NULL; l = l->next) {
+ l = manager->priv->windows;
+ while (l != NULL) {
GdkScreen *this_screen;
int this_monitor;
+ GSList *next = l->next;
this_screen = gs_window_get_screen (GS_WINDOW (l->data));
this_monitor = gs_window_get_monitor (GS_WINDOW (l->data));
if (this_screen == screen && this_monitor >= n_monitors) {
manager_maybe_stop_job_for_window (manager, GS_WINDOW (l->data));
+ g_hash_table_remove (manager->priv->jobs, l->data);
gs_window_destroy (GS_WINDOW (l->data));
manager->priv->windows = g_slist_delete_link (manager->priv->windows, l);
}
+ l = next;
}
}
}
xrandr-gamma.patch:
gs-fade.c | 570 +++++++++++++++++++++++++++++++++++++++++---------------------
1 file changed, 384 insertions(+), 186 deletions(-)
--- NEW FILE xrandr-gamma.patch ---
diff -up gnome-screensaver-2.28.0/src/gs-fade.c.xrandr-gamma gnome-screensaver-2.28.0/src/gs-fade.c
--- gnome-screensaver-2.28.0/src/gs-fade.c.xrandr-gamma 2009-08-19 19:19:14.000000000 -0400
+++ gnome-screensaver-2.28.0/src/gs-fade.c 2009-10-22 14:04:06.740384504 -0400
@@ -40,22 +40,19 @@
#include "gs-fade.h"
#include "gs-debug.h"
+#define GNOME_DESKTOP_USE_UNSTABLE_API
+
+#include "libgnomeui/gnome-rr.h"
+
/* XFree86 4.x+ Gamma fading */
+
#ifdef HAVE_XF86VMODE_GAMMA
#include <X11/extensions/xf86vmode.h>
#define XF86_MIN_GAMMA 0.1
-typedef struct {
- XF86VidModeGamma vmg;
- int size;
- unsigned short *r;
- unsigned short *g;
- unsigned short *b;
-} xf86_gamma_info;
-
#endif /* HAVE_XF86VMODE_GAMMA */
static void gs_fade_class_init (GSFadeClass *klass);
@@ -64,6 +61,31 @@ static void gs_fade_finalize (GObj
#define GS_FADE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GS_TYPE_FADE, GSFadePrivate))
+struct GSGammaInfo {
+ int size;
+ unsigned short *r;
+ unsigned short *g;
+ unsigned short *b;
+};
+
+struct GSFadeScreenPrivate
+{
+ int fade_type;
+ int num_ramps;
+ /* one per crtc in randr mode */
+ struct GSGammaInfo *info;
+ /* one per screen in theory */
+ GnomeRRScreen *rrscreen;
+#ifdef HAVE_XF86VMODE_GAMMA
+ /* one per screen also */
+ XF86VidModeGamma vmg;
+#endif /* HAVE_XF86VMODE_GAMMA */
+ gboolean (*fade_setup) (GSFade *fade, int screen);
+ gboolean (*fade_set_alpha_gamma) (GSFade *fade,
+ int screen, gdouble alpha);
+ void (*fade_finish) (GSFade *fade, int screen);
+};
+
struct GSFadePrivate
{
guint enabled : 1;
@@ -78,14 +100,9 @@ struct GSFadePrivate
gdouble alpha_per_iter;
gdouble current_alpha;
- int fade_type;
-
int num_screens;
-#ifdef HAVE_XF86VMODE_GAMMA
- xf86_gamma_info *gamma_info;
-#endif /* HAVE_XF86VMODE_GAMMA */
-
+ struct GSFadeScreenPrivate *screen_priv;
};
enum {
@@ -96,7 +113,8 @@ enum {
enum {
FADE_TYPE_NONE,
FADE_TYPE_GAMMA_NUMBER,
- FADE_TYPE_GAMMA_RAMP
+ FADE_TYPE_GAMMA_RAMP,
+ FADE_TYPE_XRANDR,
};
static guint signals [LAST_SIGNAL] = { 0, };
@@ -149,10 +167,16 @@ safe_XF86VidModeQueryVersion (Display *d
static gboolean
xf86_whack_gamma (int screen,
- xf86_gamma_info *info,
+ struct GSFadeScreenPrivate *screen_priv,
float ratio)
{
Bool status;
+ struct GSGammaInfo *gamma_info;
+
+ gamma_info = screen_priv->info;
+
+ if (!gamma_info)
+ return FALSE;
if (ratio < 0) {
ratio = 0;
@@ -161,14 +185,14 @@ xf86_whack_gamma (int scree
ratio = 1;
}
- if (info->size == 0) {
+ if (gamma_info->size == 0) {
/* we only have a gamma number, not a ramp. */
XF86VidModeGamma g2;
- g2.red = info->vmg.red * ratio;
- g2.green = info->vmg.green * ratio;
- g2.blue = info->vmg.blue * ratio;
+ g2.red = screen_priv->vmg.red * ratio;
+ g2.green = screen_priv->vmg.green * ratio;
+ g2.blue = screen_priv->vmg.blue * ratio;
if (g2.red < XF86_MIN_GAMMA) {
g2.red = XF86_MIN_GAMMA;
@@ -187,21 +211,21 @@ xf86_whack_gamma (int scree
unsigned short *r, *g, *b;
int i;
- r = g_new0 (unsigned short, info->size);
- g = g_new0 (unsigned short, info->size);
- b = g_new0 (unsigned short, info->size);
-
- for (i = 0; i < info->size; i++) {
- r[i] = info->r[i] * ratio;
- g[i] = info->g[i] * ratio;
- b[i] = info->b[i] * ratio;
+ r = g_new0 (unsigned short, gamma_info->size);
+ g = g_new0 (unsigned short, gamma_info->size);
+ b = g_new0 (unsigned short, gamma_info->size);
+
+ for (i = 0; i < gamma_info->size; i++) {
+ r[i] = gamma_info->r[i] * ratio;
+ g[i] = gamma_info->g[i] * ratio;
+ b[i] = gamma_info->b[i] * ratio;
}
- status = XF86VidModeSetGammaRamp (GDK_DISPLAY (), screen, info->size, r, g, b);
+ status = XF86VidModeSetGammaRamp (GDK_DISPLAY (), screen, gamma_info->size, r, g, b);
- free (r);
- free (g);
- free (b);
+ g_free (r);
+ g_free (g);
+ g_free (b);
# else /* !HAVE_XF86VMODE_GAMMA_RAMP */
abort ();
@@ -223,44 +247,6 @@ xf86_whack_gamma (int scree
# define XF86_VIDMODE_GAMMA_RAMP_MIN_MAJOR 2
# define XF86_VIDMODE_GAMMA_RAMP_MIN_MINOR 1
-static int
-check_gamma_extension (void)
-{
-#ifdef HAVE_XF86VMODE_GAMMA
- int event;
- int error;
- int major;
- int minor;
- gboolean res;
-
- res = XF86VidModeQueryExtension (GDK_DISPLAY (), &event, &error);
- if (! res) {
- return FADE_TYPE_NONE; /* display doesn't have the extension. */
- }
-
- res = safe_XF86VidModeQueryVersion (GDK_DISPLAY (), &major, &minor);
- if (! res) {
- return FADE_TYPE_NONE; /* unable to get version number? */
- }
-
- if (major < XF86_VIDMODE_GAMMA_MIN_MAJOR ||
- (major == XF86_VIDMODE_GAMMA_MIN_MAJOR &&
- minor < XF86_VIDMODE_GAMMA_MIN_MINOR)) {
- return FADE_TYPE_NONE; /* extension is too old for gamma. */
- }
-
- if (major < XF86_VIDMODE_GAMMA_RAMP_MIN_MAJOR ||
- (major == XF86_VIDMODE_GAMMA_RAMP_MIN_MAJOR &&
- minor < XF86_VIDMODE_GAMMA_RAMP_MIN_MINOR)) {
- return FADE_TYPE_GAMMA_NUMBER; /* extension is too old for gamma ramps. */
- }
-
- /* Copacetic */
- return FADE_TYPE_GAMMA_RAMP;
-#else
- return FADE_TYPE_NONE;
-#endif /* HAVE_XF86VMODE_GAMMA */
-}
gboolean
gs_fade_get_enabled (GSFade *fade)
@@ -282,86 +268,80 @@ gs_fade_set_enabled (GSFade *fade,
}
static gboolean
-gamma_info_init (GSFade *fade)
+gamma_fade_setup (GSFade *fade, int screen_idx)
{
#ifdef HAVE_XF86VMODE_GAMMA
- int screen;
- xf86_gamma_info *info;
gboolean res;
+ struct GSFadeScreenPrivate *screen_priv;
+
+ screen_priv = &fade->priv->screen_priv[screen_idx];
+
+ if (screen_priv->info)
+ return TRUE;
# ifndef HAVE_XF86VMODE_GAMMA_RAMP
- if (FADE_TYPE_GAMMA_RAMP == fade->priv->fade_type) {
+ if (FADE_TYPE_GAMMA_RAMP == screen_priv->fade_type) {
/* server is newer than client! */
- fade->priv->fade_type = FADE_TYPE_GAMMA_NUMBER;
+ screen_priv->fade_type = FADE_TYPE_GAMMA_NUMBER;
}
# endif
- if (fade->priv->gamma_info != NULL) {
- return TRUE;
- }
-
- info = g_new0 (xf86_gamma_info, fade->priv->num_screens);
- fade->priv->gamma_info = info;
-
- /* Get the current gamma maps for all screens.
- Bug out and return -1 if we can't get them for some screen.
- */
- for (screen = 0; screen < fade->priv->num_screens; screen++) {
-
# ifdef HAVE_XF86VMODE_GAMMA_RAMP
+
+ screen_priv->info = g_new0(struct GSGammaInfo, 1);
+ screen_priv->num_ramps = 1;
+
+ if (FADE_TYPE_GAMMA_RAMP == screen_priv->fade_type) {
+ /* have ramps */
+
+ res = XF86VidModeGetGammaRampSize (GDK_DISPLAY (), screen_idx, &screen_priv->info->size);
+ if (!res || screen_priv->info->size <= 0) {
+ screen_priv->fade_type = FADE_TYPE_GAMMA_NUMBER;
+ goto test_number;
+ }
- if (FADE_TYPE_GAMMA_RAMP == fade->priv->fade_type) {
- /* have ramps */
+ screen_priv->info->r = g_new0 (unsigned short, screen_priv->info->size);
+ screen_priv->info->g = g_new0 (unsigned short, screen_priv->info->size);
+ screen_priv->info->b = g_new0 (unsigned short, screen_priv->info->size);
+
+ if (! (screen_priv->info->r && screen_priv->info->g && screen_priv->info->b)) {
+ screen_priv->fade_type = FADE_TYPE_GAMMA_NUMBER;
+ goto test_number;
+ }
- res = XF86VidModeGetGammaRampSize (GDK_DISPLAY (), screen, &info [screen].size);
- if (! res || info [screen].size <= 0) {
- fade->priv->fade_type = FADE_TYPE_GAMMA_NUMBER;
- goto test_number;
- }
-
- info [screen].r = g_new0 (unsigned short, info[screen].size);
- info [screen].g = g_new0 (unsigned short, info[screen].size);
- info [screen].b = g_new0 (unsigned short, info[screen].size);
-
- if (! (info [screen].r && info [screen].g && info [screen].b)) {
- fade->priv->fade_type = FADE_TYPE_GAMMA_NUMBER;
- goto test_number;
- }
-
- res = XF86VidModeGetGammaRamp (GDK_DISPLAY (),
- screen,
- info [screen].size,
- info [screen].r,
- info [screen].g,
- info [screen].b);
- if (! res) {
- fade->priv->fade_type = FADE_TYPE_GAMMA_NUMBER;
- goto test_number;
- }
- gs_debug ("Initialized gamma ramp fade");
+ res = XF86VidModeGetGammaRamp (GDK_DISPLAY (),
+ screen_idx,
+ screen_priv->info->size,
+ screen_priv->info->r,
+ screen_priv->info->g,
+ screen_priv->info->b);
+ if (! res) {
+ screen_priv->fade_type = FADE_TYPE_GAMMA_NUMBER;
+ goto test_number;
}
+ gs_debug ("Initialized gamma ramp fade");
+ }
# endif /* HAVE_XF86VMODE_GAMMA_RAMP */
test_number:
- if (FADE_TYPE_GAMMA_NUMBER == fade->priv->fade_type) {
- /* only have gamma parameter, not ramps. */
-
- res = XF86VidModeGetGamma (GDK_DISPLAY (), screen, &info [screen].vmg);
- if (! res) {
- fade->priv->fade_type = FADE_TYPE_NONE;
- goto test_none;
- }
- gs_debug ("Initialized gamma fade for screen %d: %f %f %f",
- screen,
- info [screen].vmg.red,
- info [screen].vmg.green,
- info [screen].vmg.blue);
+ if (FADE_TYPE_GAMMA_NUMBER == screen_priv->fade_type) {
+ /* only have gamma parameter, not ramps. */
+
+ res = XF86VidModeGetGamma (GDK_DISPLAY (), screen_idx, &screen_priv->vmg);
+ if (! res) {
+ screen_priv->fade_type = FADE_TYPE_NONE;
+ goto test_none;
}
-
+ gs_debug ("Initialized gamma fade for screen %d: %f %f %f",
+ screen_idx,
+ screen_priv->vmg.red,
+ screen_priv->vmg.green,
+ screen_priv->vmg.blue);
+ }
+
test_none:
- if (FADE_TYPE_NONE == fade->priv->fade_type) {
- goto FAIL;
- }
+ if (FADE_TYPE_NONE == screen_priv->fade_type) {
+ goto FAIL;
}
return TRUE;
@@ -369,76 +349,263 @@ gamma_info_init (GSFade *fade)
#endif /* HAVE_XF86VMODE_GAMMA */
-return FALSE;
+ return FALSE;
}
static void
-gamma_info_free (GSFade *fade)
+screen_fade_finish (GSFade *fade, int screen_idx)
{
-#ifdef HAVE_XF86VMODE_GAMMA
+ struct GSFadeScreenPrivate *screen_priv;
+ int i;
+ screen_priv = &fade->priv->screen_priv[screen_idx];
- if (fade->priv->gamma_info) {
- int screen;
+ if (!screen_priv->info)
+ return;
- for (screen = 0; screen < fade->priv->num_screens; screen++) {
- if (fade->priv->gamma_info [screen].r) {
- g_free (fade->priv->gamma_info[screen].r);
- }
- if (fade->priv->gamma_info [screen].g) {
- g_free (fade->priv->gamma_info[screen].g);
- }
- if (fade->priv->gamma_info [screen].b) {
- g_free (fade->priv->gamma_info[screen].b);
- }
- }
+ for (i = 0; i < screen_priv->num_ramps; i++) {
+ if (screen_priv->info[i].r)
+ g_free (screen_priv->info[i].r);
+ if (screen_priv->info[i].g)
+ g_free (screen_priv->info[i].g);
+ if (screen_priv->info[i].b)
+ g_free (screen_priv->info[i].b);
+ }
+
+ g_free (screen_priv->info);
+ screen_priv->info = NULL;
+ screen_priv->num_ramps = 0;
+}
- g_free (fade->priv->gamma_info);
- fade->priv->gamma_info = NULL;
- }
+static gboolean
+gamma_fade_set_alpha_gamma (GSFade *fade,
+ int screen_idx,
+ gdouble alpha)
+{
+#ifdef HAVE_XF86VMODE_GAMMA
+ struct GSFadeScreenPrivate *screen_priv;
+ gboolean res;
+ screen_priv = &fade->priv->screen_priv[screen_idx];
+ res = xf86_whack_gamma (screen_idx, screen_priv, alpha);
+
+ return TRUE;
+#else
+ return FALSE;
#endif /* HAVE_XF86VMODE_GAMMA */
}
-static gboolean
-gs_fade_set_alpha_gamma (GSFade *fade,
- gdouble alpha)
+static void
+check_gamma_extension (GSFade *fade, int screen_idx)
{
#ifdef HAVE_XF86VMODE_GAMMA
- int screen;
+ struct GSFadeScreenPrivate *screen_priv;
+ int event;
+ int error;
+ int major;
+ int minor;
gboolean res;
- if (fade->priv->gamma_info != NULL) {
- for (screen = 0; screen < fade->priv->num_screens; screen++) {
- res = xf86_whack_gamma (screen, &fade->priv->gamma_info [screen], alpha);
- }
+ screen_priv = &fade->priv->screen_priv[screen_idx];
+
+ res = XF86VidModeQueryExtension (GDK_DISPLAY (), &event, &error);
+ if (! res)
+ goto fade_none;
+
+ res = safe_XF86VidModeQueryVersion (GDK_DISPLAY (), &major, &minor);
+ if (! res)
+ goto fade_none;
+
+ if (major < XF86_VIDMODE_GAMMA_MIN_MAJOR ||
+ (major == XF86_VIDMODE_GAMMA_MIN_MAJOR &&
+ minor < XF86_VIDMODE_GAMMA_MIN_MINOR))
+ goto fade_none;
+
+ screen_priv->fade_setup = gamma_fade_setup;
+ screen_priv->fade_finish = screen_fade_finish;
+ screen_priv->fade_set_alpha_gamma = gamma_fade_set_alpha_gamma;
+
+ if (major < XF86_VIDMODE_GAMMA_RAMP_MIN_MAJOR ||
+ (major == XF86_VIDMODE_GAMMA_RAMP_MIN_MAJOR &&
+ minor < XF86_VIDMODE_GAMMA_RAMP_MIN_MINOR)) {
+ screen_priv->fade_type = FADE_TYPE_GAMMA_NUMBER;
+ return;
}
+ /* Copacetic */
+ screen_priv->fade_type = FADE_TYPE_GAMMA_RAMP;
+ return;
+ fade_none:
+#endif
+ screen_priv->fade_type = FADE_TYPE_NONE;
+}
+
+/* Xrandr support */
+
+static gboolean xrandr_fade_setup (GSFade *fade, int screen_idx)
+{
+ struct GSFadeScreenPrivate *screen_priv;
+ GnomeRRCrtc *crtc;
+ GnomeRRCrtc **crtcs;
+ int crtc_count = 0;
+ struct GSGammaInfo *info;
+ gboolean res;
+
+ screen_priv = &fade->priv->screen_priv[screen_idx];
+
+ if (screen_priv->info)
+ return TRUE;
+
+ /* refresh the screen info */
+ gnome_rr_screen_refresh (screen_priv->rrscreen, NULL);
+
+ crtcs = gnome_rr_screen_list_crtcs (screen_priv->rrscreen);
+ while (*crtcs) {
+ crtc_count++;
+ crtcs++;
+ };
+
+ screen_priv->info = g_new0 (struct GSGammaInfo, crtc_count);
+ screen_priv->num_ramps = crtc_count;
+
+ crtc_count = 0;
+ crtcs = gnome_rr_screen_list_crtcs (screen_priv->rrscreen);
+ while (*crtcs)
+ {
+ crtc = *crtcs;
+
+ info = &screen_priv->info[crtc_count];
+
+ /* if no mode ignore crtc */
+ if (!gnome_rr_crtc_get_current_mode (crtc)) {
+ info->size = 0;
+ info->r = NULL;
+ info->g = NULL;
+ info->b = NULL;
+ }
+ else {
+ res = gnome_rr_crtc_get_gamma (crtc, &info->size,
+ &info->r, &info->g,
+ &info->b);
+ if (res == FALSE)
+ goto fail;
+ }
+
+ crtcs++;
+ crtc_count++;
+ }
return TRUE;
-#else
+ fail:
return FALSE;
-#endif /* HAVE_XF86VMODE_GAMMA */
+}
+
+static void xrandr_crtc_whack_gamma (GnomeRRCrtc *crtc,
+ struct GSGammaInfo *gamma_info,
+ float ratio)
+{
+ unsigned short *r, *g, *b;
+ int i;
+
+ if (gamma_info->size == 0)
+ return;
+
+ if (ratio < 0) {
+ ratio = 0;
+ }
+ if (ratio > 1) {
+ ratio = 1;
+ }
+
+ r = g_new0 (unsigned short, gamma_info->size);
+ g = g_new0 (unsigned short, gamma_info->size);
+ b = g_new0 (unsigned short, gamma_info->size);
+
+ for (i = 0; i < gamma_info->size; i++) {
+ r[i] = gamma_info->r[i] * ratio;
+ g[i] = gamma_info->g[i] * ratio;
+ b[i] = gamma_info->b[i] * ratio;
+ }
+
+ gnome_rr_crtc_set_gamma (crtc, gamma_info->size,
+ r, g, b);
+ g_free (r);
+ g_free (g);
+ g_free (b);
+}
+
+static gboolean xrandr_fade_set_alpha_gamma (GSFade *fade,
+ int screen_idx,
+ gdouble alpha)
+{
+ struct GSFadeScreenPrivate *screen_priv;
+ struct GSGammaInfo *info;
+ GnomeRRCrtc **crtcs;
+ int i;
+
+ screen_priv = &fade->priv->screen_priv[screen_idx];
+
+ if (!screen_priv->info)
+ return FALSE;
+
+ crtcs = gnome_rr_screen_list_crtcs (screen_priv->rrscreen);
+ i = 0;
+
+ while (*crtcs)
+ {
+ info = &screen_priv->info[i];
+ xrandr_crtc_whack_gamma (*crtcs, info, alpha);
+ i++;
+ crtcs++;
+ }
+ return TRUE;
+}
+
+static void
+check_randr_extension (GSFade *fade, int screen_idx)
+{
+ GdkDisplay *display = gdk_display_get_default ();
+ GdkScreen *screen = gdk_display_get_screen (display, screen_idx);
+ struct GSFadeScreenPrivate *screen_priv;
+
+ screen_priv = &fade->priv->screen_priv[screen_idx];
+
+ screen_priv->rrscreen = gnome_rr_screen_new (screen,
+ NULL,
+ NULL,
+ NULL);
+ if (!screen_priv->rrscreen) {
+ screen_priv->fade_type = FADE_TYPE_NONE;
+ return;
+ }
+
+ screen_priv->fade_type = FADE_TYPE_XRANDR;
+ screen_priv->fade_setup = xrandr_fade_setup;
+ screen_priv->fade_finish = screen_fade_finish;
+ screen_priv->fade_set_alpha_gamma = xrandr_fade_set_alpha_gamma;
}
static gboolean
gs_fade_set_alpha (GSFade *fade,
gdouble alpha)
{
- gboolean ret;
+ gboolean ret = FALSE;
+ int i;
- switch (fade->priv->fade_type) {
- case FADE_TYPE_GAMMA_RAMP:
- case FADE_TYPE_GAMMA_NUMBER:
- ret = gs_fade_set_alpha_gamma (fade, alpha);
- break;
- case FADE_TYPE_NONE:
- ret = FALSE;
- break;
- default:
- g_warning ("Unknown fade type");
- ret = FALSE;
- break;
+ for (i = 0; i < fade->priv->num_screens; i++) {
+ switch (fade->priv->screen_priv[i].fade_type) {
+ case FADE_TYPE_GAMMA_RAMP:
+ case FADE_TYPE_GAMMA_NUMBER:
+ case FADE_TYPE_XRANDR:
+ ret = fade->priv->screen_priv[i].fade_set_alpha_gamma (fade, i, alpha);
+ break;
+ case FADE_TYPE_NONE:
+ ret = FALSE;
+ break;
+ default:
+ g_warning ("Unknown fade type");
+ ret = FALSE;
+ break;
+ }
}
-
return ret;
}
@@ -527,10 +694,18 @@ gs_fade_start (GSFade *fade,
{
guint steps_per_sec = 30;
guint msecs_per_step;
+ struct GSFadeScreenPrivate *screen_priv;
+ gboolean active_fade, res;
+ int i;
g_return_if_fail (GS_IS_FADE (fade));
- gamma_info_init (fade);
+ for (i = 0; i < fade->priv->num_screens; i++) {
+ screen_priv = &fade->priv->screen_priv[i];
+ res = screen_priv->fade_setup (fade, i);
+ if (res == FALSE)
+ return;
+ }
if (fade->priv->timer_id > 0) {
gs_fade_stop (fade);
@@ -540,7 +715,13 @@ gs_fade_start (GSFade *fade,
gs_fade_set_timeout (fade, timeout);
- if (fade->priv->fade_type != FADE_TYPE_NONE) {
+ active_fade = FALSE;
+ for (i = 0; i < fade->priv->num_screens; i++) {
+ screen_priv = &fade->priv->screen_priv[i];
+ if (screen_priv->fade_type != FADE_TYPE_NONE)
+ active_fade = TRUE;
+ }
+ if (active_fade) {
guint num_steps;
num_steps = (fade->priv->timeout / 1000) * steps_per_sec;
@@ -639,6 +820,7 @@ gs_fade_sync (GSFade *fade,
void
gs_fade_reset (GSFade *fade)
{
+ int i;
g_return_if_fail (GS_IS_FADE (fade));
gs_debug ("Resetting fade");
@@ -651,7 +833,8 @@ gs_fade_reset (GSFade *fade)
gs_fade_set_alpha (fade, fade->priv->current_alpha);
- gamma_info_free (fade);
+ for (i = 0; i < fade->priv->num_screens; i++)
+ fade->priv->screen_priv[i].fade_finish (fade, i);
}
static void
@@ -679,28 +862,31 @@ static void
gs_fade_init (GSFade *fade)
{
GdkDisplay *display;
+ int i;
fade->priv = GS_FADE_GET_PRIVATE (fade);
fade->priv->timeout = 1000;
fade->priv->current_alpha = 1.0;
- fade->priv->fade_type = check_gamma_extension ();
-
- gs_debug ("Fade type: %d", fade->priv->fade_type);
-
display = gdk_display_get_default ();
fade->priv->num_screens = gdk_display_get_n_screens (display);
-#ifdef HAVE_XF86VMODE_GAMMA
- fade->priv->gamma_info = NULL;
-#endif
+ fade->priv->screen_priv = g_new0 (struct GSFadeScreenPrivate, fade->priv->num_screens);
+
+ for (i = 0; i < fade->priv->num_screens; i++) {
+ check_randr_extension (fade, i);
+ if (!fade->priv->screen_priv[i].fade_type)
+ check_gamma_extension (fade, i);
+ gs_debug ("Fade type: %d", fade->priv->screen_priv[i].fade_type);
+ }
}
static void
gs_fade_finalize (GObject *object)
{
GSFade *fade;
+ int i;
g_return_if_fail (object != NULL);
g_return_if_fail (GS_IS_FADE (object));
@@ -709,8 +895,20 @@ gs_fade_finalize (GObject *object)
g_return_if_fail (fade->priv != NULL);
- gamma_info_free (fade);
+ for (i = 0; i < fade->priv->num_screens; i++)
+ fade->priv->screen_priv[i].fade_finish(fade, i);
+ if (fade->priv->screen_priv) {
+ for (i = 0; i < fade->priv->num_screens; i++) {
+ if (!fade->priv->screen_priv[i].rrscreen)
+ continue;
+ gnome_rr_screen_destroy (fade->priv->screen_priv[i].rrscreen);
+ }
+
+ g_free (fade->priv->screen_priv);
+ fade->priv->screen_priv = NULL;
+ }
+
G_OBJECT_CLASS (gs_fade_parent_class)->finalize (object);
}
Index: gnome-screensaver.spec
===================================================================
RCS file: /cvs/pkgs/rpms/gnome-screensaver/devel/gnome-screensaver.spec,v
retrieving revision 1.228
retrieving revision 1.229
diff -u -p -r1.228 -r1.229
--- gnome-screensaver.spec 23 Sep 2009 21:56:20 -0000 1.228
+++ gnome-screensaver.spec 2 Nov 2009 04:52:16 -0000 1.229
@@ -7,14 +7,14 @@
%define gconf2_version 2.6.1
%define redhat_menus_version 5.0.1
%define gnome_menus_version 2.11.1
-%define gnome_desktop_version 2.23.2
+%define gnome_desktop_version 2.28.1-2.fc12
%define libexif_version 0.6.12
%define libgnomekbd_version 2.21
Summary: GNOME Screensaver
Name: gnome-screensaver
Version: 2.28.0
-Release: 1%{?dist}
+Release: 5%{?dist}
License: GPLv2+
Group: Amusements/Graphics
Source0: http://download.gnome.org/sources/gnome-screensaver/2.28/%{name}-%{version}.tar.bz2
@@ -25,6 +25,9 @@ Patch1: gnome-screensaver-2.20.0-default
Patch2: gnome-screensaver-2.26.0-securitytoken.patch
Patch7: gnome-screensaver-2.20.0-blank-by-default.patch
Patch8: gnome-screensaver-2.20.0-selinux-permit.patch
+Patch9: xrandr-gamma.patch
+Patch10: multihead-issues.patch
+Patch11: ask-to-die.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
URL: http://www.gnome.org
@@ -77,6 +80,9 @@ simple, sane, secure defaults and be wel
#%patch2 -p1 -b .securitytoken
%patch7 -p1 -b .blank-by-default
%patch8 -p1 -b .selinux-permit
+%patch9 -p1 -b .xrandr-gamma
+%patch10 -p1 -b .multihead-issues
+%patch11 -p1 -b .ask-to-die
libtoolize --force --copy
@@ -151,6 +157,19 @@ fi
%doc %{_mandir}/man1/*.1.gz
%changelog
+* Fri Oct 23 2009 Matthias Clasen <mclasen at redhat.com> 2.28.0-5
+- Make the dialog ask to be killed after 5 attempts
+
+* Fri Oct 23 2009 Matthias Clasen <mclasen at redhat.com> 2.28.0-4
+- Fix crashes and malfunctions in dynamic multihead situations
+
+* Thu Oct 22 2009 Matthias Clasen <mclasen at redhat.com> 2.28.0-3
+- Fix an oversight in the previous patch
+
+* Thu Oct 22 2009 Matthias Clasen <mclasen at redhat.com> 2.28.0-2
+- Use xrandr for gamma fading, if available, to fix fading in
+ multihead setups
+
* Wed Sep 23 2009 Matthias Clasen <mclasen at redhat.com> 2.28.0-1
- Update to 2.28.0
- Previous message (by thread): rpms/gnome-screensaver/F-12 0001-Disable-the-password-entry-when-using-non-password-a.patch, 1.1, NONE button-images.patch, 1.1, NONE fix-gtkbuilder-conversion.patch, 1.1, NONE gnome-screensaver-idle-delay.patch, 1.1, NONE use-gtkbuilder.patch, 1.1, NONE
- Next message (by thread): rpms/gtk2-engines/devel tooltips.patch, NONE, 1.1 gtk2-engines.spec, 1.116, 1.117 sources, 1.67, 1.68
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the fedora-extras-commits
mailing list