Register a nsIHelperAppLauncherDialog to handle docs out of gtkmozembed (pdfs, ...)
This commit is contained in:
		
							parent
							
								
									fcac3b87ca
								
							
						
					
					
						commit
						15e3a4f791
					
				@ -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)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -56,7 +56,7 @@
 | 
			
		||||
 | 
			
		||||
(define-function startup_browser
 | 
			
		||||
  (c-name "sugar_browser_startup")
 | 
			
		||||
  (return-type "none")
 | 
			
		||||
  (return-type "gboolean")
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
(define-method grab_focus
 | 
			
		||||
 | 
			
		||||
@ -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		\
 | 
			
		||||
 | 
			
		||||
@ -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)
 | 
			
		||||
 | 
			
		||||
@ -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,
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										36
									
								
								lib/src/sugar-content-handler.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								lib/src/sugar-content-handler.cpp
									
									
									
									
									
										Normal 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;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										28
									
								
								lib/src/sugar-content-handler.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								lib/src/sugar-content-handler.h
									
									
									
									
									
										Normal 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 */
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user