diff --git a/po/POTFILES.in b/po/POTFILES.in
index 7803ad86..d4201d12 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -40,28 +40,28 @@ src/contrib/qr_code.rs
src/error_page.blp
src/error_page.rs
src/identity_verification_view/accept_request_page.rs
-src/identity_verification_view/accept_request_page.ui
+src/identity_verification_view/accept_request_page.blp
src/identity_verification_view/cancelled_page.rs
-src/identity_verification_view/cancelled_page.ui
+src/identity_verification_view/cancelled_page.blp
src/identity_verification_view/choose_method_page.rs
-src/identity_verification_view/choose_method_page.ui
+src/identity_verification_view/choose_method_page.blp
src/identity_verification_view/completed_page.rs
-src/identity_verification_view/completed_page.ui
+src/identity_verification_view/completed_page.blp
src/identity_verification_view/confirm_qr_code_page.rs
-src/identity_verification_view/confirm_qr_code_page.ui
+src/identity_verification_view/confirm_qr_code_page.blp
src/identity_verification_view/mod.rs
-src/identity_verification_view/mod.ui
+src/identity_verification_view/mod.blp
src/identity_verification_view/no_supported_methods_page.rs
-src/identity_verification_view/no_supported_methods_page.ui
+src/identity_verification_view/no_supported_methods_page.blp
src/identity_verification_view/qr_code_scanned_page.rs
-src/identity_verification_view/qr_code_scanned_page.ui
-src/identity_verification_view/room_left_page.ui
+src/identity_verification_view/qr_code_scanned_page.blp
+src/identity_verification_view/room_left_page.blp
src/identity_verification_view/sas_page.rs
-src/identity_verification_view/sas_page.ui
+src/identity_verification_view/sas_page.blp
src/identity_verification_view/scan_qr_code_page.rs
-src/identity_verification_view/scan_qr_code_page.ui
+src/identity_verification_view/scan_qr_code_page.blp
src/identity_verification_view/wait_for_other_page.rs
-src/identity_verification_view/wait_for_other_page.ui
+src/identity_verification_view/wait_for_other_page.blp
src/login/advanced_dialog.ui
src/login/greeter.ui
src/login/homeserver_page.rs
diff --git a/src/blp-resources.in b/src/blp-resources.in
index be7b94a5..46abda2e 100644
--- a/src/blp-resources.in
+++ b/src/blp-resources.in
@@ -42,4 +42,17 @@ components/rows/substring_entry_row.blp
components/rows/switch_loading_row.blp
components/user_page.blp
error_page.blp
+identity_verification_view/accept_request_page.blp
+identity_verification_view/cancelled_page.blp
+identity_verification_view/choose_method_page.blp
+identity_verification_view/completed_page.blp
+identity_verification_view/confirm_qr_code_page.blp
+identity_verification_view/mod.blp
+identity_verification_view/no_supported_methods_page.blp
+identity_verification_view/qr_code_scanned_page.blp
+identity_verification_view/room_left_page.blp
+identity_verification_view/sas_emoji.blp
+identity_verification_view/sas_page.blp
+identity_verification_view/scan_qr_code_page.blp
+identity_verification_view/wait_for_other_page.blp
window.blp
diff --git a/src/identity_verification_view/accept_request_page.blp b/src/identity_verification_view/accept_request_page.blp
new file mode 100644
index 00000000..9f2e1436
--- /dev/null
+++ b/src/identity_verification_view/accept_request_page.blp
@@ -0,0 +1,79 @@
+using Gtk 4.0;
+using Adw 1;
+
+template $IdentityVerificationAcceptRequestPage: Adw.Bin {
+ Gtk.ScrolledWindow scrolled_window {
+ hscrollbar-policy: never;
+ propagate-natural-height: true;
+
+ child: Adw.Clamp {
+ maximum-size: 400;
+ tightening-threshold: 300;
+
+ child: Gtk.Box {
+ orientation: vertical;
+ spacing: 18;
+ valign: center;
+ margin-bottom: 24;
+
+ Gtk.Label title {
+ wrap: true;
+ wrap-mode: word_char;
+ justify: center;
+ accessible-role: heading;
+
+ accessibility {
+ level: 1;
+ }
+
+ styles [
+ "title-1",
+ ]
+ }
+
+ Gtk.Label instructions {
+ wrap: true;
+ wrap-mode: word_char;
+ justify: center;
+
+ styles [
+ "body",
+ ]
+ }
+
+ Gtk.Picture {
+ file: "resource:///org/gnome/Fractal/assets/other-device.svg";
+ accessible-role: presentation;
+ }
+
+ Adw.WrapBox {
+ child-spacing: 12;
+ line-spacing: 12;
+ align: 0.5;
+
+ $LoadingButton decline_btn {
+ content-label: _("Decline");
+ halign: center;
+ clicked => $decline() swapped;
+
+ styles [
+ "destructive-action",
+ "pill",
+ ]
+ }
+
+ $LoadingButton accept_btn {
+ content-label: _("Verify");
+ halign: center;
+ clicked => $accept() swapped;
+
+ styles [
+ "suggested-action",
+ "pill",
+ ]
+ }
+ }
+ };
+ };
+ }
+}
diff --git a/src/identity_verification_view/accept_request_page.ui b/src/identity_verification_view/accept_request_page.ui
deleted file mode 100644
index e5cb235a..00000000
--- a/src/identity_verification_view/accept_request_page.ui
+++ /dev/null
@@ -1,84 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/src/identity_verification_view/cancelled_page.blp b/src/identity_verification_view/cancelled_page.blp
new file mode 100644
index 00000000..f87cf7ad
--- /dev/null
+++ b/src/identity_verification_view/cancelled_page.blp
@@ -0,0 +1,72 @@
+using Gtk 4.0;
+using Adw 1;
+
+template $IdentityVerificationCancelledPage: Adw.Bin {
+ Gtk.ScrolledWindow scrolled_window {
+ hscrollbar-policy: never;
+ propagate-natural-height: true;
+
+ child: Adw.Clamp {
+ maximum-size: 400;
+ tightening-threshold: 300;
+
+ child: Gtk.Box {
+ orientation: vertical;
+ spacing: 18;
+ valign: center;
+
+ Gtk.Label title {
+ wrap: true;
+ wrap-mode: word_char;
+ justify: center;
+ accessible-role: heading;
+
+ accessibility {
+ level: 1;
+ }
+
+ styles [
+ "title-1",
+ ]
+ }
+
+ Gtk.Label message {
+ wrap: true;
+ wrap-mode: word_char;
+ justify: center;
+
+ styles [
+ "body",
+ ]
+ }
+
+ Adw.WrapBox {
+ child-spacing: 12;
+ line-spacing: 12;
+ align: 0.5;
+
+ $LoadingButton dismiss_btn {
+ halign: center;
+ content-label: _("_Done");
+ clicked => $dismiss() swapped;
+
+ styles [
+ "pill",
+ ]
+ }
+
+ $LoadingButton try_again_btn {
+ halign: center;
+ content-label: _("Send New Request");
+ clicked => $try_again() swapped;
+
+ styles [
+ "suggested-action",
+ "pill",
+ ]
+ }
+ }
+ };
+ };
+ }
+}
diff --git a/src/identity_verification_view/cancelled_page.ui b/src/identity_verification_view/cancelled_page.ui
deleted file mode 100644
index c9c75b19..00000000
--- a/src/identity_verification_view/cancelled_page.ui
+++ /dev/null
@@ -1,76 +0,0 @@
-
-
-
-
-
- never
- True
-
-
- 400
- 300
-
-
- vertical
- 18
- center
-
-
- True
- word-char
- center
- heading
-
- 1
-
-
-
-
-
-
- True
- word-char
- center
-
-
-
-
-
- 12
- 12
- 0.5
-
-
- center
- _Done
-
-
-
-
-
-
- center
- Send New Request
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/identity_verification_view/choose_method_page.blp b/src/identity_verification_view/choose_method_page.blp
new file mode 100644
index 00000000..c633948e
--- /dev/null
+++ b/src/identity_verification_view/choose_method_page.blp
@@ -0,0 +1,94 @@
+using Gtk 4.0;
+using Adw 1;
+
+template $IdentityVerificationChooseMethodPage: Adw.Bin {
+ Gtk.ScrolledWindow scrolled_window {
+ hscrollbar-policy: never;
+ propagate-natural-height: true;
+
+ child: Adw.Clamp {
+ maximum-size: 400;
+ tightening-threshold: 300;
+
+ child: Gtk.Box {
+ orientation: vertical;
+ spacing: 18;
+ valign: center;
+
+ Gtk.Label title {
+ wrap: true;
+ wrap-mode: word_char;
+ justify: center;
+ accessible-role: heading;
+
+ accessibility {
+ level: 1;
+ }
+
+ styles [
+ "title-1",
+ ]
+ }
+
+ Gtk.Label instructions {
+ wrap: true;
+ wrap-mode: word_char;
+ justify: center;
+
+ styles [
+ "body",
+ ]
+ }
+
+ $TriQRCode qrcode {
+ valign: center;
+ halign: center;
+ margin-top: 24;
+ margin-bottom: 24;
+
+ styles [
+ "card",
+ ]
+ }
+
+ Gtk.Label cannot_scan_label {
+ label: _("Can’t scan QR code?");
+ wrap: true;
+ wrap-mode: word_char;
+ justify: center;
+ }
+
+ $LoadingButton scan_qr_code_btn {
+ halign: center;
+ content-label: _("Scan QR code with this session");
+ clicked => $start_qr_code_scan() swapped;
+
+ styles [
+ "pill",
+ ]
+ }
+
+ $LoadingButton start_sas_btn {
+ content-label: _("Compare Emoji");
+ halign: center;
+ clicked => $start_sas() swapped;
+
+ styles [
+ "pill",
+ ]
+ }
+
+ $LoadingButton cancel_btn {
+ halign: center;
+ content-label: _("Cancel Verification");
+ clicked => $cancel() swapped;
+
+ styles [
+ "destructive-action",
+ "pill",
+ ]
+ }
+ };
+ };
+ }
+}
diff --git a/src/identity_verification_view/choose_method_page.ui b/src/identity_verification_view/choose_method_page.ui
deleted file mode 100644
index b7085df2..00000000
--- a/src/identity_verification_view/choose_method_page.ui
+++ /dev/null
@@ -1,98 +0,0 @@
-
-
-
-
-
- never
- True
-
-
- 400
- 300
-
-
- vertical
- 18
- center
-
-
- True
- word-char
- center
- heading
-
- 1
-
-
-
-
-
-
- True
- word-char
- center
-
-
-
-
-
- center
- center
- 24
- 24
-
-
-
-
-
- Can’t scan QR code?
- True
- word-char
- center
-
-
-
-
- center
- Scan QR code with this session
-
-
-
-
-
-
- Compare Emoji
- center
-
-
-
-
-
-
- center
- Cancel Verification
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/identity_verification_view/completed_page.blp b/src/identity_verification_view/completed_page.blp
new file mode 100644
index 00000000..c7a722ff
--- /dev/null
+++ b/src/identity_verification_view/completed_page.blp
@@ -0,0 +1,63 @@
+using Gtk 4.0;
+using Adw 1;
+
+template $IdentityVerificationCompletedPage: Adw.Bin {
+ Gtk.ScrolledWindow scrolled_window {
+ hscrollbar-policy: never;
+ propagate-natural-height: true;
+
+ child: Adw.Clamp {
+ maximum-size: 400;
+ tightening-threshold: 300;
+
+ child: Gtk.Box {
+ orientation: vertical;
+ spacing: 18;
+ valign: center;
+
+ Gtk.Label title {
+ wrap: true;
+ wrap-mode: word_char;
+ justify: center;
+ accessible-role: heading;
+
+ accessibility {
+ level: 1;
+ }
+
+ styles [
+ "title-1",
+ ]
+ }
+
+ Gtk.Picture {
+ file: "resource:///org/gnome/Fractal/assets/setup-complete.svg";
+ accessible-role: presentation;
+ }
+
+ Gtk.Label message {
+ wrap: true;
+ wrap-mode: word_char;
+ justify: center;
+
+ styles [
+ "body",
+ ]
+ }
+
+ Gtk.Button dismiss_btn {
+ can-shrink: true;
+ halign: center;
+ label: _("_Done");
+ use-underline: true;
+ clicked => $dismiss() swapped;
+
+ styles [
+ "suggested-action",
+ "pill",
+ ]
+ }
+ };
+ };
+ }
+}
diff --git a/src/identity_verification_view/completed_page.ui b/src/identity_verification_view/completed_page.ui
deleted file mode 100644
index f3548fb3..00000000
--- a/src/identity_verification_view/completed_page.ui
+++ /dev/null
@@ -1,67 +0,0 @@
-
-
-
-
-
- never
- True
-
-
- 400
- 300
-
-
- vertical
- 18
- center
-
-
- True
- word-char
- center
- heading
-
- 1
-
-
-
-
-
-
- resource:///org/gnome/Fractal/assets/setup-complete.svg
- presentation
-
-
-
-
- True
- word-char
- center
-
-
-
-
-
- True
- center
- _Done
- True
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/identity_verification_view/confirm_qr_code_page.blp b/src/identity_verification_view/confirm_qr_code_page.blp
new file mode 100644
index 00000000..db2ac35c
--- /dev/null
+++ b/src/identity_verification_view/confirm_qr_code_page.blp
@@ -0,0 +1,91 @@
+using Gtk 4.0;
+using Adw 1;
+
+template $IdentityVerificationConfirmQrCodePage: Adw.Bin {
+ Gtk.ScrolledWindow scrolled_window {
+ hscrollbar-policy: never;
+ propagate-natural-height: true;
+
+ child: Adw.Clamp {
+ maximum-size: 400;
+ tightening-threshold: 300;
+
+ child: Gtk.Box {
+ orientation: vertical;
+ spacing: 18;
+ valign: center;
+
+ Gtk.Label title {
+ label: _("Confirm Scan");
+ wrap: true;
+ wrap-mode: word_char;
+ justify: center;
+ accessible-role: heading;
+
+ accessibility {
+ level: 1;
+ }
+
+ styles [
+ "title-1",
+ ]
+ }
+
+ Gtk.Picture {
+ file: "resource:///org/gnome/Fractal/assets/setup-complete.svg";
+ accessible-role: presentation;
+ }
+
+ Gtk.Label question {
+ wrap: true;
+ wrap-mode: word_char;
+ justify: center;
+
+ styles [
+ "body",
+ ]
+ }
+
+ Adw.WrapBox {
+ child-spacing: 12;
+ line-spacing: 12;
+ align: 0.5;
+
+ $LoadingButton cancel_btn {
+ content-label: _("Cancel");
+ halign: center;
+ clicked => $cancel() swapped;
+
+ accessibility {
+ described-by: [
+ question,
+ ];
+ }
+
+ styles [
+ "destructive-action",
+ "pill",
+ ]
+ }
+
+ $LoadingButton confirm_btn {
+ content-label: _("Confirm");
+ halign: center;
+ clicked => $confirm_scanned() swapped;
+
+ accessibility {
+ described-by: [
+ question,
+ ];
+ }
+
+ styles [
+ "suggested-action",
+ "pill",
+ ]
+ }
+ }
+ };
+ };
+ }
+}
diff --git a/src/identity_verification_view/confirm_qr_code_page.ui b/src/identity_verification_view/confirm_qr_code_page.ui
deleted file mode 100644
index 511b7a82..00000000
--- a/src/identity_verification_view/confirm_qr_code_page.ui
+++ /dev/null
@@ -1,90 +0,0 @@
-
-
-
-
-
- never
- True
-
-
- 400
- 300
-
-
- vertical
- 18
- center
-
-
- Confirm Scan
- True
- word-char
- center
- heading
-
- 1
-
-
-
-
-
-
- resource:///org/gnome/Fractal/assets/setup-complete.svg
- presentation
-
-
-
-
- True
- word-char
- center
-
-
-
-
-
- 12
- 12
- 0.5
-
-
- Cancel
- center
-
-
- question
-
-
-
-
-
-
- Confirm
- center
-
-
- question
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/identity_verification_view/mod.blp b/src/identity_verification_view/mod.blp
new file mode 100644
index 00000000..1be9dfb8
--- /dev/null
+++ b/src/identity_verification_view/mod.blp
@@ -0,0 +1,104 @@
+using Gtk 4.0;
+using Adw 1;
+
+template $IdentityVerificationView: Adw.Bin {
+ accessibility {
+ label: _("Identity Verification");
+ }
+
+ Gtk.Stack main_stack {
+ transition-type: crossfade;
+ vexpand: true;
+ notify::transition-running => $handle_transition_running() swapped;
+
+ Gtk.StackPage {
+ name: "accept-request";
+ title: _("New Identity Verification Request");
+
+ child: $IdentityVerificationAcceptRequestPage accept_request_page {
+ verification: bind template.verification;
+ };
+ }
+
+ Gtk.StackPage {
+ name: "wait-for-other-party";
+ title: _("Wait for Other Party");
+
+ child: $IdentityVerificationWaitForOtherPage wait_for_other_page {
+ verification: bind template.verification;
+ };
+ }
+
+ Gtk.StackPage {
+ name: "no-supported-methods";
+ title: _("No Supported Verification Methods");
+
+ child: $IdentityVerificationNoSupportedMethodsPage no_supported_methods_page {
+ verification: bind template.verification;
+ };
+ }
+
+ Gtk.StackPage {
+ name: "choose-method";
+ title: _("Verification Request Methods");
+
+ child: $IdentityVerificationChooseMethodPage choose_method_page {
+ verification: bind template.verification;
+ };
+ }
+
+ Gtk.StackPage {
+ name: "qr-code-scanned";
+ title: _("Scan Complete");
+
+ child: $IdentityVerificationQrCodeScannedPage qr_code_scanned_page {
+ verification: bind template.verification;
+ };
+ }
+
+ Gtk.StackPage {
+ name: "confirm-qr-code";
+ title: _("Confirm Scan Result");
+
+ child: $IdentityVerificationConfirmQrCodePage confirm_qr_code_page {
+ verification: bind template.verification;
+ };
+ }
+
+ Gtk.StackPage {
+ name: "sas";
+ title: _("Short Authentication String Verification");
+
+ child: $IdentityVerificationSasPage sas_page {
+ verification: bind template.verification;
+ };
+ }
+
+ Gtk.StackPage {
+ name: "completed";
+ title: _("Verification Successful");
+
+ child: $IdentityVerificationCompletedPage completed_page {
+ verification: bind template.verification;
+ };
+ }
+
+ Gtk.StackPage {
+ name: "cancelled";
+ title: _("Verification Cancelled");
+
+ child: $IdentityVerificationCancelledPage cancelled_page {
+ verification: bind template.verification;
+ };
+ }
+
+ Gtk.StackPage {
+ name: "room-left";
+ title: _("Verification Cancelled");
+
+ child: $IdentityVerificationRoomLeftPage room_left_page {
+ verification: bind template.verification;
+ };
+ }
+ }
+}
diff --git a/src/identity_verification_view/mod.ui b/src/identity_verification_view/mod.ui
deleted file mode 100644
index d2542df9..00000000
--- a/src/identity_verification_view/mod.ui
+++ /dev/null
@@ -1,125 +0,0 @@
-
-
-
-
- Identity Verification
-
-
-
- crossfade
- True
-
-
-
- accept-request
- New Identity Verification Request
-
-
-
-
-
-
-
-
-
- wait-for-other-party
- Wait for Other Party
-
-
-
-
-
-
-
-
-
- no-supported-methods
- No Supported Verification Methods
-
-
-
-
-
-
-
-
-
- choose-method
- Verification Request Methods
-
-
-
-
-
-
-
-
-
- qr-code-scanned
- Scan Complete
-
-
-
-
-
-
-
-
-
- confirm-qr-code
- Confirm Scan Result
-
-
-
-
-
-
-
-
-
- sas
- Short Authentication String Verification
-
-
-
-
-
-
-
-
-
- completed
- Verification Successful
-
-
-
-
-
-
-
-
-
- cancelled
- Verification Cancelled
-
-
-
-
-
-
-
-
-
- room-left
- Verification Cancelled
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/identity_verification_view/no_supported_methods_page.blp b/src/identity_verification_view/no_supported_methods_page.blp
new file mode 100644
index 00000000..832154dd
--- /dev/null
+++ b/src/identity_verification_view/no_supported_methods_page.blp
@@ -0,0 +1,66 @@
+using Gtk 4.0;
+using Adw 1;
+
+template $IdentityVerificationNoSupportedMethodsPage: Adw.Bin {
+ Gtk.ScrolledWindow scrolled_window {
+ hscrollbar-policy: never;
+ propagate-natural-height: true;
+
+ child: Adw.Clamp {
+ maximum-size: 400;
+ tightening-threshold: 300;
+
+ child: Gtk.Box {
+ orientation: vertical;
+ spacing: 18;
+ valign: center;
+
+ Gtk.Label title {
+ wrap: true;
+ wrap-mode: word_char;
+ justify: center;
+ label: _("No Supported Verification Methods");
+ accessible-role: heading;
+
+ accessibility {
+ level: 1;
+ }
+
+ styles [
+ "title-1",
+ ]
+ }
+
+ Gtk.Label message {
+ wrap: true;
+ wrap-mode: word_char;
+ justify: center;
+
+ styles [
+ "body",
+ ]
+ }
+
+ Gtk.Label instructions {
+ wrap: true;
+ wrap-mode: word_char;
+ justify: center;
+ label: _("You can accept this verification from another session or decline it for all your sessions");
+
+ styles [
+ "body",
+ ]
+ }
+
+ $LoadingButton cancel_btn {
+ halign: center;
+ clicked => $cancel() swapped;
+
+ styles [
+ "pill",
+ ]
+ }
+ };
+ };
+ }
+}
diff --git a/src/identity_verification_view/no_supported_methods_page.ui b/src/identity_verification_view/no_supported_methods_page.ui
deleted file mode 100644
index c1188c51..00000000
--- a/src/identity_verification_view/no_supported_methods_page.ui
+++ /dev/null
@@ -1,69 +0,0 @@
-
-
-
-
-
- never
- True
-
-
- 400
- 300
-
-
- vertical
- 18
- center
-
-
- True
- word-char
- center
- No Supported Verification Methods
- heading
-
- 1
-
-
-
-
-
-
- True
- word-char
- center
-
-
-
-
-
- True
- word-char
- center
- You can accept this verification from another session or decline it for all your sessions
-
-
-
-
-
- center
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/identity_verification_view/qr_code_scanned_page.blp b/src/identity_verification_view/qr_code_scanned_page.blp
new file mode 100644
index 00000000..feddb409
--- /dev/null
+++ b/src/identity_verification_view/qr_code_scanned_page.blp
@@ -0,0 +1,62 @@
+using Gtk 4.0;
+using Adw 1;
+
+template $IdentityVerificationQrCodeScannedPage: Adw.Bin {
+ Gtk.ScrolledWindow scrolled_window {
+ hscrollbar-policy: never;
+ propagate-natural-height: true;
+
+ child: Adw.Clamp {
+ maximum-size: 400;
+ tightening-threshold: 300;
+
+ child: Gtk.Box {
+ orientation: vertical;
+ spacing: 18;
+ valign: center;
+
+ Gtk.Label title {
+ label: _("Scan Complete");
+ wrap: true;
+ wrap-mode: word_char;
+ justify: center;
+ accessible-role: heading;
+
+ accessibility {
+ level: 1;
+ }
+
+ styles [
+ "title-1",
+ ]
+ }
+
+ Gtk.Picture {
+ file: "resource:///org/gnome/Fractal/assets/setup-complete.svg";
+ accessible-role: presentation;
+ }
+
+ Gtk.Label message {
+ wrap: true;
+ wrap-mode: word_char;
+ justify: center;
+
+ styles [
+ "body",
+ ]
+ }
+
+ $LoadingButton cancel_btn {
+ halign: center;
+ content-label: _("Cancel Verification");
+ clicked => $cancel() swapped;
+
+ styles [
+ "destructive-action",
+ "pill",
+ ]
+ }
+ };
+ };
+ }
+}
diff --git a/src/identity_verification_view/qr_code_scanned_page.ui b/src/identity_verification_view/qr_code_scanned_page.ui
deleted file mode 100644
index 2e7fc01a..00000000
--- a/src/identity_verification_view/qr_code_scanned_page.ui
+++ /dev/null
@@ -1,66 +0,0 @@
-
-
-
-
-
- never
- True
-
-
- 400
- 300
-
-
- vertical
- 18
- center
-
-
- Scan Complete
- True
- word-char
- center
- heading
-
- 1
-
-
-
-
-
-
- resource:///org/gnome/Fractal/assets/setup-complete.svg
- presentation
-
-
-
-
- True
- word-char
- center
-
-
-
-
-
- center
- Cancel Verification
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/identity_verification_view/room_left_page.blp b/src/identity_verification_view/room_left_page.blp
new file mode 100644
index 00000000..f4475ef3
--- /dev/null
+++ b/src/identity_verification_view/room_left_page.blp
@@ -0,0 +1,59 @@
+using Gtk 4.0;
+using Adw 1;
+
+template $IdentityVerificationRoomLeftPage: Adw.Bin {
+ Gtk.ScrolledWindow {
+ hscrollbar-policy: never;
+ propagate-natural-height: true;
+
+ child: Adw.Clamp {
+ maximum-size: 400;
+ tightening-threshold: 300;
+
+ child: Gtk.Box {
+ orientation: vertical;
+ spacing: 18;
+ valign: center;
+
+ Gtk.Label {
+ wrap: true;
+ wrap-mode: word_char;
+ justify: center;
+ label: _("Verification Cancelled");
+ accessible-role: heading;
+
+ accessibility {
+ level: 1;
+ }
+
+ styles [
+ "title-1",
+ ]
+ }
+
+ Gtk.Label {
+ wrap: true;
+ wrap-mode: word_char;
+ justify: center;
+ label: _("You are no longer in the room where the verification was taking place");
+
+ styles [
+ "body",
+ ]
+ }
+
+ Gtk.Button dismiss_btn {
+ halign: center;
+ can-shrink: true;
+ label: _("_Done");
+ use-underline: true;
+ clicked => $dismiss() swapped;
+
+ styles [
+ "pill",
+ ]
+ }
+ };
+ };
+ }
+}
diff --git a/src/identity_verification_view/room_left_page.ui b/src/identity_verification_view/room_left_page.ui
deleted file mode 100644
index 617f9d2f..00000000
--- a/src/identity_verification_view/room_left_page.ui
+++ /dev/null
@@ -1,62 +0,0 @@
-
-
-
-
-
- never
- True
-
-
- 400
- 300
-
-
- vertical
- 18
- center
-
-
- True
- word-char
- center
- Verification Cancelled
- heading
-
- 1
-
-
-
-
-
-
- True
- word-char
- center
- You are no longer in the room where the verification was taking place
-
-
-
-
-
- center
- True
- _Done
- True
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/identity_verification_view/sas_emoji.blp b/src/identity_verification_view/sas_emoji.blp
new file mode 100644
index 00000000..9457c03a
--- /dev/null
+++ b/src/identity_verification_view/sas_emoji.blp
@@ -0,0 +1,29 @@
+using Gtk 4.0;
+using Adw 1;
+
+template $IdentityVerificationSasEmoji: Adw.Bin {
+ accessibility {
+ labelled-by: [
+ emoji,
+ ];
+
+ described-by: [
+ emoji_name,
+ ];
+ }
+
+ valign: center;
+
+ Gtk.Box {
+ spacing: 6;
+ orientation: vertical;
+
+ Gtk.Label emoji {
+ styles [
+ "emoji",
+ ]
+ }
+
+ Gtk.Label emoji_name {}
+ }
+}
diff --git a/src/identity_verification_view/sas_emoji.ui b/src/identity_verification_view/sas_emoji.ui
deleted file mode 100644
index a7e57737..00000000
--- a/src/identity_verification_view/sas_emoji.ui
+++ /dev/null
@@ -1,27 +0,0 @@
-
-
-
-
- emoji
- emoji_name
-
- center
-
-
- 6
- vertical
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/identity_verification_view/sas_page.blp b/src/identity_verification_view/sas_page.blp
new file mode 100644
index 00000000..43d9bb5d
--- /dev/null
+++ b/src/identity_verification_view/sas_page.blp
@@ -0,0 +1,87 @@
+using Gtk 4.0;
+using Adw 1;
+
+template $IdentityVerificationSasPage: Adw.Bin {
+ Gtk.ScrolledWindow scrolled_window {
+ hscrollbar-policy: never;
+ propagate-natural-height: true;
+
+ child: Adw.Clamp {
+ maximum-size: 400;
+ tightening-threshold: 300;
+
+ child: Gtk.Box {
+ orientation: vertical;
+ spacing: 18;
+ valign: center;
+
+ Gtk.Label title {
+ wrap: true;
+ wrap-mode: word_char;
+ justify: center;
+ accessible-role: heading;
+
+ accessibility {
+ level: 1;
+ }
+
+ styles [
+ "title-1",
+ ]
+ }
+
+ Gtk.Label instructions {
+ wrap: true;
+ wrap-mode: word_char;
+ justify: center;
+
+ styles [
+ "body",
+ ]
+ }
+
+ Gtk.Box row_1 {
+ valign: center;
+ halign: center;
+ spacing: 30;
+ margin-top: 24;
+ }
+
+ Gtk.Box row_2 {
+ valign: center;
+ halign: center;
+ spacing: 30;
+ margin-bottom: 24;
+ }
+
+ Adw.WrapBox {
+ child-spacing: 12;
+ line-spacing: 12;
+ align: 0.5;
+
+ $LoadingButton mismatch_btn {
+ content-label: _("Do Not Match");
+ halign: center;
+ clicked => $data_mismatch() swapped;
+
+ styles [
+ "destructive-action",
+ "pill",
+ ]
+ }
+
+ $LoadingButton match_btn {
+ content-label: _("Match");
+ halign: center;
+ clicked => $data_match() swapped;
+
+ styles [
+ "suggested-action",
+ "pill",
+ ]
+ }
+ }
+ };
+ };
+ }
+}
diff --git a/src/identity_verification_view/sas_page.ui b/src/identity_verification_view/sas_page.ui
deleted file mode 100644
index 736eae92..00000000
--- a/src/identity_verification_view/sas_page.ui
+++ /dev/null
@@ -1,95 +0,0 @@
-
-
-
-
-
- never
- True
-
-
- 400
- 300
-
-
- vertical
- 18
- center
-
-
- True
- word-char
- center
- heading
-
- 1
-
-
-
-
-
-
- True
- word-char
- center
-
-
-
-
-
- center
- center
- 30
- 24
-
-
-
-
- center
- center
- 30
- 24
-
-
-
-
- 12
- 12
- 0.5
-
-
-
- Do Not Match
- center
-
-
-
-
-
-
-
- Match
- center
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/identity_verification_view/scan_qr_code_page.blp b/src/identity_verification_view/scan_qr_code_page.blp
new file mode 100644
index 00000000..c68e6abe
--- /dev/null
+++ b/src/identity_verification_view/scan_qr_code_page.blp
@@ -0,0 +1,95 @@
+using Gtk 4.0;
+using Adw 1;
+
+template $IdentityVerificationScanQrCodePage: Adw.Bin {
+ Gtk.ScrolledWindow scrolled_window {
+ hscrollbar-policy: never;
+ propagate-natural-height: true;
+
+ child: Adw.Clamp {
+ maximum-size: 400;
+ tightening-threshold: 300;
+
+ child: Gtk.Box {
+ orientation: vertical;
+ spacing: 18;
+ valign: center;
+
+ Gtk.Label title {
+ wrap: true;
+ wrap-mode: word_char;
+ justify: center;
+ accessible-role: heading;
+
+ accessibility {
+ level: 1;
+ }
+
+ styles [
+ "title-1",
+ ]
+ }
+
+ Gtk.Label instructions {
+ wrap: true;
+ wrap-mode: word_char;
+ justify: center;
+
+ styles [
+ "body",
+ ]
+ }
+
+ Adw.Bin qrcode_scanner_bin {
+ margin-top: 12;
+ margin-bottom: 12;
+ valign: center;
+ halign: center;
+ }
+
+ Gtk.Label cannot_scan_label {
+ label: _("Can’t scan QR code?");
+ wrap: true;
+ wrap-mode: word_char;
+ justify: center;
+
+ styles [
+ "body",
+ ]
+ }
+
+ Gtk.Button show_qr_code_btn {
+ halign: center;
+ can-shrink: true;
+ label: _("Show a QR code to scan with another device");
+ clicked => $show_qrcode() swapped;
+
+ styles [
+ "pill",
+ ]
+ }
+
+ $LoadingButton start_sas_btn {
+ content-label: _("Compare Emoji");
+ halign: center;
+ clicked => $start_sas() swapped;
+
+ styles [
+ "pill",
+ ]
+ }
+
+ $LoadingButton cancel_btn {
+ halign: center;
+ content-label: _("Cancel Verification");
+ clicked => $cancel() swapped;
+
+ styles [
+ "destructive-action",
+ "pill",
+ ]
+ }
+ };
+ };
+ }
+}
diff --git a/src/identity_verification_view/scan_qr_code_page.ui b/src/identity_verification_view/scan_qr_code_page.ui
deleted file mode 100644
index abf5be5b..00000000
--- a/src/identity_verification_view/scan_qr_code_page.ui
+++ /dev/null
@@ -1,99 +0,0 @@
-
-
-
-
-
- never
- True
-
-
- 400
- 300
-
-
- vertical
- 18
- center
-
-
- True
- word-char
- center
- heading
-
- 1
-
-
-
-
-
-
- True
- word-char
- center
-
-
-
-
-
- 12
- 12
- center
- center
-
-
-
-
- Can’t scan QR code?
- True
- word-char
- center
-
-
-
-
-
- center
- True
- Show a QR code to scan with another device
-
-
-
-
-
-
- Compare Emoji
- center
-
-
-
-
-
-
- center
- Cancel Verification
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/identity_verification_view/wait_for_other_page.blp b/src/identity_verification_view/wait_for_other_page.blp
new file mode 100644
index 00000000..3fe22707
--- /dev/null
+++ b/src/identity_verification_view/wait_for_other_page.blp
@@ -0,0 +1,84 @@
+using Gtk 4.0;
+using Adw 1;
+
+template $IdentityVerificationWaitForOtherPage: Adw.Bin {
+ Gtk.ScrolledWindow scrolled_window {
+ hscrollbar-policy: never;
+ propagate-natural-height: true;
+
+ child: Adw.Clamp {
+ maximum-size: 400;
+ tightening-threshold: 300;
+
+ child: Gtk.Box {
+ orientation: vertical;
+ spacing: 18;
+ valign: center;
+ halign: center;
+
+ Gtk.Label title {
+ wrap: true;
+ wrap-mode: word_char;
+ justify: center;
+ accessible-role: heading;
+
+ accessibility {
+ level: 1;
+ }
+
+ styles [
+ "title-1",
+ ]
+ }
+
+ Gtk.Label instructions {
+ wrap: true;
+ wrap-mode: word_char;
+ justify: center;
+
+ styles [
+ "body",
+ ]
+ }
+
+ Gtk.Label trust {
+ label: _("To be secure, the verification should happen in person or use a trusted way of communication.");
+ wrap: true;
+ wrap-mode: word_char;
+ justify: center;
+
+ styles [
+ "body",
+ ]
+ }
+
+ Gtk.Picture {
+ file: "resource:///org/gnome/Fractal/icons/scalable/status/other-device.svg";
+ accessible-role: presentation;
+ }
+
+ Gtk.Label {
+ label: _("The request is not showing up on the other device?");
+ wrap: true;
+ wrap-mode: word_char;
+ justify: center;
+
+ styles [
+ "body",
+ ]
+ }
+
+ $LoadingButton cancel_btn {
+ halign: center;
+ content-label: _("Cancel Verification Request");
+ clicked => $cancel() swapped;
+
+ styles [
+ "destructive-action",
+ "pill",
+ ]
+ }
+ };
+ };
+ }
+}
diff --git a/src/identity_verification_view/wait_for_other_page.ui b/src/identity_verification_view/wait_for_other_page.ui
deleted file mode 100644
index 6ee5048d..00000000
--- a/src/identity_verification_view/wait_for_other_page.ui
+++ /dev/null
@@ -1,88 +0,0 @@
-
-
-
-
-
- never
- True
-
-
- 400
- 300
-
-
- vertical
- 18
- center
- center
-
-
- True
- word-char
- center
- heading
-
- 1
-
-
-
-
-
-
- True
- word-char
- center
-
-
-
-
-
- To be secure, the verification should happen in person or use a trusted way of communication.
- True
- word-char
- center
-
-
-
-
-
- resource:///org/gnome/Fractal/icons/scalable/status/other-device.svg
- presentation
-
-
-
-
- The request is not showing up on the other device?
- True
- word-char
- center
-
-
-
-
-
- center
- Cancel Verification Request
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/ui-resources.gresource.xml b/src/ui-resources.gresource.xml
index 773b966e..947191f3 100644
--- a/src/ui-resources.gresource.xml
+++ b/src/ui-resources.gresource.xml
@@ -1,19 +1,6 @@
- identity_verification_view/accept_request_page.ui
- identity_verification_view/cancelled_page.ui
- identity_verification_view/choose_method_page.ui
- identity_verification_view/completed_page.ui
- identity_verification_view/confirm_qr_code_page.ui
- identity_verification_view/mod.ui
- identity_verification_view/no_supported_methods_page.ui
- identity_verification_view/qr_code_scanned_page.ui
- identity_verification_view/room_left_page.ui
- identity_verification_view/sas_emoji.ui
- identity_verification_view/sas_page.ui
- identity_verification_view/scan_qr_code_page.ui
- identity_verification_view/wait_for_other_page.ui
login/advanced_dialog.ui
login/greeter.ui
login/homeserver_page.ui