infastructure for bug 41966 - getting key bindings working for the gtk embedding widget r=valeski, a=waterson

git-svn-id: svn://10.0.0.236/trunk@76940 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
blizzard%redhat.com
2000-08-23 03:38:27 +00:00
parent 36629ac60c
commit 8ea670134e
5 changed files with 1012 additions and 378 deletions

View File

@@ -60,12 +60,12 @@ GtkMozEmbedChrome::GtkMozEmbedChrome()
mVisibility = PR_FALSE;
mLinkMessage = NULL;
mJSStatus = NULL;
mLocation = NULL;
mTitle = NULL;
mChromeMask = 0;
mOffset = 0;
mDoingStream = PR_FALSE;
mChromeListener = 0;
mContentShell = 0;
if (!mozEmbedLm)
mozEmbedLm = PR_NewLogModule("GtkMozEmbedChrome");
if (!sBrowsers)
@@ -91,7 +91,7 @@ NS_INTERFACE_MAP_BEGIN(GtkMozEmbedChrome)
NS_INTERFACE_MAP_ENTRY(nsIInterfaceRequestor)
NS_INTERFACE_MAP_ENTRY(nsIWebBrowserChrome)
NS_INTERFACE_MAP_ENTRY(nsIURIContentListener)
NS_INTERFACE_MAP_ENTRY(nsIWebProgressListener)
NS_INTERFACE_MAP_ENTRY(nsIDocShellTreeOwner)
NS_INTERFACE_MAP_ENTRY(nsIBaseWindow)
NS_INTERFACE_MAP_END
@@ -133,16 +133,6 @@ NS_IMETHODIMP GtkMozEmbedChrome::GetJSStatus (char **retval)
return NS_OK;
}
NS_IMETHODIMP GtkMozEmbedChrome::GetLocation (char **retval)
{
PR_LOG(mozEmbedLm, PR_LOG_DEBUG, ("GtkMozEmbedChrome::GetLocation\n"));
NS_ENSURE_ARG_POINTER(retval);
*retval = NULL;
if (mLocation)
*retval = nsCRT::strdup(mLocation);
return NS_OK;
}
NS_IMETHODIMP GtkMozEmbedChrome::GetTitleChar (char **retval)
{
PR_LOG(mozEmbedLm, PR_LOG_DEBUG, ("GtkMozEmbedChrome::GetTitleChar\n"));
@@ -189,8 +179,18 @@ NS_IMETHODIMP GtkMozEmbedChrome::OpenStream (const char *aBaseURI, const char *a
// release our second reference to it.
NS_RELEASE(newStream);
// get our hands on the docShell
mWebBrowser->GetDocShell(getter_AddRefs(docShell));
// get our hands on the primary content area of that docshell
// get the browser as an item
nsCOMPtr<nsIDocShellTreeItem> browserAsItem;
browserAsItem = do_QueryInterface(mWebBrowser);
// get the tree owner for that item
nsCOMPtr<nsIDocShellTreeOwner> treeOwner;
browserAsItem->GetTreeOwner(getter_AddRefs(treeOwner));
// get the primary content shell as an item
nsCOMPtr<nsIDocShellTreeItem> contentItem;
treeOwner->GetPrimaryContentShell(getter_AddRefs(contentItem));
// QI that back to a docshell
docShell = do_QueryInterface(contentItem);
if (!docShell)
return NS_ERROR_FAILURE;
@@ -269,7 +269,9 @@ NS_IMETHODIMP GtkMozEmbedChrome::OpenStream (const char *aBaseURI, const char *a
NS_IMETHODIMP GtkMozEmbedChrome::AppendToStream (const char *aData, gint32 aLen)
{
GtkMozEmbedStream *embedStream = (GtkMozEmbedStream *)mStream.get();
nsIInputStream *inputStream;
inputStream = mStream.get();
GtkMozEmbedStream *embedStream = (GtkMozEmbedStream *)inputStream;
nsresult rv;
NS_ENSURE_STATE(mDoingStream);
rv = embedStream->Append(aData, aLen);
@@ -387,10 +389,7 @@ NS_IMETHODIMP GtkMozEmbedChrome::GetNewBrowser(PRUint32 chromeMask,
nsIWebBrowser **_retval)
{
PR_LOG(mozEmbedLm, PR_LOG_DEBUG, ("GtkMozEmbedChrome::GetNewBrowser\n"));
if (mChromeListener)
return mChromeListener->NewBrowser(chromeMask, _retval);
else
return NS_ERROR_FAILURE;
return NS_ERROR_FAILURE;
}
NS_IMETHODIMP GtkMozEmbedChrome::FindNamedBrowserItem(const PRUnichar *aName,
@@ -539,92 +538,84 @@ NS_IMETHODIMP GtkMozEmbedChrome::SetParentContentListener(nsIURIContentListener
return NS_ERROR_NOT_IMPLEMENTED;
}
// nsIWebProgressListener
// nsIDocShellTreeOwner interface
NS_IMETHODIMP GtkMozEmbedChrome::OnProgressChange(nsIWebProgress *aProgress,
nsIRequest *aRequest,
PRInt32 curSelfProgress,
PRInt32 maxSelfProgress,
PRInt32 curTotalProgress,
PRInt32 maxTotalProgress)
NS_IMETHODIMP GtkMozEmbedChrome::FindItemWithName(const PRUnichar *aName,
nsIDocShellTreeItem *aRequestor,
nsIDocShellTreeItem **_retval)
{
PR_LOG(mozEmbedLm, PR_LOG_DEBUG, ("GtkMozEmbedChrome::OnProgressChange\n"));
PR_LOG(mozEmbedLm, PR_LOG_DEBUG, ("curTotalProgress is %d and maxTotalProgress is %d\n",
curTotalProgress, maxTotalProgress));
// avoid those pesky divide by zero errors
if (maxTotalProgress > 0)
PR_LOG(mozEmbedLm, PR_LOG_DEBUG, ("GtkMozEmbedChrome::FindItemWithName\n"));
NS_ENSURE_ARG_POINTER(_retval);
*_retval = nsnull;
PRInt32 i = 0;
PRInt32 numBrowsers = sBrowsers->Count();
for (i = 0; i < numBrowsers; i++)
{
PRUint32 percentage = (curTotalProgress * 100) / maxTotalProgress;
PR_LOG(mozEmbedLm, PR_LOG_DEBUG, ("%d%% percent\n", percentage));
GtkMozEmbedChrome *chrome = (GtkMozEmbedChrome *)sBrowsers->ElementAt(i);
nsCOMPtr<nsIWebBrowser> webBrowser;
NS_ENSURE_SUCCESS(chrome->GetWebBrowser(getter_AddRefs(webBrowser)),
NS_ERROR_FAILURE);
nsCOMPtr<nsIDocShellTreeItem> docShellAsItem(do_QueryInterface(webBrowser));
NS_ENSURE_TRUE(docShellAsItem, NS_ERROR_FAILURE);
docShellAsItem->FindItemWithName(aName, NS_STATIC_CAST(nsIWebBrowserChrome *, this), _retval);
if (*_retval)
break;
}
return NS_OK;
}
NS_IMETHODIMP GtkMozEmbedChrome::ContentShellAdded(nsIDocShellTreeItem *aContentShell,
PRBool aPrimary,
const PRUnichar *aID)
{
PR_LOG(mozEmbedLm, PR_LOG_DEBUG, ("GtkMozEmbedChrome::ContentShellAdded\n"));
if (aPrimary)
mContentShell = aContentShell;
return NS_OK;
}
NS_IMETHODIMP GtkMozEmbedChrome::GetPrimaryContentShell(nsIDocShellTreeItem **aPrimaryContentShell)
{
PR_LOG(mozEmbedLm, PR_LOG_DEBUG, ("GtkMozEmbedChrome::GetPrimaryContentShell\n"));
NS_IF_ADDREF(mContentShell);
*aPrimaryContentShell = mContentShell;
return NS_OK;
}
NS_IMETHODIMP GtkMozEmbedChrome::SizeShellTo(nsIDocShellTreeItem *shell,
PRInt32 cx, PRInt32 cy)
{
PR_LOG(mozEmbedLm, PR_LOG_DEBUG, ("GtkMozEmbedChrome::SizeShellTo\n"));
if (mChromeListener)
mChromeListener->SizeTo(cx, cy);
return NS_OK;
}
NS_IMETHODIMP GtkMozEmbedChrome::ShowModal(void)
{
PR_LOG(mozEmbedLm, PR_LOG_DEBUG, ("GtkMozEmbedChrome::ShowModal\n"));
return NS_OK;
}
NS_IMETHODIMP GtkMozEmbedChrome::ExitModalLoop(nsresult aStatus)
{
PR_LOG(mozEmbedLm, PR_LOG_DEBUG, ("GtkMozEmbedChrome::ExitModalLoop\n"));
return NS_OK;
}
NS_IMETHODIMP GtkMozEmbedChrome::GetNewWindow(PRInt32 aChromeFlags,
nsIDocShellTreeItem **_retval)
{
PR_LOG(mozEmbedLm, PR_LOG_DEBUG, ("GtkMozEmbedChrome::GetNewWindow\n"));
if (mChromeListener)
return mChromeListener->NewBrowser(aChromeFlags, _retval);
else
{
PR_LOG(mozEmbedLm, PR_LOG_DEBUG, ("Unknown percent\n"));
}
if (mChromeListener) {
mChromeListener->ProgressChange(aProgress, aRequest,
curSelfProgress,
maxSelfProgress,
curTotalProgress,
maxTotalProgress);
}
return NS_OK;
}
NS_IMETHODIMP GtkMozEmbedChrome::OnStateChange(nsIWebProgress *aProgress,
nsIRequest *aRequest,
PRInt32 aStateFlags, nsresult aStatus)
{
PR_LOG(mozEmbedLm, PR_LOG_DEBUG, ("GtkMozEmbedChrome::OnStateChange\n"));
if (aStateFlags & nsIWebProgressListener::flag_start)
PR_LOG(mozEmbedLm, PR_LOG_DEBUG, ("flag_start\n"));
if (aStateFlags & nsIWebProgressListener::flag_redirecting)
PR_LOG(mozEmbedLm, PR_LOG_DEBUG, ("flag_redirecting\n"));
if (aStateFlags & nsIWebProgressListener::flag_negotiating)
PR_LOG(mozEmbedLm, PR_LOG_DEBUG, ("flag_negotiating\n"));
if (aStateFlags & nsIWebProgressListener::flag_transferring)
PR_LOG(mozEmbedLm, PR_LOG_DEBUG, ("flag_transferring\n"));
if (aStateFlags & nsIWebProgressListener::flag_stop)
PR_LOG(mozEmbedLm, PR_LOG_DEBUG, ("flag_stop\n"));
if (aStateFlags & nsIWebProgressListener::flag_is_request)
PR_LOG(mozEmbedLm, PR_LOG_DEBUG, ("flag_is_request\n"));
if (aStateFlags & nsIWebProgressListener::flag_is_document)
PR_LOG(mozEmbedLm, PR_LOG_DEBUG, ("flag_is_document\n"));
if (aStateFlags & nsIWebProgressListener::flag_is_network)
PR_LOG(mozEmbedLm, PR_LOG_DEBUG, ("flag_is_network\n"));
if (aStateFlags & nsIWebProgressListener::flag_is_window)
PR_LOG(mozEmbedLm, PR_LOG_DEBUG, ("flag_is_window\n"));
// let the listener know that a network event has happened
if (mChromeListener)
mChromeListener->Net(aProgress, aRequest, aStateFlags, aStatus);
return NS_OK;
}
NS_IMETHODIMP GtkMozEmbedChrome::OnLocationChange(nsIWebProgress* aWebProgress,
nsIRequest* aRequest,
nsIURI *aLocation)
{
PR_LOG(mozEmbedLm, PR_LOG_DEBUG, ("GtkMozEmbedChrome::OnLocationChange\n"));
char *newURIString = NULL;
NS_ENSURE_ARG_POINTER(aLocation);
aLocation->GetSpec(&newURIString);
mLocation = newURIString;
PR_LOG(mozEmbedLm, PR_LOG_DEBUG, ("new location is %s\n", (const char *)mLocation));
// let the chrome listener know that the location has changed
if (mChromeListener)
mChromeListener->Message(GtkEmbedListener::MessageLocation, mLocation);
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
GtkMozEmbedChrome::OnStatusChange(nsIWebProgress* aWebProgress,
nsIRequest* aRequest,
nsresult aStatus,
const PRUnichar* aMessage)
{
return NS_OK;
return NS_ERROR_FAILURE;
}
// nsIBaseWindow interface

View File

@@ -38,6 +38,8 @@
#include "nsIChannel.h"
#include "nsIContentViewer.h"
#include "nsIStreamListener.h"
#include "nsIDocShellTreeOwner.h"
#include "nsIDocShellTreeItem.h"
// utility classes
#include "nsXPIDLString.h"
@@ -51,7 +53,7 @@ class GtkMozEmbedChrome : public nsIGtkEmbed,
public nsIWebBrowserChrome,
public nsIBaseWindow,
public nsIURIContentListener,
public nsIWebProgressListener,
public nsIDocShellTreeOwner,
public nsIInterfaceRequestor
{
public:
@@ -65,7 +67,6 @@ public:
NS_IMETHOD SetEmbedListener (GtkEmbedListener *aListener);
NS_IMETHOD GetLinkMessage (char **retval);
NS_IMETHOD GetJSStatus (char **retval);
NS_IMETHOD GetLocation (char **retval);
NS_IMETHOD GetTitleChar (char **retval);
NS_IMETHOD OpenStream (const char *aBaseURI, const char *aContentType);
NS_IMETHOD AppendToStream (const char *aData, gint32 aLen);
@@ -79,7 +80,7 @@ public:
NS_DECL_NSIURICONTENTLISTENER
NS_DECL_NSIWEBPROGRESSLISTENER
NS_DECL_NSIDOCSHELLTREEOWNER
NS_DECL_NSIBASEWINDOW
@@ -90,7 +91,6 @@ private:
PRBool mVisibility;
nsXPIDLCString mLinkMessage;
nsXPIDLCString mJSStatus;
nsXPIDLCString mLocation;
nsXPIDLCString mTitle;
nsString mTitleUnicode;
PRUint32 mChromeMask;
@@ -103,6 +103,7 @@ private:
PRUint32 mOffset;
PRBool mDoingStream;
GtkEmbedListener *mChromeListener;
nsIDocShellTreeItem *mContentShell;
};
#endif /* __GtkMozEmbedChrome_h */

File diff suppressed because it is too large Load Diff

View File

@@ -26,6 +26,7 @@
#include "nsIWebBrowser.h"
#include "nsIWebProgress.h"
#include "nsIRequest.h"
#include "nsIDocShellTreeItem.h"
#define NS_IGTKEMBED_IID_STR "ebe19ea4-1dd1-11b2-bc20-8e8105516b2f"
@@ -40,24 +41,14 @@ class GtkEmbedListener
{
MessageLink = 0,
MessageJSStatus,
MessageLocation,
MessageTitle
};
virtual nsresult NewBrowser(PRUint32 chromeMask,
nsIWebBrowser **_retval) = 0;
virtual nsresult NewBrowser(PRUint32 aChromeFlags,
nsIDocShellTreeItem **_retval) = 0;
virtual void Destroy(void) = 0;
virtual void Visibility(PRBool aVisibility) = 0;
virtual void Message(GtkEmbedListenerMessageType aType,
const char *aMessage) = 0;
virtual void ProgressChange(nsIWebProgress *aProgress,
nsIRequest *aRequest,
PRInt32 curSelfProgress,
PRInt32 maxSelfProgress,
PRInt32 curTotalProgress,
PRInt32 maxTotalProgress) = 0;
virtual void Net(nsIWebProgress *aProgress,
nsIRequest *aRequest,
PRInt32 aFlags, nsresult aStatus) = 0;
virtual PRBool StartOpen(const char *aURI) = 0;
virtual void SizeTo(PRInt32 width, PRInt32 height) = 0;
};
@@ -72,7 +63,6 @@ public:
NS_IMETHOD SetEmbedListener (GtkEmbedListener *aListener) = 0;
NS_IMETHOD GetLinkMessage (char **retval) = 0;
NS_IMETHOD GetJSStatus (char **retval) = 0;
NS_IMETHOD GetLocation (char **retval) = 0;
NS_IMETHOD GetTitleChar (char **retval) = 0;
NS_IMETHOD OpenStream (const char *aBaseURI, const char *aContentType) = 0;
NS_IMETHOD AppendToStream (const char *aData, gint32 aLen) = 0;

View File

@@ -684,7 +684,10 @@ void progress_change_cb (GtkMozEmbed *embed, gint cur, gint max,
{
browser->bytesLoaded = cur;
browser->maxBytesLoaded = max;
browser->loadPercent = (cur * 100) / max;
if (cur > max)
browser->loadPercent = 100;
else
browser->loadPercent = (cur * 100) / max;
update_status_bar_text(browser);
gtk_progress_set_percentage(GTK_PROGRESS(browser->progressBar), browser->loadPercent / 100.0);
}