fix: macOS -> replace the tray icon with a dock menu

This commit is contained in:
shenleban tongying 2024-11-11 01:43:01 -05:00
parent 720f66c781
commit 73b472aa4e
4 changed files with 24 additions and 4 deletions

View file

@ -199,7 +199,6 @@ Preferences::Preferences():
hideMenubar( false ), hideMenubar( false ),
enableTrayIcon( true ), enableTrayIcon( true ),
startToTray( false ), startToTray( false ),
closeToTray( true ),
autoStart( false ), autoStart( false ),
doubleClickTranslates( true ), doubleClickTranslates( true ),
selectWordBySingleClick( false ), selectWordBySingleClick( false ),
@ -906,7 +905,9 @@ Class load()
c.preferences.enableTrayIcon = ( preferences.namedItem( "enableTrayIcon" ).toElement().text() == "1" ); c.preferences.enableTrayIcon = ( preferences.namedItem( "enableTrayIcon" ).toElement().text() == "1" );
c.preferences.startToTray = ( preferences.namedItem( "startToTray" ).toElement().text() == "1" ); c.preferences.startToTray = ( preferences.namedItem( "startToTray" ).toElement().text() == "1" );
c.preferences.closeToTray = ( preferences.namedItem( "closeToTray" ).toElement().text() == "1" ); #ifndef Q_OS_MACOS // // macOS uses the dock menu instead of the tray icon
c.preferences.closeToTray = ( preferences.namedItem( "closeToTray" ).toElement().text() == "1" );
#endif
c.preferences.autoStart = ( preferences.namedItem( "autoStart" ).toElement().text() == "1" ); c.preferences.autoStart = ( preferences.namedItem( "autoStart" ).toElement().text() == "1" );
c.preferences.alwaysOnTop = ( preferences.namedItem( "alwaysOnTop" ).toElement().text() == "1" ); c.preferences.alwaysOnTop = ( preferences.namedItem( "alwaysOnTop" ).toElement().text() == "1" );
c.preferences.searchInDock = ( preferences.namedItem( "searchInDock" ).toElement().text() == "1" ); c.preferences.searchInDock = ( preferences.namedItem( "searchInDock" ).toElement().text() == "1" );

View file

@ -343,7 +343,12 @@ struct Preferences
bool hideMenubar; bool hideMenubar;
bool enableTrayIcon; bool enableTrayIcon;
bool startToTray; bool startToTray;
bool closeToTray; #ifdef Q_OS_MACOS // macOS uses the dock menu instead of the tray icon
bool closeToTray = false;
#else
bool closeToTray = true;
#endif
bool autoStart; bool autoStart;
bool doubleClickTranslates; bool doubleClickTranslates;
bool selectWordBySingleClick; bool selectWordBySingleClick;

View file

@ -401,14 +401,18 @@ MainWindow::MainWindow( Config::Class & cfg_ ):
connect( wordsZoomOut, &QAction::triggered, this, &MainWindow::doWordsZoomOut ); connect( wordsZoomOut, &QAction::triggered, this, &MainWindow::doWordsZoomOut );
connect( wordsZoomBase, &QAction::triggered, this, &MainWindow::doWordsZoomBase ); connect( wordsZoomBase, &QAction::triggered, this, &MainWindow::doWordsZoomBase );
// tray icon // tray icon
#ifndef Q_OS_MACOS // macOS uses the dock menu instead of the tray icon
connect( trayIconMenu.addAction( tr( "Show &Main Window" ) ), &QAction::triggered, this, [ this ] { connect( trayIconMenu.addAction( tr( "Show &Main Window" ) ), &QAction::triggered, this, [ this ] {
this->toggleMainWindow( true ); this->toggleMainWindow( true );
} ); } );
#endif
trayIconMenu.addAction( enableScanningAction ); trayIconMenu.addAction( enableScanningAction );
#ifndef Q_OS_MACOS // macOS uses the dock menu instead of the tray icon
trayIconMenu.addSeparator(); trayIconMenu.addSeparator();
connect( trayIconMenu.addAction( tr( "&Quit" ) ), &QAction::triggered, this, &MainWindow::quitApp ); connect( trayIconMenu.addAction( tr( "&Quit" ) ), &QAction::triggered, this, &MainWindow::quitApp );
#endif
addGlobalAction( &escAction, [ this ]() { addGlobalAction( &escAction, [ this ]() {
handleEsc(); handleEsc();
@ -1420,6 +1424,10 @@ void MainWindow::updateAppearances( QString const & addonStyle,
void MainWindow::trayIconUpdateOrInit() void MainWindow::trayIconUpdateOrInit()
{ {
#ifdef Q_OS_MACOS
trayIconMenu.setAsDockMenu();
#else
if ( !cfg.preferences.enableTrayIcon ) { if ( !cfg.preferences.enableTrayIcon ) {
if ( trayIcon ) { if ( trayIcon ) {
delete trayIcon; delete trayIcon;
@ -1443,6 +1451,7 @@ void MainWindow::trayIconUpdateOrInit()
// The 'Close to tray' action is associated with the tray icon, so we hide // The 'Close to tray' action is associated with the tray icon, so we hide
// or show it here. // or show it here.
ui.actionCloseToTray->setVisible( cfg.preferences.enableTrayIcon ); ui.actionCloseToTray->setVisible( cfg.preferences.enableTrayIcon );
#endif
} }
void MainWindow::wheelEvent( QWheelEvent * ev ) void MainWindow::wheelEvent( QWheelEvent * ev )

View file

@ -174,6 +174,11 @@ Preferences::Preferences( QWidget * parent, Config::Class & cfg_ ):
ui.hideSingleTab->setChecked( p.hideSingleTab ); ui.hideSingleTab->setChecked( p.hideSingleTab );
ui.mruTabOrder->setChecked( p.mruTabOrder ); ui.mruTabOrder->setChecked( p.mruTabOrder );
ui.enableTrayIcon->setChecked( p.enableTrayIcon ); ui.enableTrayIcon->setChecked( p.enableTrayIcon );
#ifdef Q_OS_MACOS // macOS uses the dock menu instead of the tray icon
ui.enableTrayIcon->hide();
#endif
ui.startToTray->setChecked( p.startToTray ); ui.startToTray->setChecked( p.startToTray );
ui.closeToTray->setChecked( p.closeToTray ); ui.closeToTray->setChecked( p.closeToTray );
ui.cbAutostart->setChecked( p.autoStart ); ui.cbAutostart->setChecked( p.autoStart );