diff --git a/chatterino.pro b/chatterino.pro index 9e15defa4..cac9266f3 100644 --- a/chatterino.pro +++ b/chatterino.pro @@ -17,6 +17,11 @@ DEFINES += QT_DEPRECATED_WARNINGS PRECOMPILED_HEADER = src/precompiled_header.hpp CONFIG += precompile_header +# https://bugreports.qt.io/browse/QTBUG-27018 +equals(QMAKE_CXX, "clang++") { + TARGET = bin/chatterino +} + # Icons macx:ICON = resources/images/chatterino2.icns win32:RC_FILE = resources/windows.rc @@ -167,7 +172,6 @@ SOURCES += \ src/widgets/splitcontainer.cpp \ src/widgets/streamview.cpp \ src/widgets/textinputdialog.cpp \ - src/widgets/titlebar.cpp \ src/widgets/tooltipwidget.cpp \ src/widgets/window.cpp \ src/providers/irc/_ircaccount.cpp \ @@ -280,7 +284,6 @@ HEADERS += \ src/widgets/splitcontainer.hpp \ src/widgets/streamview.hpp \ src/widgets/textinputdialog.hpp \ - src/widgets/titlebar.hpp \ src/widgets/tooltipwidget.hpp \ src/widgets/window.hpp \ src/common.hpp \ diff --git a/src/providers/irc/abstractircserver.cpp b/src/providers/irc/abstractircserver.cpp index 198cdc632..83450b65c 100644 --- a/src/providers/irc/abstractircserver.cpp +++ b/src/providers/irc/abstractircserver.cpp @@ -97,20 +97,16 @@ void AbstractIrcServer::writeConnectionMessageReceived(Communi::IrcMessage *mess std::shared_ptr AbstractIrcServer::addChannel(const QString &channelName) { - std::lock_guard lock(this->channelMutex); - - // value exists - auto it = this->channels.find(channelName); - if (it != this->channels.end()) { - std::shared_ptr chan = it.value().lock(); - - if (chan) { - return chan; - } + // try get channel + ChannelPtr chan = this->getChannel(channelName); + if (chan != Channel::getEmpty()) { + return chan; } + std::lock_guard lock(this->channelMutex); + // value doesn't exist - std::shared_ptr chan = this->createChannel(channelName); + chan = this->createChannel(channelName); if (!chan) { return Channel::getEmpty(); } @@ -119,7 +115,7 @@ std::shared_ptr AbstractIrcServer::addChannel(const QString &channelNam this->channels.insert(channelName, chan); chan->destroyed.connect([this, clojuresInCppAreShit] { - // fourtf: issues when the server itself in destroyed + // fourtf: issues when the server itself is destroyed debug::Log("[AbstractIrcServer::addChannel] {} was destroyed", clojuresInCppAreShit); this->channels.remove(clojuresInCppAreShit); @@ -128,6 +124,7 @@ std::shared_ptr AbstractIrcServer::addChannel(const QString &channelNam // join irc channel { std::lock_guard lock2(this->connectionMutex); + if (this->readConnection) { this->readConnection->sendRaw("JOIN #" + channelName); } @@ -144,10 +141,16 @@ std::shared_ptr AbstractIrcServer::getChannel(const QString &channelNam { std::lock_guard lock(this->channelMutex); + // try get special channel + ChannelPtr chan = this->getCustomChannel(channelName); + if (chan) { + return chan; + } + // value exists auto it = this->channels.find(channelName); if (it != this->channels.end()) { - std::shared_ptr chan = it.value().lock(); + chan = it.value().lock(); if (chan) { return chan; @@ -221,6 +224,20 @@ void AbstractIrcServer::privateMessageReceived(Communi::IrcPrivateMessage *messa void AbstractIrcServer::messageReceived(Communi::IrcMessage *message) { } + +void AbstractIrcServer::forEachChannel(std::function func) +{ + std::lock_guard lock(this->channelMutex); + + for (std::weak_ptr &weak : this->channels.values()) { + std::shared_ptr chan = weak.lock(); + if (!chan) { + continue; + } + + func(chan); + } +} } // namespace irc } // namespace providers } // namespace chatterino diff --git a/src/providers/irc/abstractircserver.hpp b/src/providers/irc/abstractircserver.hpp index 3662066e7..823071f80 100644 --- a/src/providers/irc/abstractircserver.hpp +++ b/src/providers/irc/abstractircserver.hpp @@ -1,6 +1,7 @@ #pragma once #include +#include #include #include @@ -31,6 +32,9 @@ public: void addFakeMessage(const QString &data); + // iteration + void forEachChannel(std::function func); + protected: AbstractIrcServer(); @@ -47,16 +51,16 @@ protected: virtual std::shared_ptr getCustomChannel(const QString &channelName); + QMap> channels; + std::mutex channelMutex; + private: void initConnection(); - QMap> channels; - std::unique_ptr writeConnection = nullptr; std::unique_ptr readConnection = nullptr; std::mutex connectionMutex; - std::mutex channelMutex; }; } // namespace irc } // namespace providers diff --git a/src/providers/twitch/ircmessagehandler.cpp b/src/providers/twitch/ircmessagehandler.cpp index 3bb115c87..8ee2e312b 100644 --- a/src/providers/twitch/ircmessagehandler.cpp +++ b/src/providers/twitch/ircmessagehandler.cpp @@ -6,10 +6,10 @@ #include "messages/limitedqueue.hpp" #include "messages/message.hpp" #include "providers/twitch/twitchchannel.hpp" -//#include "singletons/channelmanager.hpp" +#include "providers/twitch/twitchmessagebuilder.hpp" +#include "providers/twitch/twitchserver.hpp" #include "singletons/resourcemanager.hpp" #include "singletons/windowmanager.hpp" -#include "twitchserver.hpp" using namespace chatterino::singletons; using namespace chatterino::messages; @@ -149,7 +149,29 @@ void IrcMessageHandler::handleUserStateMessage(Communi::IrcMessage *message) void IrcMessageHandler::handleWhisperMessage(Communi::IrcMessage *message) { - // TODO: Implement + debug::Log("Received whisper!"); + messages::MessageParseArgs args; + + args.isReceivedWhisper = true; + + auto c = TwitchServer::getInstance().whispersChannel.get(); + + twitch::TwitchMessageBuilder builder(c, message, message->parameter(1), args); + + if (!builder.isIgnored()) { + messages::MessagePtr _message = builder.build(); + if (_message->flags & messages::Message::Highlighted) { + TwitchServer::getInstance().mentionsChannel->addMessage(_message); + } + + c->addMessage(_message); + + if (SettingManager::getInstance().inlineWhispers) { + TwitchServer::getInstance().forEachChannel([_message](ChannelPtr channel) { + channel->addMessage(_message); // + }); + } + } } void IrcMessageHandler::handleUserNoticeMessage(Communi::IrcMessage *message) @@ -177,9 +199,9 @@ void IrcMessageHandler::handleNoticeMessage(Communi::IrcNoticeMessage *message) if (broadcast) { // fourtf: send to all twitch channels - // this->channelManager.doOnAll([msg](const auto &c) { - // c->addMessage(msg); // - // }); + TwitchServer::getInstance().forEachChannelAndSpecialChannels([msg](const auto &c) { + c->addMessage(msg); // + }); return; } diff --git a/src/providers/twitch/twitchaccount.hpp b/src/providers/twitch/twitchaccount.hpp index f0c85844e..f33d713ae 100644 --- a/src/providers/twitch/twitchaccount.hpp +++ b/src/providers/twitch/twitchaccount.hpp @@ -1,5 +1,6 @@ #pragma once +#include #include namespace chatterino { @@ -27,6 +28,8 @@ public: bool isAnon() const; + QColor color; + private: QString oauthClient; QString oauthToken; diff --git a/src/providers/twitch/twitchchannel.cpp b/src/providers/twitch/twitchchannel.cpp index 3a8aaf083..1bf3aff82 100644 --- a/src/providers/twitch/twitchchannel.cpp +++ b/src/providers/twitch/twitchchannel.cpp @@ -249,6 +249,7 @@ void TwitchChannel::fetchRecentMessages() } }); } + } // namespace twitch } // namespace providers } // namespace chatterino diff --git a/src/providers/twitch/twitchmessagebuilder.cpp b/src/providers/twitch/twitchmessagebuilder.cpp index 1417f6d03..0cc1f78af 100644 --- a/src/providers/twitch/twitchmessagebuilder.cpp +++ b/src/providers/twitch/twitchmessagebuilder.cpp @@ -1,6 +1,7 @@ #include "providers/twitch/twitchmessagebuilder.hpp" #include "debug/log.hpp" #include "providers/twitch/twitchchannel.hpp" +#include "singletons/accountmanager.hpp" #include "singletons/emotemanager.hpp" #include "singletons/ircmanager.hpp" #include "singletons/resourcemanager.hpp" @@ -27,8 +28,22 @@ TwitchMessageBuilder::TwitchMessageBuilder(Channel *_channel, , args(_args) , tags(this->ircMessage->tags()) , usernameColor(singletons::ThemeManager::getInstance().messages.textColors.system) + , originalMessage(_ircMessage->content()) + , action(_ircMessage->isAction()) +{ +} + +TwitchMessageBuilder::TwitchMessageBuilder(Channel *_channel, + const Communi::IrcMessage *_ircMessage, QString content, + const messages::MessageParseArgs &_args) + : channel(_channel) + , twitchChannel(dynamic_cast(_channel)) + , ircMessage(_ircMessage) + , args(_args) + , tags(this->ircMessage->tags()) + , usernameColor(singletons::ThemeManager::getInstance().messages.textColors.system) + , originalMessage(content) { - this->originalMessage = this->ircMessage->content(); } bool TwitchMessageBuilder::isIgnored() const @@ -125,8 +140,8 @@ MessagePtr TwitchMessageBuilder::build() long int i = 0; for (QString split : splits) { - MessageColor textColor = ircMessage->isAction() ? MessageColor(this->usernameColor) - : MessageColor(MessageColor::Text); + MessageColor textColor = + this->action ? MessageColor(this->usernameColor) : MessageColor(MessageColor::Text); // twitch emote if (currentTwitchEmote != twitchEmotes.end() && currentTwitchEmote->first == i) { @@ -244,7 +259,7 @@ void TwitchMessageBuilder::parseUsername() } // username - this->userName = ircMessage->nick(); + this->userName = this->ircMessage->nick(); if (this->userName.isEmpty()) { this->userName = this->tags.value(QLatin1String("login")).toString(); @@ -309,20 +324,36 @@ void TwitchMessageBuilder::appendUsername() if (this->args.isSentWhisper) { // TODO(pajlada): Re-implement // userDisplayString += IrcManager::getInstance().getUser().getUserName(); - } + } else if (this->args.isReceivedWhisper) { + // Sender username + this->emplace(usernameText, MessageElement::Text, this->usernameColor, + FontStyle::MediumBold) + ->setLink({Link::UserInfo, this->userName}); - if (this->args.isReceivedWhisper) { - // TODO(pajlada): Re-implement - // userDisplayString += " -> " + IrcManager::getInstance().getUser().getUserName(); - } + auto currentUser = singletons::AccountManager::getInstance().Twitch.getCurrent(); - if (!ircMessage->isAction()) { - usernameText += ":"; - } + // Separator + this->emplace( + "->", MessageElement::Text, + singletons::ThemeManager::getInstance().messages.textColors.system, FontStyle::Medium); - this->emplace(usernameText, MessageElement::Text, this->usernameColor, - FontStyle::MediumBold) - ->setLink({Link::UserInfo, this->userName}); + QColor selfColor = currentUser->color; + if (!selfColor.isValid()) { + selfColor = singletons::ThemeManager::getInstance().messages.textColors.system; + } + + // Your own username + this->emplace(currentUser->getUserName() + ":", MessageElement::Text, + selfColor, FontStyle::MediumBold); + } else { + if (!this->action) { + usernameText += ":"; + } + + this->emplace(usernameText, MessageElement::Text, this->usernameColor, + FontStyle::MediumBold) + ->setLink({Link::UserInfo, this->userName}); + } } void TwitchMessageBuilder::parseHighlights() @@ -330,11 +361,12 @@ void TwitchMessageBuilder::parseHighlights() static auto player = new QMediaPlayer; static QUrl currentPlayerUrl; singletons::SettingManager &settings = singletons::SettingManager::getInstance(); - static pajlada::Settings::Setting currentUser("/accounts/current"); + auto currentUser = singletons::AccountManager::getInstance().Twitch.getCurrent(); - QString currentUsername = QString::fromStdString(currentUser.getValue()); + QString currentUsername = currentUser->getUserName(); if (this->ircMessage->nick() == currentUsername) { + currentUser->color = this->usernameColor; // Do nothing. Highlights cannot be triggered by yourself return; } @@ -413,7 +445,7 @@ void TwitchMessageBuilder::parseHighlights() } } -void TwitchMessageBuilder::appendTwitchEmote(const Communi::IrcPrivateMessage *ircMessage, +void TwitchMessageBuilder::appendTwitchEmote(const Communi::IrcMessage *ircMessage, const QString &emote, std::vector> &vec) { @@ -442,11 +474,11 @@ void TwitchMessageBuilder::appendTwitchEmote(const Communi::IrcPrivateMessage *i long int start = std::stol(coords.at(0).toStdString(), nullptr, 10); long int end = std::stol(coords.at(1).toStdString(), nullptr, 10); - if (start >= end || start < 0 || end > ircMessage->content().length()) { + if (start >= end || start < 0 || end > this->originalMessage.length()) { return; } - QString name = ircMessage->content().mid(start, end - start + 1); + QString name = this->originalMessage.mid(start, end - start + 1); vec.push_back( std::pair(start, emoteManager.getTwitchEmoteById(id, name))); diff --git a/src/providers/twitch/twitchmessagebuilder.hpp b/src/providers/twitch/twitchmessagebuilder.hpp index 31f263d84..9441f45fe 100644 --- a/src/providers/twitch/twitchmessagebuilder.hpp +++ b/src/providers/twitch/twitchmessagebuilder.hpp @@ -29,10 +29,12 @@ public: explicit TwitchMessageBuilder(Channel *_channel, const Communi::IrcPrivateMessage *_ircMessage, const messages::MessageParseArgs &_args); + explicit TwitchMessageBuilder(Channel *_channel, const Communi::IrcMessage *_ircMessage, + QString content, const messages::MessageParseArgs &_args); Channel *channel; TwitchChannel *twitchChannel; - const Communi::IrcPrivateMessage *ircMessage; + const Communi::IrcMessage *ircMessage; messages::MessageParseArgs args; const QVariantMap tags; @@ -46,7 +48,9 @@ private: QString roomID; QColor usernameColor; - QString originalMessage; + const QString originalMessage; + + const bool action = false; void parseMessageID(); void parseRoomID(); @@ -55,7 +59,7 @@ private: void appendUsername(); void parseHighlights(); - void appendTwitchEmote(const Communi::IrcPrivateMessage *ircMessage, const QString &emote, + void appendTwitchEmote(const Communi::IrcMessage *ircMessage, const QString &emote, std::vector> &vec); bool tryAppendEmote(QString &emoteString); diff --git a/src/providers/twitch/twitchserver.cpp b/src/providers/twitch/twitchserver.cpp index 60e5b6676..78f45b4b6 100644 --- a/src/providers/twitch/twitchserver.cpp +++ b/src/providers/twitch/twitchserver.cpp @@ -143,6 +143,23 @@ std::shared_ptr TwitchServer::getCustomChannel(const QString &channelNa return nullptr; } + +void TwitchServer::forEachChannelAndSpecialChannels(std::function func) +{ + std::lock_guard lock(this->channelMutex); + + for (std::weak_ptr &weak : this->channels) { + std::shared_ptr chan = weak.lock(); + if (!chan) { + continue; + } + + func(chan); + } + + func(this->whispersChannel); + func(this->mentionsChannel); +} } // namespace twitch } // namespace providers } // namespace chatterino diff --git a/src/providers/twitch/twitchserver.hpp b/src/providers/twitch/twitchserver.hpp index 63d4b0ed9..e6eadd8c9 100644 --- a/src/providers/twitch/twitchserver.hpp +++ b/src/providers/twitch/twitchserver.hpp @@ -16,6 +16,9 @@ class TwitchServer final : public irc::AbstractIrcServer public: static TwitchServer &getInstance(); + // fourtf: ugh + void forEachChannelAndSpecialChannels(std::function func); + const ChannelPtr whispersChannel; const ChannelPtr mentionsChannel; diff --git a/src/singletons/channelmanager.cpp b/src/singletons/channelmanager.cpp index d688430f9..45b27988f 100644 --- a/src/singletons/channelmanager.cpp +++ b/src/singletons/channelmanager.cpp @@ -136,5 +136,14 @@ // func(this->mentionsChannel); //} -//} // namespace singletons +//} + +// void ChannelManager::doOnAllNormalChannels(std::function func) +//{ +// for (const auto &channel : this->twitchChannels) { +// func(std::get<0>(channel)); +// } +//} + //} // namespace chatterino +//} diff --git a/src/singletons/channelmanager.hpp b/src/singletons/channelmanager.hpp index 8277cdb1c..ff92f56f8 100644 --- a/src/singletons/channelmanager.hpp +++ b/src/singletons/channelmanager.hpp @@ -27,6 +27,8 @@ // const ChannelPtr whispersChannel; // const ChannelPtr mentionsChannel; // const ChannelPtr emptyChannel; +// void doOnAll(std::function func); +// void doOnAllNormalChannels(std::function func); // private: // std::map usernameToID; diff --git a/src/singletons/helper/loggingchannel.cpp b/src/singletons/helper/loggingchannel.cpp index e5454716d..96c5125b8 100644 --- a/src/singletons/helper/loggingchannel.cpp +++ b/src/singletons/helper/loggingchannel.cpp @@ -7,18 +7,18 @@ namespace chatterino { namespace singletons { +QByteArray endline("\n"); + LoggingChannel::LoggingChannel(const QString &_channelName, const QString &_baseDirectory) : channelName(_channelName) , baseDirectory(_baseDirectory) { QDateTime now = QDateTime::currentDateTime(); - QString baseFileName = this->channelName + "-" + now.toString("yyyy-MM-dd") + ".log"; + this->dateString = this->generateDateString(now); - // Open file handle to log file of current date - this->fileHandle.setFileName(this->baseDirectory + QDir::separator() + baseFileName); + this->openLogFile(); - this->fileHandle.open(QIODevice::Append); this->appendLine(this->generateOpeningString(now)); } @@ -28,24 +28,38 @@ LoggingChannel::~LoggingChannel() this->fileHandle.close(); } +void LoggingChannel::openLogFile() +{ + if (this->fileHandle.isOpen()) { + this->fileHandle.flush(); + this->fileHandle.close(); + } + + QString baseFileName = this->channelName + "-" + this->dateString + ".log"; + + // Open file handle to log file of current date + this->fileHandle.setFileName(this->baseDirectory + QDir::separator() + baseFileName); + + this->fileHandle.open(QIODevice::Append); +} + void LoggingChannel::addMessage(std::shared_ptr message) { QDateTime now = QDateTime::currentDateTime(); + QString messageDateString = this->generateDateString(now); + if (messageDateString != this->dateString) { + this->dateString = messageDateString; + this->openLogFile(); + } + QString str; str.append('['); str.append(now.toString("HH:mm:ss")); str.append("] "); - if ((message->flags & messages::Message::MessageFlags::System) != 0) { - str.append(message->searchText); - str.append('\n'); - } else { - str.append(message->loginName); - str.append(": "); - str.append(message->searchText); - str.append('\n'); - } + str.append(message->searchText); + str.append(endline); this->appendLine(str); } @@ -56,7 +70,7 @@ QString LoggingChannel::generateOpeningString(const QDateTime &now) const ret.append(now.toString("yyyy-MM-dd HH:mm:ss ")); ret.append(now.timeZoneAbbreviation()); - ret.append('\n'); + ret.append(endline); return ret; } @@ -67,16 +81,31 @@ QString LoggingChannel::generateClosingString(const QDateTime &now) const ret.append(now.toString("yyyy-MM-dd HH:mm:ss")); ret.append(now.timeZoneAbbreviation()); - ret.append('\n'); + ret.append(endline); return ret; } void LoggingChannel::appendLine(const QString &line) { + auto a1 = line.toUtf8(); + auto a2 = line.toLatin1(); + auto a3 = line.toLocal8Bit(); + + auto a4 = line.data(); + + auto a5 = line.toStdString(); + + // this->fileHandle.write(a5.c_str(), a5.length()); + // this->fileHandle.write(a5.c_str(), a5.length()); this->fileHandle.write(line.toUtf8()); this->fileHandle.flush(); } +QString LoggingChannel::generateDateString(const QDateTime &now) +{ + return now.toString("yyyy-MM-dd"); +} + } // namespace singletons } // namespace chatterino diff --git a/src/singletons/helper/loggingchannel.hpp b/src/singletons/helper/loggingchannel.hpp index b60fb3540..499169119 100644 --- a/src/singletons/helper/loggingchannel.hpp +++ b/src/singletons/helper/loggingchannel.hpp @@ -21,17 +21,22 @@ public: void addMessage(std::shared_ptr message); private: + void openLogFile(); + QString generateOpeningString(const QDateTime &now = QDateTime::currentDateTime()) const; QString generateClosingString(const QDateTime &now = QDateTime::currentDateTime()) const; void appendLine(const QString &line); -private: - QString channelName; - const QString &baseDirectory; - QString fileName; + QString generateDateString(const QDateTime &now); + + const QString channelName; + const QString baseDirectory; + QFile fileHandle; + QString dateString; + friend class LoggingManager; }; diff --git a/src/widgets/helper/resizingtextedit.cpp b/src/widgets/helper/resizingtextedit.cpp index 4f0755905..7f837d4b2 100644 --- a/src/widgets/helper/resizingtextedit.cpp +++ b/src/widgets/helper/resizingtextedit.cpp @@ -85,12 +85,16 @@ void ResizingTextEdit::keyPressEvent(QKeyEvent *event) if (doComplete) { // check if there is a completer - return_if_not(this->completer); + if (!this->completer) { + return; + } QString currentCompletionPrefix = this->textUnderCursor(); // check if there is something to complete - return_if_not(currentCompletionPrefix.size()); + if (!currentCompletionPrefix.size()) { + return; + } auto *completionModel = static_cast(this->completer->model()); diff --git a/src/widgets/settingspages/emotespage.cpp b/src/widgets/settingspages/emotespage.cpp index 026c00ee6..b5788815b 100644 --- a/src/widgets/settingspages/emotespage.cpp +++ b/src/widgets/settingspages/emotespage.cpp @@ -5,6 +5,7 @@ namespace chatterino { namespace widgets { namespace settingspages { + EmotesPage::EmotesPage() : SettingsPage("Emotes", ":/images/emote.svg") { @@ -22,6 +23,7 @@ EmotesPage::EmotesPage() layout->addStretch(1); } + } // namespace settingspages } // namespace widgets } // namespace chatterino diff --git a/src/widgets/settingspages/logspage.cpp b/src/widgets/settingspages/logspage.cpp index e99327e19..138df8e1e 100644 --- a/src/widgets/settingspages/logspage.cpp +++ b/src/widgets/settingspages/logspage.cpp @@ -1,4 +1,5 @@ #include "logspage.hpp" +#include "singletons/pathmanager.hpp" #include #include @@ -9,6 +10,16 @@ namespace chatterino { namespace widgets { namespace settingspages { +inline QString CreateLink(const QString &url, bool file = false) +{ + if (file) { + return QString("" + url + + ""); + } + + return QString("" + url + ""); +} + LogsPage::LogsPage() : SettingsPage("Logs", "") { @@ -16,13 +27,16 @@ LogsPage::LogsPage() util::LayoutCreator layoutCreator(this); auto layout = layoutCreator.emplace().withoutMargin(); - { - auto form = layout.emplace(); + singletons::PathManager &pathManager = singletons::PathManager::getInstance(); + auto logPath = pathManager.logsFolderPath; - // clang-format off - form->addRow("Enabled:", this->createCheckBox("Enable logging", settings.enableLogging)); - // clang-format on - } + auto created = layout.emplace(); + created->setText("Logs are saved to " + CreateLink(logPath, true)); + created->setTextFormat(Qt::RichText); + created->setTextInteractionFlags(Qt::TextBrowserInteraction | Qt::LinksAccessibleByKeyboard | + Qt::LinksAccessibleByKeyboard); + created->setOpenExternalLinks(true); + layout.append(this->createCheckBox("Enable logging", settings.enableLogging)); layout->addStretch(1); } diff --git a/src/widgets/settingspages/specialchannelspage.cpp b/src/widgets/settingspages/specialchannelspage.cpp index 6c3685c74..f6df33737 100644 --- a/src/widgets/settingspages/specialchannelspage.cpp +++ b/src/widgets/settingspages/specialchannelspage.cpp @@ -13,6 +13,7 @@ namespace settingspages { SpecialChannelsPage::SpecialChannelsPage() : SettingsPage("Special channels", "") { + singletons::SettingManager &settings = singletons::SettingManager::getInstance(); util::LayoutCreator layoutCreator(this); auto layout = layoutCreator.setLayoutType(); @@ -21,6 +22,12 @@ SpecialChannelsPage::SpecialChannelsPage() mentions.emplace("Join /mentions to view your mentions."); } + auto whispers = layout.emplace("Whispers").setLayoutType(); + { + whispers.emplace("Join /whispers to view your mentions."); + whispers.append(this->createCheckBox("Show whispers inline", settings.inlineWhispers)); + } + layout->addStretch(1); } } // namespace settingspages diff --git a/src/widgets/split.cpp b/src/widgets/split.cpp index 219dc58d9..8911359d8 100644 --- a/src/widgets/split.cpp +++ b/src/widgets/split.cpp @@ -139,11 +139,6 @@ ChannelPtr Split::getChannel() const return this->channel; } -ChannelPtr &Split::getChannelRef() -{ - return this->channel; -} - void Split::setChannel(ChannelPtr _newChannel) { this->view.setChannel(_newChannel); diff --git a/src/widgets/split.hpp b/src/widgets/split.hpp index a3d95808c..5f38a1969 100644 --- a/src/widgets/split.hpp +++ b/src/widgets/split.hpp @@ -57,7 +57,6 @@ public: const std::string &getUUID() const; ChannelPtr getChannel() const; - ChannelPtr &getChannelRef(); void setFlexSizeX(double x); double getFlexSizeX(); void setFlexSizeY(double y); diff --git a/src/widgets/titlebar.cpp b/src/widgets/titlebar.cpp deleted file mode 100644 index ee3ac7426..000000000 --- a/src/widgets/titlebar.cpp +++ /dev/null @@ -1,13 +0,0 @@ -#include "titlebar.hpp" - -namespace chatterino { -namespace widgets { - -TitleBar::TitleBar(QWidget *parent) - : QWidget(parent) -{ - setFixedHeight(32); -} - -} // namespace widgets -} // namespace chatterino diff --git a/src/widgets/window.cpp b/src/widgets/window.cpp index d5202548f..d83dd4812 100644 --- a/src/widgets/window.cpp +++ b/src/widgets/window.cpp @@ -46,11 +46,6 @@ Window::Window(const QString &windowName, singletons::ThemeManager &_themeManage QVBoxLayout *layout = new QVBoxLayout(this); - // add titlebar - // if (SettingsManager::getInstance().useCustomWindowFrame.get()) { - // layout->addWidget(&_titleBar); - // } - layout->addWidget(&this->notebook); this->getLayoutContainer()->setLayout(layout); @@ -63,9 +58,7 @@ Window::Window(const QString &windowName, singletons::ThemeManager &_themeManage /// Initialize program-wide hotkeys // CTRL+P: Open Settings Dialog - CreateWindowShortcut(this, "CTRL+P", [] { - SettingsDialog::showDialog(); // - }); + CreateWindowShortcut(this, "CTRL+P", [] { SettingsDialog::showDialog(); }); // CTRL+Number: Switch to n'th tab CreateWindowShortcut(this, "CTRL+1", [this] { this->notebook.selectIndex(0); }); diff --git a/src/widgets/window.hpp b/src/widgets/window.hpp index 3cc6f9616..79ce24204 100644 --- a/src/widgets/window.hpp +++ b/src/widgets/window.hpp @@ -3,7 +3,6 @@ #include "util/helpers.hpp" #include "widgets/basewindow.hpp" #include "widgets/notebook.hpp" -#include "widgets/titlebar.hpp" //#ifdef USEWINSDK //#include @@ -65,7 +64,7 @@ private: void loadGeometry(); Notebook notebook; - TitleBar titleBar; + // TitleBar titleBar; friend class Notebook;