Remember Popped-up Chat Size (#5635)

This commit is contained in:
maliByatzes 2024-10-12 12:35:39 +02:00 committed by GitHub
parent bc1850ce2d
commit 2d818a7657
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 73 additions and 2 deletions

View file

@ -30,6 +30,7 @@
- Minor: Links can now have prefixes and suffixes such as parentheses. (#5486, #5515)
- Minor: Added support for scrolling in splits with touchscreen panning gestures. (#5524)
- Minor: Removed experimental IRC support. (#5547)
- Minor: Remember last popup size for next popup. (#5635)
- Minor: Moderators can now see which mods start and cancel raids. (#5563)
- Minor: The emote popup now reloads when Twitch emotes are reloaded. (#5580)
- Minor: Added `--login <username>` CLI argument to specify which account to start logged in as. (#5626)

View file

@ -3,6 +3,7 @@
#include "util/QMagicEnum.hpp"
#include <pajlada/settings.hpp>
#include <QSize>
#include <QString>
namespace chatterino {
@ -55,6 +56,7 @@ using DoubleSetting = ChatterinoSetting<double>;
using IntSetting = ChatterinoSetting<int>;
using StringSetting = ChatterinoSetting<std::string>;
using QStringSetting = ChatterinoSetting<QString>;
using QSizeSetting = ChatterinoSetting<QSize>;
template <typename Enum>
class EnumSetting

View file

@ -212,6 +212,10 @@ public:
BoolSetting useCustomFfzVipBadges = {
"/appearance/badges/useCustomFfzVipBadges", true};
BoolSetting showBadgesSevenTV = {"/appearance/badges/seventv", true};
QSizeSetting lastPopupSize = {
"/appearance/lastPopup/size",
{300, 500},
};
/// Behaviour
BoolSetting allowDuplicateMessages = {"/behaviour/allowDuplicateMessages",

View file

@ -0,0 +1,52 @@
#pragma once
#include "util/RapidjsonHelpers.hpp"
#include <pajlada/serialize.hpp>
#include <QSize>
namespace pajlada {
template <>
struct Serialize<QSize> {
static rapidjson::Value get(const QSize &value,
rapidjson::Document::AllocatorType &a)
{
rapidjson::Value ret(rapidjson::kObjectType);
chatterino::rj::set(ret, "width", value.width(), a);
chatterino::rj::set(ret, "height", value.height(), a);
return ret;
}
};
template <>
struct Deserialize<QSize> {
static QSize get(const rapidjson::Value &value, bool *error = nullptr)
{
if (!value.IsObject())
{
PAJLADA_REPORT_ERROR(error);
return {};
}
int width{};
int height{};
if (!chatterino::rj::getSafe(value, "width", width))
{
PAJLADA_REPORT_ERROR(error);
return {};
}
if (!chatterino::rj::getSafe(value, "height", height))
{
PAJLADA_REPORT_ERROR(error);
return {};
}
return {width, height};
}
};
} // namespace pajlada

View file

@ -18,6 +18,7 @@
#include "singletons/Updates.hpp"
#include "singletons/WindowManager.hpp"
#include "util/InitUpdateButton.hpp"
#include "util/RapidJsonSerializeQSize.hpp"
#include "widgets/AccountSwitchPopup.hpp"
#include "widgets/dialogs/SettingsDialog.hpp"
#include "widgets/dialogs/switcher/QuickSwitcherPopup.hpp"
@ -75,7 +76,13 @@ Window::Window(WindowType type, QWidget *parent)
}
else
{
this->resize(int(300 * this->scale()), int(500 * this->scale()));
auto lastPopup = getSettings()->lastPopupSize.getValue();
if (lastPopup.isEmpty())
{
// The size in the setting was invalid, use the default value
lastPopup = getSettings()->lastPopupSize.getDefaultValue();
}
this->resize(lastPopup.width(), lastPopup.height());
}
this->signalHolder_.managedConnect(getApp()->getHotkeys()->onItemsUpdated,
@ -142,7 +149,12 @@ void Window::closeEvent(QCloseEvent *)
getApp()->getWindows()->save();
getApp()->getWindows()->closeAll();
}
else
{
QRect rect = this->getBounds();
QSize newSize(rect.width(), rect.height());
getSettings()->lastPopupSize.setValue(newSize);
}
// Ensure selectedWindow_ is never an invalid pointer.
// WindowManager will return the main window if no window is pointed to by
// `selectedWindow_`.