Changed the nsIXULBrowserWindow to distinguish between JS status and it's own status. Fixed bugs where pages that set the window.status wouldn't actually end up showing up correctly. Now status has a priority scheme where different status versus links etc take priority. Use the new interfaces on nsPIDOMWindow to get to the properties hanging off the js window object instead of the old separate list.

This commit is contained in:
tbogard%aol.net 2000-03-31 03:36:26 +00:00
parent 04d42a3503
commit 249e773aae
5 changed files with 105 additions and 35 deletions

View File

@ -31,8 +31,24 @@
[scriptable, uuid(46B4015C-0121-11d4-9877-00C04FA0D27A)]
interface nsIXULBrowserWindow : nsISupports
{
void setStatus(in wstring status);
void setDefaultStatus(in wstring status);
/*
Sets the status according to JS' version of status.
*/
void setJSStatus(in wstring status);
/*
Sets the default status according to JS' version of default status.
*/
void setJSDefaultStatus(in wstring status);
/*
Tells the object implementing this function what link we are currently over.
*/
void setOverLink(in wstring link);
/*
Tells the browser window what to use for the default status text.
*/
void setDefaultStatus(in wstring status);
};

View File

@ -36,6 +36,7 @@
#include "nsIPrompt.h"
#include "nsIWindowMediator.h"
#include "nsIXULBrowserWindow.h"
#include "nsPIDOMWindow.h"
// CIDs
static NS_DEFINE_CID(kWindowMediatorCID, NS_WINDOWMEDIATOR_CID);
@ -196,15 +197,17 @@ NS_IMETHODIMP nsContentTreeOwner::SetJSStatus(const PRUnichar* aStatus)
{
nsCOMPtr<nsIDOMWindow> domWindow;
mXULWindow->GetWindowDOMWindow(getter_AddRefs(domWindow));
if(!domWindow)
nsCOMPtr<nsPIDOMWindow> piDOMWindow(do_QueryInterface(domWindow));
if(!piDOMWindow)
return NS_OK;
nsCOMPtr<nsISupports> xpConnectObj;
domWindow->GetXPConnectObject("XULBrowserWindow", getter_AddRefs(xpConnectObj));
nsCOMPtr<nsIXULBrowserWindow> xulBrowserWindow(do_QueryInterface(xpConnectObj));
nsAutoString xulBrowserWinId("XULBrowserWindow");
piDOMWindow->GetXPConnectObject(xulBrowserWinId.GetUnicode(), getter_AddRefs(xpConnectObj));
nsCOMPtr<nsIXULBrowserWindow> xulBrowserWindow(do_QueryInterface(xpConnectObj));
if(xulBrowserWindow)
xulBrowserWindow->SetStatus(aStatus);
xulBrowserWindow->SetJSStatus(aStatus);
return NS_OK;
}
@ -212,15 +215,17 @@ NS_IMETHODIMP nsContentTreeOwner::SetJSDefaultStatus(const PRUnichar* aStatus)
{
nsCOMPtr<nsIDOMWindow> domWindow;
mXULWindow->GetWindowDOMWindow(getter_AddRefs(domWindow));
if(!domWindow)
nsCOMPtr<nsPIDOMWindow> piDOMWindow(do_QueryInterface(domWindow));
if(!piDOMWindow)
return NS_OK;
nsCOMPtr<nsISupports> xpConnectObj;
domWindow->GetXPConnectObject("XULBrowserWindow", getter_AddRefs(xpConnectObj));
nsAutoString xulBrowserWinId("XULBrowserWindow");
piDOMWindow->GetXPConnectObject(xulBrowserWinId.GetUnicode(), getter_AddRefs(xpConnectObj));
nsCOMPtr<nsIXULBrowserWindow> xulBrowserWindow(do_QueryInterface(xpConnectObj));
if(xulBrowserWindow)
xulBrowserWindow->SetDefaultStatus(aStatus);
xulBrowserWindow->SetJSDefaultStatus(aStatus);
return NS_OK;
}
@ -228,11 +233,13 @@ NS_IMETHODIMP nsContentTreeOwner::SetOverLink(const PRUnichar* aLink)
{
nsCOMPtr<nsIDOMWindow> domWindow;
mXULWindow->GetWindowDOMWindow(getter_AddRefs(domWindow));
if(!domWindow)
nsCOMPtr<nsPIDOMWindow> piDOMWindow(do_QueryInterface(domWindow));
if(!piDOMWindow)
return NS_OK;
nsCOMPtr<nsISupports> xpConnectObj;
domWindow->GetXPConnectObject("XULBrowserWindow", getter_AddRefs(xpConnectObj));
nsAutoString xulBrowserWinId("XULBrowserWindow");
piDOMWindow->GetXPConnectObject(xulBrowserWinId.GetUnicode(), getter_AddRefs(xpConnectObj));
nsCOMPtr<nsIXULBrowserWindow> xulBrowserWindow(do_QueryInterface(xpConnectObj));
if(xulBrowserWindow)

View File

@ -31,8 +31,24 @@
[scriptable, uuid(46B4015C-0121-11d4-9877-00C04FA0D27A)]
interface nsIXULBrowserWindow : nsISupports
{
void setStatus(in wstring status);
void setDefaultStatus(in wstring status);
/*
Sets the status according to JS' version of status.
*/
void setJSStatus(in wstring status);
/*
Sets the default status according to JS' version of default status.
*/
void setJSDefaultStatus(in wstring status);
/*
Tells the object implementing this function what link we are currently over.
*/
void setOverLink(in wstring link);
/*
Tells the browser window what to use for the default status text.
*/
void setDefaultStatus(in wstring status);
};

View File

@ -40,10 +40,12 @@ catch (ex) {
}
var appCore = null;
var defaultStatus = bundle.GetStringFromName( "defaultStatus" );
var defaultStatus = bundle.GetStringFromName( "defaultStatus" );
var jsStatus = null;
var jsDefaultStatus = null;
var overLink = null;
var explicitURL = false;
var statusTextFld = null;
var xulBrowserWin = null;
function UpdateHistory(event)
@ -149,6 +151,23 @@ function createBrowserInstance()
}
}
function UpdateStatusField()
{
var text = defaultStatus;
if(jsStatus)
text = jsStatus;
else if(overLink)
text = overLink;
else if(jsDefaultStatus)
text = jsDefaultStatus;
if(!statusTextFld)
statusTextFld = document.getElementById("statusText");
statusTextFld.setAttribute("value", text);
}
function nsXULBrowserWindow()
{
}
@ -161,35 +180,43 @@ nsXULBrowserWindow.prototype =
return this;
throw Components.results.NS_NOINTERFACE;
},
setStatus : function(status)
setJSStatus : function(status)
{
if(status == "")
status = defaultStatus;
if(!statusTextFld)
statusTextFld = document.getElementById("statusText");
statusTextFld.setAttribute("value", status);
jsStatus = null;
else
jsStatus = status;
UpdateStatusField();
},
setJSDefaultStatus : function(status)
{
if(status == "")
jsDefaultStatus = null;
else
jsDefaultStatus = status;
UpdateStatusField();
},
setDefaultStatus : function(status)
{
//XXX Should do something here.
if(status == "")
defaultStatus = null;
else
defaultStatus = status;
UpdateStatusField();
},
setOverLink : function(link)
{
if(link == "")
link = defaultStatus;
if(!statusTextFld)
statusTextFld = document.getElementById("statusText");
statusTextFld.setAttribute("value", link);
overLink = null;
else
overLink = link;
UpdateStatusField();
}
}
function Startup()
{
xulBrowserWin = new nsXULBrowserWindow();
window.addXPConnectObject("XULBrowserWindow", xulBrowserWin);
window.XULBrowserWindow = new nsXULBrowserWindow();
// TileWindow();
// Make sure window fits on screen initially
//FitToScreen();
@ -1012,8 +1039,9 @@ function BrowserEditBookmarks()
var elapsed = ( (new Date()).getTime() - startTime ) / 1000;
var msg = bundle.GetStringFromName("nv_done") + " (" + elapsed + " secs)";
dump( msg + "\n" );
xulBrowserWin.setStatus(msg);
defaultStatus = msg;
defaultStatus = msg;
UpdateStatusField();
window.XULBrowserWindow.setDefaultStatus(msg);
// Turn progress meter off.
meter.setAttribute("mode","normal");
}

View File

@ -33,6 +33,7 @@
#include "nsIDocShellTreeItem.h"
#include "nsIWebNavigation.h"
#include "nsIXULBrowserWindow.h"
#include "nsPIDOMWindow.h"
// Use this trick temporarily, to minimize delta to nsBrowserAppCore.cpp.
#define nsBrowserAppCore nsBrowserInstance
@ -1632,15 +1633,17 @@ NS_IMETHODIMP
nsBrowserAppCore::OnStatusURLLoad(nsIDocumentLoader* loader,
nsIChannel* channel, nsString& aMsg)
{
if(!mDOMWindow)
nsCOMPtr<nsPIDOMWindow> piDOMWindow(do_QueryInterface(mDOMWindow));
if(!piDOMWindow)
return NS_OK;
nsCOMPtr<nsISupports> xpConnectObj;
mDOMWindow->GetXPConnectObject("XULBrowserWindow", getter_AddRefs(xpConnectObj));
nsAutoString xulBrowserWinId("XULBrowserWindow");
piDOMWindow->GetXPConnectObject(xulBrowserWinId.GetUnicode(), getter_AddRefs(xpConnectObj));
nsCOMPtr<nsIXULBrowserWindow> xulBrowserWindow(do_QueryInterface(xpConnectObj));
if(xulBrowserWindow)
xulBrowserWindow->SetStatus(aMsg.GetUnicode());
xulBrowserWindow->SetDefaultStatus(aMsg.GetUnicode());
return NS_OK;
}