Update OpenGLWindow.cpp
All checks were successful
Run ReCI Build Test / Explore-Gitea-Actions (push) Successful in 1m58s

Fix for our window not showing up in the window list on some floating window managers.
This commit is contained in:
2025-05-29 11:47:34 -04:00
parent ffdafedb94
commit ca459af9b1

View File

@@ -58,6 +58,20 @@ namespace OpenGL {
typedef GLXContext (*glXCreateContextAttribsARBProc)(Display *, GLXFBConfig, GLXContext, Bool, const int *);
}
// Used to determine if we should force our window to start as floating on tiling window managers.
[[nodiscard]] bool TilingWindowManager() {
const char* xdg_env = std::getenv("XDG_CURRENT_DESKTOP");
const char* session_env = std::getenv("DESKTOP_SESSION");
std::string xdg_current_desktop = xdg_env ? xdg_env : "";
std::string desktop_session = session_env ? session_env : "";
if (xdg_current_desktop == "i3" || desktop_session == "i3")
return true;
return false;
// TODO check for dwm & sway.
}
void OpenGLWindow::SwapBuffers() {
OpenGL::glXSwapBuffers(platform->display,platform->window);
}
@@ -73,6 +87,8 @@ std::string OpenGLWindow::GetGraphicsDriverVendor() {
}
bool OpenGLWindow::Open() {
bool tiling = TilingWindowManager();
if (!OpenGL::constructor_success)
return false;
@@ -81,9 +97,11 @@ bool OpenGLWindow::Open() {
platform->xSetWindowAttributes.border_pixel = BlackPixel(platform->display, platform->defaultScreen);
platform->xSetWindowAttributes.background_pixel = BlackPixel(platform->display, platform->defaultScreen);
platform->xSetWindowAttributes.override_redirect = True;
platform->xSetWindowAttributes.event_mask = ExposureMask;
if (tiling)
platform->xSetWindowAttributes.override_redirect = True;
auto glXCreateContextAttribsARB = (OpenGL::glXCreateContextAttribsARBProc) OpenGL::glXGetProcAddressARB((const GLubyte*)"glXCreateContextAttribsARB");
XVisualInfo* vi = nullptr;
@@ -125,7 +143,6 @@ bool OpenGLWindow::Open() {
platform->window = XCreateWindow(platform->display, RootWindow(platform->display, vi->screen), 0, 0, width, height, 0, vi->depth, InputOutput,
vi->visual, CWBackPixel | CWColormap | CWBorderPixel, &platform->xSetWindowAttributes);
// TODO allow the user to specify what OpenGL version they want.
int context_attributes[] { GLX_CONTEXT_MAJOR_VERSION_ARB, gl_major, GLX_CONTEXT_MINOR_VERSION_ARB, gl_minor, None };
platform->gl_context = glXCreateContextAttribsARB(platform->display, best_fbc, nullptr, True, context_attributes);
XFree(fb_configurations);
@@ -146,9 +163,13 @@ bool OpenGLWindow::Open() {
XMapWindow(platform->display, platform->window);
XStoreName(platform->display, platform->window, title.c_str());
platform->windowTypeAtom = XInternAtom(platform->display, "_NET_WM_WINDOW_TYPE", False);
platform->windowTypeUtilityAtom = XInternAtom(platform->display, "_NET_WM_WINDOW_TYPE_UTILITY", False);
XChangeProperty(platform->display, platform->window, platform->windowTypeAtom, XA_ATOM, 32, PropModeReplace, (unsigned char*) &platform->windowTypeUtilityAtom, 1);
if (tiling) {
platform->windowTypeAtom = XInternAtom(platform->display, "_NET_WM_WINDOW_TYPE", False);
platform->windowTypeUtilityAtom = XInternAtom(platform->display, "_NET_WM_WINDOW_TYPE_UTILITY", False);
XChangeProperty(platform->display, platform->window, platform->windowTypeAtom, XA_ATOM, 32, PropModeReplace,
(unsigned char *) &platform->windowTypeUtilityAtom, 1);
}
platform->wmDeleteWindow = XInternAtom(platform->display, "WM_DELETE_WINDOW", False);
XSetWMProtocols(platform->display, platform->window, &platform->wmDeleteWindow, 1);