void ServerAgent::DCCGetDialog ( BString nick, BString file, BString size, BString ip, BString port) { BMessage msg (M_DCC_ACCEPT), reply; msg.AddString ("vision:nick", nick.String()); msg.AddString ("vision:file", file.String()); msg.AddString ("vision:size", size.String()); msg.AddString ("vision:ip", ip.String()); msg.AddString ("vision:port", port.String()); BFilePanel *panel; BString text; text << nick << ": " << file << " (" << size << " bytes)"; panel = new BFilePanel ( B_SAVE_PANEL, &fSMsgr, 0, 0, false, &msg); panel->SetButtonLabel (B_DEFAULT_BUTTON, "Accept"); panel->SetButtonLabel (B_CANCEL_BUTTON, "Refuse"); panel->SetSaveText (file.String()); BWindow *panelWindow (panel->Window()); if (panelWindow->Lock()) { panelWindow->SetTitle (text.String()); panelWindow->SetFlags (panelWindow->Flags() | B_AVOID_FOCUS); panelWindow->AddFilter (new DCCFileFilter (panel, msg)); if (vision_app->GetBool ("dccAutoAccept")) { BDirectory path (vision_app->GetString ("dccDefPath")); if (path.InitCheck() == B_OK) panel->SetPanelDirectory(&path); } if (vision_app->GetBool ("dccAutoAccept")) { panelWindow->Hide(); BButton *button (dynamic_cast<BButton *>(panel->Window()->FindView ("default button"))); if (button) button->Invoke(); } panelWindow->Unlock(); panel->Show(); // hack trick to ensure that the file panel doesn't take over the keyboard focus // when it pops up panelWindow->Lock(); panelWindow->SetFlags (panelWindow->Flags() & ~B_AVOID_FOCUS); panelWindow->Unlock(); } }