2483bdc
--- gnome-screensaver-2.20.0/src/gs-fade.c
2483bdc
+++ gnome-screensaver-2.20.0/src/gs-fade.c
2483bdc
@@ -296,6 +296,10 @@
2483bdc
         }
2483bdc
 # endif
2483bdc
 
2483bdc
+        if (fade->priv->gamma_info) {
2483bdc
+                return TRUE;
2483bdc
+        }
2483bdc
+
2483bdc
         info = g_new0 (xf86_gamma_info, fade->priv->num_screens);
2483bdc
         fade->priv->gamma_info = info;
2483bdc
 
2483bdc
@@ -402,8 +406,10 @@
2483bdc
         int      screen;
2483bdc
         gboolean res;
2483bdc
 
2483bdc
-        for (screen = 0; screen < fade->priv->num_screens; screen++) {
2483bdc
-                res = xf86_whack_gamma (screen, &fade->priv->gamma_info [screen], alpha);
2483bdc
+        if (fade->priv->gamma_info) {
2483bdc
+                for (screen = 0; screen < fade->priv->num_screens; screen++) {
2483bdc
+                        res = xf86_whack_gamma (screen, &fade->priv->gamma_info [screen], alpha);
2483bdc
+                }
2483bdc
         }
2483bdc
 
2483bdc
         return TRUE;
2483bdc
@@ -523,6 +529,8 @@
2483bdc
 
2483bdc
         g_return_if_fail (GS_IS_FADE (fade));
2483bdc
 
2483bdc
+        gamma_info_init (fade);
2483bdc
+
2483bdc
         if (fade->priv->timer_id > 0) {
2483bdc
                 gs_fade_stop (fade);
2483bdc
         }
2483bdc
@@ -641,6 +649,8 @@
2483bdc
         fade->priv->current_alpha = 1.0;
2483bdc
 
2483bdc
         gs_fade_set_alpha (fade, fade->priv->current_alpha);
2483bdc
+
2483bdc
+        gamma_info_free (fade);
2483bdc
 }
2483bdc
 
2483bdc
 static void
2483bdc
@@ -681,7 +691,7 @@
2483bdc
         display = gdk_display_get_default ();
2483bdc
         fade->priv->num_screens = gdk_display_get_n_screens (display);
2483bdc
 
2483bdc
-        gamma_info_init (fade);
2483bdc
+        fade->priv->gamma_info = NULL;
2483bdc
 }
2483bdc
 
2483bdc
 static void