Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Onboard: Add onboard virtual keyboard #67

Open
wants to merge 1 commit into
base: nilrt/master/next
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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 <raj.khem@gmail.com>
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 <raj.khem@gmail.com>
---
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 <pratheeksha.s.n@ni.com>

Upstream-Status: Inactive-Upstream [lastcommit: 2017-10-09]

--- 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)
36 changes: 36 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,36 @@
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 \
"

do_install:append() {
install -d ${D}${sysconfdir}/xdg/autostart

mv ${D}${PYTHON_SITEPACKAGES_DIR}${sysconfdir}/xdg/autostart/onboard-autostart.desktop ${D}${sysconfdir}/xdg/autostart
}