- fix for copying selection to clipboard

- fix some leaks
- prepare for about box (use about html from rsrc: but it's broken yet)
- if more than 1 refs received at the same time, open the extra ones in a new window.

svn path=/trunk/netsurf/; revision=5511
This commit is contained in:
François Revel 2008-10-09 01:22:14 +00:00
parent ea205ecf23
commit 8710d3a814
5 changed files with 76 additions and 32 deletions

View File

@ -173,6 +173,13 @@ void
NSBrowserApplication::ArgvReceived(int32 argc, char **argv)
{
CALLED();
NSBrowserWindow *win = nsbeos_find_last_window();
if (!win) {
return;
}
win->Unlock();
BMessage *message = DetachCurrentMessage();
nsbeos_pipe_message_top(message, win, win->Scaffolding());
}
@ -191,6 +198,13 @@ NSBrowserApplication::RefsReceived(BMessage *message)
}
void
NSBrowserApplication::AboutRequested()
{
nsbeos_pipe_message(new BMessage(B_ABOUT_REQUESTED), NULL, NULL);
}
bool
NSBrowserApplication::QuitRequested()
{

View File

@ -40,6 +40,7 @@ virtual void MessageReceived(BMessage *message);
virtual void RefsReceived(BMessage *message);
virtual void ArgvReceived(int32 argc, char **argv);
virtual void AboutRequested();
virtual bool QuitRequested();
};

View File

@ -35,7 +35,8 @@ resource(202, "adblock.css") #'data' import "res/adblock.css";
resource(203, "ca-bundle.txt") #'data' import "res/ca-bundle.txt";
resource(204, "messages") #'data' import "res/messages";
resource(205, "Aliases") #'data' import "res/Aliases";
/* resource(206, "netsurf.xpm") #'data' import "res/netsurf.xpm"; */
/* resource(206, "about.en.html") #'data' import "res/about.en.html"; */
/* resource(210, "netsurf.xpm") #'data' import "res/netsurf.xpm"; */
/* throbber */
resource(400, "throbber0.png") #'data' import "res/throbber/throbber0.png";

View File

@ -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;
for (i = 0; message->FindRef("refs", i, &ref) >= B_OK; i++) {
BString url("file://");
BPath path(&ref);
if (path.InitCheck() < 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)
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)
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);
}
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();
browser_window_go(bw, url.String(), 0, true);
break;
}
case B_COPY:

View File

@ -140,6 +140,7 @@ NSBrowserFrameView::MessageReceived(BMessage *message)
{
switch (message->what) {
case B_SIMPLE_DATA:
case B_ARGV_RECEIVED:
case B_REFS_RECEIVED:
case B_COPY:
case B_CUT:
@ -650,10 +651,12 @@ void nsbeos_dispatch_event(BMessage *message)
if (gui && gui != z) {
LOG(("discarding event for destroyed gui_window"));
delete message;
return;
}
if (scaffold && (!y || scaffold != y->scaffold)) {
LOG(("discarding event for destroyed scaffolding"));
delete message;
return;
}
@ -671,6 +674,16 @@ void nsbeos_dispatch_event(BMessage *message)
// from the BApplication
netsurf_quit = true;
break;
case B_ABOUT_REQUESTED:
{
//BAlert *alert;
//XXX: i18n-ize
/* XXX: doesn't work yet! bug in rsrc:/
BString url("rsrc:/about.en.html,text/html");
browser_window_create(url.String(), NULL, NULL, true, false);
*/
break;
}
case _UPDATE_:
if (gui && view)
nsbeos_window_expose_event(view, gui, message);
@ -1765,7 +1778,9 @@ bool gui_empty_clipboard(void)
bool gui_add_to_clipboard(const char *text, size_t length, bool space)
{
current_selection << text;
BString s;
s.SetTo(text, length);
current_selection << s;
if (space)
current_selection << " ";
return true;