Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
7f93991
UI Design
okapii Feb 6, 2024
4e3e845
Icon folder cleanup
okapii Feb 19, 2024
ef47d65
Icons: more cleanups
okapii Feb 19, 2024
43cf602
Initial work new UI design
okapii Feb 22, 2024
7ac5ac8
More design rework and DSL restructuring
okapii Feb 23, 2024
42fe3ca
feat: Add comprehensive user registration screen with SSO support
TigerInYourDream Sep 5, 2025
f212565
Merge branch 'main' into feature/register-new
TigerInYourDream Sep 5, 2025
0ef2b32
fix: Address clippy warnings
TigerInYourDream Sep 5, 2025
6509e20
feat: Complete SSO registration implementation with proper modal hand…
TigerInYourDream Sep 8, 2025
e070f6f
fix: Registration modal and sync state improvements
TigerInYourDream Sep 10, 2025
de8e5f6
add reset_screen_state after register success and NavigateToLogin
TigerInYourDream Sep 19, 2025
7fbf5d6
Merge branch 'main' into feature/register-new
TigerInYourDream Sep 19, 2025
4b7f52b
fix: Reset dock state flag on logout to prevent tab restoration
TigerInYourDream Sep 19, 2025
2f747bc
Merge main branch into feature/register-new
TigerInYourDream Nov 12, 2025
a169504
Merge branch 'origin/new_design' into feature/register-new
TigerInYourDream Nov 12, 2025
35642a3
Revert "Merge branch 'origin/new_design' into feature/register-new"
TigerInYourDream Nov 12, 2025
989e267
Fix register screen macros after reverting new_design
TigerInYourDream Nov 12, 2025
81aa921
Restore non-registration files to origin/main state
TigerInYourDream Nov 12, 2025
74c53e8
Polish registration docs and UIA handling
TigerInYourDream Nov 12, 2025
33dfe0e
Add registration token UI and keep SSO pending
TigerInYourDream Dec 1, 2025
fe502d0
Merge branch 'main' into feature/register-new
TigerInYourDream Dec 5, 2025
4a10a46
Fix registration token flow and unblock SSO cancel in register screen
TigerInYourDream Dec 31, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
71 changes: 63 additions & 8 deletions src/app.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,13 @@ use std::collections::HashMap;
use makepad_widgets::{makepad_micro_serde::*, *};
use matrix_sdk::ruma::{OwnedRoomId, RoomId};
use crate::{
avatar_cache::clear_avatar_cache, home::{
main_desktop_ui::MainDesktopUiAction, new_message_context_menu::NewMessageContextMenuWidgetRefExt, room_screen::{clear_timeline_states, MessageAction}, rooms_list::{clear_all_invited_rooms, enqueue_rooms_list_update, RoomsListAction, RoomsListRef, RoomsListUpdate}
avatar_cache::clear_avatar_cache,
register::register_screen::RegisterAction,
home::{
main_desktop_ui::MainDesktopUiAction,
new_message_context_menu::NewMessageContextMenuWidgetRefExt,
room_screen::{clear_timeline_states, MessageAction},
rooms_list::{clear_all_invited_rooms, enqueue_rooms_list_update, RoomsListAction, RoomsListRef, RoomsListUpdate},
}, join_leave_room_modal::{
JoinLeaveModalKind, JoinLeaveRoomModalAction, JoinLeaveRoomModalWidgetRefExt
}, login::login_screen::LoginAction, logout::logout_confirm_modal::{LogoutAction, LogoutConfirmModalAction, LogoutConfirmModalWidgetRefExt}, persistence, profile::user_profile_cache::clear_user_profile_cache, room::BasicRoomDetails, shared::callout_tooltip::{
Expand All @@ -36,6 +41,7 @@ live_design! {
use crate::verification_modal::VerificationModal;
use crate::join_leave_room_modal::JoinLeaveRoomModal;
use crate::login::login_screen::LoginScreen;
use crate::register::register_screen::RegisterScreen;
use crate::logout::logout_confirm_modal::LogoutConfirmModal;
use crate::shared::popup_list::*;
use crate::home::new_message_context_menu::*;
Expand Down Expand Up @@ -95,7 +101,10 @@ live_design! {
visible: true
login_screen = <LoginScreen> {}
}

register_screen_view = <View> {
visible: false
register_screen = <RegisterScreen> {}
}
<PopupList> {}

// Context menus should be shown in front of other UI elements,
Expand Down Expand Up @@ -174,6 +183,7 @@ impl LiveRegister for App {
crate::home::live_design(cx);
crate::profile::live_design(cx);
crate::login::live_design(cx);
crate::register::live_design(cx);
crate::logout::live_design(cx);
}
}
Expand Down Expand Up @@ -251,11 +261,55 @@ impl MatchEvent for App {
continue;
}

if let Some(LoginAction::LoginSuccess) = action.downcast_ref() {
log!("Received LoginAction::LoginSuccess, hiding login view.");
self.app_state.logged_in = true;
self.update_login_visibility(cx);
self.ui.redraw(cx);
// Handle login-related actions
if let Some(login_action) = action.downcast_ref::<LoginAction>() {
match login_action {
LoginAction::LoginSuccess => {
log!("Received LoginAction::LoginSuccess, hiding login view.");
self.app_state.logged_in = true;
self.update_login_visibility(cx);
self.ui.redraw(cx);
}
LoginAction::NavigateToRegister => {
log!("Navigating from login to register screen");
self.ui.view(ids!(login_screen_view)).set_visible(cx, false);
self.ui.view(ids!(register_screen_view)).set_visible(cx, true);
// Reset register button state when showing register screen
let register_button = self.ui.button(ids!(register_screen_view.register_screen.register_button));
register_button.set_enabled(cx, true);
register_button.reset_hover(cx);
self.ui.redraw(cx);
}
_ => {}
}
continue;
}

// Handle register-related actions
if let Some(register_action) = action.downcast_ref::<RegisterAction>() {
match register_action {
RegisterAction::NavigateToLogin => {
log!("Navigating from register to login screen");
// Reset the register screen state before hiding it
if let Some(mut register_screen_ref) = self.ui.widget(ids!(register_screen_view.register_screen)).borrow_mut::<crate::register::register_screen::RegisterScreen>() {
register_screen_ref.reset_screen_state(cx);
}
self.ui.view(ids!(register_screen_view)).set_visible(cx, false);
self.ui.view(ids!(login_screen_view)).set_visible(cx, true);
self.ui.redraw(cx);
}
RegisterAction::RegistrationSuccess => {
log!("Registration successful, transitioning to logged in state");
// Clear register screen state after successful registration
if let Some(mut register_screen_ref) = self.ui.widget(ids!(register_screen_view.register_screen)).borrow_mut::<crate::register::register_screen::RegisterScreen>() {
register_screen_ref.reset_screen_state(cx);
}
self.app_state.logged_in = true;
self.update_login_visibility(cx);
self.ui.redraw(cx);
}
_ => {}
}
continue;
}

Expand Down Expand Up @@ -533,6 +587,7 @@ impl App {
.close(cx);
}
self.ui.view(ids!(login_screen_view)).set_visible(cx, show_login);
self.ui.view(ids!(register_screen_view)).set_visible(cx, false);
self.ui.view(ids!(home_screen_view)).set_visible(cx, !show_login);
}

Expand Down
2 changes: 2 additions & 0 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ pub mod settings;

/// Login screen
pub mod login;
/// Register screen
pub mod register;
/// Logout confirmation and state management
pub mod logout;
/// Core UI content: the main home screen (rooms list), room screen.
Expand Down
11 changes: 6 additions & 5 deletions src/login/login_screen.rs
Original file line number Diff line number Diff line change
Expand Up @@ -286,8 +286,6 @@ live_design! {
}
}

static MATRIX_SIGN_UP_URL: &str = "https://matrix.org/docs/chat_basics/matrix-for-im/#creating-a-matrix-account";

#[derive(Live, LiveHook, Widget)]
pub struct LoginScreen {
#[deref] view: View,
Expand Down Expand Up @@ -321,8 +319,7 @@ impl MatchEvent for LoginScreen {
let login_status_modal_inner = self.view.login_status_modal(ids!(login_status_modal_inner));

if signup_button.clicked(actions) {
log!("Opening URL \"{}\"", MATRIX_SIGN_UP_URL);
let _ = robius_open::Uri::new(MATRIX_SIGN_UP_URL).open();
cx.action(LoginAction::NavigateToRegister);
}

if login_button.clicked(actions)
Expand Down Expand Up @@ -370,6 +367,7 @@ impl MatchEvent for LoginScreen {
}

// Handle login-related actions received from background async tasks.
// Skip processing if the login screen is not visible (e.g., user is on register screen)
match action.downcast_ref() {
Some(LoginAction::CliAutoLogin { user_id, homeserver }) => {
user_id_input.set_text(cx, user_id);
Expand Down Expand Up @@ -454,7 +452,8 @@ impl MatchEvent for LoginScreen {
submit_async_request(MatrixRequest::SpawnSSOServer{
identity_provider_id: format!("oidc-{}",brand),
brand: brand.to_string(),
homeserver_url: homeserver_input.text()
homeserver_url: homeserver_input.text(),
is_registration: false,
});
}
}
Expand Down Expand Up @@ -493,5 +492,7 @@ pub enum LoginAction {
/// When an SSO-based login is pendng, pressing the cancel button will send
/// an HTTP request to this SSO server URL to gracefully shut it down.
SsoSetRedirectUrl(Url),
/// Navigate to the register screen.
NavigateToRegister,
None,
}
9 changes: 9 additions & 0 deletions src/register/mod.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
use makepad_widgets::*;

pub mod register_screen;
pub mod register_status_modal;

pub fn live_design(cx: &mut Cx) {
register_screen::live_design(cx);
register_status_modal::live_design(cx);
}
Loading