Message ID | 20241125172401.596324-1-pratheeksha.s.n@ni.com |
---|---|
State | New |
Headers | show |
Series | [meta-gnome] Onboard: Add onboard virtual keyboard | expand |
This is a defunct Ubuntu project. Is there a reason it should be added to meta-gnome, as gnome provides its own implementation of the on screen keyboard? Alex On Mon, 25 Nov 2024 at 18:24, 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 | 70 +++++++++++++++++++ > .../0002-onboard-onhover-seg-fault-fix.patch | 52 ++++++++++++++ > .../recipes-support/onboard/onboard_1.4.1.bb | 34 +++++++++ > 3 files changed, 156 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..3f4145264 > --- /dev/null > +++ b/meta-gnome/recipes-support/onboard/onboard/0001-pypredict-lm-Define-error-API-if-platform-does-not-h.patch > @@ -0,0 +1,70 @@ > +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. > + > +Upstream-Status: Inactive-Upstream [lastcommit: 2017-10-09] > + > +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..6a6346d8a > --- /dev/null > +++ b/meta-gnome/recipes-support/onboard/onboard_1.4.1.bb > @@ -0,0 +1,34 @@ > +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 -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 (#114045): https://lists.openembedded.org/g/openembedded-devel/message/114045 > Mute This Topic: https://lists.openembedded.org/mt/109720017/1686489 > Group Owner: openembedded-devel+owner@lists.openembedded.org > Unsubscribe: https://lists.openembedded.org/g/openembedded-devel/unsub [alex.kanavin@gmail.com] > -=-=-=-=-=-=-=-=-=-=-=- >
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..3f4145264 --- /dev/null +++ b/meta-gnome/recipes-support/onboard/onboard/0001-pypredict-lm-Define-error-API-if-platform-does-not-h.patch @@ -0,0 +1,70 @@ +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. + +Upstream-Status: Inactive-Upstream [lastcommit: 2017-10-09] + +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..6a6346d8a --- /dev/null +++ b/meta-gnome/recipes-support/onboard/onboard_1.4.1.bb @@ -0,0 +1,34 @@ +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 -Dm 0644 ${D}${PYTHON_SITEPACKAGES_DIR}${sysconfdir}/xdg/autostart/onboard-autostart.desktop ${D}${sysconfdir}/xdg/autostart/onboard-autostart.desktop +}