linux_window_manager: query default refresh rate via xrandr, rather than assuming 60 (oops!)

This commit is contained in:
Ryan Fleury committed 2026-10-01 10:47:46 -07:00
1 parent a256e5c48a
commit 56073cfff0
5 files changed
+40 -8

No files matched your search

+2 -2
View File
@@ -40,7 +40,7 @@ jobs:
shell: bash
run: |
sudo apt-get update
sudo apt-get install --no-install-recommends -y pkg-config libfreetype6-dev libx11-dev libxext-dev libxfixes-dev libgl1-mesa-dev libegl1-mesa-dev
sudo apt-get install --no-install-recommends -y pkg-config libfreetype6-dev libx11-dev libxext-dev libxfixes-dev libxrandr-dev libgl1-mesa-dev libegl1-mesa-dev
- name: Install clang-17 Dependencies
if: ${{ matrix.compiler == 'clang-17' }}
@@ -162,7 +162,7 @@ jobs:
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
sudo apt-add-repository -y "deb http://apt.llvm.org/noble/ llvm-toolchain-noble-22 main"
sudo apt-get update
sudo apt-get install -y clang-22 lld-22 llvm-22 gcc-14 pkg-config libfreetype6-dev libx11-dev libxext-dev libxfixes-dev libgl1-mesa-dev libegl1-mesa-dev
sudo apt-get install -y clang-22 lld-22 llvm-22 gcc-14 pkg-config libfreetype6-dev libx11-dev libxext-dev libxfixes-dev libxrandr-dev libgl1-mesa-dev libegl1-mesa-dev
# crash callstack symbolizer depends on LLVM
sudo ln -s /usr/bin/llvm-symbolizer-22 /usr/bin/llvm-symbolizer
- name: Run
+3 -2
View File
@@ -247,6 +247,7 @@ on the system:
- `libx11`
- `libxext`
- `libxfixes`
- `libxrandr`
- `libgl`
- `libegl`
@@ -256,13 +257,13 @@ installed using one of the following commands, depending on your distribution:
#### Ubuntu / Debian / Mint
```
sudo apt install -y libfreetype6-dev libx11-dev libxext-dev libxfixes-dev libgl-dev libegl-dev
sudo apt install -y libfreetype6-dev libx11-dev libxext-dev libxfixes-dev libxrandr-dev libgl-dev libegl-dev
```
#### Arch / Manjaro
```
sudo pacman -S --needed freetype2 libx11 libxext libxfixes libglvnd
sudo pacman -S --needed freetype2 libx11 libxext libxfixes libxrandr libglvnd
```
### 3. Building
+3 -3
View File
@@ -29,14 +29,14 @@ cc_link="-lpthread -lm -lrt -ldl"
cc_link_dll="-fPIC"
# --- External Libraries ------------------------------------------------------
# sudo apt install -y pkg-config libfreetype6-dev libx11-dev libxext-dev libxfixes-dev libgl-dev libegl-dev
# sudo apt install -y pkg-config libfreetype6-dev libx11-dev libxext-dev libxfixes-dev libxrandr-dev libgl-dev libegl-dev
if [[ -x "$(command -v pkg-config)" ]]; then
cc_font_provider="$(pkg-config --cflags --libs freetype2)"
cc_os_gfx="$(pkg-config --cflags --libs x11 xext xfixes)"
cc_os_gfx="$(pkg-config --cflags --libs x11 xext xfixes xrandr)"
cc_render="$(pkg-config --cflags --libs gl egl)"
else
cc_font_provider="-I/usr/include/freetype2 -lfreetype"
cc_os_gfx="-lX11 -lXext -lXfixes"
cc_os_gfx="-lX11 -lXext -lXfixes -lXrandr"
cc_render="-lGL -lEGL"
fi
@@ -374,11 +374,41 @@ wm_init(void)
//- rjf: open im
lnx_wm_state->xim = XOpenIM(lnx_wm_state->display, 0, 0, 0);
//- rjf: fill out gfx info
//- rjf: fill out default gfx info
lnx_wm_state->gfx_info.double_click_time = 0.5f;
lnx_wm_state->gfx_info.caret_blink_time = 0.5f;
lnx_wm_state->gfx_info.default_refresh_rate = 60.f;
//- rjf: determine default refresh rate
{
XRRScreenResources *res = XRRGetScreenResourcesCurrent(lnx_wm_state->display, DefaultRootWindow(lnx_wm_state->display));
for EachIndex(idx, res->noutput)
{
XRROutputInfo *out_info = XRRGetOutputInfo(lnx_wm_state->display, res, res->outputs[idx]);
if(out_info && out_info->connection == RR_Connected && out_info->crtc != None)
{
XRRCrtcInfo *crtc_info = XRRGetCrtcInfo(lnx_wm_state->display, res, out_info->crtc);
if(crtc_info)
{
for EachIndex(mode_idx, res->nmode)
{
if(res->modes[mode_idx].id == crtc_info->mode)
{
XRRModeInfo *mode_info = &res->modes[mode_idx];
if(mode_info->vTotal != 0 && mode_info->hTotal != 0)
{
lnx_wm_state->gfx_info.default_refresh_rate = (F32)mode_info->dotClock / ((F32)mode_info->hTotal * (F32)mode_info->vTotal);
}
}
}
XRRFreeCrtcInfo(crtc_info);
}
XRRFreeOutputInfo(out_info);
}
}
XRRFreeScreenResources(res);
}
//- rjf: fill out cursors
{
struct
@@ -12,6 +12,7 @@
#include <X11/cursorfont.h>
#include <X11/extensions/sync.h>
#include <X11/extensions/Xfixes.h>
#include <X11/extensions/Xrandr.h>
#include <X11/keysym.h>
#include <X11/keysymdef.h>
#include <poll.h>