mirror of
https://github.com/qTox/qTox.git
synced 2024-03-22 14:00:36 +08:00
Merge branch 'pr1953'
This commit is contained in:
commit
74b771373d
@ -1085,7 +1085,7 @@ QSplitter:handle{
|
|||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>284</width>
|
<width>284</width>
|
||||||
<height>353</height>
|
<height>398</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout_5"/>
|
<layout class="QVBoxLayout" name="verticalLayout_5"/>
|
||||||
@ -1841,20 +1841,6 @@ QSplitter:handle{
|
|||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
<widget class="QMenuBar" name="menubar">
|
|
||||||
<property name="enabled">
|
|
||||||
<bool>true</bool>
|
|
||||||
</property>
|
|
||||||
<property name="geometry">
|
|
||||||
<rect>
|
|
||||||
<x>0</x>
|
|
||||||
<y>0</y>
|
|
||||||
<width>775</width>
|
|
||||||
<height>22</height>
|
|
||||||
</rect>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
<widget class="QStatusBar" name="statusbar"/>
|
|
||||||
<action name="actionClose">
|
<action name="actionClose">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Close</string>
|
<string>Close</string>
|
||||||
|
@ -39,6 +39,11 @@
|
|||||||
#include <QDesktopWidget>
|
#include <QDesktopWidget>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef Q_OS_MAC
|
||||||
|
#include <QWindow>
|
||||||
|
#include <QMenuBar>
|
||||||
|
#endif
|
||||||
|
|
||||||
static Nexus* nexus{nullptr};
|
static Nexus* nexus{nullptr};
|
||||||
|
|
||||||
Nexus::Nexus(QObject *parent) :
|
Nexus::Nexus(QObject *parent) :
|
||||||
@ -60,6 +65,9 @@ Nexus::~Nexus()
|
|||||||
delete loginScreen;
|
delete loginScreen;
|
||||||
delete profile;
|
delete profile;
|
||||||
Settings::getInstance().saveGlobal();
|
Settings::getInstance().saveGlobal();
|
||||||
|
#ifdef Q_OS_MAC
|
||||||
|
delete globalMenuBar;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void Nexus::start()
|
void Nexus::start()
|
||||||
@ -81,6 +89,25 @@ void Nexus::start()
|
|||||||
qRegisterMetaType<ToxFile::FileDirection>("ToxFile::FileDirection");
|
qRegisterMetaType<ToxFile::FileDirection>("ToxFile::FileDirection");
|
||||||
qRegisterMetaType<std::shared_ptr<VideoFrame>>("std::shared_ptr<VideoFrame>");
|
qRegisterMetaType<std::shared_ptr<VideoFrame>>("std::shared_ptr<VideoFrame>");
|
||||||
|
|
||||||
|
#ifdef Q_OS_MAC
|
||||||
|
globalMenuBar = new QMenuBar(0);
|
||||||
|
|
||||||
|
windowMenu = globalMenuBar->addMenu(tr("Window"));
|
||||||
|
globalMenuBar->addAction(windowMenu->menuAction());
|
||||||
|
|
||||||
|
QAction* minimizeAction = Nexus::getInstance().windowMenu->addAction(tr("Minimize"));
|
||||||
|
minimizeAction->setShortcut(Qt::CTRL + Qt::Key_M);
|
||||||
|
connect(minimizeAction, &QAction::triggered, [minimizeAction]()
|
||||||
|
{
|
||||||
|
QApplication::focusWindow()->showMinimized();
|
||||||
|
});
|
||||||
|
Nexus::getInstance().windowMenu->addSeparator();
|
||||||
|
|
||||||
|
QAction* quitAction = new QAction(globalMenuBar);
|
||||||
|
quitAction->setMenuRole(QAction::QuitRole);
|
||||||
|
connect(quitAction, &QAction::triggered, qApp, &QApplication::quit);
|
||||||
|
#endif
|
||||||
|
|
||||||
loginScreen = new LoginScreen();
|
loginScreen = new LoginScreen();
|
||||||
|
|
||||||
if (profile)
|
if (profile)
|
||||||
|
10
src/nexus.h
10
src/nexus.h
@ -29,6 +29,11 @@ class Profile;
|
|||||||
class LoginScreen;
|
class LoginScreen;
|
||||||
class Core;
|
class Core;
|
||||||
|
|
||||||
|
#ifdef Q_OS_MAC
|
||||||
|
class QMenuBar;
|
||||||
|
class QMenu;
|
||||||
|
#endif
|
||||||
|
|
||||||
/// This class is in charge of connecting various systems together
|
/// This class is in charge of connecting various systems together
|
||||||
/// and forwarding signals appropriately to the right objects
|
/// and forwarding signals appropriately to the right objects
|
||||||
/// It is in charge of starting the GUI and the Core
|
/// It is in charge of starting the GUI and the Core
|
||||||
@ -52,6 +57,11 @@ public:
|
|||||||
static QString getSupportedImageFilter();
|
static QString getSupportedImageFilter();
|
||||||
static bool tryRemoveFile(const QString& filepath); ///< Dangerous way to find out if a path is writable
|
static bool tryRemoveFile(const QString& filepath); ///< Dangerous way to find out if a path is writable
|
||||||
|
|
||||||
|
#ifdef Q_OS_MAC
|
||||||
|
QMenuBar* globalMenuBar;
|
||||||
|
QMenu* windowMenu;
|
||||||
|
#endif
|
||||||
|
|
||||||
private:
|
private:
|
||||||
explicit Nexus(QObject *parent = 0);
|
explicit Nexus(QObject *parent = 0);
|
||||||
~Nexus();
|
~Nexus();
|
||||||
|
@ -81,6 +81,11 @@ void SettingsWidget::setBodyHeadStyle(QString style)
|
|||||||
body->setStyle(QStyleFactory::create(style));
|
body->setStyle(QStyleFactory::create(style));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SettingsWidget::showAbout()
|
||||||
|
{
|
||||||
|
onTabChanged(settingsWidgets->count() - 1);
|
||||||
|
}
|
||||||
|
|
||||||
void SettingsWidget::show(Ui::MainWindow& ui)
|
void SettingsWidget::show(Ui::MainWindow& ui)
|
||||||
{
|
{
|
||||||
ui.mainContent->layout()->addWidget(body);
|
ui.mainContent->layout()->addWidget(body);
|
||||||
|
@ -45,6 +45,8 @@ public:
|
|||||||
void show(Ui::MainWindow &ui);
|
void show(Ui::MainWindow &ui);
|
||||||
void setBodyHeadStyle(QString style);
|
void setBodyHeadStyle(QString style);
|
||||||
|
|
||||||
|
void showAbout();
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void setShowSystemTray(bool newValue);
|
void setShowSystemTray(bool newValue);
|
||||||
void compactToggled(bool compact);
|
void compactToggled(bool compact);
|
||||||
|
@ -69,6 +69,11 @@
|
|||||||
#include <QProcess>
|
#include <QProcess>
|
||||||
#include <tox/tox.h>
|
#include <tox/tox.h>
|
||||||
|
|
||||||
|
#ifdef Q_OS_MAC
|
||||||
|
#include <QMenuBar>
|
||||||
|
#include <QWindow>
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef Q_OS_ANDROID
|
#ifdef Q_OS_ANDROID
|
||||||
#define IS_ON_DESKTOP_GUI 0
|
#define IS_ON_DESKTOP_GUI 0
|
||||||
#else
|
#else
|
||||||
@ -122,9 +127,6 @@ void Widget::init()
|
|||||||
statusBusy->setIcon(getStatusIcon(Status::Busy, 10, 10));
|
statusBusy->setIcon(getStatusIcon(Status::Busy, 10, 10));
|
||||||
connect(statusBusy, SIGNAL(triggered()), this, SLOT(setStatusBusy()));
|
connect(statusBusy, SIGNAL(triggered()), this, SLOT(setStatusBusy()));
|
||||||
|
|
||||||
ui->statusbar->hide();
|
|
||||||
ui->menubar->hide();
|
|
||||||
|
|
||||||
layout()->setContentsMargins(0, 0, 0, 0);
|
layout()->setContentsMargins(0, 0, 0, 0);
|
||||||
ui->friendList->setStyleSheet(Style::resolve(Style::getStylesheet(":ui/friendList/friendList.css")));
|
ui->friendList->setStyleSheet(Style::resolve(Style::getStylesheet(":ui/friendList/friendList.css")));
|
||||||
|
|
||||||
@ -255,6 +257,79 @@ void Widget::init()
|
|||||||
new QShortcut(Qt::CTRL + Qt::Key_PageUp, this, SLOT(previousContact()));
|
new QShortcut(Qt::CTRL + Qt::Key_PageUp, this, SLOT(previousContact()));
|
||||||
new QShortcut(Qt::CTRL + Qt::Key_PageDown, this, SLOT(nextContact()));
|
new QShortcut(Qt::CTRL + Qt::Key_PageDown, this, SLOT(nextContact()));
|
||||||
|
|
||||||
|
#ifdef Q_OS_MAC
|
||||||
|
QAction* windowMenu = Nexus::getInstance().windowMenu->menuAction();
|
||||||
|
QAction* fileMenu = Nexus::getInstance().globalMenuBar->insertMenu(windowMenu, new QMenu(tr("File"), this));
|
||||||
|
|
||||||
|
QAction* editProfileAction = fileMenu->menu()->addAction(tr("Edit Profile"));
|
||||||
|
connect(editProfileAction, &QAction::triggered, this, &Widget::showProfile);
|
||||||
|
|
||||||
|
QMenu* changeStatusMenu = fileMenu->menu()->addMenu(tr("Change Status"));
|
||||||
|
fileMenu->menu()->addAction(changeStatusMenu->menuAction());
|
||||||
|
changeStatusMenu->addAction(statusOnline);
|
||||||
|
changeStatusMenu->addSeparator();
|
||||||
|
changeStatusMenu->addAction(statusAway);
|
||||||
|
changeStatusMenu->addAction(statusBusy);
|
||||||
|
|
||||||
|
fileMenu->menu()->addSeparator();
|
||||||
|
QAction* logoutAction = fileMenu->menu()->addAction(tr("Log out"));
|
||||||
|
connect(logoutAction, &QAction::triggered, [this]()
|
||||||
|
{
|
||||||
|
Nexus::getInstance().showLogin();
|
||||||
|
});
|
||||||
|
|
||||||
|
QAction* editMenu = Nexus::getInstance().globalMenuBar->insertMenu(windowMenu, new QMenu(tr("Edit"), this));
|
||||||
|
editMenu->menu()->addSeparator();
|
||||||
|
|
||||||
|
QAction* viewMenu = Nexus::getInstance().globalMenuBar->insertMenu(windowMenu, new QMenu(tr("View"), this));
|
||||||
|
|
||||||
|
QMenu* filterMenu = viewMenu->menu()->addMenu(tr("Filter..."));
|
||||||
|
filterMenu->addAction(filterDisplayName);
|
||||||
|
filterMenu->addAction(filterDisplayActivity);
|
||||||
|
filterMenu->addSeparator();
|
||||||
|
filterMenu->addAction(filterAllAction);
|
||||||
|
filterMenu->addAction(filterOnlineAction);
|
||||||
|
filterMenu->addAction(filterOfflineAction);
|
||||||
|
filterMenu->addAction(filterFriendsAction);
|
||||||
|
filterMenu->addAction(filterGroupsAction);
|
||||||
|
|
||||||
|
viewMenu->menu()->addSeparator();
|
||||||
|
fullscreenAction = viewMenu->menu()->addAction(tr("Enter Fullscreen"));
|
||||||
|
fullscreenAction->setShortcut(QKeySequence::FullScreen);
|
||||||
|
connect(fullscreenAction, &QAction::triggered, this, &Widget::toggleFullscreen);
|
||||||
|
|
||||||
|
QAction* contactMenu = Nexus::getInstance().globalMenuBar->insertMenu(windowMenu, new QMenu(tr("Contacts"), this));
|
||||||
|
|
||||||
|
QAction* addContactAction = contactMenu->menu()->addAction(tr("Add Contact..."));
|
||||||
|
connect(addContactAction, &QAction::triggered, this, &Widget::onAddClicked);
|
||||||
|
|
||||||
|
QAction* nextConversationAction = new QAction(tr("Next Conversation"), this);
|
||||||
|
Nexus::getInstance().windowMenu->addAction(nextConversationAction);
|
||||||
|
nextConversationAction->setShortcut(QKeySequence::SelectNextPage);
|
||||||
|
connect(nextConversationAction, &QAction::triggered, this, &Widget::nextContact);
|
||||||
|
|
||||||
|
QAction* previousConversationAction = new QAction(tr("Previous Conversation"), this);
|
||||||
|
Nexus::getInstance().windowMenu->addAction(previousConversationAction);
|
||||||
|
previousConversationAction->setShortcut(QKeySequence::SelectPreviousPage);
|
||||||
|
connect(previousConversationAction, &QAction::triggered, this, &Widget::previousContact);
|
||||||
|
|
||||||
|
Nexus::getInstance().windowMenu->addSeparator();
|
||||||
|
QAction* frontAction = Nexus::getInstance().windowMenu->addAction(tr("Bring All to Front"));
|
||||||
|
connect(frontAction, &QAction::triggered, this, &Widget::bringAllToFront);
|
||||||
|
|
||||||
|
QAction* preferencesAction = viewMenu->menu()->addAction(QString());
|
||||||
|
preferencesAction->setMenuRole(QAction::PreferencesRole);
|
||||||
|
connect(preferencesAction, &QAction::triggered, this, &Widget::onSettingsClicked);
|
||||||
|
|
||||||
|
QAction* aboutAction = viewMenu->menu()->addAction(QString());
|
||||||
|
aboutAction->setMenuRole(QAction::AboutRole);
|
||||||
|
connect(aboutAction, &QAction::triggered, [this]()
|
||||||
|
{
|
||||||
|
onSettingsClicked();
|
||||||
|
settingsWidget->showAbout();
|
||||||
|
});
|
||||||
|
#endif
|
||||||
|
|
||||||
addFriendForm->show(*ui);
|
addFriendForm->show(*ui);
|
||||||
setWindowTitle(tr("Add friend"));
|
setWindowTitle(tr("Add friend"));
|
||||||
ui->addButton->setCheckable(true);
|
ui->addButton->setCheckable(true);
|
||||||
@ -1256,6 +1331,19 @@ void Widget::onTryCreateTrayIcon()
|
|||||||
{
|
{
|
||||||
show();
|
show();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef Q_OS_MAC
|
||||||
|
QMenu* changeStatusMenu = new QMenu(tr("Status"), this);
|
||||||
|
changeStatusMenu->addAction(statusOnline);
|
||||||
|
statusOnline->setIconVisibleInMenu(true);
|
||||||
|
changeStatusMenu->addSeparator();
|
||||||
|
changeStatusMenu->addAction(statusAway);
|
||||||
|
changeStatusMenu->addAction(statusBusy);
|
||||||
|
|
||||||
|
QMenu* dockMenu = new QMenu(this);
|
||||||
|
dockMenu->addAction(changeStatusMenu->menuAction());
|
||||||
|
qt_mac_set_dock_menu(dockMenu);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
else if (!isVisible())
|
else if (!isVisible())
|
||||||
{
|
{
|
||||||
@ -1617,3 +1705,32 @@ void Widget::retranslateUi()
|
|||||||
statusBusy->setText(tr("Busy", "Button to set your status to 'Busy'"));
|
statusBusy->setText(tr("Busy", "Button to set your status to 'Busy'"));
|
||||||
setWindowTitle(tr("Settings"));
|
setWindowTitle(tr("Settings"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef Q_OS_MAC
|
||||||
|
void Widget::bringAllToFront()
|
||||||
|
{
|
||||||
|
QWindowList windowList = QApplication::topLevelWindows();
|
||||||
|
for (QWindow* window : windowList)
|
||||||
|
{
|
||||||
|
window->raise();
|
||||||
|
window->showNormal();
|
||||||
|
window->requestActivate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Widget::toggleFullscreen()
|
||||||
|
{
|
||||||
|
QWidget* window = QApplication::activeWindow();
|
||||||
|
|
||||||
|
if (window->isFullScreen())
|
||||||
|
{
|
||||||
|
window->showNormal();
|
||||||
|
fullscreenAction->setText(tr("Enter Fullscreen"));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
window->showFullScreen();
|
||||||
|
fullscreenAction->setText(tr("Exit Fullscreen"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
@ -160,6 +160,11 @@ private slots:
|
|||||||
void processOfflineMsgs();
|
void processOfflineMsgs();
|
||||||
void friendListContextMenu(const QPoint &pos);
|
void friendListContextMenu(const QPoint &pos);
|
||||||
|
|
||||||
|
#ifdef Q_OS_MAC
|
||||||
|
void bringAllToFront();
|
||||||
|
void toggleFullscreen();
|
||||||
|
#endif
|
||||||
|
|
||||||
private:
|
private:
|
||||||
enum ActiveToolMenuButton {
|
enum ActiveToolMenuButton {
|
||||||
AddButton,
|
AddButton,
|
||||||
@ -236,6 +241,10 @@ private:
|
|||||||
bool eventFlag;
|
bool eventFlag;
|
||||||
bool eventIcon;
|
bool eventIcon;
|
||||||
bool wasMaximized = false;
|
bool wasMaximized = false;
|
||||||
|
|
||||||
|
#ifdef Q_OS_MAC
|
||||||
|
QAction* fullscreenAction;
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
bool toxActivateEventHandler(const QByteArray& data);
|
bool toxActivateEventHandler(const QByteArray& data);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user