diff --git a/Applications/IRCClient/IRCChannel.cpp b/Applications/IRCClient/IRCChannel.cpp index 9efa304d44..ae4efb0da6 100644 --- a/Applications/IRCClient/IRCChannel.cpp +++ b/Applications/IRCClient/IRCChannel.cpp @@ -69,7 +69,7 @@ void IRCChannel::remove_member(const String& name) void IRCChannel::add_message(char prefix, const String& name, const String& text, Color color) { log().add_message(prefix, name, text, color); - window().did_add_message(); + window().did_add_message(name, text); } void IRCChannel::add_message(const String& text, Color color) diff --git a/Applications/IRCClient/IRCQuery.cpp b/Applications/IRCClient/IRCQuery.cpp index a8492b9561..abf3df68c2 100644 --- a/Applications/IRCClient/IRCQuery.cpp +++ b/Applications/IRCClient/IRCQuery.cpp @@ -56,7 +56,7 @@ void IRCQuery::dump() const void IRCQuery::add_message(char prefix, const String& name, const String& text, Color color) { log().add_message(prefix, name, text, color); - window().did_add_message(); + window().did_add_message(name, text); } void IRCQuery::say(const String& text) diff --git a/Applications/IRCClient/IRCWindow.cpp b/Applications/IRCClient/IRCWindow.cpp index e68bc39577..4c9772bbcb 100644 --- a/Applications/IRCClient/IRCWindow.cpp +++ b/Applications/IRCClient/IRCWindow.cpp @@ -28,11 +28,14 @@ #include "IRCChannel.h" #include "IRCChannelMemberListModel.h" #include "IRCClient.h" +#include #include +#include #include #include #include #include +#include #include IRCWindow::IRCWindow(IRCClient& client, void* owner, Type type, const String& name) @@ -90,8 +93,26 @@ bool IRCWindow::is_active() const return m_client.current_window() == this; } -void IRCWindow::did_add_message() +void IRCWindow::did_add_message(const String& name, const String& message) { + if ((!is_active() || !window()->is_active()) && !name.is_null() && !message.is_null()) { + auto notification = GUI::Notification::construct(); + + if (type() == Type::Channel) { + StringBuilder builder; + builder.append(name); + builder.append(" in "); + builder.append(m_name); + notification->set_title(builder.to_string()); + } else { + notification->set_title(name); + } + + notification->set_title(name); + notification->set_text(message); + notification->show(); + } + if (!is_active()) { ++m_unread_count; m_client.aid_update_window_list(); diff --git a/Applications/IRCClient/IRCWindow.h b/Applications/IRCClient/IRCWindow.h index f652d35145..e23108e525 100644 --- a/Applications/IRCClient/IRCWindow.h +++ b/Applications/IRCClient/IRCWindow.h @@ -57,7 +57,7 @@ public: int unread_count() const; void clear_unread_count(); - void did_add_message(); + void did_add_message(const String& name = {}, const String& message = {}); IRCChannel& channel() { return *(IRCChannel*)m_owner; } const IRCChannel& channel() const { return *(const IRCChannel*)m_owner; }