diff --git a/chatterino.pro b/chatterino.pro
index bee2ef08..b984da7d 100644
--- a/chatterino.pro
+++ b/chatterino.pro
@@ -225,7 +225,8 @@ SOURCES += \
src/singletons/Theme.cpp \
src/controllers/moderationactions/ModerationActionModel.cpp \
src/widgets/settingspages/LookPage.cpp \
- src/widgets/settingspages/FeelPage.cpp
+ src/widgets/settingspages/FeelPage.cpp \
+ src/widgets/dialogs/UpdatePromptDialog.cpp
HEADERS += \
src/Application.hpp \
@@ -398,7 +399,8 @@ HEADERS += \
src/common/Singleton.hpp \
src/controllers/moderationactions/ModerationActionModel.hpp \
src/widgets/settingspages/LookPage.hpp \
- src/widgets/settingspages/FeelPage.hpp
+ src/widgets/settingspages/FeelPage.hpp \
+ src/widgets/dialogs/UpdatePromptDialog.hpp
RESOURCES += \
resources/resources.qrc \
diff --git a/resources/images/download_update.png b/resources/images/download_update.png
new file mode 100644
index 00000000..92519418
Binary files /dev/null and b/resources/images/download_update.png differ
diff --git a/resources/resources.qrc b/resources/resources.qrc
index b930ed4b..146c2c66 100644
--- a/resources/resources.qrc
+++ b/resources/resources.qrc
@@ -72,6 +72,7 @@
contributors.txt
avatars/fourtf.png
avatars/pajlada.png
+ images/download_update.png
qt.conf
diff --git a/src/widgets/BaseWindow.cpp b/src/widgets/BaseWindow.cpp
index af776185..d0c4a8cc 100644
--- a/src/widgets/BaseWindow.cpp
+++ b/src/widgets/BaseWindow.cpp
@@ -318,8 +318,8 @@ void BaseWindow::mouseMoveEvent(QMouseEvent *event)
BaseWidget::mouseMoveEvent(event);
}
-void BaseWindow::addTitleBarButton(const TitleBarButton::Style &style,
- std::function onClicked)
+TitleBarButton *BaseWindow::addTitleBarButton(const TitleBarButton::Style &style,
+ std::function onClicked)
{
TitleBarButton *button = new TitleBarButton;
button->setScaleIndependantSize(30, 30);
@@ -329,6 +329,8 @@ void BaseWindow::addTitleBarButton(const TitleBarButton::Style &style,
button->setButtonStyle(style);
QObject::connect(button, &TitleBarButton::clicked, this, [onClicked] { onClicked(); });
+
+ return button;
}
RippleEffectLabel *BaseWindow::addTitleBarLabel(std::function onClicked)
diff --git a/src/widgets/BaseWindow.hpp b/src/widgets/BaseWindow.hpp
index 883cf0a4..77fcc818 100644
--- a/src/widgets/BaseWindow.hpp
+++ b/src/widgets/BaseWindow.hpp
@@ -36,7 +36,8 @@ public:
QWidget *getLayoutContainer();
bool hasCustomWindowFrame();
- void addTitleBarButton(const TitleBarButton::Style &style, std::function onClicked);
+ TitleBarButton *addTitleBarButton(const TitleBarButton::Style &style,
+ std::function onClicked);
RippleEffectLabel *addTitleBarLabel(std::function onClicked);
void setStayInScreenRect(bool value);
diff --git a/src/widgets/Window.cpp b/src/widgets/Window.cpp
index 99bc9ce6..28638ef0 100644
--- a/src/widgets/Window.cpp
+++ b/src/widgets/Window.cpp
@@ -10,6 +10,7 @@
#include "widgets/AccountSwitchPopupWidget.hpp"
#include "widgets/Notebook.hpp"
#include "widgets/dialogs/SettingsDialog.hpp"
+#include "widgets/dialogs/UpdatePromptDialog.hpp"
#include "widgets/dialogs/WelcomeDialog.hpp"
#include "widgets/helper/Shortcut.hpp"
#include "widgets/splits/Split.hpp"
@@ -52,10 +53,23 @@ Window::Window(WindowType _type)
});
if (this->hasCustomWindowFrame() && _type == Window::Main) {
+ // settings
this->addTitleBarButton(TitleBarButton::Settings, [app] {
app->windows->showSettingsDialog(); //
});
+ // updates
+ auto update = this->addTitleBarButton(TitleBarButton::None, [] {});
+ update->setPixmap(QPixmap(":/images/download_update.png"));
+ QObject::connect(update, &TitleBarButton::clicked, this, [this, update] {
+ auto dialog = new UpdatePromptDialog();
+ dialog->setAttribute(Qt::WA_DeleteOnClose);
+ dialog->move(update->mapToGlobal(QPoint(-100 * this->getScale(), update->height())));
+ dialog->show();
+ dialog->raise();
+ });
+
+ // account
this->userLabel = this->addTitleBarLabel([this, app] {
app->windows->showAccountSelectPopup(
this->userLabel->mapToGlobal(this->userLabel->rect().bottomLeft())); //
diff --git a/src/widgets/dialogs/UpdatePromptDialog.cpp b/src/widgets/dialogs/UpdatePromptDialog.cpp
new file mode 100644
index 00000000..2cc4df2a
--- /dev/null
+++ b/src/widgets/dialogs/UpdatePromptDialog.cpp
@@ -0,0 +1,30 @@
+#include "UpdatePromptDialog.hpp"
+
+#include "util/LayoutCreator.hpp"
+#include "widgets/Label.hpp"
+
+#include
+#include
+#include
+
+namespace chatterino {
+
+UpdatePromptDialog::UpdatePromptDialog()
+ : BaseWindow(nullptr, BaseWindow::Flags(BaseWindow::Frameless | BaseWindow::TopMost |
+ BaseWindow::EnableCustomFrame))
+{
+ auto layout = LayoutCreator(this).setLayoutType();
+
+ layout.emplace