Compare commits

...

5 Commits

Author SHA1 Message Date
b2c642f03d Don't make SHM extension dependent option
This was here because I though banan-os didn't define them, but they do
exist there :^)
2026-04-15 19:23:34 +03:00
654e878165 Allow compiling with just xorgproto installed 2026-04-15 19:22:56 +03:00
5076d3bbaf Add missing sys/socket.h include 2026-04-15 18:53:45 +03:00
7be8edada7 Add child window id to its parent
I had accidentally removed this in b228ef13c4 and it broke all programs
that were using child windows :D
2026-04-15 18:43:03 +03:00
07f2b5dbb7 Add hacky way to die when WindowServer dies
We keep a dummy window around which will receive a close event that
exits once WindowServer dies :^)
2026-04-15 18:21:03 +03:00
4 changed files with 85 additions and 67 deletions

View File

@@ -1400,6 +1400,8 @@ BAN::ErrorOr<void> handle_packet(Client& client_info, BAN::ConstByteSpan packet)
if (event_mask != 0) if (event_mask != 0)
TRY(object_it->value->object.get<Object::Window>().event_masks.insert(&client_info, event_mask)); TRY(object_it->value->object.get<Object::Window>().event_masks.insert(&client_info, event_mask));
TRY(parent_window.children.push_back(request.wid));
if (gui_window_ptr) if (gui_window_ptr)
{ {
const WINDOW wid = request.wid; const WINDOW wid = request.wid;

View File

@@ -12,12 +12,7 @@ set(SOURCES
) )
option(ENABLE_GLX "enable glx extension" ON) option(ENABLE_GLX "enable glx extension" ON)
option(ENABLE_SHM "enable shm extension" ON)
include(CheckSymbolExists)
include(CMakeDependentOption)
check_symbol_exists(shmat "sys/shm.h" HAVE_SHMAT)
check_symbol_exists(shmdt "sys/shm.h" HAVE_SHMDT)
cmake_dependent_option(ENABLE_SHM "enable shm extension" ON "HAVE_SHMAT;HAVE_SHMDT" OFF)
if(ENABLE_GLX) if(ENABLE_GLX)
set(SOURCES ${SOURCES} ExtGLX.cpp) set(SOURCES ${SOURCES} ExtGLX.cpp)

View File

@@ -1,8 +1,8 @@
#include "Extensions.h" #include "Extensions.h"
#include "Utils.h" #include "Utils.h"
#include <GL/glx.h>
#include <GL/glxproto.h> #include <GL/glxproto.h>
#include <GL/glxtokens.h>
using BOOL32 = CARD32; using BOOL32 = CARD32;
@@ -12,11 +12,11 @@ CARD32 g_fb_configs[2][24][2] {
{ GLX_VISUAL_ID, g_visual.visualID }, { GLX_VISUAL_ID, g_visual.visualID },
{ GLX_BUFFER_SIZE, 32 }, { GLX_BUFFER_SIZE, 32 },
{ GLX_LEVEL, 0 }, { GLX_LEVEL, 0 },
{ GLX_DOUBLEBUFFER, True }, { GLX_DOUBLEBUFFER, xTrue },
{ GLX_STEREO, False }, { GLX_STEREO, xFalse },
{ GLX_RENDER_TYPE, GLX_RGBA_BIT }, { GLX_RENDER_TYPE, GLX_RGBA_BIT },
{ GLX_DRAWABLE_TYPE, GLX_WINDOW_BIT }, { GLX_DRAWABLE_TYPE, GLX_WINDOW_BIT },
{ GLX_X_RENDERABLE, True }, { GLX_X_RENDERABLE, xTrue },
{ GLX_X_VISUAL_TYPE, GLX_TRUE_COLOR }, { GLX_X_VISUAL_TYPE, GLX_TRUE_COLOR },
{ GLX_CONFIG_CAVEAT, GLX_NONE }, { GLX_CONFIG_CAVEAT, GLX_NONE },
{ GLX_TRANSPARENT_TYPE, GLX_NONE }, { GLX_TRANSPARENT_TYPE, GLX_NONE },
@@ -30,19 +30,19 @@ CARD32 g_fb_configs[2][24][2] {
{ GLX_ACCUM_GREEN_SIZE, 0 }, { GLX_ACCUM_GREEN_SIZE, 0 },
{ GLX_ACCUM_BLUE_SIZE, 0 }, { GLX_ACCUM_BLUE_SIZE, 0 },
{ GLX_ACCUM_ALPHA_SIZE, 0 }, { GLX_ACCUM_ALPHA_SIZE, 0 },
{ GLX_SAMPLE_BUFFERS, 0 }, { GLX_SAMPLE_BUFFERS_SGIS, 0 },
{ GLX_SAMPLES, 0 }, { GLX_SAMPLES_SGIS, 0 },
}, },
{ {
{ GLX_FBCONFIG_ID, 2 }, { GLX_FBCONFIG_ID, 2 },
{ GLX_VISUAL_ID, g_visual.visualID }, { GLX_VISUAL_ID, g_visual.visualID },
{ GLX_BUFFER_SIZE, 32 }, { GLX_BUFFER_SIZE, 32 },
{ GLX_LEVEL, 0 }, { GLX_LEVEL, 0 },
{ GLX_DOUBLEBUFFER, False }, { GLX_DOUBLEBUFFER, xFalse },
{ GLX_STEREO, False }, { GLX_STEREO, xFalse },
{ GLX_RENDER_TYPE, GLX_RGBA_BIT }, { GLX_RENDER_TYPE, GLX_RGBA_BIT },
{ GLX_DRAWABLE_TYPE, GLX_WINDOW_BIT }, { GLX_DRAWABLE_TYPE, GLX_WINDOW_BIT },
{ GLX_X_RENDERABLE, True }, { GLX_X_RENDERABLE, xTrue },
{ GLX_X_VISUAL_TYPE, GLX_TRUE_COLOR }, { GLX_X_VISUAL_TYPE, GLX_TRUE_COLOR },
{ GLX_CONFIG_CAVEAT, GLX_NONE }, { GLX_CONFIG_CAVEAT, GLX_NONE },
{ GLX_TRANSPARENT_TYPE, GLX_NONE }, { GLX_TRANSPARENT_TYPE, GLX_NONE },
@@ -56,8 +56,8 @@ CARD32 g_fb_configs[2][24][2] {
{ GLX_ACCUM_GREEN_SIZE, 0 }, { GLX_ACCUM_GREEN_SIZE, 0 },
{ GLX_ACCUM_BLUE_SIZE, 0 }, { GLX_ACCUM_BLUE_SIZE, 0 },
{ GLX_ACCUM_ALPHA_SIZE, 0 }, { GLX_ACCUM_ALPHA_SIZE, 0 },
{ GLX_SAMPLE_BUFFERS, 0 }, { GLX_SAMPLE_BUFFERS_SGIS, 0 },
{ GLX_SAMPLES, 0 }, { GLX_SAMPLES_SGIS, 0 },
}, },
}; };

View File

@@ -7,6 +7,7 @@
#include <signal.h> #include <signal.h>
#include <sys/epoll.h> #include <sys/epoll.h>
#include <sys/socket.h>
#include <sys/stat.h> #include <sys/stat.h>
#include <unistd.h> #include <unistd.h>
@@ -18,18 +19,19 @@
#include <netinet/in.h> #include <netinet/in.h>
#endif #endif
static const xRectangle s_screen_bounds = static BAN::UniqPtr<LibGUI::Window> s_dummy_window =
[]() { []() {
auto attributes = LibGUI::Window::default_attributes; auto attributes = LibGUI::Window::default_attributes;
attributes.shown = false; attributes.shown = false;
auto window = MUST(LibGUI::Window::create(0, 0, ""_sv, attributes)); return MUST(LibGUI::Window::create(0, 0, ""_sv, attributes));
return xRectangle { }();
static const xRectangle s_screen_bounds = {
.x = 0, .x = 0,
.y = 0, .y = 0,
.width = static_cast<CARD16>(window->width()), .width = static_cast<CARD16>(s_dummy_window->width()),
.height = static_cast<CARD16>(window->height()), .height = static_cast<CARD16>(s_dummy_window->height()),
}; };
}();
const xPixmapFormat g_formats[6] { const xPixmapFormat g_formats[6] {
{ {
@@ -172,12 +174,25 @@ int main()
return 1; return 1;
} }
{
epoll_event event { .events = EPOLLIN, .data = { .ptr = nullptr } }; epoll_event event { .events = EPOLLIN, .data = { .ptr = nullptr } };
if (epoll_ctl(g_epoll_fd, EPOLL_CTL_ADD, server_sock, &event) == -1) if (epoll_ctl(g_epoll_fd, EPOLL_CTL_ADD, server_sock, &event) == -1)
{ {
perror("xbanan: epoll_ctl"); perror("xbanan: epoll_ctl");
return 1; return 1;
} }
}
{
epoll_event event { .events = EPOLLIN, .data = { .ptr = (void*)1 } };
if (epoll_ctl(g_epoll_fd, EPOLL_CTL_ADD, s_dummy_window->server_fd(), &event) == -1)
{
perror("xbanan: epoll_ctl");
return 1;
}
s_dummy_window->request_resize(1, 1);
}
#define APPEND_ATOM(name) do { \ #define APPEND_ATOM(name) do { \
MUST(g_atoms_id_to_name.insert(name, #name##_sv.substring(3))); \ MUST(g_atoms_id_to_name.insert(name, #name##_sv.substring(3))); \
@@ -397,6 +412,12 @@ int main()
continue; continue;
} }
if (events[i].data.ptr == (void*)1)
{
s_dummy_window->poll_events();
continue;
}
auto it = g_epoll_thingies.find(events[i].data.fd); auto it = g_epoll_thingies.find(events[i].data.fd);
if (it == g_epoll_thingies.end()) if (it == g_epoll_thingies.end())
continue; continue;