Skip to content

Commit

Permalink
onboard: add virtual keyboard to scarthgap
Browse files Browse the repository at this point in the history
  • Loading branch information
pratheekshasn committed Sep 26, 2024
1 parent 1235dd4 commit 8f535d6
Show file tree
Hide file tree
Showing 3 changed files with 149 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
From 1c95f64aa342147387ce4b1b7269a5c8b34bd898 Mon Sep 17 00:00:00 2001
From: Khem Raj <[email protected]>
Date: Thu, 13 Jul 2017 09:01:04 -0700
Subject: [PATCH] pypredict/lm: Define error API if platform does not have it

error() API is not implemented across all libcs on linux
e.g. musl does not provide it.

Signed-off-by: Khem Raj <[email protected]>
---
Onboard/pypredict/lm/lm.cpp | 1 -
Onboard/pypredict/lm/lm.h | 13 +++++++++++++
Onboard/pypredict/lm/lm_dynamic.cpp | 2 --
3 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/Onboard/pypredict/lm/lm.cpp b/Onboard/pypredict/lm/lm.cpp
index 2e64296..37ae241 100644
--- a/Onboard/pypredict/lm/lm.cpp
+++ b/Onboard/pypredict/lm/lm.cpp
@@ -19,7 +19,6 @@

#include <stdlib.h>
#include <stdio.h>
-#include <error.h>
#include <algorithm>
#include <cmath>
#include <string>
diff --git a/Onboard/pypredict/lm/lm.h b/Onboard/pypredict/lm/lm.h
index ed4164a..b8b63ee 100644
--- a/Onboard/pypredict/lm/lm.h
+++ b/Onboard/pypredict/lm/lm.h
@@ -32,6 +32,19 @@
#include <algorithm>
#include <string>

+#if defined(HAVE_ERROR_H)
+#include <error.h>
+#else
+#include <err.h>
+#define _onboard_error(S, E, F, ...) do { \
+ if (E) \
+ err(S, F ": %s", ##__VA_ARGS__, strerror(E)); \
+ else \
+ err(S, F, ##__VA_ARGS__); \
+} while(0)
+
+#define error _onboard_error
+#endif

// break into debugger
// step twice to come back out of the raise() call into known code
diff --git a/Onboard/pypredict/lm/lm_dynamic.cpp b/Onboard/pypredict/lm/lm_dynamic.cpp
index 7c62824..e7c7f40 100644
--- a/Onboard/pypredict/lm/lm_dynamic.cpp
+++ b/Onboard/pypredict/lm/lm_dynamic.cpp
@@ -17,8 +17,6 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/

-#include <error.h>
-
#include "lm_dynamic.h"

using namespace std;
--
2.13.2

Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
From: 1be95325d320122efd5dedf7437839cfcca01f7a
From: https://github.com/void-linux/void-packages/commit/1be95325d320122efd5dedf7437839cfcca01f7a
Date: Mon, 23 Sep 2024
Subject: [PATCH] onboard: fix segfault when hovering over the keyboard

Currently, if the mouse pointer is hovered over the Onboard keyboard, the application crashes with a segmentation fault.
This is because the new_device_event function is not acquiring the GIL before creating a new object. This patch fixes
the issue by acquiring the GIL before creating a new object. It also acquires the GIL before queueing the event.
This patch is taken from the fix provided in the following link:
https://github.com/void-linux/void-packages/commit/1be95325d320122efd5dedf7437839cfcca01f7a

Signed-off by: Pratheeksha S N <[email protected]>

Upstream-Status: Not Submitted [This is being added to the meta-nilrt layer for now. If it is accepted upstream, it will be removed from here.]

--- a/Onboard/osk/osk_devices.c
+++ b/Onboard/osk/osk_devices.c
@@ -97,13 +97,15 @@ osk_device_event_dealloc (OskDeviceEvent
static OskDeviceEvent*
new_device_event (void)
{
- OskDeviceEvent *ev = PyObject_New(OskDeviceEvent, &osk_device_event_type);
+ OskDeviceEvent *ev;
+ PyGILState_STATE gstate = PyGILState_Ensure();
+ ev = PyObject_New(OskDeviceEvent, &osk_device_event_type);
if (ev)
{
osk_device_event_type.tp_init((PyObject*) ev, NULL, NULL);
- return ev;
}
- return NULL;
+ PyGILState_Release(gstate);
+ return ev;
}

static PyObject *
@@ -334,6 +336,7 @@ osk_devices_dealloc (OskDevices *dev)
static void
queue_event (OskDevices* dev, OskDeviceEvent* event, Bool discard_pending)
{
+ PyGILState_STATE state = PyGILState_Ensure ();
GQueue* queue = dev->event_queue;
if (queue)
{
@@ -364,6 +367,7 @@ queue_event (OskDevices* dev, OskDeviceE
Py_INCREF(event);
g_queue_push_head(queue, event);
}
+ PyGILState_Release (state);
}

static gboolean idle_process_event_queue (OskDevices* dev)
30 changes: 30 additions & 0 deletions meta-gnome/recipes-support/onboard/onboard_1.4.1.bb
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
SUMMARY = "An onscreen keyboard"
LICENSE = "GPL-3.0-only"
LIC_FILES_CHKSUM = "file://COPYING.GPL3;md5=8521fa4dd51909b407c5150498d34f4e"

DEPENDS += "gtk+3 hunspell libcanberra libxkbfile dconf python3-distutils-extra-native intltool-native"

SRC_URI = "https://launchpad.net/onboard/1.4/${PV}/+download/${BPN}-${PV}.tar.gz \
file://0001-pypredict-lm-Define-error-API-if-platform-does-not-h.patch \
file://0002-onboard-onhover-seg-fault-fix.patch \
"
SRC_URI[md5sum] = "1a2fbe82e934f5b37841d17ff51e80e8"
SRC_URI[sha256sum] = "01cae1ac5b1ef1ab985bd2d2d79ded6fc99ee04b1535cc1bb191e43a231a3865"

inherit features_check setuptools3 pkgconfig gtk-icon-cache gsettings mime-xdg

REQUIRED_DISTRO_FEATURES = "x11"

FILES:${PN} += " \
${datadir}/dbus-1 \
${datadir}/icons \
${datadir}/gnome-shell \
${datadir}/help \
"

RDEPENDS:${PN} += " \
ncurses \
python3-dbus \
python3-pycairo \
python3-pygobject \
"

0 comments on commit 8f535d6

Please sign in to comment.