From 0dbb5674450b27995764249abf4c9ecf82ae558a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guido=20G=C3=BCnther?= Date: Wed, 12 Oct 2022 10:49:26 +0200 Subject: [PATCH] Use libfeedback to emit shutter sound (MR 24) This makes it simpler to notice that a picture was taken --- meson.build | 3 ++- src/main.c | 26 ++++++++++++++++++++++++-- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/meson.build b/meson.build index a654aa4..5d17d3a 100644 --- a/meson.build +++ b/meson.build @@ -2,6 +2,7 @@ project('megapixels', 'c', version: '1.5.2') gnome = import('gnome') gtkdep = dependency('gtk4') +libfeedback = dependency('libfeedback-0.0') tiff = dependency('libtiff-4') zbar = dependency('zbar') threads = dependency('threads') @@ -50,7 +51,7 @@ executable('megapixels', 'src/zbar_pipeline.c', resources, include_directories: 'src/', - dependencies: [gtkdep, libm, tiff, zbar, threads, epoxy], + dependencies: [gtkdep, libfeedback, libm, tiff, zbar, threads, epoxy], install: true, link_args: '-Wl,-ldl') diff --git a/src/main.c b/src/main.c index fd0a74c..57ca9d8 100644 --- a/src/main.c +++ b/src/main.c @@ -10,6 +10,8 @@ #include #include #include +#define LIBFEEDBACK_USE_UNSTABLE_API +#include #include #include #include @@ -32,6 +34,8 @@ RENDERDOC_API_1_1_2 *rdoc_api = NULL; #endif +#define APP_ID "org.postmarketos.Megapixels" + enum user_control { USER_CONTROL_ISO, USER_CONTROL_SHUTTER }; static bool camera_is_initialized = false; @@ -75,6 +79,7 @@ GtkWidget *scanned_codes; GtkWidget *preview_top_box; GtkWidget *preview_bottom_box; GtkWidget *flash_button; +LfbEvent *capture_event; GSettings *settings; @@ -516,6 +521,9 @@ run_capture_action(GSimpleAction *action, GVariant *param, gpointer user_data) { gtk_spinner_start(GTK_SPINNER(process_spinner)); gtk_stack_set_visible_child(GTK_STACK(open_last_stack), process_spinner); + if (capture_event) + lfb_event_trigger_feedback_async(capture_event, NULL, NULL, NULL); + mp_io_pipeline_capture(); } @@ -976,7 +984,6 @@ activate(GtkApplication *app, gpointer data) "gtk-application-prefer-dark-theme", TRUE, NULL); - GdkDisplay *display = gdk_display_get_default(); GtkIconTheme *icon_theme = gtk_icon_theme_get_for_display(display); gtk_icon_theme_add_resource_path(icon_theme, "/org/postmarketos/Megapixels"); @@ -1108,6 +1115,17 @@ activate(GtkApplication *app, gpointer data) gtk_widget_show(window); } +static void +startup(GApplication *app, gpointer data) +{ + g_autoptr(GError) err = NULL; + + if (lfb_init(APP_ID, &err)) + capture_event = lfb_event_new("camera-shutter"); + else + g_warning("Failed to init libfeedback: %s", err->message); +} + static void shutdown(GApplication *app, gpointer data) { @@ -1115,6 +1133,9 @@ shutdown(GApplication *app, gpointer data) #ifdef DEBUG mp_io_pipeline_stop(); mp_flash_gtk_clean(); + + g_clear_object(&capture_event); + lfb_uninit(); #endif } @@ -1141,8 +1162,9 @@ main(int argc, char *argv[]) setenv("LC_NUMERIC", "C", 1); - GtkApplication *app = gtk_application_new("org.postmarketos.Megapixels", 0); + GtkApplication *app = gtk_application_new(APP_ID, 0); + g_signal_connect(app, "startup", G_CALLBACK(startup), NULL); g_signal_connect(app, "activate", G_CALLBACK(activate), NULL); g_signal_connect(app, "shutdown", G_CALLBACK(shutdown), NULL);