Контекст:
Я использую glfw под xmonad. Glfw, по-видимому, устанавливает заголовок окна после создания окна, тем самым не позволяя xmonad правильно его обрабатывать. Я хочу изменить исходный код glfw, чтобы установить заголовок окна перед его созданием.
Проблема:
Итак, я загружаю glfw-2.6 и просматриваю lib/x11/x11_window.c; строки, вызывающие проблемы:
// Create a window
_glfwWin.Win = XCreateWindow(
_glfwLibrary.Dpy,
RootWindow( _glfwLibrary.Dpy, _glfwWin.VI->screen ),
0, 0, // Upper left corner
_glfwWin.Width, _glfwWin.Height, // Width, height
0, // Borderwidth
_glfwWin.VI->depth, // Depth
InputOutput,
_glfwWin.VI->visual,
CWBorderPixel | CWColormap | CWEventMask,
&wa
);
Через некоторое время последовали:
_glfwPlatformSetWindowTitle( "GLFW Window" );
куда
void _glfwPlatformSetWindowTitle( const char *title )
{
// Set window & icon title
XStoreName( _glfwLibrary.Dpy, _glfwWin.Win, title );
XSetIconName( _glfwLibrary.Dpy, _glfwWin.Win, title );
}
Теперь, если я попытаюсь переместить вызов glfwPlatformSetWindowTitle перед вызовом CreateWindow, я получу segfault — как и должно быть, поскольку _glfwWin.win не будет определен.
Я не знаю, как решить эту проблему, так как для установки заголовка окна мне нужно, чтобы _glfwWin.Win был инициализирован, но для его инициализации мне нужно создать окно.
Таким образом, я спрашиваю: в X11 как правильно установить заголовок окна перед его созданием?
Спасибо!