< prev index next >
src/java.desktop/unix/native/libawt_xawt/awt/awt_GraphicsEnv.c
Print this page
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
@@ -205,32 +205,45 @@
int visualsMatched, i;
visualList = XGetVisualInfo(awt_display,
mask, vinfo, &visualsMatched);
if (visualList) {
+ int id = -1;
+ VisualID defaultVisual = XVisualIDFromVisual(DefaultVisual(awt_display, vinfo->screen));
defaultConfig = ZALLOC(_AwtGraphicsConfigData);
for (i = 0; i < visualsMatched; i++) {
memcpy(&defaultConfig->awt_visInfo, &visualList[i], sizeof(XVisualInfo));
defaultConfig->awt_depth = visualList[i].depth;
/* we can't use awtJNI_CreateColorData here, because it'll pull,
SystemColor, which in turn will cause toolkit to be reinitialized */
if (awtCreateX11Colormap(defaultConfig)) {
+ if (visualList[i].visualid == defaultVisual) {
+ id = i;
+ break;
+ } else if (-1 == id) {
+ // Keep 1st match for fallback
+ id = i;
+ }
+ }
+ }
+ if (-1 != id) {
+ memcpy(&defaultConfig->awt_visInfo, &visualList[id], sizeof(XVisualInfo));
+ defaultConfig->awt_depth = visualList[id].depth;
/* Allocate white and black pixels for this visual */
color.flags = DoRed | DoGreen | DoBlue;
color.red = color.green = color.blue = 0x0000;
XAllocColor(awt_display, defaultConfig->awt_cmap, &color);
- x11Screens[visualList[i].screen].blackpixel = color.pixel;
+ x11Screens[visualList[id].screen].blackpixel = color.pixel;
color.flags = DoRed | DoGreen | DoBlue;
color.red = color.green = color.blue = 0xffff;
XAllocColor(awt_display, defaultConfig->awt_cmap, &color);
- x11Screens[visualList[i].screen].whitepixel = color.pixel;
+ x11Screens[visualList[id].screen].whitepixel = color.pixel;
XFree(visualList);
return defaultConfig;
}
- }
XFree(visualList);
free((void *)defaultConfig);
}
return NULL;
}
< prev index next >