Add an indicator in the title bar if Streamer Mode is active (#4410)

This commit is contained in:
Mm2PL 2023-05-27 10:38:25 +00:00 committed by GitHub
parent 1bc423d9c4
commit c6c884df70
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
17 changed files with 163 additions and 2 deletions

View file

@ -2,6 +2,7 @@
## Unversioned ## Unversioned
- Minor: Add an icon showing when streamer mode is enabled (#4410)
- Minor: Added `/shoutout <username>` commands to shoutout specified user. (#4638) - Minor: Added `/shoutout <username>` commands to shoutout specified user. (#4638)
- Dev: Added command to set Qt's logging filter/rules at runtime (`/c2-set-logging-rules`). (#4637) - Dev: Added command to set Qt's logging filter/rules at runtime (`/c2-set-logging-rules`). (#4637)
- Dev: Added the ability to see & load custom themes from the Themes directory. No stable promises are made of this feature, changes might be made that breaks custom themes without notice. (#4570) - Dev: Added the ability to see & load custom themes from the Themes directory. No stable promises are made of this feature, changes might be made that breaks custom themes without notice. (#4570)

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

View file

@ -0,0 +1,13 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<!-- Created using Krita: https://krita.org -->
<svg xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:krita="http://krita.org/namespaces/svg/krita"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
width="69.12pt"
height="69.12pt"
viewBox="0 0 69.12 69.12">
<defs/>
<path id="shape0" transform="matrix(2.87999988555909 0 0 2.87999988555909 5.76071977108956 13.5080491863677)" fill="#ff9c9c" stroke-opacity="0" stroke="#000000" stroke-width="0" stroke-linecap="square" stroke-linejoin="bevel" d="M3.98975 0.238705C4.13015 0.379277 4.20909 0.57003 4.20909 0.768705C4.20909 0.96738 4.13015 1.15813 3.98975 1.2987C2.93474 2.35368 2.17587 3.66806 1.78971 5.1092C1.40355 6.55034 1.40355 8.06807 1.78971 9.50921C2.17587 10.9503 2.93474 12.2647 3.98975 13.3197C4.12625 13.4612 4.20181 13.6508 4.20001 13.8474C4.19821 14.0439 4.11919 14.2321 3.98012 14.3711C3.84105 14.51 3.65278 14.5888 3.4562 14.5905C3.25963 14.5921 3.07009 14.5163 2.92875 14.3797C-0.97625 10.4747 -0.97625 4.1437 2.92875 0.238705C3.06932 0.0983082 3.26008 0.0193649 3.45875 0.0193649C3.65742 0.0193649 3.84818 0.0983082 3.98875 0.238705ZM17.0707 0.238705C20.9757 4.1437 20.9757 10.4747 17.0707 14.3807C16.9286 14.5131 16.7405 14.5853 16.5462 14.5819C16.352 14.5785 16.1665 14.4997 16.0291 14.3623C15.8918 14.225 15.813 14.0395 15.8096 13.8452C15.8061 13.651 15.8783 13.4628 16.0107 13.3207C17.066 12.2657 17.825 10.9512 18.2112 9.50994C18.5975 8.06865 18.5975 6.55076 18.2112 5.10947C17.825 3.66819 17.066 2.3537 16.0107 1.2987C15.8922 1.18828 15.8126 1.04239 15.7839 0.882977C15.7552 0.723568 15.7789 0.559065 15.8514 0.414228C15.9239 0.269391 16.0414 0.151871 16.1863 0.0793556C16.3311 0.00684041 16.4956 -0.0168395 16.655 0.01188C16.8144 0.0405996 16.9603 0.120202 17.0707 0.238705ZM6.81775 3.0667C6.95815 3.20728 7.03709 3.39803 7.03709 3.5967C7.03709 3.79538 6.95815 3.98613 6.81775 4.1267C6.25903 4.68524 5.85712 5.38119 5.65261 6.14428C5.44809 6.90737 5.44809 7.71104 5.65261 8.47413C5.85712 9.23722 6.25903 9.93317 6.81775 10.4917C6.95018 10.6338 7.02235 10.822 7.01893 11.0162C7.0155 11.2105 6.93674 11.396 6.79937 11.5333C6.66201 11.6707 6.47651 11.7495 6.28227 11.7529C6.08804 11.7563 5.89988 11.6841 5.75775 11.5517C4.63305 10.4269 4.00053 8.89982 4.00053 7.3092C4.00053 5.71859 4.63305 4.19148 5.75775 3.0667C5.89832 2.92631 6.08908 2.84736 6.28775 2.84736C6.48642 2.84736 6.67718 2.92631 6.81775 3.0667ZM14.2427 3.0667C15.3675 4.19148 16 5.71859 16 7.3092C16 8.89982 15.3675 10.4269 14.2427 11.5517C14.1316 11.6669 13.9863 11.7436 13.8284 11.7704C13.6705 11.7971 13.5082 11.7727 13.3652 11.7005C13.2222 11.6284 13.106 11.5123 13.0338 11.3694C12.9615 11.2265 12.9369 11.0641 12.9635 10.9062C12.9901 10.7483 13.0666 10.603 13.1817 10.4917C13.7403 9.93319 14.142 9.23735 14.3465 8.4744C14.5509 7.71145 14.5509 6.90796 14.3465 6.14501C14.142 5.38206 13.7403 4.68622 13.1818 4.1277C13.0493 3.98558 12.9771 3.79742 12.9806 3.60318C12.984 3.40895 13.0628 3.22345 13.2001 3.08608C13.3375 2.94872 13.523 2.86996 13.7172 2.86653C13.9115 2.8631 14.0996 2.93527 14.2417 3.0677ZM9.99975 5.8097C10.3974 5.8097 10.7792 5.96785 11.0604 6.24904C11.3416 6.53024 11.4997 6.91203 11.4997 7.3097C11.4997 7.70738 11.3416 8.08917 11.0604 8.37037C10.7792 8.65156 10.3974 8.8097 9.99975 8.8097C9.60208 8.8097 9.22029 8.65156 8.93909 8.37037C8.65789 8.08917 8.49975 7.70738 8.49975 7.3097C8.49975 6.91203 8.65789 6.53024 8.93909 6.24904C9.22029 5.96785 9.60208 5.8097 9.99975 5.8097Z" sodipodi:nodetypes="ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"/>
</svg>

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

View file

@ -0,0 +1,13 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<!-- Created using Krita: https://krita.org -->
<svg xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:krita="http://krita.org/namespaces/svg/krita"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
width="69.12pt"
height="69.12pt"
viewBox="0 0 69.12 69.12">
<defs/>
<path id="shape0" transform="matrix(2.87999977111818 0 0 2.87999977111818 5.76071954217913 13.508048613566)" fill="#c10000" stroke-opacity="0" stroke="#000000" stroke-width="0" stroke-linecap="square" stroke-linejoin="bevel" d="M3.98975 0.238705C4.13015 0.379277 4.20909 0.57003 4.20909 0.768705C4.20909 0.96738 4.13015 1.15813 3.98975 1.2987C2.93474 2.35368 2.17587 3.66806 1.78971 5.1092C1.40355 6.55034 1.40355 8.06807 1.78971 9.50921C2.17587 10.9503 2.93474 12.2647 3.98975 13.3197C4.12625 13.4612 4.20181 13.6508 4.20001 13.8474C4.19821 14.0439 4.11919 14.2321 3.98012 14.3711C3.84105 14.51 3.65278 14.5888 3.4562 14.5905C3.25963 14.5921 3.07009 14.5163 2.92875 14.3797C-0.97625 10.4747 -0.97625 4.1437 2.92875 0.238705C3.06932 0.0983082 3.26008 0.0193649 3.45875 0.0193649C3.65742 0.0193649 3.84818 0.0983082 3.98875 0.238705ZM17.0707 0.238705C20.9757 4.1437 20.9757 10.4747 17.0707 14.3807C16.9286 14.5131 16.7405 14.5853 16.5462 14.5819C16.352 14.5785 16.1665 14.4997 16.0291 14.3623C15.8918 14.225 15.813 14.0395 15.8096 13.8452C15.8061 13.651 15.8783 13.4628 16.0107 13.3207C17.066 12.2657 17.825 10.9512 18.2112 9.50994C18.5975 8.06865 18.5975 6.55076 18.2112 5.10947C17.825 3.66819 17.066 2.3537 16.0107 1.2987C15.8922 1.18828 15.8126 1.04239 15.7839 0.882977C15.7552 0.723568 15.7789 0.559065 15.8514 0.414228C15.9239 0.269391 16.0414 0.151871 16.1863 0.0793556C16.3311 0.00684042 16.4956 -0.0168395 16.655 0.01188C16.8144 0.0405996 16.9603 0.120202 17.0707 0.238705ZM6.81775 3.0667C6.95815 3.20728 7.03709 3.39803 7.03709 3.5967C7.03709 3.79538 6.95815 3.98613 6.81775 4.1267C6.25903 4.68524 5.85712 5.38119 5.65261 6.14428C5.44809 6.90737 5.44809 7.71104 5.65261 8.47413C5.85712 9.23722 6.25903 9.93317 6.81775 10.4917C6.95018 10.6338 7.02235 10.822 7.01893 11.0162C7.0155 11.2105 6.93674 11.396 6.79937 11.5333C6.66201 11.6707 6.47651 11.7495 6.28227 11.7529C6.08804 11.7563 5.89988 11.6841 5.75775 11.5517C4.63305 10.4269 4.00053 8.89982 4.00053 7.3092C4.00053 5.71859 4.63305 4.19148 5.75775 3.0667C5.89832 2.92631 6.08908 2.84736 6.28775 2.84736C6.48642 2.84736 6.67718 2.92631 6.81775 3.0667ZM14.2427 3.0667C15.3675 4.19148 16 5.71859 16 7.3092C16 8.89982 15.3675 10.4269 14.2427 11.5517C14.1316 11.6669 13.9863 11.7436 13.8284 11.7704C13.6705 11.7971 13.5082 11.7727 13.3652 11.7005C13.2222 11.6284 13.106 11.5123 13.0338 11.3694C12.9615 11.2265 12.9369 11.0641 12.9635 10.9062C12.9901 10.7483 13.0666 10.603 13.1817 10.4917C13.7403 9.93319 14.142 9.23735 14.3465 8.4744C14.5509 7.71145 14.5509 6.90796 14.3465 6.14501C14.142 5.38206 13.7403 4.68622 13.1818 4.1277C13.0493 3.98558 12.9771 3.79742 12.9806 3.60318C12.984 3.40895 13.0628 3.22345 13.2001 3.08608C13.3375 2.94872 13.523 2.86996 13.7172 2.86653C13.9115 2.8631 14.0996 2.93527 14.2417 3.0677ZM9.99975 5.8097C10.3974 5.8097 10.7792 5.96785 11.0604 6.24904C11.3416 6.53024 11.4997 6.91203 11.4997 7.3097C11.4997 7.70738 11.3416 8.08917 11.0604 8.37037C10.7792 8.65156 10.3974 8.8097 9.99975 8.8097C9.60208 8.8097 9.22029 8.65156 8.93909 8.37037C8.65789 8.08917 8.49975 7.70738 8.49975 7.3097C8.49975 6.91203 8.65789 6.53024 8.93909 6.24904C9.22029 5.96785 9.60208 5.8097 9.99975 5.8097Z" sodipodi:nodetypes="ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"/>
</svg>

After

Width:  |  Height:  |  Size: 3.7 KiB

View file

@ -3,6 +3,8 @@
#include "common/Singleton.hpp" #include "common/Singleton.hpp"
#include "singletons/NativeMessaging.hpp" #include "singletons/NativeMessaging.hpp"
#include <pajlada/signals.hpp>
#include <pajlada/signals/signal.hpp>
#include <QApplication> #include <QApplication>
#include <memory> #include <memory>
@ -153,6 +155,8 @@ public:
} }
IUserDataController *getUserData() override; IUserDataController *getUserData() override;
pajlada::Signals::NoArgSignal streamerModeChanged;
private: private:
void addSingleton(Singleton *singleton); void addSingleton(Singleton *singleton);
void initPubSub(); void initPubSub();

View file

@ -1,5 +1,6 @@
#include "singletons/Settings.hpp" #include "singletons/Settings.hpp"
#include "Application.hpp"
#include "controllers/filters/FilterRecord.hpp" #include "controllers/filters/FilterRecord.hpp"
#include "controllers/highlights/HighlightBadge.hpp" #include "controllers/highlights/HighlightBadge.hpp"
#include "controllers/highlights/HighlightBlacklistUser.hpp" #include "controllers/highlights/HighlightBlacklistUser.hpp"
@ -136,6 +137,11 @@ Settings::Settings(const QString &settingsDirectory)
}, },
false); false);
#endif #endif
this->enableStreamerMode.connect(
[]() {
getApp()->streamerModeChanged.invoke();
},
false);
} }
Settings &Settings::instance() Settings &Settings::instance()

View file

@ -71,6 +71,7 @@ bool isInStreamerMode()
p.exitStatus() == QProcess::NormalExit) p.exitStatus() == QProcess::NormalExit)
{ {
cache = (p.exitCode() == 0); cache = (p.exitCode() == 0);
getApp()->streamerModeChanged.invoke();
return (p.exitCode() == 0); return (p.exitCode() == 0);
} }
@ -89,6 +90,7 @@ bool isInStreamerMode()
qCWarning(chatterinoStreamerMode) << "pgrep execution timed out!"; qCWarning(chatterinoStreamerMode) << "pgrep execution timed out!";
cache = false; cache = false;
getApp()->streamerModeChanged.invoke();
return false; return false;
#endif #endif
@ -122,6 +124,7 @@ bool isInStreamerMode()
if (broadcastingBinaries().contains(processName)) if (broadcastingBinaries().contains(processName))
{ {
cache = true; cache = true;
getApp()->streamerModeChanged.invoke();
return true; return true;
} }
} }
@ -133,6 +136,7 @@ bool isInStreamerMode()
} }
cache = false; cache = false;
getApp()->streamerModeChanged.invoke();
#endif #endif
return false; return false;
} }

View file

@ -4,10 +4,12 @@
#include "common/QLogging.hpp" #include "common/QLogging.hpp"
#include "controllers/hotkeys/HotkeyCategory.hpp" #include "controllers/hotkeys/HotkeyCategory.hpp"
#include "controllers/hotkeys/HotkeyController.hpp" #include "controllers/hotkeys/HotkeyController.hpp"
#include "singletons/Resources.hpp"
#include "singletons/Settings.hpp" #include "singletons/Settings.hpp"
#include "singletons/Theme.hpp" #include "singletons/Theme.hpp"
#include "singletons/WindowManager.hpp" #include "singletons/WindowManager.hpp"
#include "util/InitUpdateButton.hpp" #include "util/InitUpdateButton.hpp"
#include "util/StreamerMode.hpp"
#include "widgets/dialogs/SettingsDialog.hpp" #include "widgets/dialogs/SettingsDialog.hpp"
#include "widgets/helper/ChannelView.hpp" #include "widgets/helper/ChannelView.hpp"
#include "widgets/helper/NotebookButton.hpp" #include "widgets/helper/NotebookButton.hpp"
@ -1155,6 +1157,45 @@ void SplitNotebook::addCustomButtons()
auto updateBtn = this->addCustomButton(); auto updateBtn = this->addCustomButton();
initUpdateButton(*updateBtn, this->signalHolder_); initUpdateButton(*updateBtn, this->signalHolder_);
// streamer mode
this->streamerModeIcon_ = this->addCustomButton();
QObject::connect(this->streamerModeIcon_, &NotebookButton::leftClicked,
[this] {
getApp()->windows->showSettingsDialog(
this, SettingsDialogPreference::StreamerMode);
});
this->signalHolder_.managedConnect(getApp()->streamerModeChanged, [this]() {
this->updateStreamerModeIcon();
});
this->updateStreamerModeIcon();
}
void SplitNotebook::updateStreamerModeIcon()
{
if (this->streamerModeIcon_ == nullptr)
{
return;
}
// A duplicate of this code is in Window class
// That copy handles the TitleBar icon in Window (main window on Windows)
// This one is the one near splits (on linux and mac or non-main windows on Windows)
if (getTheme()->isLightTheme())
{
this->streamerModeIcon_->setPixmap(
getResources().buttons.streamerModeEnabledLight);
}
else
{
this->streamerModeIcon_->setPixmap(
getResources().buttons.streamerModeEnabledDark);
}
this->streamerModeIcon_->setVisible(isInStreamerMode());
}
void SplitNotebook::themeChangedEvent()
{
this->updateStreamerModeIcon();
} }
SplitContainer *SplitNotebook::addPage(bool select) SplitContainer *SplitNotebook::addPage(bool select)

View file

@ -123,6 +123,7 @@ public:
SplitContainer *addPage(bool select = false); SplitContainer *addPage(bool select = false);
SplitContainer *getOrAddSelectedPage(); SplitContainer *getOrAddSelectedPage();
void select(QWidget *page, bool focusPage = true) override; void select(QWidget *page, bool focusPage = true) override;
void themeChangedEvent() override;
protected: protected:
void showEvent(QShowEvent *event) override; void showEvent(QShowEvent *event) override;
@ -131,6 +132,11 @@ private:
void addCustomButtons(); void addCustomButtons();
pajlada::Signals::SignalHolder signalHolder_; pajlada::Signals::SignalHolder signalHolder_;
// Main window on Windows has basically a duplicate of this in Window
NotebookButton *streamerModeIcon_{};
void updateStreamerModeIcon();
}; };
} // namespace chatterino } // namespace chatterino

View file

@ -9,6 +9,7 @@
#include "controllers/hotkeys/HotkeyController.hpp" #include "controllers/hotkeys/HotkeyController.hpp"
#include "providers/twitch/TwitchAccount.hpp" #include "providers/twitch/TwitchAccount.hpp"
#include "providers/twitch/TwitchIrcServer.hpp" #include "providers/twitch/TwitchIrcServer.hpp"
#include "singletons/Resources.hpp"
#include "singletons/Settings.hpp" #include "singletons/Settings.hpp"
#include "singletons/Theme.hpp" #include "singletons/Theme.hpp"
#include "singletons/Updates.hpp" #include "singletons/Updates.hpp"
@ -186,6 +187,51 @@ void Window::addCustomTitlebarButtons()
this->userLabel_->rect().bottomLeft())); this->userLabel_->rect().bottomLeft()));
}); });
this->userLabel_->setMinimumWidth(20 * scale()); this->userLabel_->setMinimumWidth(20 * scale());
// streamer mode
this->streamerModeTitlebarIcon_ =
this->addTitleBarButton(TitleBarButtonStyle::StreamerMode, [this] {
getApp()->windows->showSettingsDialog(
this, SettingsDialogPreference::StreamerMode);
});
this->signalHolder_.managedConnect(getApp()->streamerModeChanged, [this]() {
this->updateStreamerModeIcon();
});
}
void Window::updateStreamerModeIcon()
{
// A duplicate of this code is in SplitNotebook class (in Notebook.{c,h}pp)
// That one is the one near splits (on linux and mac or non-main windows on Windows)
// This copy handles the TitleBar icon in Window (main window on Windows)
if (this->streamerModeTitlebarIcon_ == nullptr)
{
return;
}
#ifdef Q_OS_WIN
assert(this->getType() == WindowType::Main);
if (getTheme()->isLightTheme())
{
this->streamerModeTitlebarIcon_->setPixmap(
getResources().buttons.streamerModeEnabledLight);
}
else
{
this->streamerModeTitlebarIcon_->setPixmap(
getResources().buttons.streamerModeEnabledDark);
}
this->streamerModeTitlebarIcon_->setVisible(isInStreamerMode());
#else
// clang-format off
assert(false && "Streamer mode TitleBar icon should not exist on non-Windows OSes");
// clang-format on
#endif
}
void Window::themeChangedEvent()
{
this->updateStreamerModeIcon();
BaseWindow::themeChangedEvent();
} }
void Window::addDebugStuff(HotkeyController::HotkeyMap &actions) void Window::addDebugStuff(HotkeyController::HotkeyMap &actions)

View file

@ -31,6 +31,7 @@ public:
protected: protected:
void closeEvent(QCloseEvent *event) override; void closeEvent(QCloseEvent *event) override;
bool event(QEvent *event) override; bool event(QEvent *event) override;
void themeChangedEvent() override;
private: private:
void addCustomTitlebarButtons(); void addCustomTitlebarButtons();
@ -51,6 +52,10 @@ private:
pajlada::Signals::SignalHolder signalHolder_; pajlada::Signals::SignalHolder signalHolder_;
std::vector<boost::signals2::scoped_connection> bSignals_; std::vector<boost::signals2::scoped_connection> bSignals_;
// this is only used on Windows and only on the main window, for the one used otherwise, see SplitNotebook in Notebook.hpp
TitleBarButton *streamerModeTitlebarIcon_ = nullptr;
void updateStreamerModeIcon();
friend class Notebook; friend class Notebook;
}; };

View file

@ -195,6 +195,11 @@ void SettingsDialog::filterElements(const QString &text)
} }
} }
void SettingsDialog::setElementFilter(const QString &query)
{
this->ui_.search->setText(query);
}
void SettingsDialog::addTabs() void SettingsDialog::addTabs()
{ {
this->ui_.tabContainer->setSpacing(0); this->ui_.tabContainer->setSpacing(0);
@ -203,7 +208,7 @@ void SettingsDialog::addTabs()
// Constructors are wrapped in std::function to remove some strain from first time loading. // Constructors are wrapped in std::function to remove some strain from first time loading.
// clang-format off // clang-format off
this->addTab([]{return new GeneralPage;}, "General", ":/settings/about.svg"); this->addTab([]{return new GeneralPage;}, "General", ":/settings/about.svg", SettingsTabId::General);
this->ui_.tabContainer->addSpacing(16); this->ui_.tabContainer->addSpacing(16);
this->addTab([]{return new AccountsPage;}, "Accounts", ":/settings/accounts.svg", SettingsTabId::Accounts); this->addTab([]{return new AccountsPage;}, "Accounts", ":/settings/accounts.svg", SettingsTabId::Accounts);
this->addTab([]{return new NicknamesPage;}, "Nicknames", ":/settings/accounts.svg"); this->addTab([]{return new NicknamesPage;}, "Nicknames", ":/settings/accounts.svg");
@ -316,10 +321,20 @@ void SettingsDialog::showDialog(QWidget *parent,
} }
break; break;
case SettingsDialogPreference::StreamerMode: {
instance->selectTab(SettingsTabId::General);
}
break;
default:; default:;
} }
instance->show(); instance->show();
if (preferredTab == SettingsDialogPreference::StreamerMode)
{
// this is needed because each time the settings are opened, the query is reset
instance->setElementFilter("Streamer Mode");
}
instance->activateWindow(); instance->activateWindow();
instance->raise(); instance->raise();
instance->setFocus(); instance->setFocus();

View file

@ -27,6 +27,7 @@ class PageHeader : public QFrame
enum class SettingsDialogPreference { enum class SettingsDialogPreference {
NoPreference, NoPreference,
StreamerMode,
Accounts, Accounts,
ModerationActions, ModerationActions,
}; };
@ -57,6 +58,7 @@ private:
void selectTab(SettingsDialogTab *tab, const bool byUser = true); void selectTab(SettingsDialogTab *tab, const bool byUser = true);
void selectTab(SettingsTabId id); void selectTab(SettingsTabId id);
void filterElements(const QString &query); void filterElements(const QString &query);
void setElementFilter(const QString &query);
void onOkClicked(); void onOkClicked();
void onCancelClicked(); void onCancelClicked();

View file

@ -15,6 +15,7 @@ class SettingsDialog;
enum class SettingsTabId { enum class SettingsTabId {
None, None,
General,
Accounts, Accounts,
Moderation, Moderation,
}; };

View file

@ -11,7 +11,8 @@ enum class TitleBarButtonStyle {
Unmaximize = 4, Unmaximize = 4,
Close = 8, Close = 8,
User = 16, User = 16,
Settings = 32 Settings = 32,
StreamerMode = 64,
}; };
class TitleBarButton : public Button class TitleBarButton : public Button

View file

@ -126,6 +126,9 @@ AboutPage::AboutPage()
"https://github.com/getsentry/crashpad", "https://github.com/getsentry/crashpad",
":/licenses/crashpad.txt"); ":/licenses/crashpad.txt");
#endif #endif
addLicense(form.getElement(), "Fluent icons",
"https://github.com/microsoft/fluentui-system-icons",
":/licenses/fluenticons.txt");
} }
// Attributions // Attributions