diff options
-rw-r--r-- | res/about/version.gmi | 2 | ||||
-rw-r--r-- | src/app.c | 15 | ||||
-rw-r--r-- | src/app.h | 1 | ||||
-rw-r--r-- | src/ui/documentwidget.c | 52 |
4 files changed, 54 insertions, 16 deletions
diff --git a/res/about/version.gmi b/res/about/version.gmi index ce1a6510..ef3a5bc3 100644 --- a/res/about/version.gmi +++ b/res/about/version.gmi | |||
@@ -11,7 +11,7 @@ | |||
11 | * Added keybindings for Back/Forward navigation. | 11 | * Added keybindings for Back/Forward navigation. |
12 | * ${CTRL+}Click opens tab in background, ${SHIFT+}${CTRL+}Click opens as foreground tab. The same modifier keys work with keyboard navigation. | 12 | * ${CTRL+}Click opens tab in background, ${SHIFT+}${CTRL+}Click opens as foreground tab. The same modifier keys work with keyboard navigation. |
13 | * Improved word wrapping of emoticons (:D). | 13 | * Improved word wrapping of emoticons (:D). |
14 | * Windows: Fixed handling of drag'n'dropped and command line file paths. | 14 | * Windows: Fixed handling of drag-and-dropped and command line file paths. |
15 | 15 | ||
16 | ## 0.7.2 | 16 | ## 0.7.2 |
17 | * Fixed parsing of the server's response. In some cases it was possible that the response was only partially read. | 17 | * Fixed parsing of the server's response. In some cases it was possible that the response was only partially read. |
@@ -880,6 +880,18 @@ static iBool handleIdentityCreationCommands_(iWidget *dlg, const char *cmd) { | |||
880 | return iFalse; | 880 | return iFalse; |
881 | } | 881 | } |
882 | 882 | ||
883 | iBool willUseProxy_App(const iRangecc scheme) { | ||
884 | iApp *d = &app_; | ||
885 | if (!isEmpty_String(&d->prefs.httpProxy) && (equalCase_Rangecc(scheme, "http") || | ||
886 | equalCase_Rangecc(scheme, "https"))) { | ||
887 | return iTrue; | ||
888 | } | ||
889 | if (!isEmpty_String(&d->prefs.gopherProxy) && equalCase_Rangecc(scheme, "gopher")) { | ||
890 | return iTrue; | ||
891 | } | ||
892 | return iFalse; | ||
893 | } | ||
894 | |||
883 | iBool handleCommand_App(const char *cmd) { | 895 | iBool handleCommand_App(const char *cmd) { |
884 | iApp *d = &app_; | 896 | iApp *d = &app_; |
885 | if (equal_Command(cmd, "prefs.dialogtab")) { | 897 | if (equal_Command(cmd, "prefs.dialogtab")) { |
@@ -996,7 +1008,8 @@ iBool handleCommand_App(const char *cmd) { | |||
996 | else if (equal_Command(cmd, "proxy.http")) { | 1008 | else if (equal_Command(cmd, "proxy.http")) { |
997 | setCStr_String(&d->prefs.httpProxy, suffixPtr_Command(cmd, "address")); | 1009 | setCStr_String(&d->prefs.httpProxy, suffixPtr_Command(cmd, "address")); |
998 | return iTrue; | 1010 | return iTrue; |
999 | } else if (equal_Command(cmd, "downloads")) { | 1011 | } |
1012 | else if (equal_Command(cmd, "downloads")) { | ||
1000 | setCStr_String(&d->prefs.downloadDir, suffixPtr_Command(cmd, "path")); | 1013 | setCStr_String(&d->prefs.downloadDir, suffixPtr_Command(cmd, "path")); |
1001 | return iTrue; | 1014 | return iTrue; |
1002 | } | 1015 | } |
@@ -64,6 +64,7 @@ iBool forceLineWrap_App (void); | |||
64 | iBool forceSoftwareRender_App(void); | 64 | iBool forceSoftwareRender_App(void); |
65 | enum iColorTheme colorTheme_App (void); | 65 | enum iColorTheme colorTheme_App (void); |
66 | const iString * schemeProxy_App (iRangecc scheme); | 66 | const iString * schemeProxy_App (iRangecc scheme); |
67 | iBool willUseProxy_App (const iRangecc scheme); | ||
67 | 68 | ||
68 | iGmCerts * certs_App (void); | 69 | iGmCerts * certs_App (void); |
69 | iVisited * visited_App (void); | 70 | iVisited * visited_App (void); |
diff --git a/src/ui/documentwidget.c b/src/ui/documentwidget.c index 423dee6d..13f21df6 100644 --- a/src/ui/documentwidget.c +++ b/src/ui/documentwidget.c | |||
@@ -1906,20 +1906,44 @@ static iBool processEvent_DocumentWidget_(iDocumentWidget *d, const SDL_Event *e | |||
1906 | init_Array(&items, sizeof(iMenuItem)); | 1906 | init_Array(&items, sizeof(iMenuItem)); |
1907 | if (d->contextLink) { | 1907 | if (d->contextLink) { |
1908 | const iString *linkUrl = linkUrl_GmDocument(d->doc, d->contextLink->linkId); | 1908 | const iString *linkUrl = linkUrl_GmDocument(d->doc, d->contextLink->linkId); |
1909 | pushBackN_Array( | 1909 | const iRangecc scheme = urlScheme_String(linkUrl); |
1910 | &items, | 1910 | if (willUseProxy_App(scheme) || equalCase_Rangecc(scheme, "gemini")) { |
1911 | (iMenuItem[]){ | 1911 | /* Regular Gemini links. */ |
1912 | { "Open Link in New Tab", | 1912 | pushBackN_Array( |
1913 | 0, | 1913 | &items, |
1914 | 0, | 1914 | (iMenuItem[]){ |
1915 | format_CStr("!open newtab:1 url:%s", cstr_String(linkUrl)) }, | 1915 | { "Open Link in New Tab", |
1916 | { "Open Link in Background Tab", | 1916 | 0, |
1917 | 0, | 1917 | 0, |
1918 | 0, | 1918 | format_CStr("!open newtab:1 url:%s", cstr_String(linkUrl)) }, |
1919 | format_CStr("!open newtab:2 url:%s", cstr_String(linkUrl)) }, | 1919 | { "Open Link in Background Tab", |
1920 | { "---", 0, 0, NULL }, | 1920 | 0, |
1921 | { "Copy Link", 0, 0, "document.copylink" } }, | 1921 | 0, |
1922 | 4); | 1922 | format_CStr("!open newtab:2 url:%s", cstr_String(linkUrl)) } }, |
1923 | 2); | ||
1924 | } | ||
1925 | else if (!willUseProxy_App(scheme)) { | ||
1926 | pushBack_Array( | ||
1927 | &items, | ||
1928 | &(iMenuItem){ "Open Link in Default Browser", | ||
1929 | 0, | ||
1930 | 0, | ||
1931 | format_CStr("!open url:%s", cstr_String(linkUrl)) }); | ||
1932 | } | ||
1933 | if (willUseProxy_App(scheme)) { | ||
1934 | pushBackN_Array(&items, | ||
1935 | (iMenuItem[]){ { "---", 0, 0, NULL }, | ||
1936 | { "Open Link in Default Browser", | ||
1937 | 0, | ||
1938 | 0, | ||
1939 | format_CStr("!open noproxy:1 url:%s", | ||
1940 | cstr_String(linkUrl)) } }, | ||
1941 | 2); | ||
1942 | } | ||
1943 | pushBackN_Array(&items, | ||
1944 | (iMenuItem[]){ { "---", 0, 0, NULL }, | ||
1945 | { "Copy Link", 0, 0, "document.copylink" } }, | ||
1946 | 2); | ||
1923 | } | 1947 | } |
1924 | else { | 1948 | else { |
1925 | if (!isEmpty_Range(&d->selectMark)) { | 1949 | if (!isEmpty_Range(&d->selectMark)) { |