diff --git a/.reuse/dep5 b/.reuse/dep5 index f40f818..882bb4c 100644 --- a/.reuse/dep5 +++ b/.reuse/dep5 @@ -27,3 +27,7 @@ License: MIT Files: protocol/wlr-screencopy-unstable-v1.xml Copyright: 2018 Simon Ser License: MIT + +Files: resources/wdisplays.gschema.xml +Copyright: 2026 Lauren Lagarde +License: MIT diff --git a/resources/meson.build b/resources/meson.build index 0cc2f81..40e79ea 100644 --- a/resources/meson.build +++ b/resources/meson.build @@ -48,3 +48,11 @@ install_data( output: '@0@.desktop'.format(meson.project_name()), configuration: conf), install_dir: get_option('datadir') / 'applications') + +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/wdisplays.gschema.xml b/resources/wdisplays.gschema.xml new file mode 100644 index 0000000..176072c --- /dev/null +++ b/resources/wdisplays.gschema.xml @@ -0,0 +1,14 @@ + + + + + false + + + true + + + true + + + diff --git a/src/main.c b/src/main.c index 6e03c55..eaba8da 100644 --- a/src/main.c +++ b/src/main.c @@ -486,6 +486,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); } @@ -915,6 +916,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; + 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); } @@ -928,6 +932,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; + 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); @@ -935,6 +942,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; + 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); @@ -1075,6 +1085,16 @@ 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)); + 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)); g_signal_connect(action, "change-state", G_CALLBACK(auto_apply_selected), state); diff --git a/src/wdisplays.h b/src/wdisplays.h index 2860a9c..84a31f4 100644 --- a/src/wdisplays.h +++ b/src/wdisplays.h @@ -221,6 +221,8 @@ struct wd_state { GtkWidget *info_label; GtkWidget *menu_button; + GSettings *settings; + GdkCursor *grab_cursor; GdkCursor *grabbing_cursor; GdkCursor *move_cursor;