65d1273
commit 1edd5817ac177e4f73ff8578746510abd3541390
65d1273
Author: Michel Dänzer <daenzer@debian.org>
65d1273
Date:   Wed Aug 12 17:52:07 2009 -0400
65d1273
65d1273
    Fix gamma fadeout when X reports 0-size gamma ramp (#581995)
65d1273
65d1273
diff --git a/src/gs-fade.c b/src/gs-fade.c
65d1273
index f591ab8..75595a7 100644
65d1273
--- a/src/gs-fade.c
65d1273
+++ b/src/gs-fade.c
65d1273
@@ -308,32 +308,15 @@ gamma_info_init (GSFade *fade)
65d1273
         */
65d1273
         for (screen = 0; screen < fade->priv->num_screens; screen++) {
65d1273
 
65d1273
-                if (FADE_TYPE_GAMMA_NUMBER == fade->priv->fade_type) {
65d1273
-                        /* only have gamma parameter, not ramps. */
65d1273
-
65d1273
-                        res = XF86VidModeGetGamma (GDK_DISPLAY (), screen, &info [screen].vmg);
65d1273
-                        if (! res) {
65d1273
-                                goto FAIL;
65d1273
-                        }
65d1273
-                        gs_debug ("Initialized gamma fade for screen %d: %f %f %f",
65d1273
-                                  screen,
65d1273
-                                  info [screen].vmg.red,
65d1273
-                                  info [screen].vmg.green,
65d1273
-                                  info [screen].vmg.blue);
65d1273
-                }
65d1273
-
65d1273
 # ifdef HAVE_XF86VMODE_GAMMA_RAMP
65d1273
 
65d1273
-                else if (FADE_TYPE_GAMMA_RAMP == fade->priv->fade_type) {
65d1273
+                if (FADE_TYPE_GAMMA_RAMP == fade->priv->fade_type) {
65d1273
                         /* have ramps */
65d1273
 
65d1273
                         res = XF86VidModeGetGammaRampSize (GDK_DISPLAY (), screen, &info [screen].size);
65d1273
-                        if (! res) {
65d1273
-                                goto FAIL;
65d1273
-                        }
65d1273
-
65d1273
-                        if (info [screen].size <= 0) {
65d1273
-                                goto FAIL;
65d1273
+                        if (! res || info [screen].size <= 0) {
65d1273
+                                fade->priv->fade_type = FADE_TYPE_GAMMA_NUMBER;
65d1273
+                                goto test_number;
65d1273
                         }
65d1273
 
65d1273
                         info [screen].r = g_new0 (unsigned short, info[screen].size);
65d1273
@@ -341,7 +324,8 @@ gamma_info_init (GSFade *fade)
65d1273
                         info [screen].b = g_new0 (unsigned short, info[screen].size);
65d1273
 
65d1273
                         if (! (info [screen].r && info [screen].g && info [screen].b)) {
65d1273
-                                goto FAIL;
65d1273
+                                fade->priv->fade_type = FADE_TYPE_GAMMA_NUMBER;
65d1273
+                                goto test_number;
65d1273
                         }
65d1273
 
65d1273
                         res = XF86VidModeGetGammaRamp (GDK_DISPLAY (),
65d1273
@@ -351,15 +335,32 @@ gamma_info_init (GSFade *fade)
65d1273
                                                        info [screen].g,
65d1273
                                                        info [screen].b);
65d1273
                         if (! res) {
65d1273
-                                goto FAIL;
65d1273
+                                fade->priv->fade_type = FADE_TYPE_GAMMA_NUMBER;
65d1273
+                                goto test_number;
65d1273
                         }
65d1273
                         gs_debug ("Initialized gamma ramp fade");
65d1273
                 }
65d1273
 # endif /* HAVE_XF86VMODE_GAMMA_RAMP */
65d1273
-                else if (FADE_TYPE_NONE == fade->priv->fade_type) {
65d1273
+
65d1273
+ test_number:
65d1273
+                if (FADE_TYPE_GAMMA_NUMBER == fade->priv->fade_type) {
65d1273
+                        /* only have gamma parameter, not ramps. */
65d1273
+
65d1273
+                        res = XF86VidModeGetGamma (GDK_DISPLAY (), screen, &info [screen].vmg);
65d1273
+                        if (! res) {
65d1273
+                                fade->priv->fade_type = FADE_TYPE_NONE;
65d1273
+                                goto test_none;
65d1273
+                        }
65d1273
+                        gs_debug ("Initialized gamma fade for screen %d: %f %f %f",
65d1273
+                                  screen,
65d1273
+                                  info [screen].vmg.red,
65d1273
+                                  info [screen].vmg.green,
65d1273
+                                  info [screen].vmg.blue);
65d1273
+                }
65d1273
+
65d1273
+ test_none:
65d1273
+                if (FADE_TYPE_NONE == fade->priv->fade_type) {
65d1273
                         goto FAIL;
65d1273
-                } else {
65d1273
-                        g_assert_not_reached ();
65d1273
                 }
65d1273
         }
65d1273