Show search engines as "actions" in location completion
This commit is contained in:
parent
52ab540db5
commit
50f078575b
3 changed files with 110 additions and 2 deletions
|
@ -4751,6 +4751,8 @@ midori_browser_set_property (GObject* object,
|
||||||
case PROP_SEARCH_ENGINES:
|
case PROP_SEARCH_ENGINES:
|
||||||
/* FIXME: Disconnect handlers */
|
/* FIXME: Disconnect handlers */
|
||||||
katze_object_assign (browser->search_engines, g_value_dup_object (value));
|
katze_object_assign (browser->search_engines, g_value_dup_object (value));
|
||||||
|
midori_location_action_set_search_engines (MIDORI_LOCATION_ACTION (
|
||||||
|
_action_by_name (browser, "Location")), browser->search_engines);
|
||||||
midori_search_action_set_search_engines (MIDORI_SEARCH_ACTION (
|
midori_search_action_set_search_engines (MIDORI_SEARCH_ACTION (
|
||||||
_action_by_name (browser, "Search")), browser->search_engines);
|
_action_by_name (browser, "Search")), browser->search_engines);
|
||||||
/* FIXME: Connect to updates */
|
/* FIXME: Connect to updates */
|
||||||
|
|
|
@ -27,6 +27,7 @@ struct _MidoriLocationAction
|
||||||
GtkAction parent_instance;
|
GtkAction parent_instance;
|
||||||
|
|
||||||
gchar* uri;
|
gchar* uri;
|
||||||
|
KatzeArray* search_engines;
|
||||||
gdouble progress;
|
gdouble progress;
|
||||||
gchar* secondary_icon;
|
gchar* secondary_icon;
|
||||||
|
|
||||||
|
@ -292,6 +293,7 @@ static void
|
||||||
midori_location_action_init (MidoriLocationAction* location_action)
|
midori_location_action_init (MidoriLocationAction* location_action)
|
||||||
{
|
{
|
||||||
location_action->uri = NULL;
|
location_action->uri = NULL;
|
||||||
|
location_action->search_engines = NULL;
|
||||||
location_action->progress = 0.0;
|
location_action->progress = 0.0;
|
||||||
location_action->secondary_icon = NULL;
|
location_action->secondary_icon = NULL;
|
||||||
location_action->default_icon = NULL;
|
location_action->default_icon = NULL;
|
||||||
|
@ -314,6 +316,7 @@ midori_location_action_finalize (GObject* object)
|
||||||
MidoriLocationAction* location_action = MIDORI_LOCATION_ACTION (object);
|
MidoriLocationAction* location_action = MIDORI_LOCATION_ACTION (object);
|
||||||
|
|
||||||
katze_assign (location_action->uri, NULL);
|
katze_assign (location_action->uri, NULL);
|
||||||
|
katze_assign (location_action->search_engines, NULL);
|
||||||
|
|
||||||
katze_object_assign (location_action->model, NULL);
|
katze_object_assign (location_action->model, NULL);
|
||||||
katze_object_assign (location_action->sort_model, NULL);
|
katze_object_assign (location_action->sort_model, NULL);
|
||||||
|
@ -728,6 +731,51 @@ midori_location_entry_match_selected_cb (GtkEntryCompletion* completion,
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
midori_location_entry_action_activated_cb (GtkEntryCompletion* completion,
|
||||||
|
gint action,
|
||||||
|
MidoriLocationAction* location_action)
|
||||||
|
{
|
||||||
|
if (location_action->search_engines)
|
||||||
|
{
|
||||||
|
KatzeItem* item = katze_array_get_nth_item (
|
||||||
|
location_action->search_engines, action);
|
||||||
|
GtkWidget* entry = gtk_entry_completion_get_entry (completion);
|
||||||
|
const gchar* keywords = gtk_entry_get_text (GTK_ENTRY (entry));
|
||||||
|
const gchar* uri = katze_item_get_uri (item);
|
||||||
|
gchar* search;
|
||||||
|
if (!item)
|
||||||
|
return;
|
||||||
|
if (strstr (uri, "%s"))
|
||||||
|
search = g_strdup_printf (uri, keywords);
|
||||||
|
else
|
||||||
|
search = g_strconcat (uri, " ", keywords, NULL);
|
||||||
|
midori_location_action_set_uri (location_action, search);
|
||||||
|
g_signal_emit (location_action, signals[SUBMIT_URI], 0, search, FALSE);
|
||||||
|
g_free (search);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
midori_location_action_add_actions (GtkEntryCompletion* completion,
|
||||||
|
KatzeArray* search_engines)
|
||||||
|
{
|
||||||
|
guint i;
|
||||||
|
KatzeItem* item;
|
||||||
|
|
||||||
|
if (!search_engines)
|
||||||
|
return;
|
||||||
|
|
||||||
|
i = 0;
|
||||||
|
while ((item = katze_array_get_nth_item (search_engines, i++)))
|
||||||
|
{
|
||||||
|
gchar* text = g_strdup_printf (_("Search with %s"),
|
||||||
|
katze_item_get_name (item));
|
||||||
|
gtk_entry_completion_insert_action_text (completion, i, text);
|
||||||
|
g_free (text);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
midori_location_action_completion_init (MidoriLocationAction* location_action,
|
midori_location_action_completion_init (MidoriLocationAction* location_action,
|
||||||
GtkWidget* location_entry)
|
GtkWidget* location_entry)
|
||||||
|
@ -763,6 +811,11 @@ midori_location_action_completion_init (MidoriLocationAction* location_action,
|
||||||
g_signal_connect (completion, "match-selected",
|
g_signal_connect (completion, "match-selected",
|
||||||
G_CALLBACK (midori_location_entry_match_selected_cb), location_action);
|
G_CALLBACK (midori_location_entry_match_selected_cb), location_action);
|
||||||
|
|
||||||
|
midori_location_action_add_actions (completion,
|
||||||
|
location_action->search_engines);
|
||||||
|
g_signal_connect (completion, "action-activated",
|
||||||
|
G_CALLBACK (midori_location_entry_action_activated_cb), location_action);
|
||||||
|
|
||||||
g_object_unref (completion);
|
g_object_unref (completion);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1151,6 +1204,55 @@ midori_location_action_set_title_for_uri (MidoriLocationAction* location_action,
|
||||||
midori_location_action_prepend_item (location_action, &item);
|
midori_location_action_prepend_item (location_action, &item);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* midori_location_action_set_search_engines:
|
||||||
|
* @location_action: a #MidoriLocationAction
|
||||||
|
* @search_engines: a #KatzeArray
|
||||||
|
*
|
||||||
|
* Assigns the specified search engines to the location action.
|
||||||
|
* Search engines will appear as actions in the completion.
|
||||||
|
*
|
||||||
|
* Since: 0.1.6
|
||||||
|
**/
|
||||||
|
void
|
||||||
|
midori_location_action_set_search_engines (MidoriLocationAction* location_action,
|
||||||
|
KatzeArray* search_engines)
|
||||||
|
{
|
||||||
|
GSList* proxies;
|
||||||
|
GtkWidget* alignment;
|
||||||
|
GtkWidget* entry;
|
||||||
|
GtkWidget* child;
|
||||||
|
GtkEntryCompletion* completion;
|
||||||
|
|
||||||
|
g_return_if_fail (MIDORI_IS_LOCATION_ACTION (location_action));
|
||||||
|
|
||||||
|
if (search_engines)
|
||||||
|
g_object_ref (search_engines);
|
||||||
|
|
||||||
|
proxies = gtk_action_get_proxies (GTK_ACTION (location_action));
|
||||||
|
|
||||||
|
for (; proxies != NULL; proxies = g_slist_next (proxies))
|
||||||
|
if (GTK_IS_TOOL_ITEM (proxies->data))
|
||||||
|
{
|
||||||
|
KatzeItem* item;
|
||||||
|
guint i;
|
||||||
|
|
||||||
|
alignment = gtk_bin_get_child (GTK_BIN (proxies->data));
|
||||||
|
entry = gtk_bin_get_child (GTK_BIN (alignment));
|
||||||
|
child = gtk_bin_get_child (GTK_BIN (entry));
|
||||||
|
|
||||||
|
completion = gtk_entry_get_completion (GTK_ENTRY (child));
|
||||||
|
i = 0;
|
||||||
|
if (location_action->search_engines)
|
||||||
|
while ((item = katze_array_get_nth_item (location_action->search_engines, i)))
|
||||||
|
gtk_entry_completion_delete_action (completion, i++);
|
||||||
|
midori_location_action_add_actions (completion, search_engines);
|
||||||
|
}
|
||||||
|
|
||||||
|
katze_object_assign (location_action->search_engines, search_engines);
|
||||||
|
/* FIXME: Take care of adding and removing search engines as needed */
|
||||||
|
}
|
||||||
|
|
||||||
gdouble
|
gdouble
|
||||||
midori_location_action_get_progress (MidoriLocationAction* location_action)
|
midori_location_action_get_progress (MidoriLocationAction* location_action)
|
||||||
{
|
{
|
||||||
|
@ -1218,8 +1320,8 @@ midori_location_action_set_secondary_icon (MidoriLocationAction* location_action
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* midori_location_entry_set_item_from_uri:
|
* midori_location_action_set_item_from_uri:
|
||||||
* @location_entry: a #MidoriLocationEntry
|
* @location_action: a #MidoriLocationAction
|
||||||
* @uri: a string
|
* @uri: a string
|
||||||
*
|
*
|
||||||
* Finds the item from the list matching @uri
|
* Finds the item from the list matching @uri
|
||||||
|
|
|
@ -81,6 +81,10 @@ midori_location_action_set_title_for_uri (MidoriLocationAction* location_acti
|
||||||
const gchar* title,
|
const gchar* title,
|
||||||
const gchar* text);
|
const gchar* text);
|
||||||
|
|
||||||
|
void
|
||||||
|
midori_location_action_set_search_engines (MidoriLocationAction* location_action,
|
||||||
|
KatzeArray* search_engines);
|
||||||
|
|
||||||
gdouble
|
gdouble
|
||||||
midori_location_action_get_progress (MidoriLocationAction* location_action);
|
midori_location_action_get_progress (MidoriLocationAction* location_action);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue