Qt: Improve log window behavior on MacOS
This commit is contained in:
parent
3d2a091c46
commit
faa64ec4ff
|
@ -14,14 +14,14 @@
|
||||||
#include <QtWidgets/QMenuBar>
|
#include <QtWidgets/QMenuBar>
|
||||||
#include <QtWidgets/QScrollBar>
|
#include <QtWidgets/QScrollBar>
|
||||||
|
|
||||||
|
// TODO: Since log callbacks are synchronized, no mutex is needed here.
|
||||||
|
// But once I get rid of that, there will be.
|
||||||
LogWindow* g_log_window;
|
LogWindow* g_log_window;
|
||||||
|
|
||||||
LogWindow::LogWindow(bool attach_to_main)
|
LogWindow::LogWindow(bool attach_to_main)
|
||||||
: QMainWindow(), m_filter_names(Settings::GetLogFilters()), m_attached_to_main_window(attach_to_main)
|
: QMainWindow(), m_filter_names(Settings::GetLogFilters()), m_attached_to_main_window(attach_to_main)
|
||||||
{
|
{
|
||||||
// TODO: probably should save the size..
|
restoreSize();
|
||||||
resize(700, 400);
|
|
||||||
|
|
||||||
createUi();
|
createUi();
|
||||||
|
|
||||||
Log::RegisterCallback(&LogWindow::logCallback, this);
|
Log::RegisterCallback(&LogWindow::logCallback, this);
|
||||||
|
@ -29,9 +29,6 @@ LogWindow::LogWindow(bool attach_to_main)
|
||||||
|
|
||||||
LogWindow::~LogWindow()
|
LogWindow::~LogWindow()
|
||||||
{
|
{
|
||||||
if (g_log_window == this)
|
|
||||||
g_log_window = nullptr;
|
|
||||||
|
|
||||||
Log::UnregisterCallback(&LogWindow::logCallback, this);
|
Log::UnregisterCallback(&LogWindow::logCallback, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -60,12 +57,24 @@ void LogWindow::updateSettings()
|
||||||
|
|
||||||
g_log_window->show();
|
g_log_window->show();
|
||||||
}
|
}
|
||||||
else
|
else if (g_log_window)
|
||||||
{
|
{
|
||||||
delete g_log_window;
|
g_log_window->close();
|
||||||
|
g_log_window->deleteLater();
|
||||||
|
g_log_window = nullptr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void LogWindow::destroy()
|
||||||
|
{
|
||||||
|
if (!g_log_window)
|
||||||
|
return;
|
||||||
|
|
||||||
|
g_log_window->close();
|
||||||
|
g_log_window->deleteLater();
|
||||||
|
g_log_window = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
void LogWindow::reattachToMainWindow()
|
void LogWindow::reattachToMainWindow()
|
||||||
{
|
{
|
||||||
// Skip when maximized.
|
// Skip when maximized.
|
||||||
|
@ -103,6 +112,7 @@ void LogWindow::createUi()
|
||||||
QIcon icon;
|
QIcon icon;
|
||||||
icon.addFile(QString::fromUtf8(":/icons/duck.png"), QSize(), QIcon::Normal, QIcon::Off);
|
icon.addFile(QString::fromUtf8(":/icons/duck.png"), QSize(), QIcon::Normal, QIcon::Off);
|
||||||
setWindowIcon(icon);
|
setWindowIcon(icon);
|
||||||
|
setWindowFlag(Qt::WindowCloseButtonHint, false);
|
||||||
updateWindowTitle();
|
updateWindowTitle();
|
||||||
|
|
||||||
QAction* action;
|
QAction* action;
|
||||||
|
@ -165,12 +175,15 @@ void LogWindow::createUi()
|
||||||
m_text->setTextInteractionFlags(Qt::TextSelectableByKeyboard);
|
m_text->setTextInteractionFlags(Qt::TextSelectableByKeyboard);
|
||||||
m_text->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
|
m_text->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
|
||||||
|
|
||||||
#ifndef _WIN32
|
#if defined(_WIN32)
|
||||||
QFont font("Monospace");
|
|
||||||
font.setStyleHint(QFont::TypeWriter);
|
|
||||||
#else
|
|
||||||
QFont font("Consolas");
|
QFont font("Consolas");
|
||||||
font.setPointSize(10);
|
font.setPointSize(10);
|
||||||
|
#elif defined(__APPLE__)
|
||||||
|
QFont font("Monaco");
|
||||||
|
font.setPointSize(11);
|
||||||
|
#else
|
||||||
|
QFont font("Monospace");
|
||||||
|
font.setStyleHint(QFont::TypeWriter);
|
||||||
#endif
|
#endif
|
||||||
m_text->setFont(font);
|
m_text->setFont(font);
|
||||||
|
|
||||||
|
@ -293,7 +306,10 @@ void LogWindow::logCallback(void* pUserParam, const char* channelName, const cha
|
||||||
|
|
||||||
void LogWindow::closeEvent(QCloseEvent* event)
|
void LogWindow::closeEvent(QCloseEvent* event)
|
||||||
{
|
{
|
||||||
// TODO: Update config.
|
Log::UnregisterCallback(&LogWindow::logCallback, this);
|
||||||
|
|
||||||
|
saveSize();
|
||||||
|
|
||||||
QMainWindow::closeEvent(event);
|
QMainWindow::closeEvent(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -363,3 +379,32 @@ void LogWindow::appendMessage(const QLatin1StringView& channel, quint32 level, c
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void LogWindow::saveSize()
|
||||||
|
{
|
||||||
|
const int current_width = Host::GetBaseIntSettingValue("UI", "LogWindowWidth", DEFAULT_WIDTH);
|
||||||
|
const int current_height = Host::GetBaseIntSettingValue("UI", "LogWindowHeight", DEFAULT_HEIGHT);
|
||||||
|
const QSize wsize = size();
|
||||||
|
|
||||||
|
bool changed = false;
|
||||||
|
if (current_width != wsize.width())
|
||||||
|
{
|
||||||
|
Host::SetBaseIntSettingValue("UI", "LogWindowWidth", wsize.width());
|
||||||
|
changed = true;
|
||||||
|
}
|
||||||
|
if (current_height != wsize.height())
|
||||||
|
{
|
||||||
|
Host::SetBaseIntSettingValue("UI", "LogWindowHeight", wsize.height());
|
||||||
|
changed = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (changed)
|
||||||
|
Host::CommitBaseSettingChanges();
|
||||||
|
}
|
||||||
|
|
||||||
|
void LogWindow::restoreSize()
|
||||||
|
{
|
||||||
|
const int width = Host::GetBaseIntSettingValue("UI", "LogWindowWidth", DEFAULT_WIDTH);
|
||||||
|
const int height = Host::GetBaseIntSettingValue("UI", "LogWindowHeight", DEFAULT_HEIGHT);
|
||||||
|
resize(width, height);
|
||||||
|
}
|
||||||
|
|
|
@ -18,6 +18,7 @@ public:
|
||||||
~LogWindow();
|
~LogWindow();
|
||||||
|
|
||||||
static void updateSettings();
|
static void updateSettings();
|
||||||
|
static void destroy();
|
||||||
|
|
||||||
ALWAYS_INLINE bool isAttachedToMainWindow() const { return m_attached_to_main_window; }
|
ALWAYS_INLINE bool isAttachedToMainWindow() const { return m_attached_to_main_window; }
|
||||||
void reattachToMainWindow();
|
void reattachToMainWindow();
|
||||||
|
@ -43,6 +44,12 @@ private Q_SLOTS:
|
||||||
void appendMessage(const QLatin1StringView& channel, quint32 level, const QString& message);
|
void appendMessage(const QLatin1StringView& channel, quint32 level, const QString& message);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
static constexpr int DEFAULT_WIDTH = 750;
|
||||||
|
static constexpr int DEFAULT_HEIGHT = 400;
|
||||||
|
|
||||||
|
void saveSize();
|
||||||
|
void restoreSize();
|
||||||
|
|
||||||
QPlainTextEdit* m_text;
|
QPlainTextEdit* m_text;
|
||||||
QMenu* m_level_menu;
|
QMenu* m_level_menu;
|
||||||
std::span<const char*> m_filter_names;
|
std::span<const char*> m_filter_names;
|
||||||
|
|
|
@ -766,6 +766,8 @@ void MainWindow::destroySubWindows()
|
||||||
}
|
}
|
||||||
|
|
||||||
SettingsWindow::closeGamePropertiesDialogs();
|
SettingsWindow::closeGamePropertiesDialogs();
|
||||||
|
|
||||||
|
LogWindow::destroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::populateGameListContextMenu(const GameList::Entry* entry, QWidget* parent_window, QMenu* menu)
|
void MainWindow::populateGameListContextMenu(const GameList::Entry* entry, QWidget* parent_window, QMenu* menu)
|
||||||
|
|
Loading…
Reference in New Issue