diff options
Diffstat (limited to 'src/ui/documentwidget.c')
-rw-r--r-- | src/ui/documentwidget.c | 36 |
1 files changed, 22 insertions, 14 deletions
diff --git a/src/ui/documentwidget.c b/src/ui/documentwidget.c index 22fa29f8..3f3e453a 100644 --- a/src/ui/documentwidget.c +++ b/src/ui/documentwidget.c | |||
@@ -370,7 +370,7 @@ static void addVisible_DocumentWidget_(void *context, const iGmRun *run) { | |||
370 | if (run->audioId) { | 370 | if (run->audioId) { |
371 | pushBack_PtrArray(&d->visiblePlayers, run); | 371 | pushBack_PtrArray(&d->visiblePlayers, run); |
372 | } | 372 | } |
373 | if (run->linkId && linkFlags_GmDocument(d->doc, run->linkId) & supportedProtocol_GmLinkFlag) { | 373 | if (run->linkId) { |
374 | pushBack_PtrArray(&d->visibleLinks, run); | 374 | pushBack_PtrArray(&d->visibleLinks, run); |
375 | } | 375 | } |
376 | } | 376 | } |
@@ -2147,13 +2147,10 @@ static iBool processEvent_DocumentWidget_(iDocumentWidget *d, const SDL_Event *e | |||
2147 | const iGmRun *run = i.ptr; | 2147 | const iGmRun *run = i.ptr; |
2148 | if (run->flags & decoration_GmRunFlag && | 2148 | if (run->flags & decoration_GmRunFlag && |
2149 | visibleLinkOrdinal_DocumentWidget_(d, run->linkId) == ord) { | 2149 | visibleLinkOrdinal_DocumentWidget_(d, run->linkId) == ord) { |
2150 | const int kmods = keyMods_Sym(SDL_GetModState()); | ||
2151 | postCommandf_App("open newtab:%d url:%s", | 2150 | postCommandf_App("open newtab:%d url:%s", |
2152 | ((kmods & KMOD_PRIMARY) && (kmods & KMOD_SHIFT)) ? 1 | 2151 | openTabMode_Sym(SDL_GetModState()), |
2153 | : (kmods & KMOD_PRIMARY) ? 2 | ||
2154 | : 0, | ||
2155 | cstr_String(absoluteUrl_String( | 2152 | cstr_String(absoluteUrl_String( |
2156 | d->mod.url, linkUrl_GmDocument(d->doc, run->linkId)))); | 2153 | d->mod.url, linkUrl_GmDocument(d->doc, run->linkId)))); |
2157 | iChangeFlags(d->flags, showLinkNumbers_DocumentWidgetFlag, iFalse); | 2154 | iChangeFlags(d->flags, showLinkNumbers_DocumentWidgetFlag, iFalse); |
2158 | invalidateVisibleLinks_DocumentWidget_(d); | 2155 | invalidateVisibleLinks_DocumentWidget_(d); |
2159 | refresh_Widget(d); | 2156 | refresh_Widget(d); |
@@ -2315,7 +2312,7 @@ static iBool processEvent_DocumentWidget_(iDocumentWidget *d, const SDL_Event *e | |||
2315 | &(iMenuItem){ "Open Link in Default Browser", | 2312 | &(iMenuItem){ "Open Link in Default Browser", |
2316 | 0, | 2313 | 0, |
2317 | 0, | 2314 | 0, |
2318 | format_CStr("!open url:%s", cstr_String(linkUrl)) }); | 2315 | format_CStr("!open default:1 url:%s", cstr_String(linkUrl)) }); |
2319 | } | 2316 | } |
2320 | if (willUseProxy_App(scheme)) { | 2317 | if (willUseProxy_App(scheme)) { |
2321 | pushBackN_Array( | 2318 | pushBackN_Array( |
@@ -2437,10 +2434,10 @@ static iBool processEvent_DocumentWidget_(iDocumentWidget *d, const SDL_Event *e | |||
2437 | setFocus_Widget(NULL); | 2434 | setFocus_Widget(NULL); |
2438 | if (d->hoverLink) { | 2435 | if (d->hoverLink) { |
2439 | const iGmLinkId linkId = d->hoverLink->linkId; | 2436 | const iGmLinkId linkId = d->hoverLink->linkId; |
2437 | const int linkFlags = linkFlags_GmDocument(d->doc, linkId); | ||
2440 | iAssert(linkId); | 2438 | iAssert(linkId); |
2441 | /* Media links are opened inline by default. */ | 2439 | /* Media links are opened inline by default. */ |
2442 | if (isMediaLink_GmDocument(d->doc, linkId)) { | 2440 | if (isMediaLink_GmDocument(d->doc, linkId)) { |
2443 | const int linkFlags = linkFlags_GmDocument(d->doc, linkId); | ||
2444 | if (linkFlags & content_GmLinkFlag && linkFlags & permanent_GmLinkFlag) { | 2441 | if (linkFlags & content_GmLinkFlag && linkFlags & permanent_GmLinkFlag) { |
2445 | /* We have the content and it cannot be dismissed, so nothing | 2442 | /* We have the content and it cannot be dismissed, so nothing |
2446 | further to do. */ | 2443 | further to do. */ |
@@ -2490,15 +2487,26 @@ static iBool processEvent_DocumentWidget_(iDocumentWidget *d, const SDL_Event *e | |||
2490 | } | 2487 | } |
2491 | refresh_Widget(w); | 2488 | refresh_Widget(w); |
2492 | } | 2489 | } |
2493 | else { | 2490 | else if (linkFlags & supportedProtocol_GmLinkFlag) { |
2494 | const int kmods = keyMods_Sym(SDL_GetModState()); | ||
2495 | postCommandf_App("open newtab:%d url:%s", | 2491 | postCommandf_App("open newtab:%d url:%s", |
2496 | ((kmods & KMOD_PRIMARY) && (kmods & KMOD_SHIFT)) ? 1 | 2492 | openTabMode_Sym(SDL_GetModState()), |
2497 | : (kmods & KMOD_PRIMARY) ? 2 | ||
2498 | : 0, | ||
2499 | cstr_String(absoluteUrl_String( | 2493 | cstr_String(absoluteUrl_String( |
2500 | d->mod.url, linkUrl_GmDocument(d->doc, linkId)))); | 2494 | d->mod.url, linkUrl_GmDocument(d->doc, linkId)))); |
2501 | } | 2495 | } |
2496 | else { | ||
2497 | const iString *url = absoluteUrl_String( | ||
2498 | d->mod.url, linkUrl_GmDocument(d->doc, linkId)); | ||
2499 | makeQuestion_Widget( | ||
2500 | uiTextCaution_ColorEscape "OPEN LINK", | ||
2501 | format_CStr( | ||
2502 | "Open this link in the default browser?\n" uiTextAction_ColorEscape | ||
2503 | "%s", | ||
2504 | cstr_String(url)), | ||
2505 | (const char *[]){ "Cancel", uiTextCaution_ColorEscape "Open Link" }, | ||
2506 | (const char *[]){ | ||
2507 | "cancel", format_CStr("!open default:1 url:%s", cstr_String(url)) }, | ||
2508 | 2); | ||
2509 | } | ||
2502 | } | 2510 | } |
2503 | if (d->selectMark.start) { | 2511 | if (d->selectMark.start) { |
2504 | d->selectMark = iNullRange; | 2512 | d->selectMark = iNullRange; |