[fractal] session: Improve accessibility and focus
- From: Julian Sparber <jsparber src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [fractal] session: Improve accessibility and focus
- Date: Wed, 13 Apr 2022 15:22:34 +0000 (UTC)
commit c11393e3f6c44925348e3667575b36e7e2f85dac
Author: Julian Sparber <julian sparber net>
Date: Wed Apr 13 15:22:33 2022 +0000
session: Improve accessibility and focus
Fixes: https://gitlab.gnome.org/GNOME/fractal/-/issues/197
Room history navigation isn't good yet, but this improves navigation by a lot.
data/resources/ui/content-room-history.ui | 28 ++++++++++++++++++++++++++++
data/resources/ui/content.ui | 1 +
data/resources/ui/room-title.ui | 2 ++
data/resources/ui/session.ui | 4 ++--
data/resources/ui/sidebar-item.ui | 1 +
data/resources/ui/sidebar.ui | 14 ++++++++++++++
src/session/content/room_history/mod.rs | 1 +
src/session/sidebar/mod.rs | 21 ++++++++++++++++++++-
src/session/sidebar/room_row.rs | 2 ++
src/window.rs | 2 +-
10 files changed, 72 insertions(+), 4 deletions(-)
---
diff --git a/data/resources/ui/content-room-history.ui b/data/resources/ui/content-room-history.ui
index aeb7d0b88..9e06944b6 100644
--- a/data/resources/ui/content-room-history.ui
+++ b/data/resources/ui/content-room-history.ui
@@ -52,6 +52,9 @@
<object class="GtkButton" id="back">
<property name="icon-name">go-previous-symbolic</property>
<property name="action-name">content.go-back</property>
+ <accessibility>
+ <property name="label" translatable="yes">Back</property>
+ </accessibility>
</object>
</property>
</object>
@@ -74,11 +77,17 @@
<object class="GtkMenuButton" id="room_menu">
<property name="icon-name">view-more-symbolic</property>
<property name="menu-model">room-menu-model</property>
+ <accessibility>
+ <property name="label" translatable="yes">Room Settings</property>
+ </accessibility>
</object>
</child>
<child type="end">
<object class="GtkToggleButton" id="search_content_button">
<property name="icon-name">system-search-symbolic</property>
+ <accessibility>
+ <property name="label" translatable="yes">Toggle Room History Search</property>
+ </accessibility>
</object>
</child>
</object>
@@ -94,6 +103,9 @@
<child>
<object class="GtkSearchEntry"/>
</child>
+ <accessibility>
+ <property name="label" translatable="yes">Room History Search</property>
+ </accessibility>
</object>
</property>
</object>
@@ -233,6 +245,9 @@
<property name="markdown-enabled" bind-source="ContentRoomHistory"
bind-property="markdown-enabled" bind-flags="sync-create | bidirectional"/>
</object>
</property>
+ <accessibility>
+ <property name="label" translatable="yes">Enable Markdown Formatting</property>
+ </accessibility>
</object>
</child>
<child>
@@ -251,6 +266,9 @@
<property name="top-margin">7</property>
<property name="bottom-margin">7</property>
<property name="wrap-mode">word</property>
+ <accessibility>
+ <property name="label" translatable="yes">Message Entry</property>
+ </accessibility>
</object>
</property>
</object>
@@ -263,6 +281,9 @@
<property name="direction">up</property>
<property name="icon-name">view-more-horizontal-symbolic</property>
<property name="menu-model">message-menu-model</property>
+ <accessibility>
+ <property name="label" translatable="yes">Open Message Menu</property>
+ </accessibility>
</object>
</child>
<child>
@@ -270,6 +291,9 @@
<property name="valign">end</property>
<property name="icon-name">emoji-people-symbolic</property>
<property name="action-name">room-history.open-emoji</property>
+ <accessibility>
+ <property name="label" translatable="yes">Open Emoji Picker</property>
+ </accessibility>
</object>
</child>
<child>
@@ -282,6 +306,9 @@
<class name="suggested-action"/>
<class name="circular"/>
</style>
+ <accessibility>
+ <property name="label" translatable="yes">Send Message</property>
+ </accessibility>
</object>
</child>
</object>
@@ -292,3 +319,4 @@
</child>
</template>
</interface>
+
diff --git a/data/resources/ui/content.ui b/data/resources/ui/content.ui
index 8185b5aab..ae2ede06c 100644
--- a/data/resources/ui/content.ui
+++ b/data/resources/ui/content.ui
@@ -31,6 +31,7 @@
<property name="visible">True</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
+ <property name="can-focus">False</property>
<property name="icon-name">empty-page</property>
<property name="title" translatable="yes">No Room Selected</property>
<property name="description" translatable="yes">Join a room to start chatting.</property>
diff --git a/data/resources/ui/room-title.ui b/data/resources/ui/room-title.ui
index 26718b2f4..04ef52cfa 100644
--- a/data/resources/ui/room-title.ui
+++ b/data/resources/ui/room-title.ui
@@ -8,6 +8,7 @@
<property name="valign">center</property>
<child>
<object class="GtkLabel" id="title_label">
+ <property name="focusable">True</property>
<property name="ellipsize">end</property>
<property name="halign">center</property>
<property name="wrap">False</property>
@@ -23,6 +24,7 @@
</child>
<child>
<object class="GtkLabel" id="subtitle_label">
+ <property name="focusable">True</property>
<property name="ellipsize">end</property>
<property name="halign">center</property>
<property name="wrap">False</property>
diff --git a/data/resources/ui/session.ui b/data/resources/ui/session.ui
index f7969d3ef..b67b69a56 100644
--- a/data/resources/ui/session.ui
+++ b/data/resources/ui/session.ui
@@ -1,7 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<template class="Session" parent="AdwBin">
- <property name="focusable">true</property>
<property name="child">
<object class="GtkStack" id="stack">
<property name="visible-child">content</property>
@@ -34,9 +33,10 @@
</object>
</child>
<child>
- <object class="MediaViewer" id="media_viewer" />
+ <object class="MediaViewer" id="media_viewer"/>
</child>
</object>
</property>
</template>
</interface>
+
diff --git a/data/resources/ui/sidebar-item.ui b/data/resources/ui/sidebar-item.ui
index 8bbc4c632..c5db8d11c 100644
--- a/data/resources/ui/sidebar-item.ui
+++ b/data/resources/ui/sidebar-item.ui
@@ -3,6 +3,7 @@
<template class="GtkListItem">
<property name="child">
<object class="SidebarRow">
+ <property name="can-focus">False</property>
<binding name="list-row">
<lookup name="item">GtkListItem</lookup>
</binding>
diff --git a/data/resources/ui/sidebar.ui b/data/resources/ui/sidebar.ui
index 3943a1373..4dabb491a 100644
--- a/data/resources/ui/sidebar.ui
+++ b/data/resources/ui/sidebar.ui
@@ -37,6 +37,9 @@
<property name="popover">
<object class="AccountSwitcher" id="account_switcher"/>
</property>
+ <accessibility>
+ <property name="label" translatable="yes">Switch Accounts</property>
+ </accessibility>
<style>
<class name="image-button"/>
</style>
@@ -56,6 +59,9 @@
<object class="GtkMenuButton" id="appmenu_button">
<property name="icon-name">open-menu-symbolic</property>
<property name="menu-model">primary_menu</property>
+ <accessibility>
+ <property name="label" translatable="yes">App Settings Menu</property>
+ </accessibility>
</object>
</child>
<child type="end">
@@ -63,6 +69,9 @@
<property name="icon-name">system-search-symbolic</property>
<property name="active" bind-source="room_search" bind-property="search-mode-enabled"
bind-flags="sync-create"/>
<property name="action-name">session.toggle-room-search</property>
+ <accessibility>
+ <property name="label" translatable="yes">Toggle Room Search</property>
+ </accessibility>
</object>
</child>
</object>
@@ -72,6 +81,10 @@
<property name="child">
<object class="GtkSearchEntry" id="room_search_entry"/>
</property>
+ <accessibility>
+ <property name="label" translatable="yes">Room Search</property>
+ <property name="description" translatable="yes">Search for a room</property>
+ </accessibility>
</object>
</child>
<child>
@@ -92,6 +105,7 @@
</property>
<accessibility>
<property name="label" translatable="yes">Sidebar</property>
+ <property name="description" translatable="yes">Allows to navigate between rooms</property>
</accessibility>
</object>
</property>
diff --git a/src/session/content/room_history/mod.rs b/src/session/content/room_history/mod.rs
index 5493dcb42..2b32b174b 100644
--- a/src/session/content/room_history/mod.rs
+++ b/src/session/content/room_history/mod.rs
@@ -491,6 +491,7 @@ impl RoomHistory {
priv_.listview.set_model(model.as_ref());
priv_.is_loading.set(false);
+ priv_.message_entry.grab_focus();
priv_.room.replace(room);
self.update_view();
self.start_loading();
diff --git a/src/session/sidebar/mod.rs b/src/session/sidebar/mod.rs
index 5ffb35839..c4e4d5596 100644
--- a/src/session/sidebar/mod.rs
+++ b/src/session/sidebar/mod.rs
@@ -228,7 +228,26 @@ mod imp {
}
}
- impl WidgetImpl for Sidebar {}
+ impl WidgetImpl for Sidebar {
+ fn focus(&self, widget: &Self::Type, direction_type: gtk::DirectionType) -> bool {
+ // WORKAROUND: This works around the tab behavior `gtk::ListViews have`
+ // See: https://gitlab.gnome.org/GNOME/gtk/-/issues/4840
+ let focus_child = widget
+ .focus_child()
+ .and_then(|w| w.focus_child())
+ .and_then(|w| w.focus_child());
+ if focus_child.map_or(false, |w| w.is::<gtk::ListView>())
+ && matches!(
+ direction_type,
+ gtk::DirectionType::TabForward | gtk::DirectionType::TabBackward
+ )
+ {
+ false
+ } else {
+ self.parent_focus(widget, direction_type)
+ }
+ }
+ }
impl BinImpl for Sidebar {}
}
diff --git a/src/session/sidebar/room_row.rs b/src/session/sidebar/room_row.rs
index 1e7d20da0..53de48e2d 100644
--- a/src/session/sidebar/room_row.rs
+++ b/src/session/sidebar/room_row.rs
@@ -37,6 +37,8 @@ mod imp {
fn class_init(klass: &mut Self::Class) {
Self::bind_template(klass);
+ klass.set_accessible_role(gtk::AccessibleRole::Group);
+
klass.install_action("room-row.accept-invite", None, move |widget, _, _| {
widget.room().unwrap().set_category(RoomType::Normal)
});
diff --git a/src/window.rs b/src/window.rs
index 63cde6b73..a53fe7b5f 100644
--- a/src/window.rs
+++ b/src/window.rs
@@ -123,7 +123,7 @@ mod imp {
glib::wrapper! {
pub struct Window(ObjectSubclass<imp::Window>)
- @extends gtk::Widget, gtk::Window, gtk::Root, gtk::ApplicationWindow, adw::ApplicationWindow,
@implements gio::ActionMap, gio::ActionGroup;
+ @extends gtk::Widget, gtk::Window, gtk::Root, gtk::ApplicationWindow, adw::ApplicationWindow,
@implements gtk::Accessible, gio::ActionMap, gio::ActionGroup;
}
impl Window {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]