[eog] EogWindow: Fix sRGB display profile fallback on Wayland



commit e557e8b6a40bf20ad0d9b868267817e3b3f25d7d
Author: Felix Riemann <friemann gnome org>
Date:   Fri Jan 6 21:14:18 2017 +0100

    EogWindow: Fix sRGB display profile fallback on Wayland
    
    https://bugzilla.gnome.org/show_bug.cgi?id=776984

 src/eog-window.c |  116 ++++++++++++++++++++++++++++-------------------------
 1 files changed, 61 insertions(+), 55 deletions(-)
---
diff --git a/src/eog-window.c b/src/eog-window.c
index cc84890..46f32dd 100644
--- a/src/eog-window.c
+++ b/src/eog-window.c
@@ -420,69 +420,75 @@ eog_window_get_display_profile (GtkWidget *window)
 
        screen = gtk_widget_get_screen (window);
 
-        if (!GDK_IS_X11_SCREEN (screen))
-                return NULL;
+       if (GDK_IS_X11_SCREEN (screen)) {
+               dpy = GDK_DISPLAY_XDISPLAY (gdk_screen_get_display (screen));
 
-       dpy = GDK_DISPLAY_XDISPLAY (gdk_screen_get_display (screen));
-
-       if (gdk_screen_get_number (screen) > 0)
-               atom_name = g_strdup_printf ("_ICC_PROFILE_%d", gdk_screen_get_number (screen));
-       else
-               atom_name = g_strdup ("_ICC_PROFILE");
-
-       icc_atom = gdk_x11_get_xatom_by_name_for_display (gdk_screen_get_display (screen), atom_name);
-
-       g_free (atom_name);
-
-       result = XGetWindowProperty (dpy,
-                                    GDK_WINDOW_XID (gdk_screen_get_root_window (screen)),
-                                    icc_atom,
-                                    0,
-                                    G_MAXLONG,
-                                    False,
-                                    XA_CARDINAL,
-                                    &type,
-                                    &format,
-                                    &nitems,
-                                    &bytes_after,
-                                     (guchar **)&str);
-
-       /* TODO: handle bytes_after != 0 */
+               if (gdk_screen_get_number (screen) > 0)
+                       atom_name = g_strdup_printf ("_ICC_PROFILE_%d",
+                                                    gdk_screen_get_number (screen));
+               else
+                       atom_name = g_strdup ("_ICC_PROFILE");
+
+               icc_atom = gdk_x11_get_xatom_by_name_for_display (gdk_screen_get_display (screen), atom_name);
+
+               g_free (atom_name);
+
+               result = XGetWindowProperty (dpy,
+                                            GDK_WINDOW_XID (gdk_screen_get_root_window (screen)),
+                                            icc_atom,
+                                            0,
+                                            G_MAXLONG,
+                                            False,
+                                            XA_CARDINAL,
+                                            &type,
+                                            &format,
+                                            &nitems,
+                                            &bytes_after,
+                                            (guchar **)&str);
+
+               /* TODO: handle bytes_after != 0 */
+
+               if ((result == Success) && (type == XA_CARDINAL) && (nitems > 0)) {
+                       switch (format)
+                       {
+                               case 8:
+                                       length = nitems;
+                                       break;
+                               case 16:
+                                       length = sizeof(short) * nitems;
+                                       break;
+                               case 32:
+                                       length = sizeof(long) * nitems;
+                                       break;
+                               default:
+                                       eog_debug_message (DEBUG_LCMS,
+                                                          "Unable to read profile, not correcting");
+
+                                       XFree (str);
+                                       return NULL;
+                       }
 
-       if ((result == Success) && (type == XA_CARDINAL) && (nitems > 0)) {
-               switch (format)
-               {
-                       case 8:
-                               length = nitems;
-                               break;
-                       case 16:
-                               length = sizeof(short) * nitems;
-                               break;
-                       case 32:
-                               length = sizeof(long) * nitems;
-                               break;
-                       default:
-                               eog_debug_message (DEBUG_LCMS, "Unable to read profile, not correcting");
-
-                               XFree (str);
-                               return NULL;
-               }
+                       profile = cmsOpenProfileFromMem (str, length);
 
-               profile = cmsOpenProfileFromMem (str, length);
+                       if (G_UNLIKELY (profile == NULL)) {
+                               eog_debug_message (DEBUG_LCMS,
+                                                  "Invalid display profile set, "
+                                                  "not using it");
+                       }
 
-               if (G_UNLIKELY (profile == NULL)) {
-                       eog_debug_message (DEBUG_LCMS,
-                                          "Invalid display profile set, "
-                                          "not using it");
+                       XFree (str);
                }
-
-               XFree (str);
+       } else {
+               /* ICC profiles cannot be queried on Wayland yet */
+               eog_debug_message (DEBUG_LCMS,
+                                  "Not an X11 screen. "
+                                  "Cannot fetch display profile.");
        }
 
        if (profile == NULL) {
                profile = cmsCreate_sRGBProfile ();
                eog_debug_message (DEBUG_LCMS,
-                                "No valid display profile set, assuming sRGB");
+                                  "No valid display profile set, assuming sRGB");
        }
 
        return profile;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]