void NotificationView::MouseDown(BPoint point) { int32 buttons; Window()->CurrentMessage()->FindInt32("buttons", &buttons); switch (buttons) { case B_PRIMARY_MOUSE_BUTTON: { BRect closeRect = Bounds().InsetByCopy(2,2); closeRect.left = closeRect.right - kCloseSize; closeRect.bottom = closeRect.top + kCloseSize; if (!closeRect.Contains(point)) { entry_ref launchRef; BString launchString; BMessage argMsg(B_ARGV_RECEIVED); BMessage refMsg(B_REFS_RECEIVED); entry_ref appRef; bool useArgv = false; BList messages; entry_ref ref; if (fDetails->FindString("onClickApp", &launchString) == B_OK) if (be_roster->FindApp(launchString.String(), &appRef) == B_OK) useArgv = true; if (fDetails->FindRef("onClickFile", &launchRef) == B_OK) { if (be_roster->FindApp(&launchRef, &appRef) == B_OK) useArgv = true; } if (fDetails->FindRef("onClickRef", &ref) == B_OK) { for (int32 i = 0; fDetails->FindRef("onClickRef", i, &ref) == B_OK; i++) refMsg.AddRef("refs", &ref); messages.AddItem((void*)&refMsg); } if (useArgv) { type_code type; int32 argc = 0; BString arg; BPath p(&appRef); argMsg.AddString("argv", p.Path()); fDetails->GetInfo("onClickArgv", &type, &argc); argMsg.AddInt32("argc", argc + 1); for (int32 i = 0; fDetails->FindString("onClickArgv", i, &arg) == B_OK; i++) argMsg.AddString("argv", arg); messages.AddItem((void*)&argMsg); } BMessage tmp; for (int32 i = 0; fDetails->FindMessage("onClickMsg", i, &tmp) == B_OK; i++) messages.AddItem((void*)&tmp); if (fDetails->FindString("onClickApp", &launchString) == B_OK) be_roster->Launch(launchString.String(), &messages); else be_roster->Launch(&launchRef, &messages); } // Remove the info view after a click BMessage remove_msg(kRemoveView); remove_msg.AddPointer("view", this); BMessenger msgr(Parent()); msgr.SendMessage(&remove_msg); break; } } }
void NotificationView::MouseDown(BPoint point) { int32 buttons; Window()->CurrentMessage()->FindInt32("buttons", &buttons); switch (buttons) { case B_PRIMARY_MOUSE_BUTTON: { BRect closeRect = Bounds().InsetByCopy(2,2); closeRect.left = closeRect.right - kCloseSize; closeRect.bottom = closeRect.top + kCloseSize; if (!closeRect.Contains(point)) { entry_ref launchRef; BString launchString; BMessage argMsg(B_ARGV_RECEIVED); BMessage refMsg(B_REFS_RECEIVED); entry_ref appRef; bool useArgv = false; BList messages; entry_ref ref; if (fNotification->OnClickApp() != NULL && be_roster->FindApp(fNotification->OnClickApp(), &appRef) == B_OK) { useArgv = true; } if (fNotification->OnClickFile() != NULL && be_roster->FindApp( (entry_ref*)fNotification->OnClickFile(), &appRef) == B_OK) { useArgv = true; } for (int32 i = 0; i < fNotification->CountOnClickRefs(); i++) refMsg.AddRef("refs", fNotification->OnClickRefAt(i)); messages.AddItem((void*)&refMsg); if (useArgv) { int32 argc = fNotification->CountOnClickArgs() + 1; BString arg; BPath p(&appRef); argMsg.AddString("argv", p.Path()); argMsg.AddInt32("argc", argc); for (int32 i = 0; i < argc - 1; i++) { argMsg.AddString("argv", fNotification->OnClickArgAt(i)); } messages.AddItem((void*)&argMsg); } if (fNotification->OnClickApp() != NULL) be_roster->Launch(fNotification->OnClickApp(), &messages); else be_roster->Launch(fNotification->OnClickFile(), &messages); } else { fCloseClicked = true; } // Remove the info view after a click BMessage remove_msg(kRemoveView); remove_msg.AddPointer("view", this); BMessenger msgr(Parent()); msgr.SendMessage(&remove_msg); break; } } }