Register a nsIHelperAppLauncherDialog to handle docs out of gtkmozembed (pdfs, ...)

This commit is contained in:
Tomeu Vizoso 2006-10-25 10:18:43 +02:00
parent fcac3b87ca
commit 15e3a4f791
7 changed files with 128 additions and 7 deletions

View File

@ -98,7 +98,8 @@ def start():
gtkmozembed.set_profile_path(env.get_profile_path(), 'gecko')
gtkmozembed.push_startup()
_sugar.startup_browser()
if not _sugar.startup_browser():
raise "Error when initializising the web activity."
style.load_stylesheet(web.stylesheet)

View File

@ -56,7 +56,7 @@
(define-function startup_browser
(c-name "sugar_browser_startup")
(return-type "none")
(return-type "gboolean")
)
(define-method grab_focus

View File

@ -20,7 +20,9 @@ libsugarprivate_la_SOURCES = \
sugar-push-scroller.c \
sugar-push-scroller.h \
sugar-tray-manager.c \
sugar-tray-manager.h
sugar-tray-manager.h \
sugar-content-handler.h \
sugar-content-handler.cpp
BUILT_SOURCES = \
sugar-marshal.c \

View File

@ -18,6 +18,7 @@
*/
#include "sugar-browser.h"
#include "sugar-content-handler.h"
#include <gtkmozembed_internal.h>
#include <nsCOMPtr.h>
@ -26,6 +27,12 @@
#include <nsIWebBrowser.h>
#include <nsIWebBrowserFocus.h>
#include <nsIDOMWindow.h>
#include <nsIGenericFactory.h>
#include <nsIHelperAppLauncherDialog.h>
#include <nsIComponentRegistrar.h>
#include <nsIComponentManager.h>
NS_GENERIC_FACTORY_CONSTRUCTOR(GSugarContentHandler)
enum {
PROP_0,
@ -37,17 +44,27 @@ enum {
PROP_LOADING
};
void
static const nsModuleComponentInfo sSugarComponents[] = {
{
"Sugar Content Handler",
G_SUGARCONTENTHANDLER_CID,
NS_IHELPERAPPLAUNCHERDLG_CONTRACTID,
GSugarContentHandlerConstructor
}
};
gboolean
sugar_browser_startup(void)
{
nsCOMPtr<nsIPrefService> prefService;
nsresult rv;
prefService = do_GetService(NS_PREFSERVICE_CONTRACTID);
NS_ENSURE_TRUE(prefService, );
NS_ENSURE_TRUE(prefService, FALSE);
nsCOMPtr<nsIPrefBranch> pref;
prefService->GetBranch("", getter_AddRefs(pref));
NS_ENSURE_TRUE(pref, );
NS_ENSURE_TRUE(pref, FALSE);
/* Block onload popups */
pref->SetBoolPref("dom.disable_open_during_load", TRUE);
@ -60,6 +77,43 @@ sugar_browser_startup(void)
pref->SetCharPref("ui.buttonface", "#D3D3DD");
pref->SetCharPref("ui.-moz-field", "#FFFFFF");
pref->SetCharPref("ui.-moz-fieldtext", "#000000");
nsCOMPtr<nsIComponentRegistrar> componentRegistrar;
NS_GetComponentRegistrar(getter_AddRefs(componentRegistrar));
NS_ENSURE_TRUE (componentRegistrar, FALSE);
nsCOMPtr<nsIComponentManager> componentManager;
NS_GetComponentManager (getter_AddRefs (componentManager));
NS_ENSURE_TRUE (componentManager, FALSE);
nsCOMPtr<nsIGenericFactory> componentFactory;
rv = NS_NewGenericFactory(getter_AddRefs(componentFactory),
&(sSugarComponents[0]));
if (NS_FAILED(rv) || !componentFactory) {
g_warning ("Failed to make a factory for %s\n", sSugarComponents[0].mDescription);
return FALSE;
}
rv = componentRegistrar->RegisterFactory(sSugarComponents[0].mCID,
sSugarComponents[0].mDescription,
sSugarComponents[0].mContractID,
componentFactory);
if (NS_FAILED(rv)) {
g_warning ("Failed to register factory for %s\n", sSugarComponents[0].mDescription);
return FALSE;
}
if (sSugarComponents[0].mRegisterSelfProc) {
rv = sSugarComponents[0].mRegisterSelfProc(componentManager, nsnull,
nsnull, nsnull,
&sSugarComponents[0]);
if (NS_FAILED(rv)) {
g_warning ("Failed to register-self for %s\n", sSugarComponents[0].mDescription);
return FALSE;
}
}
return TRUE;
}
G_DEFINE_TYPE(SugarBrowser, sugar_browser, GTK_TYPE_MOZ_EMBED)

View File

@ -54,7 +54,7 @@ struct _SugarBrowserClass {
};
GType sugar_browser_get_type (void);
void sugar_browser_startup (void);
gboolean sugar_browser_startup (void);
SugarBrowser *sugar_browser_create_window (SugarBrowser *browser);
void sugar_browser_scroll_pixels (SugarBrowser *browser,
int dx,

View File

@ -0,0 +1,36 @@
#include <stdio.h>
#include "sugar-content-handler.h"
GSugarContentHandler::GSugarContentHandler()
{
}
GSugarContentHandler::~GSugarContentHandler()
{
}
NS_IMPL_ISUPPORTS1(GSugarContentHandler, nsIHelperAppLauncherDialog)
NS_IMETHODIMP
GSugarContentHandler::Show (nsIHelperAppLauncher *aLauncher,
nsISupports *aContext,
PRUint32 aReason)
{
return NS_OK;
}
NS_IMETHODIMP GSugarContentHandler::PromptForSaveToFile(
nsIHelperAppLauncher *aLauncher,
nsISupports *aWindowContext,
const PRUnichar *aDefaultFile,
const PRUnichar *aSuggestedFileExtension,
nsILocalFile **_retval)
{
return NS_OK;
}

View File

@ -0,0 +1,28 @@
#ifndef __SUGAR_CONTENT_HANDLER_H__
#define __SUGAR_CONTENT_HANDLER_H__
#include <nsCOMPtr.h>
#include <nsIHelperAppLauncherDialog.h>
#define G_SUGARCONTENTHANDLER_CID \
{ /* 2321843e-6377-11db-967b-00e08161165f */ \
0x2321843e, \
0x6377, \
0x11db, \
{0x96, 0x7b, 0x0, 0xe0, 0x81, 0x61, 0x16, 0x5f} \
}
class GSugarContentHandler : public nsIHelperAppLauncherDialog
{
public:
NS_DECL_ISUPPORTS
NS_DECL_NSIHELPERAPPLAUNCHERDIALOG
GSugarContentHandler();
virtual ~GSugarContentHandler();
private:
};
#endif /* __SUGAR_CONTENT_HANDLER_H */