зеркало из https://github.com/mozilla/pjs.git
Display links in status bar when moused over
This commit is contained in:
Родитель
a3999d66ef
Коммит
d3849e81f3
|
@ -92,7 +92,6 @@ NS_DEFINE_IID(kNetServiceCID, NS_NETSERVICE_CID);
|
|||
// Stuff to implement find/findnext
|
||||
#include "nsIFindComponent.h"
|
||||
|
||||
|
||||
static NS_DEFINE_IID(kIDocumentViewerIID, NS_IDOCUMENT_VIEWER_IID);
|
||||
|
||||
|
||||
|
@ -151,6 +150,8 @@ nsBrowserAppCore::nsBrowserAppCore()
|
|||
|
||||
nsBrowserAppCore::~nsBrowserAppCore()
|
||||
{
|
||||
EndObserving();
|
||||
|
||||
NS_IF_RELEASE(mToolbarWindow);
|
||||
NS_IF_RELEASE(mToolbarScriptContext);
|
||||
NS_IF_RELEASE(mContentWindow);
|
||||
|
@ -197,6 +198,11 @@ nsBrowserAppCore::QueryInterface(REFNSIID aIID,void** aInstancePtr)
|
|||
NS_ADDREF_THIS();
|
||||
return NS_OK;
|
||||
}
|
||||
if (aIID.Equals( nsIObserver::GetIID())) {
|
||||
*aInstancePtr = (void*) ((nsIObserver*)this);
|
||||
NS_ADDREF_THIS();
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
return nsBaseAppCore::QueryInterface(aIID, aInstancePtr);
|
||||
}
|
||||
|
@ -270,6 +276,8 @@ nsBrowserAppCore::Init(const nsString& aId)
|
|||
nsServiceManager::GetService(kCGlobalHistoryCID, kIGlobalHistoryIID,
|
||||
(nsISupports **)&mGHistory);
|
||||
|
||||
BeginObserving();
|
||||
|
||||
return rv;
|
||||
|
||||
}
|
||||
|
@ -1392,3 +1400,84 @@ FindNamedXULElement(nsIWebShell * aShell,
|
|||
}
|
||||
return rv;
|
||||
}
|
||||
|
||||
static const char *prefix = "component://netscape/appshell/component/browser/window";
|
||||
|
||||
void
|
||||
nsBrowserAppCore::BeginObserving() {
|
||||
// Get observer service.
|
||||
nsIObserverService *svc = 0;
|
||||
nsresult rv = nsServiceManager::GetService( NS_OBSERVERSERVICE_PROGID,
|
||||
nsIObserverService::GetIID(),
|
||||
(nsISupports**)&svc );
|
||||
if ( NS_SUCCEEDED( rv ) && svc ) {
|
||||
// Add/Remove object as observer of web shell window topics.
|
||||
nsString topic1 = prefix;
|
||||
topic1 += ";status";
|
||||
nsString topic2 = prefix;
|
||||
topic2 += ";progress";
|
||||
rv = svc->AddObserver( this, topic1.GetUnicode() );
|
||||
rv = svc->AddObserver( this, topic2.GetUnicode() );
|
||||
// Release the service.
|
||||
nsServiceManager::ReleaseService( NS_OBSERVERSERVICE_PROGID, svc );
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
void
|
||||
nsBrowserAppCore::EndObserving() {
|
||||
// Get observer service.
|
||||
nsIObserverService *svc = 0;
|
||||
nsresult rv = nsServiceManager::GetService( NS_OBSERVERSERVICE_PROGID,
|
||||
nsIObserverService::GetIID(),
|
||||
(nsISupports**)&svc );
|
||||
if ( NS_SUCCEEDED( rv ) && svc ) {
|
||||
// Add/Remove object as observer of web shell window topics.
|
||||
nsString topic1 = prefix;
|
||||
topic1 += ";status";
|
||||
nsString topic2 = prefix;
|
||||
topic2 += ";progress";
|
||||
rv = svc->RemoveObserver( this, topic1.GetUnicode() );
|
||||
rv = svc->RemoveObserver( this, topic2.GetUnicode() );
|
||||
// Release the service.
|
||||
nsServiceManager::ReleaseService( NS_OBSERVERSERVICE_PROGID, svc );
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsBrowserAppCore::Observe( nsISupports *aSubject,
|
||||
const PRUnichar *aTopic,
|
||||
const PRUnichar *someData ) {
|
||||
nsresult rv = NS_OK;
|
||||
|
||||
// We only are interested if aSubject is our web shell window.
|
||||
if ( aSubject && mWebShellWin ) {
|
||||
nsIWebShellWindow *window = 0;
|
||||
rv = aSubject->QueryInterface( nsIWebShellWindow::GetIID(), (void**)&window );
|
||||
if ( NS_SUCCEEDED( rv ) && window ) {
|
||||
nsString topic1 = prefix;
|
||||
topic1 += ";status";
|
||||
nsString topic2 = prefix;
|
||||
topic2 += ";progress";
|
||||
// Compare to our window.
|
||||
if ( window == mWebShellWin ) {
|
||||
// Get topic substring.
|
||||
if ( topic1 == aTopic ) {
|
||||
// Update status text.
|
||||
rv = setAttribute( mWebShell, "Browser:Status", "value", someData );
|
||||
} else if ( topic2 == aTopic ) {
|
||||
// We don't process this, yet.
|
||||
}
|
||||
} else {
|
||||
// Not for this app core.
|
||||
}
|
||||
// Release the window.
|
||||
window->Release();
|
||||
}
|
||||
}
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
|
|
@ -29,6 +29,7 @@
|
|||
#include "nsINetSupport.h"
|
||||
#include "nsIStreamObserver.h"
|
||||
#include "nsIDocumentLoaderObserver.h"
|
||||
#include "nsIObserver.h"
|
||||
|
||||
class nsIBrowserWindow;
|
||||
class nsIWebShell;
|
||||
|
@ -48,7 +49,8 @@ class nsBrowserAppCore : public nsBaseAppCore,
|
|||
public nsIDOMBrowserAppCore,
|
||||
public nsINetSupport,
|
||||
// public nsIStreamObserver,
|
||||
public nsIDocumentLoaderObserver
|
||||
public nsIDocumentLoaderObserver,
|
||||
public nsIObserver
|
||||
{
|
||||
public:
|
||||
|
||||
|
@ -118,11 +120,16 @@ class nsBrowserAppCore : public nsBaseAppCore,
|
|||
NS_IMETHOD_(PRBool) PromptPassword(const nsString &aText,
|
||||
nsString &aPassword);
|
||||
|
||||
// nsIObserver
|
||||
NS_DECL_IOBSERVER
|
||||
|
||||
protected:
|
||||
NS_IMETHOD DoDialog();
|
||||
NS_IMETHOD ExecuteScript(nsIScriptContext * aContext, const nsString& aScript);
|
||||
void SetButtonImage(nsIDOMNode * aParentNode, PRInt32 aBtnNum, const nsString &aResName);
|
||||
void InitializeSearch(nsIFindComponent*);
|
||||
void InitializeSearch(nsIFindComponent*);
|
||||
void BeginObserving();
|
||||
void EndObserving();
|
||||
|
||||
nsIScriptContext *mToolbarScriptContext;
|
||||
nsIScriptContext *mContentScriptContext;
|
||||
|
|
|
@ -74,6 +74,8 @@
|
|||
#include "nsIDOMNode.h"
|
||||
#include "nsIDOMElement.h"
|
||||
#include "nsIDocumentLoader.h"
|
||||
#include "nsIObserverService.h"
|
||||
#include "prprf.h"
|
||||
//#include "nsIDOMHTMLInputElement.h"
|
||||
//#include "nsIDOMHTMLImageElement.h"
|
||||
|
||||
|
@ -2301,21 +2303,69 @@ NS_IMETHODIMP nsWebShellWindow::GetTitle(const PRUnichar** aResult)
|
|||
// no, we didn't store the title for you. why so nosy?
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
// This should rightfully be somebody's PROGID?
|
||||
// Will switch when the "app shell browser component" arrives.
|
||||
static const char *prefix = "component://netscape/appshell/component/browser/window";
|
||||
|
||||
nsresult
|
||||
nsWebShellWindow::NotifyObservers( const nsString &aTopic, const nsString &someData ) {
|
||||
nsresult rv = NS_OK;
|
||||
// Get observer service.
|
||||
nsIObserverService *svc = 0;
|
||||
rv = nsServiceManager::GetService( NS_OBSERVERSERVICE_PROGID,
|
||||
nsIObserverService::GetIID(),
|
||||
(nsISupports**)&svc );
|
||||
if ( NS_SUCCEEDED( rv ) && svc ) {
|
||||
// Notify observers as instructed; the subject is "this" web shell window.
|
||||
nsString topic = prefix;
|
||||
topic += ";";
|
||||
topic += aTopic;
|
||||
rv = svc->Notify( (nsIWebShellWindow*)this, topic.GetUnicode(), someData.GetUnicode() );
|
||||
// Release the service.
|
||||
nsServiceManager::ReleaseService( NS_OBSERVERSERVICE_PROGID, svc );
|
||||
} else {
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsWebShellWindow::SetStatus(const PRUnichar* aStatus)
|
||||
{
|
||||
// yup. got it.
|
||||
return NS_OK;
|
||||
nsresult rv = NS_OK;
|
||||
// Store status text.
|
||||
mStatus = aStatus;
|
||||
// Broadcast status text change to interested parties.
|
||||
rv = NotifyObservers( "status", aStatus );
|
||||
return rv;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsWebShellWindow::GetStatus(const PRUnichar** aResult)
|
||||
{
|
||||
// didn't store the status string, either.
|
||||
return NS_ERROR_FAILURE;
|
||||
nsresult rv = NS_OK;
|
||||
if ( aResult ) {
|
||||
// Semantics are ill-defined: How to allocate? Who frees it?
|
||||
*aResult = mStatus.ToNewUnicode();
|
||||
} else {
|
||||
rv = NS_ERROR_NULL_POINTER;
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsWebShellWindow::SetProgress(PRInt32 aProgress, PRInt32 aProgressMax)
|
||||
{
|
||||
// oh yeah. we're on it.
|
||||
return NS_OK;
|
||||
nsresult rv = NS_OK;
|
||||
|
||||
// Encode progress report in topic (there is no GetProgress for observers
|
||||
// to query it).
|
||||
char topic[32];
|
||||
PR_snprintf( topic,
|
||||
sizeof topic,
|
||||
"%ld %ld",
|
||||
(long)aProgress,
|
||||
(long)aProgressMax );
|
||||
|
||||
// Broadcast progress info to interested parties.
|
||||
rv = NotifyObservers( "progress", topic );
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
|
|
@ -250,6 +250,8 @@ protected:
|
|||
NS_IMETHODIMP ShowModalInternal();
|
||||
void ExitModalLoop() { mContinueModalLoop = PR_FALSE; }
|
||||
|
||||
nsresult NotifyObservers( const nsString &aTopic, const nsString &someData );
|
||||
|
||||
nsIWidget* mWindow;
|
||||
nsIWebShell* mWebShell;
|
||||
nsIXULWindowCallbacks* mCallbacks;
|
||||
|
@ -264,6 +266,8 @@ protected:
|
|||
// created as the XUL file for this window loads.
|
||||
|
||||
nsIDOMNode * contextMenuTest;
|
||||
|
||||
nsString mStatus;
|
||||
private:
|
||||
|
||||
static void * HandleModalDialogEvent(PLEvent *aEvent);
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
var appCore = null;
|
||||
var appCoreName = "";
|
||||
var defaultStatus = "default status text";
|
||||
|
||||
function Startup()
|
||||
{
|
||||
dump("Doing Startup...\n");
|
||||
|
@ -699,6 +701,9 @@
|
|||
var status = document.getElementById("Browser:Status");
|
||||
if ( status ) {
|
||||
var text = status.getAttribute("value");
|
||||
if ( text == "" ) {
|
||||
text = defaultStatus;
|
||||
}
|
||||
var statusText = document.getElementById("statusText");
|
||||
if ( statusText ) {
|
||||
statusText.setAttribute( "value", text );
|
||||
|
@ -764,6 +769,7 @@
|
|||
var msg = "Document: Done (" + elapsed + " secs)";
|
||||
dump( msg + "\n" );
|
||||
status.setAttribute("value",msg);
|
||||
defaultStatus = msg;
|
||||
}
|
||||
startTime = 0;
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче