diff options
Diffstat (limited to 'beos/beos_scaffolding.cpp')
-rw-r--r-- | beos/beos_scaffolding.cpp | 73 |
1 files changed, 43 insertions, 30 deletions
diff --git a/beos/beos_scaffolding.cpp b/beos/beos_scaffolding.cpp index 1e132e15f..ad1d873cb 100644 --- a/beos/beos_scaffolding.cpp +++ b/beos/beos_scaffolding.cpp @@ -327,6 +327,7 @@ void NSBrowserWindow::MessageReceived(BMessage *message) { switch (message->what) { + case B_ARGV_RECEIVED: case B_REFS_RECEIVED: DetachCurrentMessage(); nsbeos_pipe_message_top(message, this, fScaffolding); @@ -393,41 +394,53 @@ void nsbeos_scaffolding_dispatch_event(nsbeos_scaffolding *scaffold, BMessage *m } case B_REFS_RECEIVED: { + int32 i; entry_ref ref; - if (message->FindRef("refs", &ref) < B_OK) - break; - - BString url("file://"); - BPath path(&ref); - if (path.InitCheck() < B_OK) - break; - - BNode node(path.Path()); - if (node.InitCheck() < B_OK) - break; - if (node.IsSymLink()) { - // dereference the symlink - BEntry entry(path.Path(), true); - if (entry.InitCheck() < B_OK) - break; - if (entry.GetPath(&path) < B_OK) - break; - if (node.SetTo(path.Path()) < B_OK) + for (i = 0; message->FindRef("refs", i, &ref) >= B_OK; i++) { + BString url("file://"); + BPath path(&ref); + if (path.InitCheck() < B_OK) break; - } - attr_info ai; - if (node.GetAttrInfo("META:url", &ai) >= B_OK) { - char data[(size_t)ai.size + 1]; - memset(data, 0, (size_t)ai.size + 1); - if (node.ReadAttr("META:url", B_STRING_TYPE, 0LL, data, (size_t)ai.size) < 4) + BNode node(path.Path()); + if (node.InitCheck() < B_OK) break; - url = data; - } else - url << path.Path(); - - browser_window_go(bw, url.String(), 0, true); + if (node.IsSymLink()) { + // dereference the symlink + BEntry entry(path.Path(), true); + if (entry.InitCheck() < B_OK) + break; + if (entry.GetPath(&path) < B_OK) + break; + if (node.SetTo(path.Path()) < B_OK) + break; + } + + attr_info ai; + if (node.GetAttrInfo("META:url", &ai) >= B_OK) { + char data[(size_t)ai.size + 1]; + memset(data, 0, (size_t)ai.size + 1); + if (node.ReadAttr("META:url", B_STRING_TYPE, 0LL, data, (size_t)ai.size) < 4) + break; + url = data; + } else + url << path.Path(); + + if (/*message->WasDropped() &&*/ i == 0) + browser_window_go(bw, url.String(), 0, true); + else + browser_window_create(url.String(), bw, NULL, false, false); + } + break; + } + case B_ARGV_RECEIVED: + { + int32 i; + BString url; + for (i = 1; message->FindString("argv", i, &url) >= B_OK; i++) { + browser_window_create(url.String(), bw, NULL, false, false); + } break; } case B_COPY: |