[eog] EogWindow: Fix sRGB display profile fallback on Wayland
- From: Felix Riemann <friemann src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [eog] EogWindow: Fix sRGB display profile fallback on Wayland
- Date: Sat, 7 Jan 2017 16:15:18 +0000 (UTC)
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]