我使用gtk_drawing_area_new()创建了一个绘图区域。使用GDK_WINDOW_XID提取此窗口小部件的窗口句柄(比如drawing_handle)。
使用xwininfo我检查了drawing_handle窗口的属性。
输出:
ubuntu @ wandboard:〜$ xwininfo -id 0x1400007
Colormap显示错误的值并且未安装。系统默认Colormap为32(0x20)。缺少某些系统设置,其中gtk无法获取正确的色彩映射。请建议如何创建gtk-window以及如何分配色彩映射。
可能是这个错误的Colormap从主窗口向下流动,主窗口是使用api gtk_window_new()创建的。我仍然没有找到任何gtk api来改变这两个窗口的值。
答案 0 :(得分:0)
可以使用以下代码更改GDK窗口的视觉效果。在这里,我获得X Default视觉效果,并将其与GDK提供的视觉效果列表进行比较。当GDK视觉与X Defalut视觉匹配时,我改变了GTK小部件的视觉效果。
static int change_visual(GtkWidget *widget)
{
int nitems_return;
Display *x_display = XOpenDisplay(NULL);
Visual *x_visual = XDefaultVisual(x_display, DefaultScreen(x_display));
GdkScreen *gdk_screen = gdk_screen_get_default();
GList *gdk_visual_list = gdk_screen_list_visuals(gdk_screen);
GList *l;
for (l = gdk_visual_list; l != NULL; l = l->next)
{
Visual *temp = gdk_x11_visual_get_xvisual((GdkVisual *)l->data);
if(temp->visualid == x_visual->visualid) break;
}
//l is pointing the visual which is similar to system x visual. Lets change it.
gtk_widget_set_visual (widget, (GdkVisual *)l->data);
return 0;
}