From b95f5071a4a44af9112440520d53a284c8779a9c Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Fri, 10 Jul 2020 00:12:06 +0300 Subject: [PATCH] Added new touchbar to MainWindow. --- .../platform/mac/main_window_mac.h | 4 +- .../platform/mac/main_window_mac.mm | 65 ++++++++++++------- 2 files changed, 43 insertions(+), 26 deletions(-) diff --git a/Telegram/SourceFiles/platform/mac/main_window_mac.h b/Telegram/SourceFiles/platform/mac/main_window_mac.h index 431cafe13a..b5fd21dee5 100644 --- a/Telegram/SourceFiles/platform/mac/main_window_mac.h +++ b/Telegram/SourceFiles/platform/mac/main_window_mac.h @@ -92,11 +92,9 @@ protected: private: friend class Private; - void initTouchBar(); void hideAndDeactivate(); void updateTitleCounter(); void updateIconCounters(); - void destroyCurrentTouchBar(); std::unique_ptr _private; @@ -105,6 +103,8 @@ private: base::Timer _hideAfterFullScreenTimer; + rpl::variable _canApplyMarkdown; + QMenuBar psMainMenu; QAction *psLogout = nullptr; QAction *psUndo = nullptr; diff --git a/Telegram/SourceFiles/platform/mac/main_window_mac.mm b/Telegram/SourceFiles/platform/mac/main_window_mac.mm index ec8699e871..bdaa2069e9 100644 --- a/Telegram/SourceFiles/platform/mac/main_window_mac.mm +++ b/Telegram/SourceFiles/platform/mac/main_window_mac.mm @@ -26,6 +26,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "window/window_session_controller.h" #include "window/window_controller.h" #include "window/themes/window_theme.h" +#include "platform/mac/touchbar/mac_touchbar_manager.h" #include "platform/platform_notifications_manager.h" #include "base/platform/base_platform_info.h" #include "boxes/peer_list_controllers.h" @@ -130,6 +131,10 @@ public: explicit Private(not_null window); void setNativeWindow(NSWindow *window, NSView *view); + void initTouchBar( + NSWindow *window, + not_null controller, + rpl::producer canApplyMarkdown); void setWindowBadge(const QString &str); void setWindowTitle(const QString &str); void updateNativeTitle(); @@ -281,6 +286,27 @@ void MainWindow::Private::setNativeWindow(NSWindow *window, NSView *view) { initCustomTitle(); } +void MainWindow::Private::initTouchBar( + NSWindow *window, + not_null controller, + rpl::producer canApplyMarkdown) { +#ifndef OS_OSX + if (!IsMac10_13OrGreater()) { + return; + } + [NSApplication sharedApplication] + .automaticCustomizeTouchBarMenuItemEnabled = true; + + [window + performSelectorOnMainThread:@selector(setTouchBar:) + withObject:[[[RootTouchBar alloc] + init:std::move(canApplyMarkdown) + controller:controller + domain:(&Core::App().domain())] autorelease] + waitUntilDone:true]; +#endif +} + void MainWindow::Private::initCustomTitle() { #ifndef OS_MAC_OLD if (![_nativeWindow respondsToSelector:@selector(contentLayoutRect)] @@ -468,18 +494,6 @@ MainWindow::MainWindow(not_null controller) _private->updateNativeTitle(); } }); - - initTouchBar(); -} - -void MainWindow::initTouchBar() { -#ifndef OS_OSX -#endif // OS_OSX -} - -void MainWindow::destroyCurrentTouchBar() { -#ifndef OS_OSX -#endif // OS_OSX } void MainWindow::closeWithoutDestroy() { @@ -509,6 +523,10 @@ void MainWindow::initHook() { if (auto view = reinterpret_cast(winId())) { if (auto window = [view window]) { _private->setNativeWindow(window, view); + _private->initTouchBar( + window, + &controller(), + _canApplyMarkdown.changes()); } } } @@ -779,7 +797,7 @@ void MainWindow::updateGlobalMenuHook() { auto focused = QApplication::focusWidget(); bool canUndo = false, canRedo = false, canCut = false, canCopy = false, canPaste = false, canDelete = false, canSelectAll = false; auto clipboardHasText = _private->clipboardHasText(); - auto showTouchBarItem = false; + auto canApplyMarkdown = false; if (auto edit = qobject_cast(focused)) { canCut = canCopy = canDelete = edit->hasSelectedText(); canSelectAll = !edit->text().isEmpty(); @@ -793,8 +811,9 @@ void MainWindow::updateGlobalMenuHook() { canRedo = edit->document()->isRedoAvailable(); canPaste = clipboardHasText; if (canCopy) { - if (const auto inputField = qobject_cast(focused->parentWidget())) { - showTouchBarItem = inputField->isMarkdownEnabled(); + if (const auto inputField = qobject_cast( + focused->parentWidget())) { + canApplyMarkdown = inputField->isMarkdownEnabled(); } } } else if (auto list = qobject_cast(focused)) { @@ -802,8 +821,7 @@ void MainWindow::updateGlobalMenuHook() { canDelete = list->canDeleteSelected(); } -#ifndef OS_OSX -#endif // OS_OSX + _canApplyMarkdown = canApplyMarkdown; App::wnd()->updateIsActive(); const auto logged = (sessionController() != nullptr); @@ -823,12 +841,12 @@ void MainWindow::updateGlobalMenuHook() { ForceDisabled(psNewChannel, inactive || support); ForceDisabled(psShowTelegram, App::wnd()->isActive()); - ForceDisabled(psBold, !showTouchBarItem); - ForceDisabled(psItalic, !showTouchBarItem); - ForceDisabled(psUnderline, !showTouchBarItem); - ForceDisabled(psStrikeOut, !showTouchBarItem); - ForceDisabled(psMonospace, !showTouchBarItem); - ForceDisabled(psClearFormat, !showTouchBarItem); + ForceDisabled(psBold, !canApplyMarkdown); + ForceDisabled(psItalic, !canApplyMarkdown); + ForceDisabled(psUnderline, !canApplyMarkdown); + ForceDisabled(psStrikeOut, !canApplyMarkdown); + ForceDisabled(psMonospace, !canApplyMarkdown); + ForceDisabled(psClearFormat, !canApplyMarkdown); } bool MainWindow::psFilterNativeEvent(void *event) { @@ -846,7 +864,6 @@ bool MainWindow::eventFilter(QObject *obj, QEvent *evt) { } MainWindow::~MainWindow() { - destroyCurrentTouchBar(); } } // namespace