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 GHashTable* global_keys;
|
||||||
static gchar* jsforms;
|
static gchar* jsforms;
|
||||||
|
|
||||||
|
|
||||||
|
static void
|
||||||
|
formhistory_toggle_state_cb (GtkAction* action,
|
||||||
|
MidoriBrowser* browser);
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
formhistory_prepare_js ()
|
formhistory_prepare_js ()
|
||||||
{
|
{
|
||||||
|
@ -291,11 +296,30 @@ static void
|
||||||
formhistory_app_add_browser_cb (MidoriApp* app,
|
formhistory_app_add_browser_cb (MidoriApp* app,
|
||||||
MidoriBrowser* browser,
|
MidoriBrowser* browser,
|
||||||
MidoriExtension* extension)
|
MidoriExtension* 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,
|
midori_browser_foreach (browser,
|
||||||
(GtkCallback)formhistory_add_tab_foreach_cb, extension);
|
(GtkCallback)formhistory_add_tab_foreach_cb, extension);
|
||||||
g_signal_connect (browser, "add-tab",
|
g_signal_connect (browser, "add-tab",
|
||||||
G_CALLBACK (formhistory_add_tab_cb), extension);
|
G_CALLBACK (formhistory_add_tab_cb), extension);
|
||||||
|
}
|
||||||
g_signal_connect (extension, "deactivate",
|
g_signal_connect (extension, "deactivate",
|
||||||
G_CALLBACK (formhistory_deactivate_cb), browser);
|
G_CALLBACK (formhistory_deactivate_cb), browser);
|
||||||
}
|
}
|
||||||
|
@ -319,6 +343,9 @@ formhistory_deactivate_cb (MidoriExtension* extension,
|
||||||
MidoriApp* app = midori_extension_get_app (extension);
|
MidoriApp* app = midori_extension_get_app (extension);
|
||||||
sqlite3* db;
|
sqlite3* db;
|
||||||
|
|
||||||
|
GtkActionGroup* action_group = midori_browser_get_action_group (browser);
|
||||||
|
GtkAction* action;
|
||||||
|
|
||||||
g_signal_handlers_disconnect_by_func (
|
g_signal_handlers_disconnect_by_func (
|
||||||
browser, formhistory_add_tab_cb, extension);
|
browser, formhistory_add_tab_cb, extension);
|
||||||
g_signal_handlers_disconnect_by_func (
|
g_signal_handlers_disconnect_by_func (
|
||||||
|
@ -328,6 +355,14 @@ formhistory_deactivate_cb (MidoriExtension* extension,
|
||||||
midori_browser_foreach (browser,
|
midori_browser_foreach (browser,
|
||||||
(GtkCallback)formhistory_deactivate_tabs, extension);
|
(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);
|
katze_assign (jsforms, NULL);
|
||||||
if (global_keys)
|
if (global_keys)
|
||||||
g_hash_table_destroy (global_keys);
|
g_hash_table_destroy (global_keys);
|
||||||
|
@ -420,6 +455,97 @@ formhistory_activate_cb (MidoriExtension* extension,
|
||||||
g_object_unref (browsers);
|
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
|
#if G_ENABLE_DEBUG
|
||||||
/*
|
/*
|
||||||
<html>
|
<html>
|
||||||
|
@ -463,11 +589,18 @@ extension_init (void)
|
||||||
"version", ver,
|
"version", ver,
|
||||||
"authors", "Alexander V. Butenko <a.butenka@gmail.com>",
|
"authors", "Alexander V. Butenko <a.butenka@gmail.com>",
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
|
midori_extension_install_boolean (extension, "always-load", TRUE);
|
||||||
|
|
||||||
g_free (desc);
|
g_free (desc);
|
||||||
|
|
||||||
if (should_init)
|
if (should_init)
|
||||||
|
{
|
||||||
g_signal_connect (extension, "activate",
|
g_signal_connect (extension, "activate",
|
||||||
G_CALLBACK (formhistory_activate_cb), NULL);
|
G_CALLBACK (formhistory_activate_cb), NULL);
|
||||||
|
g_signal_connect (extension, "open-preferences",
|
||||||
|
G_CALLBACK (formhistory_preferences_cb), NULL);
|
||||||
|
}
|
||||||
|
|
||||||
return extension;
|
return extension;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue