aboutsummaryrefslogtreecommitdiffstats
path: root/embed
diff options
context:
space:
mode:
Diffstat (limited to 'embed')
-rw-r--r--embed/ephy-embed-single.c22
-rw-r--r--embed/ephy-embed-single.h9
-rw-r--r--embed/mozilla/EphySidebar.cpp35
3 files changed, 52 insertions, 14 deletions
diff --git a/embed/ephy-embed-single.c b/embed/ephy-embed-single.c
index 0b05dc876..c2138a189 100644
--- a/embed/ephy-embed-single.c
+++ b/embed/ephy-embed-single.c
@@ -141,6 +141,28 @@ ephy_embed_single_iface_init (gpointer g_class)
G_TYPE_STRING);
/**
+ * EphyEmbedSingle::add-search-engine
+ * @single:
+ * @url: The url of the search engine definition file
+ * @icon_url: The url of the icon to use for this engine
+ * @title: The title of the search engine to be added
+ *
+ * The ::add-search-engine signal is emitted when the user clicks a javascript link that
+ * requests adding a search engine to the sidebar.
+ **/
+ g_signal_new ("add-search-engine",
+ EPHY_TYPE_EMBED_SINGLE,
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (EphyEmbedSingleIface, add_search_engine),
+ g_signal_accumulator_true_handled, NULL,
+ ephy_marshal_BOOLEAN__STRING_STRING_STRING,
+ G_TYPE_BOOLEAN,
+ 3,
+ G_TYPE_STRING,
+ G_TYPE_STRING,
+ G_TYPE_STRING);
+
+/**
* EphyEmbedSingle::check_content:
* @single: the #EphyEmbedSingle
* @type: the type of content (an #EphyContentCheckType)
diff --git a/embed/ephy-embed-single.h b/embed/ephy-embed-single.h
index 03e4f9a05..63d065666 100644
--- a/embed/ephy-embed-single.h
+++ b/embed/ephy-embed-single.h
@@ -66,8 +66,13 @@ struct _EphyEmbedSingleIface
gboolean (* add_sidebar) (EphyEmbedSingle *single,
- const char * url,
- const char * title);
+ const char *url,
+ const char *title);
+
+ gboolean (* add_search_engine) (EphyEmbedSingle *single,
+ const char *url,
+ const char *icon_url,
+ const char *title);
gboolean (* check_content) (EphyEmbedSingle *single,
EphyContentCheckType type,
diff --git a/embed/mozilla/EphySidebar.cpp b/embed/mozilla/EphySidebar.cpp
index ff98e29e6..953f8561c 100644
--- a/embed/mozilla/EphySidebar.cpp
+++ b/embed/mozilla/EphySidebar.cpp
@@ -47,12 +47,11 @@ EphySidebar::~EphySidebar()
{
}
-
/* void addPanel (in wstring aTitle, in string aContentURL, in string aCustomizeURL); */
NS_IMETHODIMP
EphySidebar::AddPanel (const PRUnichar *aTitle,
- const char *aContentURL,
- const char *aCustomizeURL)
+ const char *aContentURL,
+ const char *aCustomizeURL)
{
nsEmbedCString title;
EphyEmbedSingle *single;
@@ -74,24 +73,36 @@ EphySidebar::AddPanel (const PRUnichar *aTitle,
/* void addPersistentPanel (in wstring aTitle, in string aContentURL, in string aCustomizeURL); */
NS_IMETHODIMP
EphySidebar::AddPersistentPanel (const PRUnichar *aTitle,
- const char *aContentURL,
- const char *aCustomizeURL)
+ const char *aContentURL,
+ const char *aCustomizeURL)
{
- return NS_ERROR_NOT_IMPLEMENTED;
+ return AddPanel (aTitle, aContentURL, aCustomizeURL);
}
/* void addSearchEngine (in string engineURL, in string iconURL, in wstring suggestedTitle, in wst
ring suggestedCategory); */
NS_IMETHODIMP
-EphySidebar::AddSearchEngine (const char *engineURL,
- const char *iconURL,
- const PRUnichar *suggestedTitle,
- const PRUnichar *suggestedCategory)
+EphySidebar::AddSearchEngine (const char *aEngineURL,
+ const char *aIconURL,
+ const PRUnichar *aSuggestedTitle,
+ const PRUnichar *aSuggestedCategory)
{
- return NS_ERROR_NOT_IMPLEMENTED;
-}
+ nsEmbedCString title;
+ EphyEmbedSingle *single;
+
+ NS_UTF16ToCString (nsEmbedString(aSuggestedTitle),
+ NS_CSTRING_ENCODING_UTF8, title);
+ LOG ("Adding search engine, engineurl=%s iconurl=%s title=%s", aEngineURL, aIconURL, title.get());
+ single = EPHY_EMBED_SINGLE (ephy_embed_shell_get_embed_single (embed_shell));
+
+ gboolean result = FALSE;
+ g_signal_emit_by_name (single, "add-search-engine",
+ aEngineURL, aIconURL, title.get(), &result);
+
+ return NS_OK;
+}
//------------------------------------------------------------------------------
//nsIClassInfo Impl.