// Copyright (c) 2026 Storm Dragon // Authors: Storm Dragon, Angus Kola // SPDX-License-Identifier: GPL-3.0-or-later #include "native_internal.h" void prefs_voice_defaults(int kind) { const char *ids[] = {"rate_default", "pitch_default", "volume_default"}; const char *server[] = {"Use server default rate", "Use server default pitch", "Use server default volume"}; const char *inherited[] = {"Use Default voice rate", "Use Default voice pitch", "Use Default voice volume"}; for (unsigned i = 0; i < G_N_ELEMENTS(ids); i++) { const char *label = kind == 0 ? server[i] : inherited[i]; if (kind == 1 && i == 1) label = "Use automatic uppercase pitch"; GtkButton *button = GTK_BUTTON(prefs_widget(ids[i])); if (g_strcmp0(gtk_button_get_label(button), label) != 0) gtk_button_set_label(button, label); } } void prefs_number_set(const char *id, double value, int use_default) { gchar *check = g_strconcat(id, "_default", NULL); gtk_range_set_value(GTK_RANGE(prefs_widget(id)), value); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(prefs_widget(check)), use_default); gtk_widget_set_sensitive(prefs_widget(id), !use_default); g_free(check); } double prefs_number_value(const char *id) { return gtk_range_get_value(GTK_RANGE(prefs_widget(id))); } int prefs_default(const char *id) { gchar *check = g_strconcat(id, "_default", NULL); int result = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(prefs_widget(check))); g_free(check); return result; } void prefs_choice_set(const char *id, int value) { gchar *name = g_strdup_printf("%s_%d", id, value); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(prefs_widget(name)), TRUE); g_free(name); } int prefs_choice_get(const char *id) { for (int i = 0; i < 4; i++) { gchar *name = g_strdup_printf("%s_%d", id, i); GtkWidget *button = prefs_widget(name); g_free(name); if (button && gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button))) return i; } return -1; } void prefs_combo_set(const char *id, int value) { gtk_combo_box_set_active(GTK_COMBO_BOX(prefs_widget(id)), value); } int prefs_combo_get(const char *id) { return gtk_combo_box_get_active(GTK_COMBO_BOX(prefs_widget(id))); } void prefs_check_set(const char *id, int value) { gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(prefs_widget(id)), value); } int prefs_check_get(const char *id) { return gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(prefs_widget(id))); } void prefs_range_set(const char *id, double value) { gtk_range_set_value(GTK_RANGE(prefs_widget(id)), value); } void prefs_spin_set(const char *id, double value) { gtk_spin_button_set_value(GTK_SPIN_BUTTON(prefs_widget(id)), value); } double prefs_spin_get(const char *id) { return gtk_spin_button_get_value(GTK_SPIN_BUTTON(prefs_widget(id))); } void prefs_combo_clear(const char *id) { gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(prefs_widget(id))); } void prefs_combo_append(const char *id, const char *text) { gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(prefs_widget(id)), text); } void prefs_hardware_devices_clear(void) { GtkEntryCompletion *completion = gtk_entry_get_completion(GTK_ENTRY(prefs_widget("hardwareDeviceEntry"))); gtk_list_store_clear(GTK_LIST_STORE(gtk_entry_completion_get_model(completion))); } void prefs_hardware_device_append(const char *text) { GtkEntryCompletion *completion = gtk_entry_get_completion(GTK_ENTRY(prefs_widget("hardwareDeviceEntry"))); GtkListStore *model = GTK_LIST_STORE(gtk_entry_completion_get_model(completion)); GtkTreeIter row; gtk_list_store_append(model, &row); gtk_list_store_set(model, &row, 0, text, -1); } void prefs_hardware_device_set(const char *text) { gtk_entry_set_text(GTK_ENTRY(prefs_widget("hardwareDeviceEntry")), text); } const char *prefs_hardware_device_get(void) { return gtk_entry_get_text(GTK_ENTRY(prefs_widget("hardwareDeviceEntry"))); } void prefs_hardware_sensitivity(int enabled) { gtk_widget_set_sensitive(prefs_widget("hardwareDeviceEntry"), enabled); gtk_widget_set_sensitive(prefs_widget("hardwareBaudCombo"), enabled); gtk_widget_set_sensitive(prefs_widget("speechLanguages"), !enabled); gtk_widget_set_sensitive(prefs_widget("speechFamilies"), !enabled); } void prefs_entry_set(const char *id, const char *text) { gtk_entry_set_text(GTK_ENTRY(prefs_widget(id)), text); } const char *prefs_entry_get(const char *id) { return gtk_entry_get_text(GTK_ENTRY(prefs_widget(id))); }