From df0e00463c5b55f89471720c1bf4d83e1f428aae Mon Sep 17 00:00:00 2001 From: Jaakko Keränen Date: Fri, 20 Nov 2020 14:09:08 +0200 Subject: Preferences: Added a Gemini proxy --- src/app.c | 27 ++++++++++++++++++--------- src/prefs.c | 2 ++ src/prefs.h | 1 + src/ui/documentwidget.c | 24 +++++++++++++----------- src/ui/util.c | 5 ++++- 5 files changed, 38 insertions(+), 21 deletions(-) diff --git a/src/app.c b/src/app.c index 02c69d64..f2741ee6 100644 --- a/src/app.c +++ b/src/app.c @@ -193,6 +193,7 @@ static iString *serializePrefs_App_(const iApp *d) { appendFormat_String(str, "doctheme.dark.set arg:%d\n", d->prefs.docThemeDark); appendFormat_String(str, "doctheme.light.set arg:%d\n", d->prefs.docThemeLight); appendFormat_String(str, "saturation.set arg:%d\n", (int) ((d->prefs.saturation * 100) + 0.5f)); + appendFormat_String(str, "proxy.gemini address:%s\n", cstr_String(&d->prefs.geminiProxy)); appendFormat_String(str, "proxy.gopher address:%s\n", cstr_String(&d->prefs.gopherProxy)); appendFormat_String(str, "proxy.http address:%s\n", cstr_String(&d->prefs.httpProxy)); appendFormat_String(str, "downloads path:%s\n", cstr_String(&d->prefs.downloadDir)); @@ -616,13 +617,16 @@ enum iColorTheme colorTheme_App(void) { const iString *schemeProxy_App(iRangecc scheme) { iApp *d = &app_; const iString *proxy = NULL; - if (equalCase_Rangecc(scheme, "gopher")) { + if (equalCase_Rangecc(scheme, "gemini")) { + proxy = &d->prefs.geminiProxy; + } + else if (equalCase_Rangecc(scheme, "gopher")) { proxy = &d->prefs.gopherProxy; } - if (equalCase_Rangecc(scheme, "http") || equalCase_Rangecc(scheme, "https")) { + else if (equalCase_Rangecc(scheme, "http") || equalCase_Rangecc(scheme, "https")) { proxy = &d->prefs.httpProxy; } - return !isEmpty_String(proxy) ? proxy : NULL; + return isEmpty_String(proxy) ? NULL : proxy; } int run_App(int argc, char **argv) { @@ -744,10 +748,12 @@ static iBool handlePrefsCommands_(iWidget *d, const char *cmd) { isSelected_Widget(findChild_Widget(d, "prefs.smoothscroll"))); postCommandf_App("ostheme arg:%d", isSelected_Widget(findChild_Widget(d, "prefs.ostheme"))); - postCommandf_App("proxy.http address:%s", - cstr_String(text_InputWidget(findChild_Widget(d, "prefs.proxy.http")))); + postCommandf_App("proxy.gemini address:%s", + cstr_String(text_InputWidget(findChild_Widget(d, "prefs.proxy.gemini")))); postCommandf_App("proxy.gopher address:%s", cstr_String(text_InputWidget(findChild_Widget(d, "prefs.proxy.gopher")))); + postCommandf_App("proxy.http address:%s", + cstr_String(text_InputWidget(findChild_Widget(d, "prefs.proxy.http")))); const iWidget *tabs = findChild_Widget(d, "prefs.tabs"); postCommandf_App("prefs.dialogtab arg:%u", tabPageIndex_Widget(tabs, currentTabPage_Widget(tabs))); @@ -1024,6 +1030,10 @@ iBool handleCommand_App(const char *cmd) { postCommandf_App("theme.changed auto:1"); return iTrue; } + else if (equal_Command(cmd, "proxy.gemini")) { + setCStr_String(&d->prefs.geminiProxy, suffixPtr_Command(cmd, "address")); + return iTrue; + } else if (equal_Command(cmd, "proxy.gopher")) { setCStr_String(&d->prefs.gopherProxy, suffixPtr_Command(cmd, "address")); return iTrue; @@ -1177,10 +1187,9 @@ iBool handleCommand_App(const char *cmd) { dlg, format_CStr("prefs.saturation.%d", (int) (d->prefs.saturation * 3.99f))), selected_WidgetFlag, iTrue); - setText_InputWidget(findChild_Widget(dlg, "prefs.proxy.http"), - schemeProxy_App(range_CStr("http"))); - setText_InputWidget(findChild_Widget(dlg, "prefs.proxy.gopher"), - schemeProxy_App(range_CStr("gopher"))); + setText_InputWidget(findChild_Widget(dlg, "prefs.proxy.gemini"), &d->prefs.geminiProxy); + setText_InputWidget(findChild_Widget(dlg, "prefs.proxy.gopher"), &d->prefs.gopherProxy); + setText_InputWidget(findChild_Widget(dlg, "prefs.proxy.http"), &d->prefs.httpProxy); iWidget *tabs = findChild_Widget(dlg, "prefs.tabs"); showTabPage_Widget(tabs, tabPage_Widget(tabs, d->prefs.dialogTab)); setCommandHandler_Widget(dlg, handlePrefsCommands_); diff --git a/src/prefs.c b/src/prefs.c index 5c73833e..80b11c30 100644 --- a/src/prefs.c +++ b/src/prefs.c @@ -42,12 +42,14 @@ void init_Prefs(iPrefs *d) { d->docThemeDark = colorfulDark_GmDocumentTheme; d->docThemeLight = white_GmDocumentTheme; d->saturation = 1.0f; + init_String(&d->geminiProxy); init_String(&d->gopherProxy); init_String(&d->httpProxy); init_String(&d->downloadDir); } void deinit_Prefs(iPrefs *d) { + deinit_String(&d->geminiProxy); deinit_String(&d->gopherProxy); deinit_String(&d->httpProxy); deinit_String(&d->downloadDir); diff --git a/src/prefs.h b/src/prefs.h index 2488d43b..33ce8b41 100644 --- a/src/prefs.h +++ b/src/prefs.h @@ -40,6 +40,7 @@ struct Impl_Prefs { iBool smoothScrolling; iBool useSystemTheme; enum iColorTheme theme; + iString geminiProxy; iString gopherProxy; iString httpProxy; iString downloadDir; diff --git a/src/ui/documentwidget.c b/src/ui/documentwidget.c index 8640e7ae..59f5a92c 100644 --- a/src/ui/documentwidget.c +++ b/src/ui/documentwidget.c @@ -2004,9 +2004,10 @@ static iBool processEvent_DocumentWidget_(iDocumentWidget *d, const SDL_Event *e iArray items; init_Array(&items, sizeof(iMenuItem)); if (d->contextLink) { - const iString *linkUrl = linkUrl_GmDocument(d->doc, d->contextLink->linkId); - const iRangecc scheme = urlScheme_String(linkUrl); - if (willUseProxy_App(scheme) || equalCase_Rangecc(scheme, "gemini") || + const iString *linkUrl = linkUrl_GmDocument(d->doc, d->contextLink->linkId); + const iRangecc scheme = urlScheme_String(linkUrl); + const iBool isGemini = equalCase_Rangecc(scheme, "gemini"); + if (willUseProxy_App(scheme) || isGemini || equalCase_Rangecc(scheme, "gopher")) { /* Regular links that we can open. */ pushBackN_Array( @@ -2031,14 +2032,15 @@ static iBool processEvent_DocumentWidget_(iDocumentWidget *d, const SDL_Event *e format_CStr("!open url:%s", cstr_String(linkUrl)) }); } if (willUseProxy_App(scheme)) { - pushBackN_Array(&items, - (iMenuItem[]){ { "---", 0, 0, NULL }, - { "Open Link in Default Browser", - 0, - 0, - format_CStr("!open noproxy:1 url:%s", - cstr_String(linkUrl)) } }, - 2); + pushBackN_Array( + &items, + (iMenuItem[]){ + { "---", 0, 0, NULL }, + { isGemini ? "Open without Proxy" : "Open Link in Default Browser", + 0, + 0, + format_CStr("!open noproxy:1 url:%s", cstr_String(linkUrl)) } }, + 2); } pushBackN_Array(&items, (iMenuItem[]){ { "---", 0, 0, NULL }, diff --git a/src/ui/util.c b/src/ui/util.c index bdb348f9..0f0fa039 100644 --- a/src/ui/util.c +++ b/src/ui/util.c @@ -1111,6 +1111,8 @@ iWidget *makePreferences_Widget(void) { } /* Proxies. */ { appendTwoColumnPage_(tabs, "Proxies", '4', &headings, &values); + addChild_Widget(headings, iClob(makeHeading_Widget("Gemini proxy:"))); + setId_Widget(addChild_Widget(values, iClob(new_InputWidget(0))), "prefs.proxy.gemini"); addChild_Widget(headings, iClob(makeHeading_Widget("Gopher proxy:"))); setId_Widget(addChild_Widget(values, iClob(new_InputWidget(0))), "prefs.proxy.gopher"); addChild_Widget(headings, iClob(makeHeading_Widget("HTTP proxy:"))); @@ -1125,8 +1127,9 @@ iWidget *makePreferences_Widget(void) { arrange_Widget(dlg); /* Set input field sizes. */ { expandInputFieldWidth_(findChild_Widget(tabs, "prefs.downloads")); - expandInputFieldWidth_(findChild_Widget(tabs, "prefs.proxy.http")); + expandInputFieldWidth_(findChild_Widget(tabs, "prefs.proxy.gemini")); expandInputFieldWidth_(findChild_Widget(tabs, "prefs.proxy.gopher")); + expandInputFieldWidth_(findChild_Widget(tabs, "prefs.proxy.http")); } iWidget *div = new_Widget(); { setFlags_Widget(div, arrangeHorizontal_WidgetFlag | arrangeSize_WidgetFlag, iTrue); -- cgit v1.2.3