Provide midori_browser_(un)block_action for extensions

So extensions can override individual actions without hacks.
This commit is contained in:
Christian Dywan 2011-04-30 12:17:55 +02:00
parent 7dec022471
commit 34da7c8090
3 changed files with 73 additions and 0 deletions

View file

@ -7057,6 +7057,69 @@ midori_browser_set_action_visible (MidoriBrowser* browser,
_action_set_sensitive (browser, name, visible);
}
/**
* midori_browser_block_action:
* @browser: a #MidoriBrowser
* @name: the action to be blocked
*
* Blocks built-in behavior of the specified action without
* disabling it, which gives you a chance to connect your
* own signal handling.
* Call midori_browser_unblock_action() to undo the effect.
*
* Since: 0.3.4
**/
void
midori_browser_block_action (MidoriBrowser* browser,
GtkAction* action)
{
const gchar* name;
guint i;
g_return_if_fail (MIDORI_IS_BROWSER (browser));
g_return_if_fail (GTK_IS_ACTION (action));
name = gtk_action_get_name (action);
for (i = 0; i < entries_n; i++)
if (g_str_equal (entries[i].name, name))
{
g_signal_handlers_block_by_func (action, entries[i].callback, browser);
return;
}
g_critical ("%s: Action \"%s\" can't be blocked.", G_STRFUNC, name);
}
/**
* midori_browser_unblock_action:
* @browser: a #MidoriBrowser
* @name: the action to be unblocked
*
* Restores built-in behavior of the specified action after
* previously blocking it with midori_browser_block_action().
*
* Since: 0.3.4
**/
void
midori_browser_unblock_action (MidoriBrowser* browser,
GtkAction* action)
{
const gchar* name;
guint i;
g_return_if_fail (MIDORI_IS_BROWSER (browser));
g_return_if_fail (GTK_IS_ACTION (action));
name = gtk_action_get_name (action);
for (i = 0; i < entries_n; i++)
if (g_str_equal (entries[i].name, name))
{
g_signal_handlers_unblock_by_func (action, entries[i].callback, browser);
return;
}
g_critical ("%s: Action \"%s\" can't be unblocked.", G_STRFUNC, name);
}
/**
* midori_browser_get_action_group:
* @browser: a #MidoriBrowser

View file

@ -106,6 +106,14 @@ void
midori_browser_activate_action (MidoriBrowser* browser,
const gchar* name);
void
midori_browser_block_action (MidoriBrowser* browser,
GtkAction* action);
void
midori_browser_unblock_action (MidoriBrowser* browser,
GtkAction* action);
void
midori_browser_set_action_visible (MidoriBrowser* browser,
const gchar* name,

View file

@ -39,6 +39,8 @@ namespace Midori {
public int add_uri (string uri);
public unowned View get_nth_tab (int n);
public GLib.List<weak View> get_tabs ();
public void block_action (Gtk.Action action);
public void unblock_action (Gtk.Action action);
public unowned Gtk.ActionGroup get_action_group ();
public unowned Browser get_for_widget (Gtk.Widget widget);
public unowned string[] get_toolbar_actions ();