diff options
Diffstat (limited to 'desktop')
-rw-r--r-- | desktop/browser.c | 66 | ||||
-rw-r--r-- | desktop/options.c | 122 | ||||
-rw-r--r-- | desktop/options.h | 1 |
3 files changed, 119 insertions, 70 deletions
diff --git a/desktop/browser.c b/desktop/browser.c index b4e5d4485..59e6e7a35 100644 --- a/desktop/browser.c +++ b/desktop/browser.c @@ -98,7 +98,8 @@ static void browser_window_destroy_internal(struct browser_window *bw); static void browser_window_set_scale_internal(struct browser_window *bw, float scale); static struct browser_window *browser_window_find_target( - struct browser_window *bw, const char *target, bool new_window); + struct browser_window *bw, const char *target, + browser_mouse_state mouse); static void browser_window_find_target_internal(struct browser_window *bw, const char *target, int depth, struct browser_window *page, int *rdepth, struct browser_window **bw_target); @@ -1073,8 +1074,8 @@ void browser_window_set_scale_internal(struct browser_window *bw, float scale) * \param new_window always return a new window (ie 'Open Link in New Window') */ -struct browser_window *browser_window_find_target(struct browser_window *bw, const char *target, - bool new_window) +struct browser_window *browser_window_find_target(struct browser_window *bw, + const char *target, browser_mouse_state mouse) { struct browser_window *bw_target; struct browser_window *top; @@ -1088,21 +1089,62 @@ struct browser_window *browser_window_find_target(struct browser_window *bw, con if (!target) target = TARGET_SELF; - /* allow the simple case of target="_blank" to be ignored if requested */ - if ((!new_window) && (!option_target_blank)) { + /* allow the simple case of target="_blank" to be ignored if requested + */ + if ((!(mouse & BROWSER_MOUSE_CLICK_2)) && + (!((mouse & BROWSER_MOUSE_CLICK_2) && + (mouse & BROWSER_MOUSE_MOD_2))) && + (!option_target_blank)) { + /* not a mouse button 2 click + * not a mouse button 1 click with ctrl pressed + * configured to ignore target="_blank" */ if ((target == TARGET_BLANK) || (!strcasecmp(target, "_blank"))) return bw; } /* handle reserved keywords */ - if ((new_window) || ((target == TARGET_BLANK) || (!strcasecmp(target, "_blank")))) { + if (((option_button_2_tab) && (mouse & BROWSER_MOUSE_CLICK_2)) || + ((!option_button_2_tab) && + ((mouse & BROWSER_MOUSE_CLICK_1) && + (mouse & BROWSER_MOUSE_MOD_2))) || + ((option_button_2_tab) && ((target == TARGET_BLANK) || + (!strcasecmp(target, "_blank"))))) { + /* open in new tab if: + * - button_2 opens in new tab and button_2 was pressed + * OR + * - button_2 doesn't open in new tabs and button_1 was + * pressed with ctrl held + * OR + * - button_2 opens in new tab and the link target is "_blank" + */ + bw_target = browser_window_create(NULL, bw, NULL, false, true); + if (!bw_target) + return bw; + return bw_target; + } else if (((!option_button_2_tab) && + (mouse & BROWSER_MOUSE_CLICK_2)) || + ((option_button_2_tab) && + ((mouse & BROWSER_MOUSE_CLICK_1) && + (mouse & BROWSER_MOUSE_MOD_2))) || + ((!option_button_2_tab) && ((target == TARGET_BLANK) || + (!strcasecmp(target, "_blank"))))) { + /* open in new window if: + * - button_2 doesn't open in new tabs and button_2 was pressed + * OR + * - button_2 opens in new tab and button_1 was pressed with + * ctrl held + * OR + * - button_2 doesn't open in new tabs and the link target is + * "_blank" + */ bw_target = browser_window_create(NULL, bw, NULL, false, false); if (!bw_target) return bw; return bw_target; } else if ((target == TARGET_SELF) || (!strcasecmp(target, "_self"))) { return bw; - } else if ((target == TARGET_PARENT) || (!strcasecmp(target, "_parent"))) { + } else if ((target == TARGET_PARENT) || + (!strcasecmp(target, "_parent"))) { if (bw->parent) return bw->parent; return bw; @@ -1539,10 +1581,6 @@ void browser_window_mouse_action_html(struct browser_window *bw, /* force download of link */ browser_window_go_post(bw, url, 0, 0, false, c->url, true, true, 0); - } else if (mouse & BROWSER_MOUSE_CLICK_1 && - mouse & BROWSER_MOUSE_MOD_2) { - /* open link in new tab */ - browser_window_create(url, bw, c->url, true, true); } else if (mouse & BROWSER_MOUSE_CLICK_2 && mouse & BROWSER_MOUSE_MOD_1) { free(browser_window_href_content.url); @@ -1648,13 +1686,11 @@ void browser_window_mouse_action_html(struct browser_window *bw, switch (action) { case ACTION_SUBMIT: browser_form_submit(bw, - browser_window_find_target(bw, target, - (mouse & BROWSER_MOUSE_CLICK_2)), + browser_window_find_target(bw, target, mouse), gadget->form, gadget); break; case ACTION_GO: - browser_window_go(browser_window_find_target(bw, target, - (mouse & BROWSER_MOUSE_CLICK_2)), + browser_window_go(browser_window_find_target(bw, target, mouse), url, c->url, true); break; case ACTION_NONE: diff --git a/desktop/options.c b/desktop/options.c index d8812dfb9..6cf6dcf04 100644 --- a/desktop/options.c +++ b/desktop/options.c @@ -186,6 +186,9 @@ bool option_suppress_curl_debug = true; /** Whether to allow target="_blank" */ bool option_target_blank = true; +/** Whether second mouse button opens in new tab */ +bool option_button_2_tab = true; + EXTRA_OPTION_DEFINE @@ -194,64 +197,73 @@ struct { enum { OPTION_BOOL, OPTION_INTEGER, OPTION_STRING } type; void *p; } option_table[] = { - { "http_proxy", OPTION_BOOL, &option_http_proxy }, - { "http_proxy_host", OPTION_STRING, &option_http_proxy_host }, - { "http_proxy_port", OPTION_INTEGER, &option_http_proxy_port }, - { "http_proxy_auth", OPTION_INTEGER, &option_http_proxy_auth }, - { "http_proxy_auth_user", OPTION_STRING, &option_http_proxy_auth_user }, - { "http_proxy_auth_pass", OPTION_STRING, &option_http_proxy_auth_pass }, - { "font_size", OPTION_INTEGER, &option_font_size }, - { "font_min_size", OPTION_INTEGER, &option_font_min_size }, - { "font_sans", OPTION_STRING, &option_font_sans }, - { "font_serif", OPTION_STRING, &option_font_serif }, - { "font_mono", OPTION_STRING, &option_font_mono }, - { "font_cursive", OPTION_STRING, &option_font_cursive }, - { "font_fantasy", OPTION_STRING, &option_font_fantasy }, - { "accept_language", OPTION_STRING, &option_accept_language }, - { "accept_charset", OPTION_STRING, &option_accept_charset }, - { "memory_cache_size", OPTION_INTEGER, &option_memory_cache_size }, - { "disc_cache_age", OPTION_INTEGER, &option_disc_cache_age }, - { "block_advertisements", OPTION_BOOL, &option_block_ads }, - { "minimum_gif_delay", OPTION_INTEGER, &option_minimum_gif_delay }, - { "send_referer", OPTION_BOOL, &option_send_referer }, - { "animate_images", OPTION_BOOL, &option_animate_images }, - { "expire_url", OPTION_INTEGER, &option_expire_url }, - { "font_default", OPTION_INTEGER, &option_font_default }, - { "ca_bundle", OPTION_STRING, &option_ca_bundle }, - { "ca_path", OPTION_STRING, &option_ca_path }, - { "cookie_file", OPTION_STRING, &option_cookie_file }, - { "cookie_jar", OPTION_STRING, &option_cookie_jar }, - { "homepage_url", OPTION_STRING, &option_homepage_url }, - { "url_suggestion", OPTION_BOOL, &option_url_suggestion }, - { "window_x", OPTION_INTEGER, &option_window_x }, - { "window_y", OPTION_INTEGER, &option_window_y }, - { "window_width", OPTION_INTEGER, &option_window_width }, - { "window_height", OPTION_INTEGER, &option_window_height }, - { "window_screen_width", OPTION_INTEGER, &option_window_screen_width }, - { "window_screen_height",OPTION_INTEGER, &option_window_screen_height }, - { "toolbar_status_size", OPTION_INTEGER, &option_toolbar_status_width }, - { "scale", OPTION_INTEGER, &option_scale }, - { "incremental_reflow", OPTION_BOOL, &option_incremental_reflow }, - { "min_reflow_period", OPTION_INTEGER, &option_min_reflow_period }, + { "http_proxy", OPTION_BOOL, &option_http_proxy }, + { "http_proxy_host", OPTION_STRING, &option_http_proxy_host }, + { "http_proxy_port", OPTION_INTEGER, &option_http_proxy_port }, + { "http_proxy_auth", OPTION_INTEGER, &option_http_proxy_auth }, + { "http_proxy_auth_user", + OPTION_STRING, &option_http_proxy_auth_user }, + { "http_proxy_auth_pass", + OPTION_STRING, &option_http_proxy_auth_pass }, + { "font_size", OPTION_INTEGER, &option_font_size }, + { "font_min_size", OPTION_INTEGER, &option_font_min_size }, + { "font_sans", OPTION_STRING, &option_font_sans }, + { "font_serif", OPTION_STRING, &option_font_serif }, + { "font_mono", OPTION_STRING, &option_font_mono }, + { "font_cursive", OPTION_STRING, &option_font_cursive }, + { "font_fantasy", OPTION_STRING, &option_font_fantasy }, + { "accept_language", OPTION_STRING, &option_accept_language }, + { "accept_charset", OPTION_STRING, &option_accept_charset }, + { "memory_cache_size", OPTION_INTEGER, &option_memory_cache_size }, + { "disc_cache_age", OPTION_INTEGER, &option_disc_cache_age }, + { "block_advertisements", + OPTION_BOOL, &option_block_ads }, + { "minimum_gif_delay", OPTION_INTEGER, &option_minimum_gif_delay }, + { "send_referer", OPTION_BOOL, &option_send_referer }, + { "animate_images", OPTION_BOOL, &option_animate_images }, + { "expire_url", OPTION_INTEGER, &option_expire_url }, + { "font_default", OPTION_INTEGER, &option_font_default }, + { "ca_bundle", OPTION_STRING, &option_ca_bundle }, + { "ca_path", OPTION_STRING, &option_ca_path }, + { "cookie_file", OPTION_STRING, &option_cookie_file }, + { "cookie_jar", OPTION_STRING, &option_cookie_jar }, + { "homepage_url", OPTION_STRING, &option_homepage_url }, + { "url_suggestion", OPTION_BOOL, &option_url_suggestion }, + { "window_x", OPTION_INTEGER, &option_window_x }, + { "window_y", OPTION_INTEGER, &option_window_y }, + { "window_width", OPTION_INTEGER, &option_window_width }, + { "window_height", OPTION_INTEGER, &option_window_height }, + { "window_screen_width", + OPTION_INTEGER, &option_window_screen_width }, + { "window_screen_height", + OPTION_INTEGER, &option_window_screen_height }, + { "toolbar_status_size", + OPTION_INTEGER, &option_toolbar_status_width }, + { "scale", OPTION_INTEGER, &option_scale }, + { "incremental_reflow", OPTION_BOOL, &option_incremental_reflow }, + { "min_reflow_period", OPTION_INTEGER, &option_min_reflow_period }, /* Fetcher options */ - { "max_fetchers", OPTION_INTEGER, &option_max_fetchers }, + { "max_fetchers", OPTION_INTEGER, &option_max_fetchers }, { "max_fetchers_per_host", - OPTION_INTEGER, &option_max_fetchers_per_host }, + OPTION_INTEGER, &option_max_fetchers_per_host }, { "max_cached_fetch_handles", - OPTION_INTEGER, &option_max_cached_fetch_handles }, - { "suppress_curl_debug", OPTION_BOOL, &option_suppress_curl_debug }, - { "target_blank", - OPTION_BOOL, &option_target_blank }, - { "margin_top", OPTION_INTEGER, &option_margin_top}, - { "margin_bottom", OPTION_INTEGER, &option_margin_bottom}, - { "margin_left", OPTION_INTEGER, &option_margin_left}, - { "margin_right", OPTION_INTEGER, &option_margin_right}, - { "export_scale", OPTION_INTEGER, &option_export_scale}, - { "suppress_images", OPTION_BOOL, &option_suppress_images}, - { "remove_backgrounds", OPTION_BOOL, &option_remove_backgrounds}, - { "enable_loosening", OPTION_BOOL, &option_enable_loosening}, - { "enable_PDF_compression", OPTION_BOOL, &option_enable_PDF_compression}, - { "enable_PDF_password", OPTION_BOOL, &option_enable_PDF_password}, + OPTION_INTEGER, &option_max_cached_fetch_handles }, + { "suppress_curl_debug",OPTION_BOOL, &option_suppress_curl_debug }, + { "target_blank", OPTION_BOOL, &option_target_blank }, + { "button_2_tab", OPTION_BOOL, &option_button_2_tab }, + /* PDF / Print options*/ + { "margin_top", OPTION_INTEGER, &option_margin_top}, + { "margin_bottom", OPTION_INTEGER, &option_margin_bottom}, + { "margin_left", OPTION_INTEGER, &option_margin_left}, + { "margin_right", OPTION_INTEGER, &option_margin_right}, + { "export_scale", OPTION_INTEGER, &option_export_scale}, + { "suppress_images", OPTION_BOOL, &option_suppress_images}, + { "remove_backgrounds", OPTION_BOOL, &option_remove_backgrounds}, + { "enable_loosening", OPTION_BOOL, &option_enable_loosening}, + { "enable_PDF_compression", + OPTION_BOOL, &option_enable_PDF_compression}, + { "enable_PDF_password", + OPTION_BOOL, &option_enable_PDF_password}, EXTRA_OPTION_TABLE }; diff --git a/desktop/options.h b/desktop/options.h index cb238b93a..85ba13b7b 100644 --- a/desktop/options.h +++ b/desktop/options.h @@ -71,6 +71,7 @@ extern char *option_cookie_file; extern char *option_cookie_jar; extern char *option_homepage_url; extern bool option_target_blank; +extern bool option_button_2_tab; extern bool option_url_suggestion; extern int option_window_x; extern int option_window_y; |