diff --git a/.github/workflows/build_gnulinux.yml b/.github/workflows/build_gnulinux.yml
index 6dd7174..32c5b49 100644
--- a/.github/workflows/build_gnulinux.yml
+++ b/.github/workflows/build_gnulinux.yml
@@ -57,6 +57,7 @@ jobs:
[[ "${QT_MAJOR_VERSION}" == 6 ]] # i.e. assert
sudo apt-get install qt6-base-dev
fi
+ sudo apt-get install libxkbcommon-dev
- name: install dependency Clang 19
if: "${{ matrix.cc == 'clang-19' }}"
diff --git a/.github/workflows/build_macosx.yml b/.github/workflows/build_macosx.yml
index 09ada95..4beb786 100644
--- a/.github/workflows/build_macosx.yml
+++ b/.github/workflows/build_macosx.yml
@@ -19,7 +19,7 @@ jobs:
- name: install dependencies
run: |
- brew install xquartz libx11 qt@5 pkg-config
+ brew install xquartz libxkbcommon qt@5 pkg-config
brew link qt@5 --force
git clone --depth 1 https://github.com/FreeSpacenav/libspnav
cd libspnav
@@ -28,7 +28,7 @@ jobs:
sudo make install
- name: configure
- run: CFLAGS=-I/usr/X11R6/include LDFLAGS=-L/usr/X11R6/lib ./configure
+ run: CFLAGS=-I/opt/homebrew/include LDFLAGS=-L/opt/homebrew/lib ./configure
- name: build
run: make
diff --git a/Makefile.in b/Makefile.in
index 5009eb3..577e05b 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -19,7 +19,7 @@ libpath = -L$(PREFIX)/lib
CFLAGS = $(warn) $(dbg) $(opt) $(incpath) -fPIC $(add_cflags) -MMD
CXXFLAGS = $(warn) $(dbg) $(opt) $(incpath) -fPIC $(cflags_qt) \
$(add_cflags) -MMD
-LDFLAGS = $(libpath) $(libs_qt) -lspnav -lX11 $(add_ldflags)
+LDFLAGS = $(libpath) $(libs_qt) -lspnav -lxkbcommon $(add_ldflags)
$(bin): $(obj)
$(CXX) -o $@ $(obj) $(LDFLAGS)
diff --git a/README.md b/README.md
index 5b03a44..c34ac75 100644
--- a/README.md
+++ b/README.md
@@ -35,6 +35,7 @@ Installation
------------
First make sure you have the dependencies installed:
- libspnav v1.0 or higher
+ - libxkbcommon
- Qt 5 or Qt 6 (core, gui, and widgets)
To build just run `./configure`, `make`, and `make install` as usual.
diff --git a/src/ui.cc b/src/ui.cc
index b627b5a..2e2d98e 100644
--- a/src/ui.cc
+++ b/src/ui.cc
@@ -26,7 +26,7 @@ along with this program. If not, see .
#include "ui_about.h"
#include
-#include
+#include
static QSlider *slider_sens_axis[6];
static QCheckBox *chk_inv[6];
@@ -290,8 +290,8 @@ void MainWin::updateui()
bnrow[i].rad_action->setChecked(true);
}
- char *str;
- if(cfg.kbmap[i] > 0 && (str = XKeysymToString(cfg.kbmap[i]))) {
+ char str[64];
+ if(cfg.kbmap[i] > 0 && xkb_keysym_get_name(cfg.kbmap[i], str, sizeof str)) {
bnrow[i].rad_mapkey->setChecked(true);
bnrow[i].cmb_mapkey->setCurrentText(str);
}
@@ -640,8 +640,8 @@ void MainWin::combo_str_changed(const QString &qstr)
if(!str || !*str) return;
QLineEdit *ed = bnrow[i].cmb_mapkey->lineEdit();
- KeySym sym = XStringToKeysym(str);
- if(sym == NoSymbol) {
+ xkb_keysym_t sym = xkb_keysym_from_name(str, XKB_KEYSYM_NO_FLAGS);
+ if(sym == XKB_KEY_NoSymbol) {
QPalette cmap = def_cmb_cmap;
cmap.setColor(QPalette::Text, Qt::red);
ed->setPalette(cmap);