diff --git a/Telegram/SourceFiles/boxes/peer_list_controllers.cpp b/Telegram/SourceFiles/boxes/peer_list_controllers.cpp index b745c48eb8..eef91d413a 100644 --- a/Telegram/SourceFiles/boxes/peer_list_controllers.cpp +++ b/Telegram/SourceFiles/boxes/peer_list_controllers.cpp @@ -113,7 +113,7 @@ object_ptr PrepareContactsBox( box->addButton(tr::lng_close(), [=] { box->closeBox(); }); box->addLeftButton( tr::lng_profile_add_contact(), - [=] { controller->widget()->showAddContact(); }); + [=] { controller->showAddContact(); }); }; return Box( std::make_unique( diff --git a/Telegram/SourceFiles/dialogs/dialogs_inner_widget.cpp b/Telegram/SourceFiles/dialogs/dialogs_inner_widget.cpp index a4c87531cc..31596585dc 100644 --- a/Telegram/SourceFiles/dialogs/dialogs_inner_widget.cpp +++ b/Telegram/SourceFiles/dialogs/dialogs_inner_widget.cpp @@ -2281,7 +2281,7 @@ void InnerWidget::refreshEmptyLabel() { resizeEmptyLabel(); _empty->setClickHandlerFilter([=](const auto &...) { if (_emptyState == EmptyState::NoContacts) { - App::wnd()->showAddContact(); + _controller->showAddContact(); } else if (_emptyState == EmptyState::EmptyFolder) { editOpenedFilter(); } diff --git a/Telegram/SourceFiles/mainwindow.cpp b/Telegram/SourceFiles/mainwindow.cpp index 188213ead6..24a2fc724b 100644 --- a/Telegram/SourceFiles/mainwindow.cpp +++ b/Telegram/SourceFiles/mainwindow.cpp @@ -32,7 +32,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "main/main_domain.h" #include "mainwidget.h" #include "boxes/confirm_box.h" -#include "boxes/add_contact_box.h" #include "boxes/connection_box.h" #include "storage/storage_account.h" #include "storage/localstorage.h" @@ -669,42 +668,6 @@ void MainWindow::updateTrayMenu(bool force) { psTrayMenuUpdated(); } -void MainWindow::showAddContact() { - if (isHidden()) { - showFromTray(); - } - - if (const auto controller = sessionController()) { - Ui::show( - Box(&controller->session()), - Ui::LayerOption::KeepOther); - } -} - -void MainWindow::showNewGroup() { - if (isHidden()) { - showFromTray(); - } - - if (const auto controller = sessionController()) { - Ui::show( - Box(controller, GroupInfoBox::Type::Group), - Ui::LayerOption::KeepOther); - } -} - -void MainWindow::showNewChannel() { - if (isHidden()) { - showFromTray(); - } - - if (const auto controller = sessionController()) { - Ui::show( - Box(controller, GroupInfoBox::Type::Channel), - Ui::LayerOption::KeepOther); - } -} - void MainWindow::showLogoutConfirmation() { if (isHidden()) { showFromTray(); diff --git a/Telegram/SourceFiles/mainwindow.h b/Telegram/SourceFiles/mainwindow.h index 6e2a05fa6c..f2a952528f 100644 --- a/Telegram/SourceFiles/mainwindow.h +++ b/Telegram/SourceFiles/mainwindow.h @@ -53,9 +53,6 @@ public: void setupMain(); void showSettings(); - void showAddContact(); - void showNewGroup(); - void showNewChannel(); void setInnerFocus(); diff --git a/Telegram/SourceFiles/platform/linux/main_window_linux.cpp b/Telegram/SourceFiles/platform/linux/main_window_linux.cpp index 9bdec90360..0abc1995d5 100644 --- a/Telegram/SourceFiles/platform/linux/main_window_linux.cpp +++ b/Telegram/SourceFiles/platform/linux/main_window_linux.cpp @@ -932,6 +932,12 @@ void MainWindow::updateGlobalMenuHook() { #else // DESKTOP_APP_DISABLE_DBUS_INTEGRATION void MainWindow::createGlobalMenu() { + const auto ensureWindowShown = [=] { + if (isHidden()) { + showFromTray(); + } + }; + psMainMenu = new QMenu(this); auto file = psMainMenu->addMenu(tr::lng_mac_menu_file(tr::now)); @@ -1061,20 +1067,32 @@ void MainWindow::createGlobalMenu() { psAddContact = tools->addAction( tr::lng_mac_menu_add_contact(tr::now), - App::wnd(), - [=] { App::wnd()->showAddContact(); }); + this, + [=] { + Expects(sessionController() != nullptr); + ensureWindowShown(); + sessionController()->showAddContact(); + }); tools->addSeparator(); psNewGroup = tools->addAction( tr::lng_mac_menu_new_group(tr::now), - App::wnd(), - [=] { App::wnd()->showNewGroup(); }); + this, + [=] { + Expects(sessionController() != nullptr); + ensureWindowShown(); + sessionController()->showNewGroup(); + }); psNewChannel = tools->addAction( tr::lng_mac_menu_new_channel(tr::now), - App::wnd(), - [=] { App::wnd()->showNewChannel(); }); + this, + [=] { + Expects(sessionController() != nullptr); + ensureWindowShown(); + sessionController()->showNewChannel(); + }); auto help = psMainMenu->addMenu(tr::lng_linux_menu_help(tr::now)); diff --git a/Telegram/SourceFiles/platform/mac/main_window_mac.mm b/Telegram/SourceFiles/platform/mac/main_window_mac.mm index 08630c158d..3d49191915 100644 --- a/Telegram/SourceFiles/platform/mac/main_window_mac.mm +++ b/Telegram/SourceFiles/platform/mac/main_window_mac.mm @@ -684,6 +684,12 @@ void MainWindow::initShadows() { } void MainWindow::createGlobalMenu() { + const auto ensureWindowShown = [=] { + if (isHidden()) { + showFromTray(); + } + }; + auto main = psMainMenu.addMenu(qsl("Telegram")); auto about = main->addAction(tr::lng_mac_menu_about_telegram(tr::now, lt_telegram, qsl("Telegram"))); connect(about, &QAction::triggered, about, [] { @@ -738,16 +744,40 @@ void MainWindow::createGlobalMenu() { } Ui::show(PrepareContactsBox(sessionController())); })); - psAddContact = window->addAction(tr::lng_mac_menu_add_contact(tr::now), App::wnd(), [=] { - App::wnd()->showAddContact(); - }); + { + auto callback = [=] { + Expects(sessionController() != nullptr); + ensureWindowShown(); + sessionController()->showAddContact(); + }; + psAddContact = window->addAction( + tr::lng_mac_menu_add_contact(tr::now), + this, + std::move(callback)); + } window->addSeparator(); - psNewGroup = window->addAction(tr::lng_mac_menu_new_group(tr::now), App::wnd(), [=] { - App::wnd()->showNewGroup(); - }); - psNewChannel = window->addAction(tr::lng_mac_menu_new_channel(tr::now), App::wnd(), [=] { - App::wnd()->showNewChannel(); - }); + { + auto callback = [=] { + Expects(sessionController() != nullptr); + ensureWindowShown(); + sessionController()->showNewGroup(); + }; + psNewGroup = window->addAction( + tr::lng_mac_menu_new_group(tr::now), + this, + std::move(callback)); + } + { + auto callback = [=] { + Expects(sessionController() != nullptr); + ensureWindowShown(); + sessionController()->showNewChannel(); + }; + psNewChannel = window->addAction( + tr::lng_mac_menu_new_channel(tr::now), + this, + std::move(callback)); + } window->addSeparator(); psShowTelegram = window->addAction(tr::lng_mac_menu_show(tr::now), App::wnd(), [=] { showFromTray(); diff --git a/Telegram/SourceFiles/window/window_main_menu.cpp b/Telegram/SourceFiles/window/window_main_menu.cpp index 5edad0b6fd..b8840574ec 100644 --- a/Telegram/SourceFiles/window/window_main_menu.cpp +++ b/Telegram/SourceFiles/window/window_main_menu.cpp @@ -894,13 +894,13 @@ void MainMenu::parentResized() { void MainMenu::refreshMenu() { _menu->clearActions(); + const auto controller = _controller; if (!_controller->session().supportMode()) { - const auto controller = _controller; - _menu->addAction(tr::lng_create_group_title(tr::now), [] { - App::wnd()->showNewGroup(); + _menu->addAction(tr::lng_create_group_title(tr::now), [=] { + controller->showNewGroup(); }, &st::mainMenuNewGroup, &st::mainMenuNewGroupOver); - _menu->addAction(tr::lng_create_channel_title(tr::now), [] { - App::wnd()->showNewChannel(); + _menu->addAction(tr::lng_create_channel_title(tr::now), [=] { + controller->showNewChannel(); }, &st::mainMenuNewChannel, &st::mainMenuNewChannelOver); _menu->addAction(tr::lng_menu_contacts(tr::now), [=] { Ui::show(PrepareContactsBox(controller)); @@ -911,8 +911,8 @@ void MainMenu::refreshMenu() { }, &st::mainMenuCalls, &st::mainMenuCallsOver); } } else { - _menu->addAction(tr::lng_profile_add_contact(tr::now), [] { - App::wnd()->showAddContact(); + _menu->addAction(tr::lng_profile_add_contact(tr::now), [=] { + controller->showAddContact(); }, &st::mainMenuContacts, &st::mainMenuContactsOver); const auto fix = std::make_shared>(); diff --git a/Telegram/SourceFiles/window/window_session_controller.cpp b/Telegram/SourceFiles/window/window_session_controller.cpp index c0aef5a3fc..82da3e84fd 100644 --- a/Telegram/SourceFiles/window/window_session_controller.cpp +++ b/Telegram/SourceFiles/window/window_session_controller.cpp @@ -7,6 +7,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL */ #include "window/window_session_controller.h" +#include "boxes/add_contact_box.h" #include "boxes/peers/edit_peer_info_box.h" #include "boxes/peer_list_controllers.h" #include "window/window_controller.h" @@ -1140,6 +1141,24 @@ void SessionController::setActiveChatsFilter(FilterId id) { } } +void SessionController::showAddContact() { + _window->show( + Box(&session()), + Ui::LayerOption::KeepOther); +} + +void SessionController::showNewGroup() { + _window->show( + Box(this, GroupInfoBox::Type::Group), + Ui::LayerOption::KeepOther); +} + +void SessionController::showNewChannel() { + _window->show( + Box(this, GroupInfoBox::Type::Channel), + Ui::LayerOption::KeepOther); +} + SessionController::~SessionController() = default; } // namespace Window diff --git a/Telegram/SourceFiles/window/window_session_controller.h b/Telegram/SourceFiles/window/window_session_controller.h index 64f3b8b66b..d973fe3dad 100644 --- a/Telegram/SourceFiles/window/window_session_controller.h +++ b/Telegram/SourceFiles/window/window_session_controller.h @@ -325,6 +325,10 @@ public: Dialogs::Key chat, QDate requestedDate); + void showAddContact(); + void showNewGroup(); + void showNewChannel(); + void showPassportForm(const Passport::FormRequest &request); void clearPassportForm();