Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
pmaports
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
postmarketOS
pmaports
Commits
24da3cda
Commit
24da3cda
authored
4 years ago
by
Dylan Van Assche
Browse files
Options
Downloads
Patches
Plain Diff
temp/feedbackd: device-specific feedbackd themes
parent
3ee2cec7
No related branches found
No related tags found
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
temp/feedbackd/0001-fbd-feedback-manager-Allow-device-specific-feedbackd.patch
+169
-0
169 additions, 0 deletions
...bd-feedback-manager-Allow-device-specific-feedbackd.patch
temp/feedbackd/APKBUILD
+37
-0
37 additions, 0 deletions
temp/feedbackd/APKBUILD
with
206 additions
and
0 deletions
temp/feedbackd/0001-fbd-feedback-manager-Allow-device-specific-feedbackd.patch
0 → 100644
+
169
−
0
View file @
24da3cda
From 36fbaced41d8a99151b4f5f199a849ff60606d9c Mon Sep 17 00:00:00 2001
From: Dylan Van Assche <me@dylanvanassche.be>
Date: Thu, 24 Dec 2020 16:23:44 +0100
Subject: [PATCH] fbd-feedback-manager: Allow device-specific feedbackd themes
---
build-aux/post_install.py | 14 ++++++++
data/meson.build | 2 +-
meson.build | 5 +++
src/fbd-feedback-manager.c | 66 ++++++++++++++++++++++++++++++++++++--
4 files changed, 84 insertions(+), 3 deletions(-)
create mode 100644 build-aux/post_install.py
diff --git a/build-aux/post_install.py b/build-aux/post_install.py
new file mode 100644
index 0000000..bf5128c
--- /dev/null
+++ b/build-aux/post_install.py
@@ -0,0 +1,14 @@
+#!/usr/bin/python3
+
+import os
+import subprocess
+import sys
+
+destdir = os.environ.get('DESTDIR', '')
+
+if not destdir and len(sys.argv) > 1:
+ datadir = sys.argv[1]
+
+ print('Compiling gsettings schemas...')
+ subprocess.call(['glib-compile-schemas', os.path.join(datadir, 'glib-2.0', 'schemas')])
+
diff --git a/data/meson.build b/data/meson.build
index d90230e..1f4e809 100644
--- a/data/meson.build
+++ b/data/meson.build
@@ -53,7 +53,7 @@
install_data(
if json_glib_validate.found()
jsons = []
foreach theme : theme_json
- jsons += (join_paths(meson.current_source_dir(), theme_json))
+ jsons += (join_paths(meson.current_source_dir(), theme))
endforeach
custom_target('validate-json',
build_by_default: true,
diff --git a/meson.build b/meson.build
index 634eefe..54dac50 100644
--- a/meson.build
+++ b/meson.build
@@ -98,6 +98,11 @@
libname = 'libfeedback-' + apiversion
json_glib_validate = find_program('json-glib-validate', required: false)
+meson.add_install_script(
+ join_paths('build-aux', 'post_install.py'),
+ datadir
+)
+
subdir('data')
subdir('libfeedback')
subdir('src')
diff --git a/src/fbd-feedback-manager.c b/src/fbd-feedback-manager.c
index ef508c7..a75a226 100644
--- a/src/fbd-feedback-manager.c
+++ b/src/fbd-feedback-manager.c
@@ -18,13 +18,18 @@
#include <gio/gio.h>
#include <glib-unix.h>
#include <gudev/gudev.h>
+#include <stdio.h>
#define FEEDBACKD_SCHEMA_ID "org.sigxcpu.feedbackd"
#define FEEDBACKD_KEY_PROFILE "profile"
+#define FEEDBACKD_THEME_VAR "FEEDBACK_THEME"
#define APP_SCHEMA FEEDBACKD_SCHEMA_ID ".application"
#define APP_PREFIX "/org/sigxcpu/feedbackd/application/"
+#define DEVICE_TREE_PATH "/sys/firmware/devicetree/base/compatible"
+#define DEVICE_NAME_MAX 1024
+
/**
* SECTION:fbd-feedback-manager
@@ -352,6 +357,55 @@
fbd_feedback_manager_handle_end_feedback (LfbGdbusFeedback *object,
return TRUE;
}
+static gchar *
+find_themefile () {
+ gint i = 0;
+ gsize len;
+ const gchar *comp;
+ g_autoptr(GError) err = NULL;
+ gchar **xdg_data_dirs = (gchar **) g_get_system_data_dirs();
+ gchar *config_path = NULL;
+ gchar *compatibles = NULL;
+
+ // Try to read the device name
+ if (g_file_test(DEVICE_TREE_PATH, (G_FILE_TEST_EXISTS))) {
+ g_debug("Found device tree device compatible at %s", DEVICE_TREE_PATH);
+
+ // Check if feedbackd has a proper config available this device
+ if(!g_file_get_contents(DEVICE_TREE_PATH, &compatibles, &len, &err))
+ g_warning ("Unable to read: %s", err->message);
+
+ comp = compatibles;
+ while(comp - compatibles < len) {
+
+ // Iterate over $XDG_DATA_DIRS
+ for (i = 0; i < g_strv_length(xdg_data_dirs); i++) {
+ config_path = g_strconcat(xdg_data_dirs[i], "feedbackd/themes/", comp, ".json", NULL);
+ g_debug("Searching for device specific themefile in %s", config_path);
+
+ // Check if file exist
+ if (g_file_test(config_path, (G_FILE_TEST_EXISTS))) {
+ g_debug("Found themefile for this device at: %s", config_path);
+ return g_strdup(config_path);
+ }
+ }
+
+ // Next compatible
+ comp = strchr(comp, 0);
+ comp++;
+ }
+ }
+ else {
+ g_debug("Device tree path does not exist: %s", DEVICE_TREE_PATH);
+ }
+
+ // No path found, free all
+ g_free(compatibles);
+ g_free(config_path);
+
+ return NULL;
+}
+
static void
fbd_feedback_manager_constructed (GObject *object)
{
@@ -361,14 +415,22 @@
fbd_feedback_manager_constructed (GObject *object)
G_OBJECT_CLASS (fbd_feedback_manager_parent_class)->constructed (object);
- themefile = g_getenv ("FEEDBACK_THEME");
+ // Search for device-specific configuration
+ themefile = find_themefile ();
+
+ // Overide themefile with environment variable if requested
+ if (!themefile)
+ themefile = g_getenv(FEEDBACKD_THEME_VAR);
+
+ // Fallback to default configuration if needed
if (!themefile)
themefile = FEEDBACKD_THEME_DIR "/default.json";
+ g_info("Using themefile: %s", themefile);
self->theme = fbd_feedback_theme_new_from_file (themefile, &err);
if (!self->theme) {
/* No point to carry on */
- g_error ("Failed to load default theme: %s", err->message);
+ g_error ("Failed to load theme: %s", err->message);
}
g_signal_connect (self, "notify::profile", (GCallback)on_profile_changed, NULL);
--
2.26.2
This diff is collapsed.
Click to expand it.
temp/feedbackd/APKBUILD
0 → 100644
+
37
−
0
View file @
24da3cda
# Forked from Alpine to provide a newer version
pkgname
=
feedbackd
pkgver
=
0_git20200726
pkgrel
=
0
pkgdesc
=
"A daemon to provide haptic (and later more) feedback on events"
url
=
"https://source.puri.sm/Librem5/feedbackd"
arch
=
"all"
license
=
"GPL-3.0-or-later"
depends
=
"dbus"
makedepends
=
"meson glib-dev gsound-dev libgudev-dev json-glib-dev gtk-doc
vala gobject-introspection-dev"
subpackages
=
"
$pkgname
-dev"
source
=
"https://source.puri.sm/Librem5/feedbackd/-/archive/v0.0.0+
${
pkgver
#0_
}
/feedbackd-v0.0.0+
${
pkgver
#0_
}
.tar.gz
0001-fbd-feedback-manager-Allow-device-specific-feedbackd.patch"
builddir
=
"
$srcdir
/
$pkgname
-v0.0.0+
${
pkgver
#0_
}
"
options
=
"!check"
# Tests fail in QEMU
build
()
{
abuild-meson
\
-Dgtk_doc
=
false
\
.
output
meson compile
${
JOBS
:+-j
${
JOBS
}}
-C
output
}
check
()
{
meson
test
--no-rebuild
-v
-C
output
}
package
()
{
DESTDIR
=
"
$pkgdir
"
meson
install
--no-rebuild
-C
output
install
-Dm644
"
$builddir
"
/debian/feedbackd.udev
\
"
$pkgdir
"
/usr/lib/udev/rules.d/90-feedbackd.rules
}
sha512sums
=
"2a3e443c5f565dce7cdc25ade73934b5ab29c9efc6ceaa2d404111bfcd67fbc9b02893fc34559c8071aaba218686f2ba8109b2fd92a74e9f16955406ed6af6f6 feedbackd-v0.0.0+git20200726.tar.gz
65ff25262bd6a718c68f1eba911e8f79fe5a48bdc396c1f712039c2b18829e8f0b7307ebe85aeb378f19eabd0580ebc4321196118cfb3fb7710ea20d700b5054 0001-fbd-feedback-manager-Allow-device-specific-feedbackd.patch"
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment