diff options
author | Nick Johnson <sylvyrfysh@gmail.com> | 2021-03-11 15:43:01 -0600 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2021-03-22 12:46:16 +0100 |
commit | 8f6894d25077d82f01cbea310467e4d5eb56d311 (patch) | |
tree | 3906fb4adfb6f303fc567062717c6f2275130e5f /Userland/Services/NotificationServer | |
parent | 147a2c4ca26e88c76557b59cb1e1dc6486d188fd (diff) | |
download | serenity-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')
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: |