diff --git a/resources/wdisplays.gschema.xml b/resources/wdisplays.gschema.xml index 176072c..540885b 100644 --- a/resources/wdisplays.gschema.xml +++ b/resources/wdisplays.gschema.xml @@ -10,5 +10,8 @@ true + + false + diff --git a/src/main.c b/src/main.c index 176731d..eaf8026 100644 --- a/src/main.c +++ b/src/main.c @@ -904,6 +904,17 @@ static void overlay_selected(GSimpleAction *action, GVariant *param, gpointer da } } +#ifdef WITH_KANSHI +static void save_kanshi_config_selected(GSimpleAction *action, GVariant *param, gpointer data) { + struct wd_state *state = data; + if (state->settings != NULL) { + g_settings_set_boolean(state->settings, "save-kanshi-config", g_variant_get_boolean(param)); + } + state->save_kanshi_config = g_variant_get_boolean(param); + g_simple_action_set_state(action, param); +} +#endif + static void window_state_changed(GtkWidget *window, GdkEventWindowState *event, gpointer data) { struct wd_state *state = data; @@ -1037,6 +1048,9 @@ static void activate(GtkApplication* app, gpointer user_data) { 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"); +#ifdef WITH_KANSHI + state->save_kanshi_config = g_settings_get_boolean(state->settings, "save-kanshi-config"); +#endif } action = g_simple_action_new_stateful("auto-apply", NULL, @@ -1054,10 +1068,20 @@ static void activate(GtkApplication* app, gpointer user_data) { g_signal_connect(overlay_action, "change-state", G_CALLBACK(overlay_selected), state); g_action_map_add_action(G_ACTION_MAP(main_actions), G_ACTION(overlay_action)); +#ifdef WITH_KANSHI + action = g_simple_action_new_stateful("save-kanshi-config", NULL, + g_variant_new_boolean(state->save_kanshi_config)); + g_signal_connect(action, "change-state", G_CALLBACK(save_kanshi_config_selected), state); + g_action_map_add_action(G_ACTION_MAP(main_actions), G_ACTION(action)); +#endif + GMenu *main_menu = g_menu_new(); g_menu_append(main_menu, "_Automatically Apply Changes", "app.auto-apply"); g_menu_append(main_menu, "_Show Screen Contents", "app.capture-screens"); g_menu_append(main_menu, "_Overlay Screen Names", "app.show-overlay"); +#ifdef WITH_KANSHI + g_menu_append(main_menu, "Save to _kanshi Config", "app.save-kanshi-config"); +#endif gtk_menu_button_set_menu_model(GTK_MENU_BUTTON(state->menu_button), G_MENU_MODEL(main_menu)); gtk_menu_button_set_use_popover(GTK_MENU_BUTTON(state->menu_button), false); diff --git a/src/outputs.c b/src/outputs.c index b393feb..f41ee01 100644 --- a/src/outputs.c +++ b/src/outputs.c @@ -53,7 +53,9 @@ static void config_handle_succeeded(void *data, zwlr_output_configuration_v1_destroy(config); wd_ui_apply_done(pending->state, pending->outputs); #ifdef WITH_KANSHI - wd_store_config(pending->state, pending->outputs); + if (pending->state->save_kanshi_config) { + wd_store_config(pending->state, pending->outputs); + } #endif destroy_pending(pending); } diff --git a/src/wdisplays.h b/src/wdisplays.h index de77538..83690a2 100644 --- a/src/wdisplays.h +++ b/src/wdisplays.h @@ -190,6 +190,7 @@ struct wd_state { bool autoapply; bool capture; bool show_overlay; + bool save_kanshi_config; double zoom; unsigned int apply_idle;