From dade0fbabccb206591d776274d0925974ddaf1cf Mon Sep 17 00:00:00 2001 From: Tomeu Vizoso Date: Thu, 26 Oct 2006 13:47:57 +0000 Subject: Created SugarBrowserChandler, for signaling when the browser has downloaded a file that cannot handle himself. --- (limited to 'lib') diff --git a/lib/python/_sugar.defs b/lib/python/_sugar.defs index a720fee..5a31c91 100644 --- a/lib/python/_sugar.defs +++ b/lib/python/_sugar.defs @@ -35,6 +35,13 @@ (gtype-id "SUGAR_TYPE_PUSH_SCROLLER") ) +(define-object BrowserChandler + (in-module "Sugar") + (parent "GObject") + (c-name "SugarBrowserChandler") + (gtype-id "SUGAR_TYPE_BROWSER_CHANDLER") +) + ;; Enumerations and flags ... @@ -173,3 +180,15 @@ '("guint32" "timestamp") ) ) + +;; From sugar-browser-chandler.h + +(define-function sugar_browser_chandler_get_type + (c-name "sugar_browser_chandler_get_type") + (return-type "GType") +) + +(define-function get_browser_chandler + (c-name "sugar_get_browser_chandler") + (return-type "SugarBrowserChandler*") +) diff --git a/lib/python/_sugar.override b/lib/python/_sugar.override index 57e7c28..9d27bbe 100644 --- a/lib/python/_sugar.override +++ b/lib/python/_sugar.override @@ -9,6 +9,7 @@ headers #include "sugar-address-entry.h" #include "sugar-tray-manager.h" #include "sugar-push-scroller.h" +#include "sugar-browser-chandler.h" %% modulename gecko diff --git a/lib/src/Makefile.am b/lib/src/Makefile.am index 1d5cd3b..7bc79aa 100644 --- a/lib/src/Makefile.am +++ b/lib/src/Makefile.am @@ -1,30 +1,33 @@ +INCLUDES = \ + $(WARN_CFLAGS) \ + $(LIB_CFLAGS) \ + -I$(MOZILLA_INCLUDE_DIR)/exthandler \ + -I$(MOZILLA_INCLUDE_DIR)/mimetype \ + -I$(MOZILLA_INCLUDE_DIR)/necko + noinst_LTLIBRARIES = libsugarprivate.la libsugarprivate_la_LIBADD = $(GECKO_LIBS) -libsugarprivate_la_SOURCES = \ - $(BUILT_SOURCES) \ - eggaccelerators.h \ - eggaccelerators.c \ - sugar-browser.h \ - sugar-browser.cpp \ - sugar-content-handler.h \ - sugar-content-handler.cpp \ +libsugarprivate_la_SOURCES = \ + $(BUILT_SOURCES) \ + eggaccelerators.h \ + eggaccelerators.c \ sugar-address-entry.h \ sugar-address-entry.c \ - sugar-key-grabber.h \ - sugar-key-grabber.c \ + sugar-browser.h \ + sugar-browser.cpp \ + sugar-browser-chandler.h \ + sugar-browser-chandler.c \ + sugar-content-handler.h \ + sugar-content-handler.cpp \ + sugar-key-grabber.h \ + sugar-key-grabber.c \ sugar-push-scroller.c \ sugar-push-scroller.h \ sugar-tray-manager.c \ sugar-tray-manager.h -libsugarprivate_la_CPPFLAGS = \ - $(WARN_CFLAGS) \ - $(LIB_CFLAGS) \ - -I$(MOZILLA_INCLUDE_DIR)/exthandler \ - -DSHARE_DIR=\"$(pkgdatadir)\" - BUILT_SOURCES = \ sugar-marshal.c \ sugar-marshal.h diff --git a/lib/src/sugar-browser-chandler.c b/lib/src/sugar-browser-chandler.c new file mode 100644 index 0000000..8a5af52 --- /dev/null +++ b/lib/src/sugar-browser-chandler.c @@ -0,0 +1,57 @@ +#include +#include + +#include "sugar-marshal.h" +#include "sugar-browser-chandler.h" + +G_DEFINE_TYPE(SugarBrowserChandler, sugar_browser_chandler, G_TYPE_OBJECT) + +SugarBrowserChandler *browserChandler = NULL; + +static void +sugar_browser_chandler_init(SugarBrowserChandler *browserChandler) +{ +} + +static void +sugar_browser_chandler_class_init(SugarBrowserChandlerClass *browser_chandler_class) +{ + browser_chandler_class->handle_content_signal_id = + g_signal_new ("handle-content", + G_OBJECT_CLASS_TYPE (browser_chandler_class), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (SugarBrowserChandlerClass, handle_content), + NULL, NULL, + sugar_marshal_VOID__STRING_STRING_STRING_STRING, + G_TYPE_NONE, 4, + G_TYPE_STRING, + G_TYPE_STRING, + G_TYPE_STRING, + G_TYPE_STRING); +} + +SugarBrowserChandler * +sugar_get_browser_chandler() +{ + if(browserChandler == NULL) + browserChandler = g_object_new(SUGAR_TYPE_BROWSER_CHANDLER, NULL); + + return browserChandler; +} + +void +sugar_browser_chandler_handle_content (SugarBrowserChandler *browser_chandler, + const char *url, + const char *suggested_file_name, + const char *mime_type, + const char *tmp_file_name) +{ + g_signal_emit(browser_chandler, + SUGAR_BROWSER_CHANDLER_GET_CLASS( + browser_chandler)->handle_content_signal_id, + 0 /* details */, + url, + suggested_file_name, + mime_type, + tmp_file_name); +} diff --git a/lib/src/sugar-browser-chandler.h b/lib/src/sugar-browser-chandler.h new file mode 100644 index 0000000..d586a41 --- /dev/null +++ b/lib/src/sugar-browser-chandler.h @@ -0,0 +1,56 @@ +#ifndef __SUGAR_BROWSER_CHANDLER_H__ +#define __SUGAR_BROWSER_CHANDLER_H__ + +#include +#include + +G_BEGIN_DECLS + +typedef struct _SugarBrowserChandler SugarBrowserChandler; +typedef struct _SugarBrowserChandlerClass SugarBrowserChandlerClass; + +#define SUGAR_TYPE_BROWSER_CHANDLER ( \ + sugar_browser_chandler_get_type()) +#define SUGAR_BROWSER_CHANDLER(object) ( \ + G_TYPE_CHECK_INSTANCE_CAST((object), \ + SUGAR_TYPE_BROWSER_CHANDLER, SugarBrowserChandler)) +#define SUGAR_BROWSER_CHANDLER_CLASS(klass) ( \ + G_TYPE_CHECK_CLASS_CAST((klass), \ + SUGAR_TYPE_BROWSER_CHANDLER, \ + SugarBrowserChandlerClass)) +#define SUGAR_IS_BROWSER_CHANDLER(object) ( \ + G_TYPE_CHECK_INSTANCE_TYPE((object), \ + SUGAR_TYPE_BROWSER_CHANDLER)) +#define SUGAR_IS_BROWSER_CHANDLER_CLASS(klass) ( \ + G_TYPE_CHECK_CLASS_TYPE((klass), \ + SUGAR_TYPE_BROWSER_CHANDLER)) +#define SUGAR_BROWSER_CHANDLER_GET_CLASS(object) ( \ + G_TYPE_INSTANCE_GET_CLASS((object), \ + SUGAR_TYPE_BROWSER_CHANDLER, \ + SugarBrowserChandlerClass)) + +struct _SugarBrowserChandler { + GObject base_instance; +}; + +struct _SugarBrowserChandlerClass { + GObjectClass base_class; + + guint handle_content_signal_id; + + void (* handle_content) (char *url, char *tmp_file_name); + +}; + +GType sugar_browser_chandler_get_type (void); +SugarBrowserChandler *sugar_get_browser_chandler (); +void sugar_browser_chandler_handle_content ( + SugarBrowserChandler *browser_chandler, + const char *url, + const char *suggested_file_name, + const char *mime_type, + const char *tmp_file_name); + +G_END_DECLS + +#endif diff --git a/lib/src/sugar-content-handler.cpp b/lib/src/sugar-content-handler.cpp index 56fe587..0597c48 100644 --- a/lib/src/sugar-content-handler.cpp +++ b/lib/src/sugar-content-handler.cpp @@ -1,5 +1,13 @@ #include +#include +#include +#include +#include +#include + +#include "sugar-browser-chandler.h" + #include "sugar-content-handler.h" GSugarContentHandler::GSugarContentHandler() @@ -18,7 +26,43 @@ NS_IMETHODIMP GSugarContentHandler::Show (nsIHelperAppLauncher *aLauncher, nsISupports *aContext, PRUint32 aReason) -{ +{ + SugarBrowserChandler *browser_chandler; + nsresult rv; + nsCString url; + nsCString mimeType; + nsString suggested_file_name_utf16; + nsCString suggested_file_name; + nsCString tmp_file_name; + + NS_ENSURE_TRUE (aLauncher, NS_ERROR_FAILURE); + + nsCOMPtr MIMEInfo; + aLauncher->GetMIMEInfo (getter_AddRefs(MIMEInfo)); + NS_ENSURE_TRUE (MIMEInfo, NS_ERROR_FAILURE); + + rv = MIMEInfo->GetMIMEType (mimeType); + + nsCOMPtr uri; + aLauncher->GetSource (getter_AddRefs(uri)); + NS_ENSURE_TRUE (uri, NS_ERROR_FAILURE); + + uri->GetSpec (url); + + aLauncher->GetSuggestedFileName (suggested_file_name_utf16); + NS_UTF16ToCString (suggested_file_name_utf16, + NS_CSTRING_ENCODING_UTF8, suggested_file_name); + + nsCOMPtr tmp_file; + aLauncher->GetTargetFile(getter_AddRefs(tmp_file)); + tmp_file->GetNativeLeafName (tmp_file_name); + + browser_chandler = sugar_get_browser_chandler(); + sugar_browser_chandler_handle_content(browser_chandler, + url.get(), + suggested_file_name.get(), + mimeType.get(), + tmp_file_name.get()); return NS_OK; } diff --git a/lib/src/sugar-marshal.list b/lib/src/sugar-marshal.list index 4ea485a..ba41075 100644 --- a/lib/src/sugar-marshal.list +++ b/lib/src/sugar-marshal.list @@ -1,2 +1,3 @@ VOID:OBJECT,STRING,LONG,LONG VOID:OBJECT,LONG +VOID:STRING,STRING,STRING,STRING -- cgit v0.9.1