From ea70b96cf82124b9dec1d1863dad2c50af88b0e5 Mon Sep 17 00:00:00 2001 From: Karol Kosek Date: Tue, 29 Aug 2023 15:50:37 +0200 Subject: [PATCH] Mail: Use set_activates_on_selection and on_activation callback Preparation for a sortable mailbox. Otherwise the model would resort itself and select mail again forever. Arrow keys will no longer load mail automatically, now you also need to hit Enter. --- Userland/Applications/Mail/MailWidget.cpp | 18 ++++++++---------- Userland/Applications/Mail/MailWidget.h | 4 ++-- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/Userland/Applications/Mail/MailWidget.cpp b/Userland/Applications/Mail/MailWidget.cpp index 500016a44d..3ac37737b7 100644 --- a/Userland/Applications/Mail/MailWidget.cpp +++ b/Userland/Applications/Mail/MailWidget.cpp @@ -32,12 +32,14 @@ MailWidget::MailWidget() m_web_view = *find_descendant_of_type_named("web_view"); m_statusbar = *find_descendant_of_type_named("statusbar"); - m_mailbox_list->on_selection_change = [this] { - selected_mailbox(); + m_mailbox_list->set_activates_on_selection(true); + m_mailbox_list->on_activation = [this](auto& index) { + selected_mailbox(index); }; - m_individual_mailbox_view->on_selection_change = [this] { - selected_email_to_load(); + m_individual_mailbox_view->set_activates_on_selection(true); + m_individual_mailbox_view->on_activation = [this](auto& index) { + selected_email_to_load(index); }; m_web_view->on_link_click = [this](auto& url, auto&, unsigned) { @@ -241,13 +243,11 @@ bool MailWidget::is_supported_alternative(Alternative const& alternative) const return alternative.body_structure.type.equals_ignoring_ascii_case("text"sv) && (alternative.body_structure.subtype.equals_ignoring_ascii_case("plain"sv) || alternative.body_structure.subtype.equals_ignoring_ascii_case("html"sv)); } -void MailWidget::selected_mailbox() +void MailWidget::selected_mailbox(GUI::ModelIndex const& index) { m_individual_mailbox_model = InboxModel::create({}); m_individual_mailbox_view->set_model(m_individual_mailbox_model); - auto const& index = m_mailbox_list->selection().first(); - if (!index.is_valid()) return; @@ -418,10 +418,8 @@ void MailWidget::selected_mailbox() m_individual_mailbox_view->set_model(m_individual_mailbox_model); } -void MailWidget::selected_email_to_load() +void MailWidget::selected_email_to_load(GUI::ModelIndex const& index) { - auto const& index = m_individual_mailbox_view->selection().first(); - if (!index.is_valid()) return; diff --git a/Userland/Applications/Mail/MailWidget.h b/Userland/Applications/Mail/MailWidget.h index be8a6b2c12..f71ebb7a78 100644 --- a/Userland/Applications/Mail/MailWidget.h +++ b/Userland/Applications/Mail/MailWidget.h @@ -26,8 +26,8 @@ public: private: MailWidget(); - void selected_mailbox(); - void selected_email_to_load(); + void selected_mailbox(GUI::ModelIndex const&); + void selected_email_to_load(GUI::ModelIndex const&); struct Alternative { IMAP::BodyStructureData const& body_structure;