X-Git-Url: https://git.armaanb.net/?a=blobdiff_plain;f=src%2Fbrowser.c;h=4542eb7c3a9f2e1290b73924bc2da564154b0584;hb=2348acb3869ec2f60b5c420b6bbd52b53a3d999b;hp=83961b0745b52992916af123f952f8437323ef44;hpb=9bd9dca7840d428f7b9fc3435d85615f86f24b5e;p=chorizo.git diff --git a/src/browser.c b/src/browser.c index 83961b0..4542eb7 100644 --- a/src/browser.c +++ b/src/browser.c @@ -38,15 +38,18 @@ GKeyFile *get_ini(void); GKeyFile *config; struct Client { - gchar *external_handler_uri; - gchar *feed_html; - gchar *hover_uri; + GtkWidget *imgbutton; + GtkWidget *jsbutton; GtkWidget *location; GtkWidget *tabicon; GtkWidget *tablabel; GtkWidget *vbox; GtkWidget *web_view; + WebKitSettings *settings; gboolean focus_new_tab; + gchar *external_handler_uri; + gchar *feed_html; + gchar *hover_uri; }; struct Configuration { @@ -55,6 +58,7 @@ struct Configuration { gboolean cooperative_alone; gboolean cooperative_instances; gboolean enable_console_to_stdout; + gboolean images_disabled; gboolean javascript_disabled; gboolean private; gboolean spellcheck_disabled; @@ -79,6 +83,22 @@ gint clients = 0; int cooperative_pipe_fp = 0; gchar *search_text; +void +togglejs(GtkButton *jsbutton, gpointer data) { + struct Client *c = (struct Client *)data; + webkit_settings_set_enable_javascript( + c->settings, !webkit_settings_get_enable_javascript(c->settings)); + webkit_web_view_set_settings(WEBKIT_WEB_VIEW(c->web_view), c->settings); +} + +void +toggleimg(GtkButton *imgbutton, gpointer data) { + struct Client *c = (struct Client *)data; + webkit_settings_set_auto_load_images( + c->settings, !webkit_settings_get_auto_load_images(c->settings)); + webkit_web_view_set_settings(WEBKIT_WEB_VIEW(c->web_view), c->settings); +} + void client_destroy(GtkWidget *widget, gpointer data) { struct Client *c = (struct Client *)data; @@ -127,11 +147,13 @@ client_new(const gchar *uri, WebKitWebView *related_wv, gboolean show, else c->web_view = webkit_web_view_new_with_related_view(related_wv); + c->settings = webkit_web_view_get_settings(WEBKIT_WEB_VIEW(c->web_view)); + webkit_web_view_set_zoom_level(WEBKIT_WEB_VIEW(c->web_view), cfg.global_zoom); - WebKitSettings *settings = - webkit_web_view_get_settings(WEBKIT_WEB_VIEW(c->web_view)); - webkit_settings_set_enable_javascript(settings, !cfg.javascript_disabled); + webkit_settings_set_enable_javascript(c->settings, + !cfg.javascript_disabled); + webkit_settings_set_auto_load_images(c->settings, !cfg.images_disabled); g_signal_connect(G_OBJECT(c->web_view), "notify::favicon", G_CALLBACK(changed_favicon), c); g_signal_connect(G_OBJECT(c->web_view), "notify::title", @@ -158,24 +180,39 @@ client_new(const gchar *uri, WebKitWebView *related_wv, gboolean show, G_CALLBACK(crashed_web_view), c); if (cfg.user_agent != NULL) { - g_object_set(settings, "user-agent", cfg.user_agent, NULL); + g_object_set(c->settings, "user-agent", cfg.user_agent, NULL); } if (cfg.enable_console_to_stdout) - webkit_settings_set_enable_write_console_messages_to_stdout(settings, + webkit_settings_set_enable_write_console_messages_to_stdout(c->settings, TRUE); - webkit_settings_set_enable_developer_extras(settings, TRUE); + webkit_settings_set_enable_developer_extras(c->settings, TRUE); GtkWidget *locbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); + + c->jsbutton = gtk_toggle_button_new_with_label("JS"); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(c->jsbutton), + !cfg.javascript_disabled); + g_signal_connect(G_OBJECT(c->jsbutton), "toggled", G_CALLBACK(togglejs), c); + + c->imgbutton = gtk_toggle_button_new_with_label("IMG"); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(c->imgbutton), + !cfg.images_disabled); + g_signal_connect(G_OBJECT(c->imgbutton), "toggled", G_CALLBACK(toggleimg), + c); + c->location = gtk_entry_new(); gtk_box_pack_start(GTK_BOX(locbox), c->location, TRUE, TRUE, 5); + gtk_box_pack_end(GTK_BOX(locbox), c->jsbutton, FALSE, FALSE, 0); + gtk_box_pack_end(GTK_BOX(locbox), c->imgbutton, FALSE, FALSE, 0); + if (cfg.private) { GtkWidget *privindicator = gtk_label_new("Private mode"); gtk_widget_set_tooltip_text( privindicator, "You are in private mode. No history, caches, or " "cookies will be saved beyond this session."); - gtk_box_pack_end(GTK_BOX(locbox), privindicator, FALSE, FALSE, 0); + gtk_box_pack_end(GTK_BOX(locbox), privindicator, FALSE, FALSE, 5); } g_signal_connect(G_OBJECT(c->location), "key-press-event", @@ -188,7 +225,7 @@ client_new(const gchar *uri, WebKitWebView *related_wv, gboolean show, * right here is to have that padding right from the start. This * avoids a graphical artifact. */ gtk_entry_set_icon_from_icon_name(GTK_ENTRY(c->location), - GTK_ENTRY_ICON_PRIMARY, NULL); + GTK_ENTRY_ICON_SECONDARY, NULL); c->vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_box_pack_start(GTK_BOX(c->vbox), locbox, FALSE, FALSE, 0); @@ -492,6 +529,8 @@ get_config(void) { g_key_file_get_string(config, "browser", "user_agent", NULL); cfg.javascript_disabled = g_key_file_get_boolean(config, "browser", "javascript_disabled", NULL); + cfg.images_disabled = + g_key_file_get_boolean(config, "browser", "images_disabled", NULL); char *input_cookie_policy = g_key_file_get_string(config, "browser", "cookie_policy", NULL); cfg.cookie_policy = WEBKIT_COOKIE_POLICY_ACCEPT_NO_THIRD_PARTY; @@ -561,13 +600,13 @@ grab_feeds_finished(GObject *object, GAsyncResult *result, gpointer data) { } gtk_entry_set_icon_from_icon_name(GTK_ENTRY(c->location), - GTK_ENTRY_ICON_PRIMARY, + GTK_ENTRY_ICON_SECONDARY, "application-rss+xml-symbolic"); gtk_entry_set_icon_activatable(GTK_ENTRY(c->location), GTK_ENTRY_ICON_PRIMARY, TRUE); } else { gtk_entry_set_icon_from_icon_name(GTK_ENTRY(c->location), - GTK_ENTRY_ICON_PRIMARY, NULL); + GTK_ENTRY_ICON_SECONDARY, NULL); } webkit_javascript_result_unref(js_result); @@ -738,9 +777,6 @@ key_common(GtkWidget *widget, GdkEvent *event, gpointer data) { if (event->type == GDK_KEY_PRESS) { if (((GdkEventKey *)event)->state & GDK_CONTROL_MASK) { - WebKitSettings *settings = - webkit_web_view_get_settings(WEBKIT_WEB_VIEW(c->web_view)); - gboolean js = webkit_settings_get_enable_javascript(settings); int key = ((GdkEventKey *)event)->keyval; if (def_key("download_manager", GDK_KEY_y) == key) { downloadmanager_show(); @@ -858,11 +894,20 @@ key_common(GtkWidget *widget, GdkEvent *event, gpointer data) { gtk_notebook_next_page(GTK_NOTEBOOK(mw.notebook)); return TRUE; } else if (def_key("toggle_js", GDK_KEY_o) == key) { - webkit_settings_set_enable_javascript(settings, - (js) ? FALSE : TRUE); + gboolean on = + webkit_settings_get_enable_javascript(c->settings); + webkit_settings_set_enable_javascript(c->settings, !on); webkit_web_view_set_settings(WEBKIT_WEB_VIEW(c->web_view), - settings); - return TRUE; + c->settings); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(c->jsbutton), + !on); + } else if (def_key("toggle_img", -1) == key) { + gboolean on = webkit_settings_get_auto_load_images(c->settings); + webkit_settings_set_auto_load_images(c->settings, !on); + webkit_web_view_set_settings(WEBKIT_WEB_VIEW(c->web_view), + c->settings); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(c->imgbutton), + !on); } else if (def_key("web_search", GDK_KEY_d) == key) { gtk_widget_grab_focus(c->location); gtk_entry_set_text(GTK_ENTRY(c->location), "w/");