summaryrefslogtreecommitdiff
path: root/Userland/Services/NotificationServer
diff options
context:
space:
mode:
authorNick Johnson <sylvyrfysh@gmail.com>2021-03-11 15:43:01 -0600
committerAndreas Kling <kling@serenityos.org>2021-03-22 12:46:16 +0100
commit8f6894d25077d82f01cbea310467e4d5eb56d311 (patch)
tree3906fb4adfb6f303fc567062717c6f2275130e5f /Userland/Services/NotificationServer
parent147a2c4ca26e88c76557b59cb1e1dc6486d188fd (diff)
downloadserenity-8f6894d25077d82f01cbea310467e4d5eb56d311.zip
LibGUI+Notification: Add mutable notifications
This commit puts all of the remaining pieces in place. This adds a mechanism to update the text, title, and icon of an image. If an image is not provided, the default ladybug will be shown.
Diffstat (limited to 'Userland/Services/NotificationServer')
-rw-r--r--Userland/Services/NotificationServer/ClientConnection.cpp25
-rw-r--r--Userland/Services/NotificationServer/ClientConnection.h3
-rw-r--r--Userland/Services/NotificationServer/NotificationServer.ipc6
-rw-r--r--Userland/Services/NotificationServer/NotificationWindow.cpp20
-rw-r--r--Userland/Services/NotificationServer/NotificationWindow.h4
5 files changed, 54 insertions, 4 deletions
diff --git a/Userland/Services/NotificationServer/ClientConnection.cpp b/Userland/Services/NotificationServer/ClientConnection.cpp
index b2f52c31e3..c300fba730 100644
--- a/Userland/Services/NotificationServer/ClientConnection.cpp
+++ b/Userland/Services/NotificationServer/ClientConnection.cpp
@@ -69,4 +69,29 @@ OwnPtr<Messages::NotificationServer::CloseNotificationResponse> ClientConnection
return make<Messages::NotificationServer::CloseNotificationResponse>();
}
+OwnPtr<Messages::NotificationServer::UpdateNotificationIconResponse> ClientConnection::handle(const Messages::NotificationServer::UpdateNotificationIcon& message)
+{
+ auto window = NotificationWindow::get_window_by_id(client_id());
+ if (window) {
+ window->set_image(message.icon());
+ }
+ return make<Messages::NotificationServer::UpdateNotificationIconResponse>(window);
+}
+
+OwnPtr<Messages::NotificationServer::UpdateNotificationTextResponse> ClientConnection::handle(const Messages::NotificationServer::UpdateNotificationText& message)
+{
+ auto window = NotificationWindow::get_window_by_id(client_id());
+ if (window) {
+ window->set_text(message.text());
+ window->set_title(message.title());
+ }
+ return make<Messages::NotificationServer::UpdateNotificationTextResponse>(window);
+}
+
+OwnPtr<Messages::NotificationServer::IsShowingResponse> ClientConnection::handle(const Messages::NotificationServer::IsShowing&)
+{
+ auto window = NotificationWindow::get_window_by_id(client_id());
+ return make<Messages::NotificationServer::IsShowingResponse>(window);
+}
+
}
diff --git a/Userland/Services/NotificationServer/ClientConnection.h b/Userland/Services/NotificationServer/ClientConnection.h
index c32bd415b6..82c5e1f3b7 100644
--- a/Userland/Services/NotificationServer/ClientConnection.h
+++ b/Userland/Services/NotificationServer/ClientConnection.h
@@ -46,6 +46,9 @@ private:
virtual OwnPtr<Messages::NotificationServer::GreetResponse> handle(const Messages::NotificationServer::Greet&) override;
virtual OwnPtr<Messages::NotificationServer::ShowNotificationResponse> handle(const Messages::NotificationServer::ShowNotification&) override;
virtual OwnPtr<Messages::NotificationServer::CloseNotificationResponse> handle(const Messages::NotificationServer::CloseNotification& message) override;
+ virtual OwnPtr<Messages::NotificationServer::UpdateNotificationIconResponse> handle(const Messages::NotificationServer::UpdateNotificationIcon& message) override;
+ virtual OwnPtr<Messages::NotificationServer::UpdateNotificationTextResponse> handle(const Messages::NotificationServer::UpdateNotificationText& message) override;
+ virtual OwnPtr<Messages::NotificationServer::IsShowingResponse> handle(const Messages::NotificationServer::IsShowing& message) override;
};
}
diff --git a/Userland/Services/NotificationServer/NotificationServer.ipc b/Userland/Services/NotificationServer/NotificationServer.ipc
index bfc02879fb..830e9d6312 100644
--- a/Userland/Services/NotificationServer/NotificationServer.ipc
+++ b/Userland/Services/NotificationServer/NotificationServer.ipc
@@ -5,5 +5,11 @@ endpoint NotificationServer = 95
ShowNotification([UTF8] String text, [UTF8] String title, Gfx::ShareableBitmap icon) => ()
+ UpdateNotificationText([UTF8] String text, [UTF8] String title) => (bool still_showing)
+
+ UpdateNotificationIcon(Gfx::ShareableBitmap icon) => (bool still_showing)
+
+ IsShowing() => (bool still_showing)
+
CloseNotification() => ()
}
diff --git a/Userland/Services/NotificationServer/NotificationWindow.cpp b/Userland/Services/NotificationServer/NotificationWindow.cpp
index 348c22e847..f5df283cc4 100644
--- a/Userland/Services/NotificationServer/NotificationWindow.cpp
+++ b/Userland/Services/NotificationServer/NotificationWindow.cpp
@@ -28,20 +28,17 @@
#include <AK/HashMap.h>
#include <AK/Vector.h>
#include <LibGUI/BoxLayout.h>
-#include <LibGUI/Button.h>
#include <LibGUI/Desktop.h>
-#include <LibGUI/Icon.h>
#include <LibGUI/Label.h>
#include <LibGUI/Widget.h>
#include <LibGfx/Bitmap.h>
-#include <LibGfx/Font.h>
#include <LibGfx/FontDatabase.h>
#include <LibGfx/ShareableBitmap.h>
namespace NotificationServer {
static HashMap<u32, RefPtr<NotificationWindow>> s_windows;
-static const Gfx::Bitmap* default_image = GUI::Icon::default_icon("ladybug").bitmap_for_size(16);
+static const Gfx::Bitmap* default_image = Gfx::Bitmap::load_from_file("/res/icons/32x32/ladybug.png");
void update_notification_window_locations()
{
@@ -133,4 +130,19 @@ RefPtr<NotificationWindow> NotificationWindow::get_window_by_id(i32 id)
return window.value_or(nullptr);
}
+void NotificationWindow::set_text(const String& value)
+{
+ m_text_label->set_text(value);
+}
+
+void NotificationWindow::set_title(const String& value)
+{
+ m_title_label->set_text(value);
+}
+
+void NotificationWindow::set_image(const Gfx::ShareableBitmap& image)
+{
+ m_image->set_bitmap(image.is_valid() ? image.bitmap() : default_image);
+}
+
}
diff --git a/Userland/Services/NotificationServer/NotificationWindow.h b/Userland/Services/NotificationServer/NotificationWindow.h
index 206e57d085..a02894e2cb 100644
--- a/Userland/Services/NotificationServer/NotificationWindow.h
+++ b/Userland/Services/NotificationServer/NotificationWindow.h
@@ -40,6 +40,10 @@ public:
virtual ~NotificationWindow() override;
void set_original_rect(Gfx::IntRect original_rect) { m_original_rect = original_rect; };
+ void set_text(const String&);
+ void set_title(const String&);
+ void set_image(const Gfx::ShareableBitmap&);
+
static RefPtr<NotificationWindow> get_window_by_id(i32 id);
private: