diff mbox series

[meta-gnome] Onboard: Add onboard virtual keyboard

Message ID 20241122100810.3460864-1-pratheeksha.s.n@ni.com
State Under Review
Headers show
Series [meta-gnome] Onboard: Add onboard virtual keyboard | expand

Commit Message

pratheekshasn Nov. 22, 2024, 10:08 a.m. UTC
Signed-off by: Pratheeksha S N <pratheeksha.s.n@ni.com>
---
 ...ine-error-API-if-platform-does-not-h.patch | 67 +++++++++++++++++++
 .../0002-onboard-onhover-seg-fault-fix.patch  | 52 ++++++++++++++
 .../recipes-support/onboard/onboard_1.4.1.bb  | 36 ++++++++++
 3 files changed, 155 insertions(+)
 create mode 100644 meta-gnome/recipes-support/onboard/onboard/0001-pypredict-lm-Define-error-API-if-platform-does-not-h.patch
 create mode 100644 meta-gnome/recipes-support/onboard/onboard/0002-onboard-onhover-seg-fault-fix.patch
 create mode 100644 meta-gnome/recipes-support/onboard/onboard_1.4.1.bb

Comments

Khem Raj Nov. 22, 2024, 4:28 p.m. UTC | #1
On Fri, Nov 22, 2024 at 2:08 AM pratheekshasn via
lists.openembedded.org <pratheeksha.s.n=ni.com@lists.openembedded.org>
wrote:
>
> Signed-off by: Pratheeksha S N <pratheeksha.s.n@ni.com>
> ---
>  ...ine-error-API-if-platform-does-not-h.patch | 67 +++++++++++++++++++
>  .../0002-onboard-onhover-seg-fault-fix.patch  | 52 ++++++++++++++
>  .../recipes-support/onboard/onboard_1.4.1.bb  | 36 ++++++++++
>  3 files changed, 155 insertions(+)
>  create mode 100644 meta-gnome/recipes-support/onboard/onboard/0001-pypredict-lm-Define-error-API-if-platform-does-not-h.patch
>  create mode 100644 meta-gnome/recipes-support/onboard/onboard/0002-onboard-onhover-seg-fault-fix.patch
>  create mode 100644 meta-gnome/recipes-support/onboard/onboard_1.4.1.bb
>
> diff --git a/meta-gnome/recipes-support/onboard/onboard/0001-pypredict-lm-Define-error-API-if-platform-does-not-h.patch b/meta-gnome/recipes-support/onboard/onboard/0001-pypredict-lm-Define-error-API-if-platform-does-not-h.patch
> new file mode 100644
> index 000000000..fda37895c
> --- /dev/null
> +++ b/meta-gnome/recipes-support/onboard/onboard/0001-pypredict-lm-Define-error-API-if-platform-does-not-h.patch
> @@ -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
> +
> diff --git a/meta-gnome/recipes-support/onboard/onboard/0002-onboard-onhover-seg-fault-fix.patch b/meta-gnome/recipes-support/onboard/onboard/0002-onboard-onhover-seg-fault-fix.patch
> new file mode 100644
> index 000000000..1ec195cb8
> --- /dev/null
> +++ b/meta-gnome/recipes-support/onboard/onboard/0002-onboard-onhover-seg-fault-fix.patch
> @@ -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)
> diff --git a/meta-gnome/recipes-support/onboard/onboard_1.4.1.bb b/meta-gnome/recipes-support/onboard/onboard_1.4.1.bb
> new file mode 100644
> index 000000000..359a2134e
> --- /dev/null
> +++ b/meta-gnome/recipes-support/onboard/onboard_1.4.1.bb
> @@ -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

Use a single line to create the dir and copy the file.

Install -Dm 0644
${D}${PYTHON_SITEPACKAGES_DIR}${sysconfdir}/xdg/autostart/onboard-autostart.desktop
${D}${sysconfdir}/xdg/autostart/onboard-autostart.desktop

> +}
> --
> 2.43.0
>
>
> -=-=-=-=-=-=-=-=-=-=-=-
> Links: You receive all messages sent to this group.
> View/Reply Online (#113995): https://lists.openembedded.org/g/openembedded-devel/message/113995
> Mute This Topic: https://lists.openembedded.org/mt/109720017/1997914
> Group Owner: openembedded-devel+owner@lists.openembedded.org
> Unsubscribe: https://lists.openembedded.org/g/openembedded-devel/unsub [raj.khem@gmail.com]
> -=-=-=-=-=-=-=-=-=-=-=-
>
Khem Raj Nov. 23, 2024, 8:44 p.m. UTC | #2
another failure

ERROR: onboard-1.4.1-r0 do_patch: QA Issue: Missing Upstream-Status in patch
/mnt/b/yoe/master/sources/meta-openembedded/meta-gnome/recipes-support/onboard/onboard/0001-pypredict-lm-Define-error-API-if-platform-does-
not-h.patch

On Fri, Nov 22, 2024 at 8:28 AM Khem Raj <raj.khem@gmail.com> wrote:
>
> On Fri, Nov 22, 2024 at 2:08 AM pratheekshasn via
> lists.openembedded.org <pratheeksha.s.n=ni.com@lists.openembedded.org>
> wrote:
> >
> > Signed-off by: Pratheeksha S N <pratheeksha.s.n@ni.com>
> > ---
> >  ...ine-error-API-if-platform-does-not-h.patch | 67 +++++++++++++++++++
> >  .../0002-onboard-onhover-seg-fault-fix.patch  | 52 ++++++++++++++
> >  .../recipes-support/onboard/onboard_1.4.1.bb  | 36 ++++++++++
> >  3 files changed, 155 insertions(+)
> >  create mode 100644 meta-gnome/recipes-support/onboard/onboard/0001-pypredict-lm-Define-error-API-if-platform-does-not-h.patch
> >  create mode 100644 meta-gnome/recipes-support/onboard/onboard/0002-onboard-onhover-seg-fault-fix.patch
> >  create mode 100644 meta-gnome/recipes-support/onboard/onboard_1.4.1.bb
> >
> > diff --git a/meta-gnome/recipes-support/onboard/onboard/0001-pypredict-lm-Define-error-API-if-platform-does-not-h.patch b/meta-gnome/recipes-support/onboard/onboard/0001-pypredict-lm-Define-error-API-if-platform-does-not-h.patch
> > new file mode 100644
> > index 000000000..fda37895c
> > --- /dev/null
> > +++ b/meta-gnome/recipes-support/onboard/onboard/0001-pypredict-lm-Define-error-API-if-platform-does-not-h.patch
> > @@ -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
> > +
> > diff --git a/meta-gnome/recipes-support/onboard/onboard/0002-onboard-onhover-seg-fault-fix.patch b/meta-gnome/recipes-support/onboard/onboard/0002-onboard-onhover-seg-fault-fix.patch
> > new file mode 100644
> > index 000000000..1ec195cb8
> > --- /dev/null
> > +++ b/meta-gnome/recipes-support/onboard/onboard/0002-onboard-onhover-seg-fault-fix.patch
> > @@ -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)
> > diff --git a/meta-gnome/recipes-support/onboard/onboard_1.4.1.bb b/meta-gnome/recipes-support/onboard/onboard_1.4.1.bb
> > new file mode 100644
> > index 000000000..359a2134e
> > --- /dev/null
> > +++ b/meta-gnome/recipes-support/onboard/onboard_1.4.1.bb
> > @@ -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
>
> Use a single line to create the dir and copy the file.
>
> Install -Dm 0644
> ${D}${PYTHON_SITEPACKAGES_DIR}${sysconfdir}/xdg/autostart/onboard-autostart.desktop
> ${D}${sysconfdir}/xdg/autostart/onboard-autostart.desktop
>
> > +}
> > --
> > 2.43.0
> >
> >
> > -=-=-=-=-=-=-=-=-=-=-=-
> > Links: You receive all messages sent to this group.
> > View/Reply Online (#113995): https://lists.openembedded.org/g/openembedded-devel/message/113995
> > Mute This Topic: https://lists.openembedded.org/mt/109720017/1997914
> > Group Owner: openembedded-devel+owner@lists.openembedded.org
> > Unsubscribe: https://lists.openembedded.org/g/openembedded-devel/unsub [raj.khem@gmail.com]
> > -=-=-=-=-=-=-=-=-=-=-=-
> >
diff mbox series

Patch

diff --git a/meta-gnome/recipes-support/onboard/onboard/0001-pypredict-lm-Define-error-API-if-platform-does-not-h.patch b/meta-gnome/recipes-support/onboard/onboard/0001-pypredict-lm-Define-error-API-if-platform-does-not-h.patch
new file mode 100644
index 000000000..fda37895c
--- /dev/null
+++ b/meta-gnome/recipes-support/onboard/onboard/0001-pypredict-lm-Define-error-API-if-platform-does-not-h.patch
@@ -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
+
diff --git a/meta-gnome/recipes-support/onboard/onboard/0002-onboard-onhover-seg-fault-fix.patch b/meta-gnome/recipes-support/onboard/onboard/0002-onboard-onhover-seg-fault-fix.patch
new file mode 100644
index 000000000..1ec195cb8
--- /dev/null
+++ b/meta-gnome/recipes-support/onboard/onboard/0002-onboard-onhover-seg-fault-fix.patch
@@ -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)
diff --git a/meta-gnome/recipes-support/onboard/onboard_1.4.1.bb b/meta-gnome/recipes-support/onboard/onboard_1.4.1.bb
new file mode 100644
index 000000000..359a2134e
--- /dev/null
+++ b/meta-gnome/recipes-support/onboard/onboard_1.4.1.bb
@@ -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
+}