settings_dialog: Use AdwPreferencesWindow and AdwActionRow

AdwPreferencesWindow contains a nice API for preferences
windows, and AdwActionRow is the widget to use for rows
of preferences.
This commit is contained in:
Christopher Davis 2023-02-08 19:17:56 -05:00 committed by fiaxh
parent 5568bbc6bf
commit b19986a685
2 changed files with 84 additions and 69 deletions

View file

@ -1,66 +1,81 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<interface> <interface>
<template class="DinoUiSettingsDialog"> <template class="DinoUiSettingsDialog" parent="AdwPreferencesWindow">
<property name="title" translatable="yes">Settings</property> <property name="default-width">500</property>
<property name="default-height">420</property>
<property name="modal">True</property> <property name="modal">True</property>
<child type="titlebar"> <property name="search-enabled">False</property>
<object class="GtkHeaderBar">
</object>
</child>
<child internal-child="content_area">
<object class="GtkBox">
<child> <child>
<object class="GtkGrid"> <object class="AdwPreferencesPage">
<property name="margin_top">10</property> <child>
<property name="margin_bottom">10</property> <object class="AdwPreferencesGroup">
<property name="margin_start">10</property> <child>
<property name="margin_end">10</property> <object class="AdwActionRow">
<property name="halign">center</property> <property name="title" translatable="yes">Send _Typing Notifications</property>
<property name="use-underline">True</property>
<property name="activatable-widget">typing_switch</property>
<child type="suffix">
<object class="GtkSwitch" id="typing_switch">
<property name="valign">center</property> <property name="valign">center</property>
<property name="row-spacing">10</property> </object>
<child> </child>
<object class="GtkCheckButton" id="typing_checkbutton">
<property name="label" translatable="yes">Send typing notifications</property>
<layout>
<property name="column">0</property>
<property name="row">0</property>
</layout>
</object> </object>
</child> </child>
<child> <child>
<object class="GtkCheckButton" id="marker_checkbutton"> <object class="AdwActionRow">
<property name="label" translatable="yes">Send read receipts</property> <property name="title" translatable="yes">Send _Read Receipts</property>
<layout> <property name="use-underline">True</property>
<property name="column">0</property> <property name="activatable-widget">marker_switch</property>
<property name="row">1</property> <child type="suffix">
</layout> <object class="GtkSwitch" id="marker_switch">
<property name="valign">center</property>
</object>
</child>
</object>
</child>
</object> </object>
</child> </child>
<child> <child>
<object class="GtkCheckButton" id="notification_checkbutton"> <object class="AdwPreferencesGroup">
<property name="label" translatable="yes">Notify when a new message arrives</property> <child>
<layout> <object class="AdwActionRow">
<property name="column">0</property> <property name="title" translatable="yes">_Notifications</property>
<property name="row">2</property> <property name="subtitle" translatable="yes">Notify when a new message arrives</property>
</layout> <property name="use-underline">True</property>
<property name="activatable-widget">notification_switch</property>
<child type="suffix">
<object class="GtkSwitch" id="notification_switch">
<property name="valign">center</property>
</object>
</child>
</object>
</child>
</object> </object>
</child> </child>
<child> <child>
<object class="GtkCheckButton" id="emoji_checkbutton"> <object class="AdwPreferencesGroup">
<property name="label" translatable="yes">Convert smileys to emojis</property> <child>
<layout> <object class="AdwActionRow">
<property name="column">0</property> <property name="title" translatable="yes">_Convert Smileys to Emoji</property>
<property name="row">3</property> <property name="use-underline">True</property>
</layout> <property name="activatable-widget">emoji_switch</property>
<child type="suffix">
<object class="GtkSwitch" id="emoji_switch">
<property name="valign">center</property>
</object>
</child>
</object> </object>
</child> </child>
<child> <child>
<object class="GtkCheckButton" id="check_spelling_checkbutton"> <object class="AdwActionRow">
<property name="label" translatable="yes">Check spelling</property> <property name="title" translatable="yes">Check _Spelling</property>
<layout> <property name="use-underline">True</property>
<property name="column">0</property> <property name="activatable-widget">check_spelling_switch</property>
<property name="row">4</property> <child type="suffix">
</layout> <object class="GtkSwitch" id="check_spelling_switch">
<property name="valign">center</property>
</object>
</child>
</object> </object>
</child> </child>
</object> </object>

View file

@ -3,30 +3,30 @@ using Gtk;
namespace Dino.Ui { namespace Dino.Ui {
[GtkTemplate (ui = "/im/dino/Dino/settings_dialog.ui")] [GtkTemplate (ui = "/im/dino/Dino/settings_dialog.ui")]
class SettingsDialog : Dialog { class SettingsDialog : Adw.PreferencesWindow {
[GtkChild] private unowned CheckButton typing_checkbutton; [GtkChild] private unowned Switch typing_switch;
[GtkChild] private unowned CheckButton marker_checkbutton; [GtkChild] private unowned Switch marker_switch;
[GtkChild] private unowned CheckButton notification_checkbutton; [GtkChild] private unowned Switch notification_switch;
[GtkChild] private unowned CheckButton emoji_checkbutton; [GtkChild] private unowned Switch emoji_switch;
[GtkChild] private unowned CheckButton check_spelling_checkbutton; [GtkChild] private unowned Switch check_spelling_switch;
Dino.Entities.Settings settings = Dino.Application.get_default().settings; Dino.Entities.Settings settings = Dino.Application.get_default().settings;
public SettingsDialog() { public SettingsDialog() {
Object(use_header_bar : Util.use_csd() ? 1 : 0); Object();
typing_checkbutton.active = settings.send_typing; typing_switch.active = settings.send_typing;
marker_checkbutton.active = settings.send_marker; marker_switch.active = settings.send_marker;
notification_checkbutton.active = settings.notifications; notification_switch.active = settings.notifications;
emoji_checkbutton.active = settings.convert_utf8_smileys; emoji_switch.active = settings.convert_utf8_smileys;
check_spelling_checkbutton.active = settings.check_spelling; check_spelling_switch.active = settings.check_spelling;
typing_checkbutton.toggled.connect(() => { settings.send_typing = typing_checkbutton.active; } ); typing_switch.activate.connect(() => { settings.send_typing = typing_switch.active; } );
marker_checkbutton.toggled.connect(() => { settings.send_marker = marker_checkbutton.active; } ); marker_switch.activate.connect(() => { settings.send_marker = marker_switch.active; } );
notification_checkbutton.toggled.connect(() => { settings.notifications = notification_checkbutton.active; } ); notification_switch.activate.connect(() => { settings.notifications = notification_switch.active; } );
emoji_checkbutton.toggled.connect(() => { settings.convert_utf8_smileys = emoji_checkbutton.active; }); emoji_switch.activate.connect(() => { settings.convert_utf8_smileys = emoji_switch.active; });
check_spelling_checkbutton.toggled.connect(() => { settings.check_spelling = check_spelling_checkbutton.active; }); check_spelling_switch.activate.connect(() => { settings.check_spelling = check_spelling_switch.active; });
} }
} }