From 27c555cb7bae26866cdb31f45dd38cea843c3b7d Mon Sep 17 00:00:00 2001 From: Markus Himmel Date: Tue, 30 Dec 2014 18:14:49 +0000 Subject: [PATCH] Fix #8881: Add color drops to Backgrounds - The Backgrounds preferences app will now accept color drops. - The Backgrounds app will update if a color drop to the desktop has changed its color due to a direct color drop Signed-off-by: Jerome Duval --- src/kits/tracker/DeskWindow.cpp | 9 +++++++++ src/preferences/backgrounds/Backgrounds.cpp | 16 ++++++++++++++++ src/preferences/backgrounds/BackgroundsView.cpp | 13 +++++++++++++ 3 files changed, 38 insertions(+) diff --git a/src/kits/tracker/DeskWindow.cpp b/src/kits/tracker/DeskWindow.cpp index 94cb0b7091..a0991c162b 100644 --- a/src/kits/tracker/DeskWindow.cpp +++ b/src/kits/tracker/DeskWindow.cpp @@ -39,6 +39,7 @@ All rights reserved. #include #include #include +#include #include #include #include @@ -641,6 +642,14 @@ BDeskWindow::MessageReceived(BMessage* message) BScreen(this).SetDesktopColor(*color); fPoseView->SetViewColor(*color); fPoseView->SetLowColor(*color); + + // Notify the backgrounds app that the background changed + status_t initStatus; + BMessenger messenger("application/x-vnd.Haiku-Backgrounds", -1, + &initStatus); + if (initStatus == B_OK) + messenger.SendMessage(message); + return; } } diff --git a/src/preferences/backgrounds/Backgrounds.cpp b/src/preferences/backgrounds/Backgrounds.cpp index 4907bd1719..f54837432c 100644 --- a/src/preferences/backgrounds/Backgrounds.cpp +++ b/src/preferences/backgrounds/Backgrounds.cpp @@ -30,6 +30,7 @@ public: BackgroundsWindow(); void RefsReceived(BMessage* message); + void MessageReceived(BMessage* message); protected: virtual bool QuitRequested(); @@ -67,6 +68,14 @@ BackgroundsApplication::BackgroundsApplication() void BackgroundsApplication::MessageReceived(BMessage* message) { + const void *data; + ssize_t size; + if (message->WasDropped() && message->FindData("RGBColor", B_RGB_COLOR_TYPE, + &data, &size) == B_OK) { + // This is the desktop telling us that it was changed by a color drop + BMessenger(fWindow).SendMessage(message); + return; + } switch (message->what) { case B_SILENT_RELAUNCH: fWindow->Activate(); @@ -116,6 +125,13 @@ BackgroundsWindow::RefsReceived(BMessage* message) } +void +BackgroundsWindow::MessageReceived(BMessage* message) +{ + BMessenger(fBackgroundsView).SendMessage(message); +} + + bool BackgroundsWindow::QuitRequested() { diff --git a/src/preferences/backgrounds/BackgroundsView.cpp b/src/preferences/backgrounds/BackgroundsView.cpp index 3c1c1f22d8..f7d882769f 100644 --- a/src/preferences/backgrounds/BackgroundsView.cpp +++ b/src/preferences/backgrounds/BackgroundsView.cpp @@ -293,6 +293,19 @@ BackgroundsView::AllAttached() void BackgroundsView::MessageReceived(BMessage* message) { + // Color drop + if (message->WasDropped()) { + rgb_color *clr; + ssize_t out_size; + if (message->FindData("RGBColor", B_RGB_COLOR_TYPE, + (const void **)&clr, &out_size) == B_OK) { + fPicker->SetValue(*clr); + _UpdatePreview(); + _UpdateButtons(); + return; + } + } + switch (message->what) { case B_SIMPLE_DATA: case B_REFS_RECEIVED: