Allow users to enable form history per tab (Ctrl+Shift+F)
Note: you have to reload the page before the state change has any effect.
This commit is contained in:
parent
2b6bf42ae0
commit
2e532f1895
1 changed files with 138 additions and 5 deletions
|
@ -24,6 +24,11 @@
|
|||
static GHashTable* global_keys;
|
||||
static gchar* jsforms;
|
||||
|
||||
|
||||
static void
|
||||
formhistory_toggle_state_cb (GtkAction* action,
|
||||
MidoriBrowser* browser);
|
||||
|
||||
static gboolean
|
||||
formhistory_prepare_js ()
|
||||
{
|
||||
|
@ -292,10 +297,29 @@ formhistory_app_add_browser_cb (MidoriApp* app,
|
|||
MidoriBrowser* browser,
|
||||
MidoriExtension* extension)
|
||||
{
|
||||
midori_browser_foreach (browser,
|
||||
(GtkCallback)formhistory_add_tab_foreach_cb, extension);
|
||||
g_signal_connect (browser, "add-tab",
|
||||
G_CALLBACK (formhistory_add_tab_cb), extension);
|
||||
GtkAccelGroup* acg = gtk_accel_group_new ();
|
||||
GtkActionGroup* action_group = midori_browser_get_action_group (browser);
|
||||
GtkAction* action = gtk_action_new ("FormHistoryToggleState",
|
||||
_("Toggle form history state"),
|
||||
_("Activate or deactivate form history for the current tab."), NULL);
|
||||
gtk_window_add_accel_group (GTK_WINDOW (browser), acg);
|
||||
|
||||
g_object_set_data (G_OBJECT (browser), "FormHistoryExtension", extension);
|
||||
|
||||
g_signal_connect (action, "activate",
|
||||
G_CALLBACK (formhistory_toggle_state_cb), browser);
|
||||
|
||||
gtk_action_group_add_action_with_accel (action_group, action, "<Ctrl><Shift>F");
|
||||
gtk_action_set_accel_group (action, acg);
|
||||
gtk_action_connect_accelerator (action);
|
||||
|
||||
if (midori_extension_get_boolean (extension, "always-load"))
|
||||
{
|
||||
midori_browser_foreach (browser,
|
||||
(GtkCallback)formhistory_add_tab_foreach_cb, extension);
|
||||
g_signal_connect (browser, "add-tab",
|
||||
G_CALLBACK (formhistory_add_tab_cb), extension);
|
||||
}
|
||||
g_signal_connect (extension, "deactivate",
|
||||
G_CALLBACK (formhistory_deactivate_cb), browser);
|
||||
}
|
||||
|
@ -314,11 +338,14 @@ formhistory_deactivate_tabs (MidoriView* view,
|
|||
|
||||
static void
|
||||
formhistory_deactivate_cb (MidoriExtension* extension,
|
||||
MidoriBrowser* browser)
|
||||
MidoriBrowser* browser)
|
||||
{
|
||||
MidoriApp* app = midori_extension_get_app (extension);
|
||||
sqlite3* db;
|
||||
|
||||
GtkActionGroup* action_group = midori_browser_get_action_group (browser);
|
||||
GtkAction* action;
|
||||
|
||||
g_signal_handlers_disconnect_by_func (
|
||||
browser, formhistory_add_tab_cb, extension);
|
||||
g_signal_handlers_disconnect_by_func (
|
||||
|
@ -328,6 +355,14 @@ formhistory_deactivate_cb (MidoriExtension* extension,
|
|||
midori_browser_foreach (browser,
|
||||
(GtkCallback)formhistory_deactivate_tabs, extension);
|
||||
|
||||
g_object_set_data (G_OBJECT (browser), "FormHistoryExtension", NULL);
|
||||
action = gtk_action_group_get_action ( action_group, "FormHistoryToggleState");
|
||||
if (action != NULL)
|
||||
{
|
||||
gtk_action_group_remove_action (action_group, action);
|
||||
g_object_unref (action);
|
||||
}
|
||||
|
||||
katze_assign (jsforms, NULL);
|
||||
if (global_keys)
|
||||
g_hash_table_destroy (global_keys);
|
||||
|
@ -420,6 +455,97 @@ formhistory_activate_cb (MidoriExtension* extension,
|
|||
g_object_unref (browsers);
|
||||
}
|
||||
|
||||
static void
|
||||
formhistory_preferences_response_cb (GtkWidget* dialog,
|
||||
gint response_id,
|
||||
MidoriExtension* extension)
|
||||
{
|
||||
GtkWidget* checkbox;
|
||||
gboolean old_state;
|
||||
gboolean new_state;
|
||||
MidoriApp* app;
|
||||
KatzeArray* browsers;
|
||||
MidoriBrowser* browser;
|
||||
|
||||
if (response_id == GTK_RESPONSE_APPLY)
|
||||
{
|
||||
checkbox = g_object_get_data (G_OBJECT (dialog), "always-load-checkbox");
|
||||
new_state = !gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (checkbox));
|
||||
old_state = midori_extension_get_boolean (extension, "always-load");
|
||||
|
||||
if (old_state != new_state)
|
||||
{
|
||||
midori_extension_set_boolean (extension, "always-load", new_state);
|
||||
|
||||
app = midori_extension_get_app (extension);
|
||||
browsers = katze_object_get_object (app, "browsers");
|
||||
KATZE_ARRAY_FOREACH_ITEM (browser, browsers)
|
||||
{
|
||||
midori_browser_foreach (browser,
|
||||
(GtkCallback)formhistory_deactivate_tabs, extension);
|
||||
g_signal_handlers_disconnect_by_func (
|
||||
browser, formhistory_add_tab_cb, extension);
|
||||
|
||||
if (new_state)
|
||||
{
|
||||
midori_browser_foreach (browser,
|
||||
(GtkCallback)formhistory_add_tab_foreach_cb, extension);
|
||||
g_signal_connect (browser, "add-tab",
|
||||
G_CALLBACK (formhistory_add_tab_cb), extension);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
gtk_widget_destroy (dialog);
|
||||
}
|
||||
|
||||
static void
|
||||
formhistory_preferences_cb (MidoriExtension* extension)
|
||||
{
|
||||
GtkWidget* dialog;
|
||||
GtkWidget* content_area;
|
||||
GtkWidget* checkbox;
|
||||
|
||||
dialog = gtk_dialog_new ();
|
||||
|
||||
gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
|
||||
|
||||
gtk_dialog_add_button (GTK_DIALOG (dialog), GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL);
|
||||
gtk_dialog_add_button (GTK_DIALOG (dialog), GTK_STOCK_APPLY, GTK_RESPONSE_APPLY);
|
||||
|
||||
content_area = gtk_dialog_get_content_area (GTK_DIALOG (dialog));
|
||||
checkbox = gtk_check_button_new_with_label (_("only activate form history via hotkey (Ctrl+Shift+F) per tab"));
|
||||
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (checkbox),
|
||||
!midori_extension_get_boolean (extension, "always-load"));
|
||||
g_object_set_data (G_OBJECT (dialog), "always-load-checkbox", checkbox);
|
||||
gtk_container_add (GTK_CONTAINER (content_area), checkbox);
|
||||
|
||||
g_signal_connect (dialog,
|
||||
"response",
|
||||
G_CALLBACK (formhistory_preferences_response_cb),
|
||||
extension);
|
||||
gtk_widget_show_all (dialog);
|
||||
}
|
||||
|
||||
static void
|
||||
formhistory_toggle_state_cb (GtkAction* action,
|
||||
MidoriBrowser* browser)
|
||||
{
|
||||
MidoriView* view = MIDORI_VIEW (midori_browser_get_current_tab (browser));
|
||||
MidoriExtension* extension = g_object_get_data (G_OBJECT (browser), "FormHistoryExtension");
|
||||
GtkWidget* web_view = midori_view_get_web_view (view);
|
||||
|
||||
if (g_signal_handler_find (web_view, G_SIGNAL_MATCH_FUNC,
|
||||
g_signal_lookup ("window-object-cleared", MIDORI_TYPE_VIEW), 0, NULL,
|
||||
formhistory_window_object_cleared_cb, extension))
|
||||
{
|
||||
formhistory_deactivate_tabs (view, browser, extension);
|
||||
} else {
|
||||
formhistory_add_tab_cb (browser, view, extension);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#if G_ENABLE_DEBUG
|
||||
/*
|
||||
<html>
|
||||
|
@ -463,11 +589,18 @@ extension_init (void)
|
|||
"version", ver,
|
||||
"authors", "Alexander V. Butenko <a.butenka@gmail.com>",
|
||||
NULL);
|
||||
|
||||
midori_extension_install_boolean (extension, "always-load", TRUE);
|
||||
|
||||
g_free (desc);
|
||||
|
||||
if (should_init)
|
||||
{
|
||||
g_signal_connect (extension, "activate",
|
||||
G_CALLBACK (formhistory_activate_cb), NULL);
|
||||
g_signal_connect (extension, "open-preferences",
|
||||
G_CALLBACK (formhistory_preferences_cb), NULL);
|
||||
}
|
||||
|
||||
return extension;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue