// Copyright (c) 2026 Storm Dragon // Authors: Storm Dragon, Angus Kola // SPDX-License-Identifier: GPL-3.0-or-later #include "native_internal.h" void prefs_number_set(const char *id, double value) { GtkWidget *control = prefs_widget(id); gtk_range_set_value(GTK_RANGE(control), value); // Loading an effective value must not turn inheritance into an override. g_object_set_data(G_OBJECT(control), "number-edited", NULL); } double prefs_number_value(const char *id) { return gtk_range_get_value(GTK_RANGE(prefs_widget(id))); } int prefs_number_edited(const char *id) { return GPOINTER_TO_INT(g_object_get_data(G_OBJECT(prefs_widget(id)), "number-edited")); } 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))); }