mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-04-16 06:07:06 +02:00
Added Dock menu for macOS.
This commit is contained in:
parent
2599ae45d6
commit
63febef3ed
3 changed files with 91 additions and 4 deletions
|
@ -2796,6 +2796,12 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
|||
"lng_mac_menu_show" = "Show Telegram";
|
||||
"lng_mac_menu_emoji_and_symbols" = "Emoji & Symbols";
|
||||
|
||||
"lng_mac_menu_player_pause" = "Pause";
|
||||
"lng_mac_menu_player_resume" = "Resume";
|
||||
"lng_mac_menu_player_next" = "Next";
|
||||
"lng_mac_menu_player_previous" = "Previous";
|
||||
"lng_mac_menu_player_stop" = "Stop";
|
||||
|
||||
"lng_mac_touchbar_favorite_stickers" = "Favorite stickers";
|
||||
|
||||
// Keys finished
|
||||
|
|
|
@ -35,14 +35,53 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
|||
#include <IOKit/hidsystem/ev_keymap.h>
|
||||
#include <SPMediaKeyTap.h>
|
||||
|
||||
using Platform::Q2NSString;
|
||||
using Platform::NS2QString;
|
||||
|
||||
namespace {
|
||||
|
||||
constexpr auto kIgnoreActivationTimeoutMs = 500;
|
||||
|
||||
NSMenuItem *CreateMenuItem(
|
||||
QString title,
|
||||
rpl::lifetime &lifetime,
|
||||
Fn<void()> callback,
|
||||
bool enabled = true) {
|
||||
id block = [^{
|
||||
Core::Sandbox::Instance().customEnterFromEventLoop(callback);
|
||||
} copy];
|
||||
|
||||
NSMenuItem *item = [[NSMenuItem alloc]
|
||||
initWithTitle:Q2NSString(title)
|
||||
action:@selector(invoke)
|
||||
keyEquivalent:@""];
|
||||
[item setTarget:block];
|
||||
[item setEnabled:enabled];
|
||||
|
||||
lifetime.add([=] {
|
||||
[block release];
|
||||
});
|
||||
return [item autorelease];
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
using Platform::Q2NSString;
|
||||
using Platform::NS2QString;
|
||||
@interface RpMenu : NSMenu {
|
||||
}
|
||||
|
||||
- (rpl::lifetime &) lifetime;
|
||||
|
||||
@end // @interface Menu
|
||||
|
||||
@implementation RpMenu {
|
||||
rpl::lifetime _lifetime;
|
||||
}
|
||||
|
||||
- (rpl::lifetime &) lifetime {
|
||||
return _lifetime;
|
||||
}
|
||||
|
||||
@end // @implementation Menu
|
||||
|
||||
@interface qVisualize : NSObject {
|
||||
}
|
||||
|
@ -103,6 +142,8 @@ using Platform::NS2QString;
|
|||
|
||||
- (void) ignoreApplicationActivationRightNow;
|
||||
|
||||
- (NSMenu *) applicationDockMenu:(NSApplication *)sender;
|
||||
|
||||
@end // @interface ApplicationDelegate
|
||||
|
||||
ApplicationDelegate *_sharedDelegate = nil;
|
||||
|
@ -207,6 +248,46 @@ ApplicationDelegate *_sharedDelegate = nil;
|
|||
_ignoreActivationStop.callOnce(kIgnoreActivationTimeoutMs);
|
||||
}
|
||||
|
||||
- (NSMenu *) applicationDockMenu:(NSApplication *)sender {
|
||||
RpMenu* dockMenu = [[[RpMenu alloc] initWithTitle: @""] autorelease];
|
||||
[dockMenu setAutoenablesItems:false];
|
||||
|
||||
auto notifyCallback = [] {
|
||||
auto &settings = Core::App().settings();
|
||||
settings.setDesktopNotify(!settings.desktopNotify());
|
||||
};
|
||||
[dockMenu addItem:CreateMenuItem(
|
||||
Core::App().settings().desktopNotify()
|
||||
? tr::lng_disable_notifications_from_tray(tr::now)
|
||||
: tr::lng_enable_notifications_from_tray(tr::now),
|
||||
[dockMenu lifetime],
|
||||
std::move(notifyCallback))];
|
||||
|
||||
using namespace Media::Player;
|
||||
const auto state = instance()->getState(instance()->getActiveType());
|
||||
if (!IsStoppedOrStopping(state.state)) {
|
||||
[dockMenu addItem:[NSMenuItem separatorItem]];
|
||||
[dockMenu addItem:CreateMenuItem(
|
||||
tr::lng_mac_menu_player_previous(tr::now),
|
||||
[dockMenu lifetime],
|
||||
[] { instance()->previous(); },
|
||||
instance()->previousAvailable(instance()->getActiveType()))];
|
||||
[dockMenu addItem:CreateMenuItem(
|
||||
IsPausedOrPausing(state.state)
|
||||
? tr::lng_mac_menu_player_resume(tr::now)
|
||||
: tr::lng_mac_menu_player_pause(tr::now),
|
||||
[dockMenu lifetime],
|
||||
[] { instance()->playPause(); })];
|
||||
[dockMenu addItem:CreateMenuItem(
|
||||
tr::lng_mac_menu_player_next(tr::now),
|
||||
[dockMenu lifetime],
|
||||
[] { instance()->next(); },
|
||||
instance()->nextAvailable(instance()->getActiveType()))];
|
||||
}
|
||||
|
||||
return dockMenu;
|
||||
}
|
||||
|
||||
@end // @implementation ApplicationDelegate
|
||||
|
||||
namespace Platform {
|
||||
|
|
|
@ -29,7 +29,7 @@ Go to ***BuildPath*** and run
|
|||
|
||||
git clone https://github.com/desktop-app/patches.git
|
||||
cd patches
|
||||
git checkout f22ccc5
|
||||
git checkout 8764c08
|
||||
cd ../
|
||||
git clone https://chromium.googlesource.com/external/gyp
|
||||
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
|
||||
|
@ -58,7 +58,7 @@ Go to ***BuildPath*** and run
|
|||
|
||||
git clone https://github.com/desktop-app/patches.git
|
||||
cd patches
|
||||
git checkout f22ccc5
|
||||
git checkout 8764c08
|
||||
cd ..
|
||||
|
||||
git clone https://git.tukaani.org/xz.git
|
||||
|
|
Loading…
Add table
Reference in a new issue