diff --git a/gui/CMakeLists.txt b/gui/CMakeLists.txt
index b303324..98aa3a3 100644
--- a/gui/CMakeLists.txt
+++ b/gui/CMakeLists.txt
@@ -3,6 +3,9 @@ set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
find_package(Qt5 REQUIRED COMPONENTS Core Widgets Gui Multimedia OpenGL Svg)
+if(APPLE)
+ find_package(Qt5 REQUIRED COMPONENTS MacExtras)
+endif()
if(CHIAKI_GUI_ENABLE_QT_GAMEPAD AND CHIAKI_GUI_ENABLE_SDL_GAMECONTROLLER)
message(FATAL_ERROR "Only one input method may be enabled. Disable either CHIAKI_GUI_ENABLE_SDL_GAMECONTROLLER or CHIAKI_GUI_ENABLE_QT_GAMEPAD.")
endif()
@@ -76,6 +79,10 @@ endif()
target_link_libraries(chiaki FFMPEG::avcodec FFMPEG::avutil)
target_link_libraries(chiaki Qt5::Core Qt5::Widgets Qt5::Gui Qt5::Multimedia Qt5::OpenGL Qt5::Svg)
+if(APPLE)
+ target_link_libraries(chiaki Qt5::MacExtras)
+ target_compile_definitions(chiaki PRIVATE CHIAKI_GUI_ENABLE_QT_MACEXTRAS)
+endif()
if(CHIAKI_GUI_ENABLE_QT_GAMEPAD)
target_link_libraries(chiaki Qt5::Gamepad)
target_compile_definitions(chiaki PRIVATE CHIAKI_GUI_ENABLE_QT_GAMEPAD)
diff --git a/gui/include/mainwindow.h b/gui/include/mainwindow.h
index a91c3c5..cb287b2 100644
--- a/gui/include/mainwindow.h
+++ b/gui/include/mainwindow.h
@@ -46,6 +46,8 @@ class MainWindow : public QMainWindow
private:
Settings *settings;
+ QIcon discover_action_icon;
+ QIcon discover_action_off_icon;
QAction *discover_action;
DynamicGridWidget *grid_widget;
diff --git a/gui/res/discover-off-24px.svg b/gui/res/discover-off-24px.svg
new file mode 100644
index 0000000..4a0e970
--- /dev/null
+++ b/gui/res/discover-off-24px.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gui/res/resources.qrc b/gui/res/resources.qrc
index 2570b1c..bf7efd5 100644
--- a/gui/res/resources.qrc
+++ b/gui/res/resources.qrc
@@ -3,6 +3,7 @@
settings-20px.svg
add-24px.svg
discover-24px.svg
+ discover-off-24px.svg
chiaki.svg
diff --git a/gui/src/mainwindow.cpp b/gui/src/mainwindow.cpp
index a672be2..c5fcc48 100644
--- a/gui/src/mainwindow.cpp
+++ b/gui/src/mainwindow.cpp
@@ -36,6 +36,10 @@
#include
#include
+#ifdef CHIAKI_GUI_ENABLE_QT_MACEXTRAS
+#include
+#endif
+
class IconEngine : public QIconEngine
{
private:
@@ -99,25 +103,54 @@ MainWindow::MainWindow(Settings *settings, QWidget *parent)
return QIcon(new IconEngine(filename));
};
+#ifdef CHIAKI_GUI_ENABLE_QT_MACEXTRAS
+ auto tool_bar = new QMacToolBar(this);
+#else
auto tool_bar = new QToolBar(this);
tool_bar->setMovable(false);
addToolBar(tool_bar);
setUnifiedTitleAndToolBarOnMac(true);
+#endif
- discover_action = new QAction(tr("Automatically Search for Consoles"), this);
- discover_action->setIcon(LoadIcon(":/icons/discover-24px.svg"));
+ auto AddToolBarAction = [&](QAction *action) {
+#ifdef CHIAKI_GUI_ENABLE_QT_MACEXTRAS
+ auto item = tool_bar->addItem(action->icon(), action->text());
+ connect(item, &QMacToolBarItem::activated, action, &QAction::trigger);
+ if(action->isCheckable())
+ {
+ connect(action, &QAction::toggled, item, [action, item]() {
+ item->setIcon(action->icon());
+ });
+ }
+#else
+ tool_bar->addAction(action);
+#endif
+ };
+
+ discover_action = new QAction(tr("Search for Consoles"), this);
+ discover_action_icon = LoadIcon(":/icons/discover-24px.svg");
+ discover_action_off_icon = LoadIcon(":/icons/discover-off-24px.svg");
discover_action->setCheckable(true);
discover_action->setChecked(settings->GetDiscoveryEnabled());
- tool_bar->addAction(discover_action);
+ auto UpdateDiscoverActionIcon = [this]() {
+ discover_action->setIcon(discover_action->isChecked() ? discover_action_icon : discover_action_off_icon);
+ };
+ UpdateDiscoverActionIcon();
+ connect(discover_action, &QAction::toggled, this, UpdateDiscoverActionIcon);
+ AddToolBarAction(discover_action);
connect(discover_action, &QAction::triggered, this, &MainWindow::UpdateDiscoveryEnabled);
auto tool_bar_spacer = new QWidget();
tool_bar_spacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Ignored);
+#ifdef CHIAKI_GUI_ENABLE_QT_MACEXTRAS
+ tool_bar->addStandardItem(QMacToolBarItem::StandardItem::FlexibleSpace);
+#else
tool_bar->addWidget(tool_bar_spacer);
+#endif
auto add_manual_action = new QAction(tr("Add Console manually"), this);
add_manual_action->setIcon(LoadIcon(":/icons/add-24px.svg"));
- tool_bar->addAction(add_manual_action);
+ AddToolBarAction(add_manual_action);
connect(add_manual_action, &QAction::triggered, this, [this]() {
ManualHostDialog dialog(this->settings, -1, this);
dialog.exec();
@@ -125,7 +158,7 @@ MainWindow::MainWindow(Settings *settings, QWidget *parent)
auto settings_action = new QAction(tr("Settings"), this);
settings_action->setIcon(LoadIcon(":/icons/settings-20px.svg"));
- tool_bar->addAction(settings_action);
+ AddToolBarAction(settings_action);
connect(settings_action, &QAction::triggered, this, &MainWindow::ShowSettings);
auto scroll_area = new QScrollArea(this);
@@ -138,6 +171,11 @@ MainWindow::MainWindow(Settings *settings, QWidget *parent)
scroll_content_widget->setLayout(scroll_content_layout);
scroll_area->setWidget(scroll_content_widget);
+#ifdef CHIAKI_GUI_ENABLE_QT_MACEXTRAS
+ this->window()->winId();
+ tool_bar->attachToWindow(this->window()->windowHandle());
+#endif
+
grid_widget = new DynamicGridWidget(200, scroll_content_widget);
scroll_content_layout->addWidget(grid_widget);
scroll_content_layout->addStretch(0);