client: Ensure accounts dialog fits on small display devices

- Replace ellipsizing by wrapping
- Switch to vertical boxing if not enough space
- Fix welcome dialog
This commit is contained in:
Cédric Bellegarde 2023-08-21 11:22:36 +02:00
parent 88a31454d8
commit 42cb76282e
8 changed files with 106 additions and 61 deletions

View file

@ -389,7 +389,8 @@ private class Accounts.MailboxRow : AccountRow<EditorEditPane,Gtk.Label> {
public MailboxRow(Geary.AccountInformation account, public MailboxRow(Geary.AccountInformation account,
Geary.RFC822.MailboxAddress mailbox) { Geary.RFC822.MailboxAddress mailbox) {
var label = new Gtk.Label(""); var label = new Gtk.Label("");
label.ellipsize = Pango.EllipsizeMode.END; label.set_line_wrap_mode(Pango.WrapMode.WORD_CHAR);
label.set_line_wrap(true);
base(account, "", label); base(account, "", label);
this.mailbox = mailbox; this.mailbox = mailbox;
enable_drag(); enable_drag();

View file

@ -276,7 +276,8 @@ private class Accounts.AccountListRow : AccountRow<EditorListPane,Gtk.Grid> {
this.value.add(this.unavailable_icon); this.value.add(this.unavailable_icon);
this.value.add(this.service_label); this.value.add(this.service_label);
this.service_label.set_ellipsize(Pango.EllipsizeMode.END); this.service_label.set_line_wrap_mode(Pango.WrapMode.WORD_CHAR);
this.service_label.set_line_wrap(true);
this.service_label.show(); this.service_label.show();
this.account.changed.connect(on_account_changed); this.account.changed.connect(on_account_changed);

View file

@ -14,7 +14,10 @@ internal class Accounts.EditorRow<PaneType> : Gtk.ListBoxRow {
}; };
protected Gtk.Grid layout { get; private set; default = new Gtk.Grid(); } protected Gtk.Box layout {
get;
private set;
default = new Gtk.Box(Gtk.Orientation.HORIZONTAL, 5); }
private Gtk.Container drag_handle; private Gtk.Container drag_handle;
private bool drag_picked_up = false; private bool drag_picked_up = false;
@ -26,13 +29,10 @@ internal class Accounts.EditorRow<PaneType> : Gtk.ListBoxRow {
public EditorRow() { public EditorRow() {
get_style_context().add_class("geary-settings"); get_style_context().add_class("geary-settings");
get_style_context().add_class("geary-labelled-row"); get_style_context().add_class("geary-labelled-row");
this.layout.orientation = Gtk.Orientation.HORIZONTAL;
this.layout.show();
add(this.layout);
// We'd like to add the drag handle only when needed, but // We'd like to add the drag handle only when needed, but
// GNOME/gtk#1495 prevents us from doing so. // GNOME/gtk#1495 prevents us from doing so.
Gtk.EventBox drag_box = new Gtk.EventBox(); Gtk.EventBox drag_box = new Gtk.EventBox();
@ -48,9 +48,25 @@ internal class Accounts.EditorRow<PaneType> : Gtk.ListBoxRow {
this.drag_handle.hide(); this.drag_handle.hide();
// Translators: Tooltip for dragging list items // Translators: Tooltip for dragging list items
this.drag_handle.set_tooltip_text(_("Drag to move this item")); this.drag_handle.set_tooltip_text(_("Drag to move this item"));
this.layout.add(drag_handle);
var box = new Gtk.Box(Gtk.Orientation.HORIZONTAL, 5);
box.add(drag_handle);
box.add(this.layout);
box.show();
add(box);
this.layout.show();
this.show(); this.show();
this.size_allocate.connect((allocation) => {
if (allocation.width < 500) {
if (this.layout.orientation == Gtk.Orientation.HORIZONTAL) {
this.layout.orientation = Gtk.Orientation.VERTICAL;
}
} else if (this.layout.orientation == Gtk.Orientation.VERTICAL) {
this.layout.orientation = Gtk.Orientation.HORIZONTAL;
}
});
} }
public virtual void activated(PaneType pane) { public virtual void activated(PaneType pane) {
@ -216,8 +232,10 @@ internal class Accounts.LabelledEditorRow<PaneType,V> : EditorRow<PaneType> {
public LabelledEditorRow(string label, V value) { public LabelledEditorRow(string label, V value) {
this.label.halign = Gtk.Align.START; this.label.halign = Gtk.Align.START;
this.label.valign = Gtk.Align.CENTER; this.label.valign = Gtk.Align.CENTER;
this.label.hexpand = true;
this.label.set_text(label); this.label.set_text(label);
this.label.set_ellipsize(Pango.EllipsizeMode.END); this.label.set_line_wrap_mode(Pango.WrapMode.WORD_CHAR);
this.label.set_line_wrap(true);
this.label.show(); this.label.show();
this.layout.add(this.label); this.layout.add(this.label);
@ -228,10 +246,15 @@ internal class Accounts.LabelledEditorRow<PaneType,V> : EditorRow<PaneType> {
Gtk.Entry? entry = value as Gtk.Entry; Gtk.Entry? entry = value as Gtk.Entry;
if (entry != null) { if (entry != null) {
expand_label = false; expand_label = false;
entry.xalign = 1;
entry.hexpand = true; entry.hexpand = true;
} }
Gtk.Label? vlabel = value as Gtk.Label;
if (vlabel != null) {
vlabel.set_line_wrap_mode(Pango.WrapMode.WORD_CHAR);
vlabel.set_line_wrap(true);
}
widget.halign = Gtk.Align.START;
widget.valign = Gtk.Align.CENTER; widget.valign = Gtk.Align.CENTER;
widget.show(); widget.show();
this.layout.add(widget); this.layout.add(widget);
@ -499,6 +522,7 @@ internal class Accounts.TlsComboBox : Gtk.ComboBox {
set_id_column(0); set_id_column(0);
Gtk.CellRendererText text_renderer = new Gtk.CellRendererText(); Gtk.CellRendererText text_renderer = new Gtk.CellRendererText();
text_renderer.ellipsize = Pango.EllipsizeMode.END;
pack_start(text_renderer, true); pack_start(text_renderer, true);
add_attribute(text_renderer, "text", 2); add_attribute(text_renderer, "text", 2);
@ -510,7 +534,7 @@ internal class Accounts.TlsComboBox : Gtk.ComboBox {
} }
internal class Accounts.OutgoingAuthComboBox : Gtk.ComboBoxText { internal class Accounts.OutgoingAuthComboBox : Gtk.ComboBox {
public string label { get; private set; } public string label { get; private set; }
@ -535,29 +559,54 @@ internal class Accounts.OutgoingAuthComboBox : Gtk.ComboBoxText {
// account // account
this.label = _("Login"); this.label = _("Login");
append( Gtk.ListStore store = new Gtk.ListStore(
2, typeof(string), typeof(string)
);
Gtk.TreeIter iter;
store.append(out iter);
store.set(
iter,
0,
Geary.Credentials.Requirement.NONE.to_value(), Geary.Credentials.Requirement.NONE.to_value(),
1,
// Translators: ComboBox value for source of SMTP // Translators: ComboBox value for source of SMTP
// authentication credentials (none) when adding a new // authentication credentials (none) when adding a new
// account // account
_("No login needed") _("No login needed")
); );
append( store.append(out iter);
store.set(
iter,
0,
Geary.Credentials.Requirement.USE_INCOMING.to_value(), Geary.Credentials.Requirement.USE_INCOMING.to_value(),
1,
// Translators: ComboBox value for source of SMTP // Translators: ComboBox value for source of SMTP
// authentication credentials (use IMAP) when adding a new // authentication credentials (use IMAP) when adding a new
// account // account
_("Use same login as receiving") _("Use same login as receiving")
); );
append( store.append(out iter);
store.set(
iter,
0,
Geary.Credentials.Requirement.CUSTOM.to_value(), Geary.Credentials.Requirement.CUSTOM.to_value(),
1,
// Translators: ComboBox value for source of SMTP // Translators: ComboBox value for source of SMTP
// authentication credentials (custom) when adding a new // authentication credentials (custom) when adding a new
// account // account
_("Use a different login") _("Use a different login")
); );
this.model = store;
set_id_column(0);
Gtk.CellRendererText text_renderer = new Gtk.CellRendererText();
text_renderer.ellipsize = Pango.EllipsizeMode.END;
pack_start(text_renderer, true);
add_attribute(text_renderer, "text", 1);
} }
} }

View file

@ -78,6 +78,14 @@ public class Accounts.Editor : Gtk.Dialog {
push(this.editor_list_pane); push(this.editor_list_pane);
update_command_actions(); update_command_actions();
if (this.accounts.size > 1) {
this.default_height = 650;
this.default_width = 800;
} else {
// Welcome dialog
this.default_width = 600;
}
} }
public override bool key_press_event(Gdk.EventKey event) { public override bool key_press_event(Gdk.EventKey event) {

View file

@ -4,8 +4,6 @@
<requires lib="gtk+" version="3.20"/> <requires lib="gtk+" version="3.20"/>
<template class="AccountsEditor" parent="GtkDialog"> <template class="AccountsEditor" parent="GtkDialog">
<property name="modal">True</property> <property name="modal">True</property>
<property name="default_width">800</property>
<property name="default_height">650</property>
<property name="type_hint">dialog</property> <property name="type_hint">dialog</property>
<child type="titlebar"> <child type="titlebar">
<placeholder/> <placeholder/>

View file

@ -220,7 +220,27 @@
<child> <child>
<object class="GtkButtonBox"> <object class="GtkButtonBox">
<property name="visible">True</property> <property name="visible">True</property>
<property name="layout_style">end</property> <child>
<object class="GtkButton" id="remove_button">
<property name="visible">True</property>
<property name="receives_default">False</property>
<property name="tooltip_text" translatable="yes">Remove this account from Geary</property>
<signal name="clicked" handler="on_remove_account_clicked" swapped="no"/>
<style>
<class name="destructive-action"/>
</style>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="icon_name">user-trash-symbolic</property>
</object>
</child>"
</object>
<packing>
<property name="pack_type">end</property>
<property name="secondary">True</property>
</packing>
</child>"
<child> <child>
<object class="GtkButton"> <object class="GtkButton">
<property name="label" translatable="yes" comments="This is a button in the account settings to show server settings.">Server Settings</property> <property name="label" translatable="yes" comments="This is a button in the account settings to show server settings.">Server Settings</property>
@ -231,27 +251,7 @@
<packing> <packing>
<property name="expand">True</property> <property name="expand">True</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="pack_type">end</property> <property name="pack_type">start</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButton" id="remove_button">
<property name="label" translatable="yes" comments="This is the remove account button in the account settings.">Remove Account</property>
<property name="visible">True</property>
<property name="receives_default">False</property>
<property name="tooltip_text" translatable="yes">Remove this account from Geary</property>
<signal name="clicked" handler="on_remove_account_clicked" swapped="no"/>
<style>
<class name="destructive-action"/>
</style>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="pack_type">end</property>
<property name="position">1</property>
<property name="secondary">True</property>
</packing> </packing>
</child> </child>
<style> <style>

View file

@ -35,7 +35,7 @@
<property name="vexpand">True</property> <property name="vexpand">True</property>
<property name="vadjustment">pane_adjustment</property> <property name="vadjustment">pane_adjustment</property>
<property name="hscrollbar_policy">never</property> <property name="hscrollbar_policy">never</property>
<property name="min_content_height">400</property> <property name="min_content_height">300</property>
<child> <child>
<object class="GtkViewport"> <object class="GtkViewport">
<property name="visible">True</property> <property name="visible">True</property>
@ -50,11 +50,13 @@
<object class="GtkGrid" id="welcome_panel"> <object class="GtkGrid" id="welcome_panel">
<property name="visible">True</property> <property name="visible">True</property>
<property name="halign">center</property> <property name="halign">center</property>
<property name="valign">center</property>
<property name="vexpand">True</property>
<property name="column_spacing">12</property> <property name="column_spacing">12</property>
<child> <child>
<object class="GtkImage" id="welcome_icon"> <object class="GtkImage" id="welcome_icon">
<property name="visible">True</property> <property name="visible">True</property>
<property name="pixel_size">64</property> <property name="pixel_size">128</property>
<property name="use_fallback">True</property> <property name="use_fallback">True</property>
</object> </object>
<packing> <packing>
@ -69,7 +71,7 @@
<property name="halign">start</property> <property name="halign">start</property>
<property name="valign">start</property> <property name="valign">start</property>
<property name="wrap">True</property> <property name="wrap">True</property>
<property name="label" translatable="yes">To get started, select an email provider below.</property> <property name="label" translatable="yes">To get started, add an email provider above.</property>
<property name="xalign">0</property> <property name="xalign">0</property>
<property name="wrap">True</property> <property name="wrap">True</property>
</object> </object>

View file

@ -386,33 +386,23 @@ row.geary-labelled-row {
padding: 0px; padding: 0px;
} }
row.geary-labelled-row > grid > * { row.geary-labelled-row > box > box {
margin: 18px 6px; margin: 18px 6px;
} }
row.geary-labelled-row > grid > *:first-child:dir(ltr),
row.geary-labelled-row > grid > *:last-child:dir(rtl) {
margin-left: 18px;
}
row.geary-labelled-row > grid > *:last-child:dir(ltr),
row.geary-labelled-row > grid > *:first-child:dir(rtl) {
margin-right: 18px;
}
/* Images should have some padding to offset them from adjacent /* Images should have some padding to offset them from adjacent
widgets, but care ust be taken since images are also used as children widgets, but care ust be taken since images are also used as children
of other widgets like entries, comboboxes and switches, and these of other widgets like entries, comboboxes and switches, and these
shouldn't be be touched. */ shouldn't be be touched. */
row.geary-labelled-row widget > image, row.geary-labelled-row widget > image,
row.geary-labelled-row grid > image { row.geary-labelled-row box > box > image {
padding: 0px 6px; padding: 0px 6px;
} }
row.geary-labelled-row > grid > combobox, row.geary-labelled-row > box > box > combobox,
row.geary-labelled-row > grid > entry, row.geary-labelled-row > box > box > entry,
row.geary-labelled-row:not(.geary-add-row) > grid > image, row.geary-labelled-row:not(.geary-add-row) > box > image,
row.geary-labelled-row > grid > switch { row.geary-labelled-row > box > box > switch {
/* These use more space than labels, so set their valign to center /* These use more space than labels, so set their valign to center
when adding them and free up some space around them here to keep a when adding them and free up some space around them here to keep a
consistent row height. */ consistent row height. */
@ -428,10 +418,6 @@ grid.geary-account-view image:dir(rtl) {
margin-left: 6px; margin-left: 6px;
} }
grid.geary-welcome-panel {
margin-bottom: 32px;
}
label.geary-settings-heading { label.geary-settings-heading {
font-weight: bold; font-weight: bold;
margin-top: 24px; margin-top: 24px;