From d03af89d59bd6b94343d871659108ba4b7c56fa0 Mon Sep 17 00:00:00 2001 From: Mars-Wave <57585293+Mars-Wave@users.noreply.github.com> Date: Wed, 21 Jan 2026 20:54:22 +0100 Subject: [PATCH] Share one GSettings and survive a missing schema --- resources/meson.build | 6 +++--- resources/resources.xml.in | 1 - resources/wdisplays.gschema.xml | 2 +- src/main.c | 35 ++++++++++++++++++--------------- src/wdisplays.h | 2 ++ 5 files changed, 25 insertions(+), 21 deletions(-) diff --git a/resources/meson.build b/resources/meson.build index 81dadee..40e79ea 100644 --- a/resources/meson.build +++ b/resources/meson.build @@ -49,9 +49,9 @@ install_data( configuration: conf), install_dir: get_option('datadir') / 'applications') -settings_schemas = [ 'wdisplays.gschema.xml' ] -gschema_dir = get_option('prefix') / get_option('datadir') / 'glib-2.0' / 'schemas' -install_data(settings_schemas, install_dir: gschema_dir) +install_data('wdisplays.gschema.xml', + rename: '@0@.gschema.xml'.format(meson.project_name()), + install_dir: get_option('datadir') / 'glib-2.0' / 'schemas') gnome.post_install( glib_compile_schemas: true diff --git a/resources/resources.xml.in b/resources/resources.xml.in index 31c3eee..4bed4b2 100644 --- a/resources/resources.xml.in +++ b/resources/resources.xml.in @@ -3,7 +3,6 @@ wdisplays.ui head.ui - wdisplays.gschema.xml style.css diff --git a/resources/wdisplays.gschema.xml b/resources/wdisplays.gschema.xml index bf27deb..176072c 100644 --- a/resources/wdisplays.gschema.xml +++ b/resources/wdisplays.gschema.xml @@ -1,6 +1,6 @@ - + false diff --git a/src/main.c b/src/main.c index 973332d..176731d 100644 --- a/src/main.c +++ b/src/main.c @@ -418,6 +418,7 @@ static void cleanup(GtkWidget *window, gpointer data) { g_object_unref(state->grab_cursor); g_object_unref(state->grabbing_cursor); g_object_unref(state->move_cursor); + g_clear_object(&state->settings); wd_state_destroy(state); } @@ -858,10 +859,9 @@ static void info_bar_animation_done(GObject *object, GParamSpec *pspec, gpointer static void auto_apply_selected(GSimpleAction *action, GVariant *param, gpointer data) { struct wd_state *state = data; - - GSettings *settings = g_settings_new("com.github.artizirk.wdisplays"); - g_settings_set_boolean(settings, "auto-apply", g_variant_get_boolean(param)); - + if (state->settings != NULL) { + g_settings_set_boolean(state->settings, "auto-apply", g_variant_get_boolean(param)); + } state->autoapply = g_variant_get_boolean(param); g_simple_action_set_state(action, param); } @@ -878,10 +878,9 @@ static gboolean redraw_canvas(GtkWidget *widget, GdkFrameClock *frame_clock, gpo static void capture_selected(GSimpleAction *action, GVariant *param, gpointer data) { struct wd_state *state = data; - - GSettings *settings = g_settings_new("com.github.artizirk.wdisplays"); - g_settings_set_boolean(settings, "capture-screens", g_variant_get_boolean(param)); - + if (state->settings != NULL) { + g_settings_set_boolean(state->settings, "capture-screens", g_variant_get_boolean(param)); + } state->capture = g_variant_get_boolean(param); g_simple_action_set_state(action, param); update_tick_callback(state); @@ -889,10 +888,9 @@ static void capture_selected(GSimpleAction *action, GVariant *param, gpointer da static void overlay_selected(GSimpleAction *action, GVariant *param, gpointer data) { struct wd_state *state = data; - - GSettings *settings = g_settings_new("com.github.artizirk.wdisplays"); - g_settings_set_boolean(settings, "show-overlay", g_variant_get_boolean(param)); - + if (state->settings != NULL) { + g_settings_set_boolean(state->settings, "show-overlay", g_variant_get_boolean(param)); + } state->show_overlay = g_variant_get_boolean(param); g_simple_action_set_state(action, param); @@ -1031,10 +1029,15 @@ static void activate(GtkApplication* app, gpointer user_data) { g_signal_connect(action, "activate", G_CALLBACK(zoom_in), state); g_action_map_add_action(G_ACTION_MAP(main_actions), G_ACTION(action)); - GSettings *settings = g_settings_new("com.github.artizirk.wdisplays"); - state->autoapply = g_settings_get_boolean(settings, "auto-apply"); - state->capture = g_settings_get_boolean(settings, "capture-screens"); - state->show_overlay = g_settings_get_boolean(settings, "show-overlay"); + GSettingsSchemaSource *schemas = g_settings_schema_source_get_default(); + g_autoptr(GSettingsSchema) schema = schemas == NULL ? NULL : + g_settings_schema_source_lookup(schemas, WDISPLAYS_APP_ID, TRUE); + if (schema != NULL) { + state->settings = g_settings_new(WDISPLAYS_APP_ID); + state->autoapply = g_settings_get_boolean(state->settings, "auto-apply"); + state->capture = g_settings_get_boolean(state->settings, "capture-screens"); + state->show_overlay = g_settings_get_boolean(state->settings, "show-overlay"); + } action = g_simple_action_new_stateful("auto-apply", NULL, g_variant_new_boolean(state->autoapply)); diff --git a/src/wdisplays.h b/src/wdisplays.h index 4824017..0e7a3c6 100644 --- a/src/wdisplays.h +++ b/src/wdisplays.h @@ -215,6 +215,8 @@ struct wd_state { GtkWidget *info_label; GtkWidget *menu_button; + GSettings *settings; + GdkCursor *grab_cursor; GdkCursor *grabbing_cursor; GdkCursor *move_cursor;