Compare commits

...

2 Commits

Author SHA1 Message Date
Christopher Davis
75b79aa6e6 display: Use AdwToggleGroup
libadwaita provides a new widget for exclusive toggles that
we can use in place of our linked styling that we were using
previously. AdwToggleGroup handles displaying the buttons,
icons, and tooltips in a nice, compact, and accessible widget.
2023-07-29 21:57:48 -04:00
Christopher Davis
c49684206d mouse-panel: Use AdwToggleGroup
libadwaita provides a new widget for exclusive toggles that
we can use in place of our linked styling that we were using
previously. AdwToggleGroup handles displaying the buttons,
icons, and tooltips in a nice, compact, and accessible widget.
2023-07-29 21:57:48 -04:00
4 changed files with 64 additions and 77 deletions

View File

@@ -50,6 +50,9 @@
#define DISPLAY_SCHEMA "org.gnome.settings-daemon.plugins.color"
#define DISPLAY_CONFIG_ID_JOIN "join"
#define DISPLAY_CONFIG_ID_CLONE "clone"
typedef enum {
CC_DISPLAY_CONFIG_JOIN,
CC_DISPLAY_CONFIG_CLONE,
@@ -95,8 +98,7 @@ struct _CcDisplayPanel
GtkWidget *arrangement_row;
AdwBin *arrangement_bin;
GtkToggleButton *config_type_join;
GtkToggleButton *config_type_mirror;
AdwToggleGroup *config_type_toggles;
GtkWidget *display_multiple_displays;
AdwBin *display_settings_bin;
GtkWidget *display_settings_group;
@@ -161,9 +163,11 @@ config_get_current_type (CcDisplayPanel *self)
static CcDisplayConfigType
cc_panel_get_selected_type (CcDisplayPanel *self)
{
if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (self->config_type_join)))
char* active_id = adw_toggle_group_get_active (self->config_type_toggles);
if (g_str_equal (active_id, DISPLAY_CONFIG_ID_JOIN))
return CC_DISPLAY_CONFIG_JOIN;
else if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (self->config_type_mirror)))
if (g_str_equal (active_id, DISPLAY_CONFIG_ID_CLONE))
return CC_DISPLAY_CONFIG_CLONE;
else
g_assert_not_reached ();
@@ -302,10 +306,10 @@ cc_panel_set_selected_type (CcDisplayPanel *self, CcDisplayConfigType type)
switch (type)
{
case CC_DISPLAY_CONFIG_JOIN:
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (self->config_type_join), TRUE);
adw_toggle_group_set_active (self->config_type_toggles, DISPLAY_CONFIG_ID_JOIN);
break;
case CC_DISPLAY_CONFIG_CLONE:
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (self->config_type_mirror), TRUE);
adw_toggle_group_set_active (self->config_type_toggles, DISPLAY_CONFIG_ID_CLONE);
break;
default:
g_assert_not_reached ();
@@ -470,8 +474,7 @@ on_back_button_clicked_cb (CcDisplayPanel *self)
}
static void
on_config_type_toggled_cb (CcDisplayPanel *self,
GtkCheckButton *btn)
on_config_type_toggled_cb (CcDisplayPanel *self)
{
CcDisplayConfigType type;
@@ -481,9 +484,6 @@ on_config_type_toggled_cb (CcDisplayPanel *self,
if (!self->current_config)
return;
if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (btn)))
return;
type = cc_panel_get_selected_type (self);
config_ensure_of_type (self, type);
}
@@ -591,8 +591,7 @@ cc_display_panel_class_init (CcDisplayPanelClass *klass)
gtk_widget_class_bind_template_child (widget_class, CcDisplayPanel, arrangement_row);
gtk_widget_class_bind_template_child (widget_class, CcDisplayPanel, cancel_button);
gtk_widget_class_bind_template_child (widget_class, CcDisplayPanel, display_multiple_displays);
gtk_widget_class_bind_template_child (widget_class, CcDisplayPanel, config_type_join);
gtk_widget_class_bind_template_child (widget_class, CcDisplayPanel, config_type_mirror);
gtk_widget_class_bind_template_child (widget_class, CcDisplayPanel, config_type_toggles);
gtk_widget_class_bind_template_child (widget_class, CcDisplayPanel, display_settings_bin);
gtk_widget_class_bind_template_child (widget_class, CcDisplayPanel, display_settings_group);
gtk_widget_class_bind_template_child (widget_class, CcDisplayPanel, display_settings_title_widget);

View File

@@ -122,25 +122,13 @@
<object class="AdwActionRow" id="config_type_switcher_row">
<property name="title" translatable="yes">Multiple Displays</property>
<child type="suffix">
<object class="GtkBox">
<object class="AdwToggleGroup" id="config_type_toggles">
<property name="valign">center</property>
<style>
<class name="linked" />
</style>
<child>
<object class="GtkToggleButton" id="config_type_join">
<property name="label" translatable="yes" comments="'Join' as in 'Join displays'">Join</property>
<property name="active">True</property>
<signal name="toggled" handler="on_config_type_toggled_cb" swapped="yes"/>
</object>
</child>
<child>
<object class="GtkToggleButton" id="config_type_mirror">
<property name="label" translatable="yes">Mirror</property>
<property name="group">config_type_join</property>
<signal name="toggled" handler="on_config_type_toggled_cb" swapped="yes"/>
</object>
</child>
<signal name="notify::active" handler="on_config_type_toggled_cb" swapped="yes"/>
<toggles>
<toggle id="join" translatable="yes" comments="'Join' as in 'Join displays'">Join</toggle>
<toggle id="clone" translatable="yes">Mirror</toggle>
</toggles>
</object>
</child>
</object>

View File

@@ -44,9 +44,7 @@ struct _CcMousePanel
CcSplitRow *mouse_scroll_direction_row;
GtkScale *mouse_speed_scale;
CcMouseTest *mouse_test;
GtkBox *primary_button_box;
GtkToggleButton *primary_button_left;
GtkToggleButton *primary_button_right;
AdwToggleGroup *primary_button_toggles;
AdwPreferencesPage*preferences;
GtkStack *stack;
CcIllustratedRow *tap_to_click_row;
@@ -77,6 +75,9 @@ CC_PANEL_REGISTER (CcMousePanel, cc_mouse_panel)
#define ASSET_RESOURCES_PREFIX "/org/gnome/control-center/mouse/assets/"
#define BUTTON_ID_LEFT "left"
#define BUTTON_ID_RIGHT "right"
static void
setup_illustrations (CcMousePanel *self)
{
@@ -252,34 +253,52 @@ mouse_accel_set_mapping (const GValue *value,
return g_variant_new_string (g_value_get_boolean (value) ? "default" : "flat");
}
static gboolean
primary_button_get_mapping (GValue *value,
GVariant *variant,
gpointer user_data)
{
gboolean left_handed = g_variant_get_boolean (variant);
g_value_set_string (value, left_handed ? BUTTON_ID_RIGHT : BUTTON_ID_LEFT);
return TRUE;
}
static GVariant *
primary_button_set_mapping (const GValue *value,
const GVariantType *type,
gpointer user_data)
{
return g_variant_new_boolean (g_str_equal (g_value_get_string (value), BUTTON_ID_RIGHT));
}
/* Set up the property editors in the dialog. */
static void
setup_dialog (CcMousePanel *self)
{
GtkToggleButton *button;
self->mouse_test = CC_MOUSE_TEST (cc_mouse_test_new ());
gtk_widget_set_direction (GTK_WIDGET (self->primary_button_box), GTK_TEXT_DIR_LTR);
gtk_widget_set_direction (GTK_WIDGET (self->primary_button_toggles), GTK_TEXT_DIR_LTR);
self->left_handed = g_settings_get_boolean (self->mouse_settings, "left-handed");
button = self->left_handed ? self->primary_button_right : self->primary_button_left;
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
g_settings_bind (self->mouse_settings, "left-handed",
self->primary_button_left, "active",
G_SETTINGS_BIND_DEFAULT | G_SETTINGS_BIND_INVERT_BOOLEAN);
g_settings_bind (self->mouse_settings, "left-handed",
self->primary_button_right, "active",
G_SETTINGS_BIND_DEFAULT);
adw_toggle_group_set_active (ADW_TOGGLE_GROUP (self->primary_button_toggles),
self->left_handed ? BUTTON_ID_LEFT : BUTTON_ID_RIGHT);
g_settings_bind_with_mapping (self->mouse_settings, "left-handed",
self->primary_button_toggles, "active",
G_SETTINGS_BIND_DEFAULT,
primary_button_get_mapping,
primary_button_set_mapping,
NULL, NULL);
/* Allow changing orientation with either button */
button = self->primary_button_right;
self->right_gesture = gtk_gesture_click_new ();
handle_secondary_button (self, button, self->right_gesture);
button = self->primary_button_left;
self->left_gesture = gtk_gesture_click_new ();
handle_secondary_button (self, button, self->left_gesture);
/* FIXME: Allow changing orientation with either button */
/* button = self->primary_button_right; */
/* self->right_gesture = gtk_gesture_click_new (); */
/* handle_secondary_button (self, button, self->right_gesture); */
/* button = self->primary_button_left; */
/* self->left_gesture = gtk_gesture_click_new (); */
/* handle_secondary_button (self, button, self->left_gesture); */
g_settings_bind (self->mouse_settings, "natural-scroll",
self->mouse_scroll_direction_row, "use-default",
@@ -434,9 +453,7 @@ cc_mouse_panel_class_init (CcMousePanelClass *klass)
gtk_widget_class_bind_template_child (widget_class, CcMousePanel, mouse_group);
gtk_widget_class_bind_template_child (widget_class, CcMousePanel, mouse_scroll_direction_row);
gtk_widget_class_bind_template_child (widget_class, CcMousePanel, mouse_speed_scale);
gtk_widget_class_bind_template_child (widget_class, CcMousePanel, primary_button_box);
gtk_widget_class_bind_template_child (widget_class, CcMousePanel, primary_button_left);
gtk_widget_class_bind_template_child (widget_class, CcMousePanel, primary_button_right);
gtk_widget_class_bind_template_child (widget_class, CcMousePanel, primary_button_toggles);
gtk_widget_class_bind_template_child (widget_class, CcMousePanel, preferences);
gtk_widget_class_bind_template_child (widget_class, CcMousePanel, stack);
gtk_widget_class_bind_template_child (widget_class, CcMousePanel, tap_to_click_row);

View File

@@ -57,29 +57,12 @@
<property name="subtitle" translatable="yes">Order of physical buttons on mice and touchpads.</property>
<property name="subtitle-lines">0</property>
<child>
<object class="GtkBox" id="primary_button_box">
<object class="AdwToggleGroup" id="primary_button_toggles">
<property name="valign">center</property>
<property name="homogeneous">True</property>
<property name="margin_top">12</property>
<property name="margin_bottom">12</property>
<style>
<class name="linked"/>
</style>
<child>
<object class="GtkToggleButton" id="primary_button_left">
<property name="hexpand">True</property>
<property name="label" translatable="yes">Left</property>
<property name="height_request">35</property>
</object>
</child>
<child>
<object class="GtkToggleButton" id="primary_button_right">
<property name="hexpand">True</property>
<property name="label" translatable="yes">Right</property>
<property name="group">primary_button_left</property>
<property name="height_request">35</property>
</object>
</child>
<toggles>
<toggle id="left" translatable="yes">Left</toggle>
<toggle id="right" translatable="yes">Right</toggle>
</toggles>
</object>
</child>
</object>