From 501118c38da4576fd594ef54b1cdd6fc35509723 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guido=20G=C3=BCnther?= Date: Fri, 18 Jul 2025 18:59:07 +0200 Subject: [PATCH 1/2] feedback-panel: Drop schema check MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We can depend on feedbackd 0.8.0 and do so since 0.46 already. Signed-off-by: Guido Günther Part-of: --- meson.build | 2 +- src/ms-feedback-panel.c | 36 ++++++++++++++---------------------- src/ui/ms-feedback-panel.ui | 1 - 3 files changed, 15 insertions(+), 24 deletions(-) diff --git a/meson.build b/meson.build index 031819d5..47f8522c 100644 --- a/meson.build +++ b/meson.build @@ -65,7 +65,7 @@ libgvc_dep = libgvc.get_variable('libgvc_dep') gtk_dep = dependency('gtk4', version: gtk_ver_cmp) gtk_wayland_dep = dependency('gtk4-wayland', version: gtk_ver_cmp) json_glib_dep = dependency('json-glib-1.0', version: '>= 1.6.2') -libfeedback_dep = dependency('libfeedback-0.0', version: '>= 0.7.0') +libfeedback_dep = dependency('libfeedback-0.0', version: '>= 0.8.0') libportal_dep = dependency('libportal', version: '>= 0.9.1') libportal_gtk4_dep = dependency('libportal-gtk4', version: '>= 0.9.1') phosh_plugins_dep = dependency('phosh-plugins', version: '>= 0.23.0') diff --git a/src/ms-feedback-panel.c b/src/ms-feedback-panel.c index 4b20d1cd..bc67c4be 100644 --- a/src/ms-feedback-panel.c +++ b/src/ms-feedback-panel.c @@ -685,8 +685,6 @@ static void ms_feedback_panel_constructed (GObject *object) { MsFeedbackPanel *self = MS_FEEDBACK_PANEL (object); - GSettingsSchemaSource *source = g_settings_schema_source_get_default (); - g_autoptr (GSettingsSchema) schema = NULL; gboolean found; G_OBJECT_CLASS (ms_feedback_panel_parent_class)->constructed (object); @@ -712,26 +710,20 @@ ms_feedback_panel_constructed (GObject *object) G_SETTINGS_BIND_DEFAULT); gtk_widget_set_visible (GTK_WIDGET (self->quick_silent_switch), found); - /* TODO: Simplify once we can rely on the schema key being present */ - schema = g_settings_schema_source_lookup (source, FEEDBACKD_SCHEMA_ID, TRUE); - if (g_settings_schema_has_key (schema, FEEDBACKD_KEY_MAX_HAPTIC_STRENGTH)) { - gtk_widget_set_visible (GTK_WIDGET (self->haptic_strenth_row), TRUE); - - g_settings_bind_with_mapping (self->settings, - FEEDBACKD_KEY_MAX_HAPTIC_STRENGTH, - G_OBJECT (self->haptic_strenth_adj), - "value", - G_SETTINGS_BIND_DEFAULT, - max_haptic_strength_get, - max_haptic_strength_set, - NULL, - NULL); - - g_signal_connect (self->settings, - "changed::" FEEDBACKD_KEY_MAX_HAPTIC_STRENGTH, - G_CALLBACK (on_haptic_strength_changed), - NULL); - } + g_settings_bind_with_mapping (self->settings, + FEEDBACKD_KEY_MAX_HAPTIC_STRENGTH, + G_OBJECT (self->haptic_strenth_adj), + "value", + G_SETTINGS_BIND_DEFAULT, + max_haptic_strength_get, + max_haptic_strength_set, + NULL, + NULL); + + g_signal_connect (self->settings, + "changed::" FEEDBACKD_KEY_MAX_HAPTIC_STRENGTH, + G_CALLBACK (on_haptic_strength_changed), + NULL); } diff --git a/src/ui/ms-feedback-panel.ui b/src/ui/ms-feedback-panel.ui index 42953793..5b815e2d 100644 --- a/src/ui/ms-feedback-panel.ui +++ b/src/ui/ms-feedback-panel.ui @@ -57,7 +57,6 @@ - 0 Haptic strength Maximum haptic feedback strength percentage 1 -- GitLab From 649ad122fcdc43aa9edc99ef62993f635c37b7aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guido=20G=C3=BCnther?= Date: Fri, 18 Jul 2025 18:49:16 +0200 Subject: [PATCH 2/2] osk-panel: Allow to configure automatic scaling properties MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Guido Günther Part-of: --- src/ms-osk-panel.c | 82 ++++++++++++++++++++++++++++++++++++++++-- src/ui/ms-osk-panel.ui | 21 +++++++++++ 2 files changed, 101 insertions(+), 2 deletions(-) diff --git a/src/ms-osk-panel.c b/src/ms-osk-panel.c index fa604259..e3bf3a9e 100644 --- a/src/ms-osk-panel.c +++ b/src/ms-osk-panel.c @@ -32,6 +32,7 @@ #define WORD_COMPLETION_KEY "completion-mode" #define HW_KEYBOARD_KEY "ignore-hw-keyboards" #define OSK_FEATURES_KEY "osk-features" +#define OSK_SCALING_KEY "scaling" #define PHOSH_OSK_COMPLETER_SETTINGS "sm.puri.phosh.osk.Completers" #define DEFAULT_COMPLETER_KEY "default" @@ -44,7 +45,7 @@ #define SCALE_WHEN_HORIZONTAL_KEY "scale-in-horizontal-screen-orientation" #define SCALE_WHEN_VERTICAL_KEY "scale-in-vertical-screen-orientation" -/* From phosh osk-stub */ +/* From stevia */ typedef enum { PHOSH_OSK_COMPLETION_MODE_NONE = 0, PHOSH_OSK_COMPLETION_MODE_MANUAL = (1 << 0), @@ -52,6 +53,13 @@ typedef enum { } CompletionMode; +typedef enum { + PHOSH_OSK_SCALING_NONE = 0, + PHOSH_OSK_SCALING_AUTO_PORTRAIT = (1 << 0), + PHOSH_OSK_SCALING_BOTTOM_DEAD_ZONE = (1 << 2), +} PhoshOskScalingFlags; + + typedef enum { PHOSH_OSK_FEATURE_DEFAULT = 0, PHOSH_OSK_FEATURE_KEY_DRAG = (1 << 0), @@ -97,6 +105,13 @@ struct _MsOskPanel { GListStore *shortcuts; gboolean shortcuts_updating; + /* Automatic scaling */ + AdwPreferencesGroup *osk_scaling_group; + AdwSwitchRow *osk_scaling_auto_portrait_switch; + AdwSwitchRow *osk_scaling_bottom_dead_zone_switch; + PhoshOskScalingFlags scaling; + + /* Squeekboard scaling */ GtkWidget *keyboard_height_prefs; GtkWidget *scale_in_horizontal_orientation; GtkWidget *scale_in_vertical_orientation; @@ -296,6 +311,48 @@ on_completion_switch_activate_changed (MsOskPanel *self, GParamSpec *spec, AdwSw } +static void +on_osk_scaling_key_changed (MsOskPanel *self) +{ + self->scaling = g_settings_get_flags (self->pos_settings, OSK_SCALING_KEY); + self->updating_flags = TRUE; + + adw_switch_row_set_active (self->osk_scaling_auto_portrait_switch, + self->scaling & PHOSH_OSK_SCALING_AUTO_PORTRAIT); + adw_switch_row_set_active (self->osk_scaling_bottom_dead_zone_switch, + self->scaling & PHOSH_OSK_SCALING_BOTTOM_DEAD_ZONE); + self->updating_flags = FALSE; +} + + +static void +on_osk_scaling_switch_changed (MsOskPanel *self, GParamSpec *spec, AdwSwitchRow *switch_) +{ + PhoshOskScalingFlags flag; + gboolean active; + + if (self->updating_flags) + return; + + if (switch_ == self->osk_scaling_auto_portrait_switch) { + flag = PHOSH_OSK_SCALING_AUTO_PORTRAIT; + } else if (switch_ == self->osk_scaling_bottom_dead_zone_switch) { + flag = PHOSH_OSK_SCALING_BOTTOM_DEAD_ZONE; + } else { + g_critical ("Unknown scaling switch"); + return; + } + + active = adw_switch_row_get_active (switch_); + if (active) + self->scaling |= flag; + else + self->scaling ^= flag; + + g_settings_set_flags (self->pos_settings, OSK_SCALING_KEY, self->scaling); +} + + static MsOskApp is_osk_app (void) { @@ -410,7 +467,14 @@ ms_osk_panel_class_init (MsOskPanelClass *klass) gtk_widget_class_bind_template_child (widget_class, MsOskPanel, terminal_layout_group); gtk_widget_class_bind_template_child (widget_class, MsOskPanel, shortcuts_box); - /* Squeekboard panel-size */ + /* Stevia scaling */ + gtk_widget_class_bind_template_child (widget_class, MsOskPanel, osk_scaling_group); + gtk_widget_class_bind_template_child (widget_class, MsOskPanel, + osk_scaling_auto_portrait_switch); + gtk_widget_class_bind_template_child (widget_class, MsOskPanel, + osk_scaling_bottom_dead_zone_switch); + gtk_widget_class_bind_template_callback (widget_class, on_osk_scaling_switch_changed); + /* Squeekboard scaling */ gtk_widget_class_bind_template_child (widget_class, MsOskPanel, keyboard_height_prefs); gtk_widget_class_bind_template_child (widget_class, MsOskPanel, scale_in_horizontal_orientation); gtk_widget_class_bind_template_child (widget_class, MsOskPanel, scale_in_vertical_orientation); @@ -634,6 +698,9 @@ completer_combo_sensitive_mapping (GValue *value, GVariant *variant, gpointer us static void ms_osk_panel_init_pos (MsOskPanel *self) { + GSettingsSchemaSource *source = g_settings_schema_source_get_default (); + g_autoptr (GSettingsSchema) schema = NULL; + gtk_widget_set_visible (self->hw_keyboard_switch, TRUE); self->pos_settings = g_settings_new (PHOSH_OSK_SETTINGS); g_settings_bind (self->pos_settings, HW_KEYBOARD_KEY, @@ -676,6 +743,17 @@ ms_osk_panel_init_pos (MsOskPanel *self) self->pos_completer_settings = g_settings_new (PHOSH_OSK_COMPLETER_SETTINGS); ms_osk_panel_init_pos_completer (self); + + schema = g_settings_schema_source_lookup (source, PHOSH_OSK_SETTINGS, TRUE); + if (g_settings_schema_has_key (schema, OSK_SCALING_KEY)) { + gtk_widget_set_visible (GTK_WIDGET (self->osk_scaling_group), TRUE); + + self->scaling = g_settings_get_flags (self->pos_settings, OSK_SCALING_KEY); + g_signal_connect_swapped (self->pos_settings, "changed::" OSK_SCALING_KEY, + G_CALLBACK (on_osk_scaling_key_changed), + self); + on_osk_scaling_key_changed (self); + } } diff --git a/src/ui/ms-osk-panel.ui b/src/ui/ms-osk-panel.ui index bb79b0a7..c921526e 100644 --- a/src/ui/ms-osk-panel.ui +++ b/src/ui/ms-osk-panel.ui @@ -95,6 +95,27 @@ + + + False + Scaling + + + Keep physical size constant + Whether to keep the OSK's size constant in portrait mode + + + + + + Add empty space below keys + Whether to add an empty area below the OSK's keys to shift it upward. + + + + + + False -- GitLab