Ticket #11922: 0011-VolumeControl-and-Media-preferences-add-support-for-.patch
File 0011-VolumeControl-and-Media-preferences-add-support-for-.patch, 6.4 KB (added by , 9 years ago) |
---|
-
src/bin/desklink/VolumeControl.cpp
From 87d773ab6154f9da24d021c09568b8ef709773f7 Mon Sep 17 00:00:00 2001 From: Dario Casalinuovo <b.vitruvio@gmail.com> Date: Mon, 23 Mar 2015 12:48:50 +0100 Subject: [PATCH 11/13] VolumeControl and Media preferences: add support for the new notification mechanism provided by BMediaRoster. --- src/bin/desklink/VolumeControl.cpp | 57 +++++++++++------------------------ src/preferences/media/Media.cpp | 9 ------ src/preferences/media/MediaWindow.cpp | 32 ++++++-------------- 3 files changed, 27 insertions(+), 71 deletions(-) diff --git a/src/bin/desklink/VolumeControl.cpp b/src/bin/desklink/VolumeControl.cpp index 8983830..aa77632 100644
a b 19 19 #include <Catalog.h> 20 20 #include <ControlLook.h> 21 21 #include <Dragger.h> 22 #include <MediaRoster.h> 22 23 #include <MessageRunner.h> 23 #include <Roster.h>24 24 25 25 #include <AppMisc.h> 26 26 … … 35 35 #define B_TRANSLATION_CONTEXT "VolumeControl" 36 36 37 37 38 static const char* kMediaServerSignature = "application/x-vnd.Be.media-server";39 static const char* kAddOnServerSignature = "application/x-vnd.Be.addon-host";40 38 41 39 static const uint32 kMsgReconnectVolume = 'rcms'; 42 40 … … VolumeControl::AttachedToWindow() 130 128 else 131 129 SetEventMask(B_POINTER_EVENTS, B_NO_POINTER_HISTORY); 132 130 133 be_roster->StartWatching(this, B_REQUEST_LAUNCHED | B_REQUEST_QUIT); 131 BMediaRoster* roster = BMediaRoster::Roster(); 132 roster->StartWatching(BMessenger(this), B_MEDIA_SERVER_STARTED); 133 roster->StartWatching(BMessenger(this), B_MEDIA_SERVER_QUIT); 134 134 135 135 _ConnectVolume(); 136 136 … … VolumeControl::DetachedFromWindow() 149 149 { 150 150 _DisconnectVolume(); 151 151 152 be_roster->StopWatching(this); 152 BMediaRoster* roster = BMediaRoster::CurrentRoster(); 153 roster->StopWatching(BMessenger(this), B_MEDIA_SERVER_STARTED); 154 roster->StopWatching(BMessenger(this), B_MEDIA_SERVER_QUIT); 153 155 } 154 156 155 157 … … VolumeControl::MessageReceived(BMessage* msg) 293 295 SetValue((int32)fMixerControl->Volume()); 294 296 break; 295 297 296 case B_SOME_APP_LAUNCHED: 297 case B_SOME_APP_QUIT: 298 case B_MEDIA_SERVER_STARTED: 298 299 { 299 const char* signature; 300 if (msg->FindString("be:signature", &signature) != B_OK) 301 break; 302 303 bool isMediaServer = !strcmp(signature, kMediaServerSignature); 304 bool isAddOnServer = !strcmp(signature, kAddOnServerSignature); 305 if (isMediaServer) 306 fMediaServerRunning = msg->what == B_SOME_APP_LAUNCHED; 307 if (isAddOnServer) 308 fAddOnServerRunning = msg->what == B_SOME_APP_LAUNCHED; 309 310 if (isMediaServer || isAddOnServer) { 311 if (!fMediaServerRunning && !fAddOnServerRunning) { 312 // No media server around 313 SetLabel(B_TRANSLATE("No media server running")); 314 SetEnabled(false); 315 } else if (fMediaServerRunning && fAddOnServerRunning) { 316 // HACK! 317 // quit our now invalid instance of the media roster 318 // so that before new nodes are created, 319 // we get a new roster 320 BMediaRoster* roster = BMediaRoster::CurrentRoster(); 321 if (roster != NULL) { 322 roster->Lock(); 323 roster->Quit(); 324 } 325 326 BMessage reconnect(kMsgReconnectVolume); 327 BMessageRunner::StartSending(this, &reconnect, 1000000LL, 1); 328 fConnectRetries = 3; 329 } 330 } 300 BMessage reconnect(kMsgReconnectVolume); 301 BMessageRunner::StartSending(this, &reconnect, 1000000LL, 1); 302 fConnectRetries = 3; 303 break; 304 } 305 case B_MEDIA_SERVER_QUIT: 306 { 307 // No media server around 308 SetLabel(B_TRANSLATE("No media server running")); 309 SetEnabled(false); 331 310 break; 332 311 } 333 312 -
src/preferences/media/Media.cpp
diff --git a/src/preferences/media/Media.cpp b/src/preferences/media/Media.cpp index fae66ac..80284bf 100644
a b 14 14 15 15 #include <Catalog.h> 16 16 #include <Locale.h> 17 #include <Roster.h>18 17 #include <StorageKit.h> 19 18 #include <String.h> 20 19 … … Media::Media() 59 58 60 59 MediaListItem::SetIcons(&fIcons); 61 60 fWindow = new MediaWindow(rect); 62 63 be_roster->StartWatching(BMessenger(this));64 61 } 65 62 66 63 67 64 Media::~Media() 68 65 { 69 be_roster->StopWatching(BMessenger(this));70 66 } 71 67 72 68 … … void 83 79 Media::MessageReceived(BMessage* message) 84 80 { 85 81 switch (message->what) { 86 case B_SOME_APP_LAUNCHED:87 case B_SOME_APP_QUIT:88 fWindow->PostMessage(message);89 break;90 91 82 default: 92 83 BApplication::MessageReceived(message); 93 84 break; -
src/preferences/media/MediaWindow.cpp
diff --git a/src/preferences/media/MediaWindow.cpp b/src/preferences/media/MediaWindow.cpp index a2d031d..6565bca 100644
a b MediaWindow::MediaWindow(BRect frame) 167 167 fInitCheck(B_OK) 168 168 { 169 169 _InitWindow(); 170 171 BMediaRoster* roster = BMediaRoster::Roster(); 172 roster->StartWatching(BMessenger(this, this), B_MEDIA_SERVER_STARTED); 170 173 } 171 174 172 175 … … MediaWindow::~MediaWindow() 188 191 if (file.InitCheck() == B_OK) 189 192 file.Write(buffer, strlen(buffer)); 190 193 } 194 BMediaRoster* roster = BMediaRoster::CurrentRoster(); 195 roster->StopWatching(BMessenger(this, this), B_MEDIA_SERVER_STARTED); 191 196 } 192 197 193 198 … … MediaWindow::MessageReceived(BMessage* message) 313 318 item->AlterWindow(this); 314 319 break; 315 320 } 316 case B_ SOME_APP_LAUNCHED:321 case B_MEDIA_SERVER_STARTED: 317 322 { 318 323 PRINT_OBJECT(*message); 319 324 320 BString mimeSig; 321 if (message->FindString("be:signature", &mimeSig) == B_OK 322 && (mimeSig == "application/x-vnd.Be.addon-host" 323 || mimeSig == "application/x-vnd.Be.media-server")) { 324 _Notify(0.75, B_TRANSLATE("Starting media server" 325 B_UTF8_ELLIPSIS)); 326 } 327 break; 328 } 329 case B_SOME_APP_QUIT: 330 { 331 PRINT_OBJECT(*message); 332 BString mimeSig; 333 if (message->FindString("be:signature", &mimeSig) == B_OK) { 334 if (mimeSig == "application/x-vnd.Be.addon-host" 335 || mimeSig == "application/x-vnd.Be.media-server") { 336 BMediaRoster* roster = BMediaRoster::CurrentRoster(); 337 if (roster != NULL && roster->Lock()) 338 roster->Quit(); 339 } 340 } 325 _Notify(0.75, B_TRANSLATE("Starting media server" 326 B_UTF8_ELLIPSIS)); 341 327 break; 342 328 } 343 329 default: … … status_t 633 619 MediaWindow::_RestartMediaServices(void* data) 634 620 { 635 621 MediaWindow* window = (MediaWindow*)data; 636 622 637 623 shutdown_media_server(B_INFINITE_TIMEOUT, MediaWindow::_UpdateProgress, 638 624 data); 639 625