mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2026-08-03 18:49:30 +00:00
Moved out dock menu from obj-c implementation to Qt implementation.
This allows to remove the `NSApplicationDelegate::applicationDockMenu` patch for Qt.
This commit is contained in:
@@ -0,0 +1,83 @@
|
||||
/*
|
||||
This file is part of Telegram Desktop,
|
||||
the official desktop application for the Telegram messaging service.
|
||||
|
||||
For license and copyright information please follow this link:
|
||||
https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||
*/
|
||||
#include "menu/menu_dock.h"
|
||||
|
||||
#include "core/application.h"
|
||||
#include "core/core_settings.h"
|
||||
#include "data/data_user.h"
|
||||
#include "lang/lang_keys.h"
|
||||
#include "main/main_account.h"
|
||||
#include "main/main_domain.h"
|
||||
#include "main/main_session.h"
|
||||
#include "media/audio/media_audio.h"
|
||||
#include "media/player/media_player_instance.h"
|
||||
#include "ui/text/text_utilities.h"
|
||||
|
||||
#include <QtWidgets/QMenu>
|
||||
|
||||
namespace Menu {
|
||||
|
||||
void RefreshDockMenu(QMenu *menu) {
|
||||
menu->clear();
|
||||
if (!Core::IsAppLaunched()) {
|
||||
return;
|
||||
}
|
||||
|
||||
const auto accounts = Core::App().domain().orderedAccounts();
|
||||
if (accounts.size() > 1) {
|
||||
menu->addSeparator();
|
||||
const auto profilesHeader = menu->addAction(
|
||||
tr::lng_mac_menu_profiles(tr::now));
|
||||
profilesHeader->setEnabled(false);
|
||||
constexpr auto kMaxLength = 30;
|
||||
for (const auto &account : accounts) {
|
||||
if (account->sessionExists()) {
|
||||
const auto name = account->session().user()->name();
|
||||
menu->addAction(
|
||||
(name.size() > kMaxLength)
|
||||
? (name.mid(0, kMaxLength) + Ui::kQEllipsis)
|
||||
: name,
|
||||
[account] {
|
||||
Core::App().ensureSeparateWindowFor(account);
|
||||
});
|
||||
}
|
||||
}
|
||||
menu->addSeparator();
|
||||
}
|
||||
|
||||
menu->addAction(
|
||||
Core::App().settings().desktopNotify()
|
||||
? tr::lng_disable_notifications_from_tray(tr::now)
|
||||
: tr::lng_enable_notifications_from_tray(tr::now),
|
||||
[] {
|
||||
auto &settings = Core::App().settings();
|
||||
settings.setDesktopNotify(!settings.desktopNotify());
|
||||
});
|
||||
|
||||
using namespace Media::Player;
|
||||
const auto type = instance()->getActiveType();
|
||||
const auto state = instance()->getState(type);
|
||||
if (!IsStoppedOrStopping(state.state)) {
|
||||
menu->addSeparator();
|
||||
const auto previous = menu->addAction(
|
||||
tr::lng_mac_menu_player_previous(tr::now),
|
||||
[] { instance()->previous(); });
|
||||
previous->setEnabled(instance()->previousAvailable(type));
|
||||
menu->addAction(
|
||||
IsPausedOrPausing(state.state)
|
||||
? tr::lng_mac_menu_player_resume(tr::now)
|
||||
: tr::lng_mac_menu_player_pause(tr::now),
|
||||
[] { instance()->playPause(); });
|
||||
const auto next = menu->addAction(
|
||||
tr::lng_mac_menu_player_next(tr::now),
|
||||
[] { instance()->next(); });
|
||||
next->setEnabled(instance()->nextAvailable(type));
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace Menu
|
||||
Reference in New Issue
Block a user