summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJaakko Keränen <jaakko.keranen@iki.fi>2021-03-12 21:24:54 +0200
committerJaakko Keränen <jaakko.keranen@iki.fi>2021-03-12 21:24:54 +0200
commitda62f092258e313bbd28745a6e32e6d8117f4aa3 (patch)
tree81e8e40128aa8adaaa37ebc3af59f6fcbf776b4e
parent6410ed3c412ad9a9b688f40e981a70da03c8baca (diff)
DocumentWidget: Bookmarking a wrapped link
Only the clicked part of the label text was used for the bookmark.
-rw-r--r--src/gmdocument.c11
-rw-r--r--src/gmdocument.h1
-rw-r--r--src/ui/documentwidget.c3
3 files changed, 14 insertions, 1 deletions
diff --git a/src/gmdocument.c b/src/gmdocument.c
index f8e5b8ad..bade99ce 100644
--- a/src/gmdocument.c
+++ b/src/gmdocument.c
@@ -47,6 +47,7 @@ iDeclareType(GmLink)
47struct Impl_GmLink { 47struct Impl_GmLink {
48 iString url; 48 iString url;
49 iRangecc urlRange; /* URL in the source */ 49 iRangecc urlRange; /* URL in the source */
50 iRangecc labelRange; /* label in the source */
50 iRangecc labelIcon; /* special icon defined in the label text */ 51 iRangecc labelIcon; /* special icon defined in the label text */
51 iTime when; 52 iTime when;
52 int flags; 53 int flags;
@@ -55,6 +56,7 @@ struct Impl_GmLink {
55void init_GmLink(iGmLink *d) { 56void init_GmLink(iGmLink *d) {
56 init_String(&d->url); 57 init_String(&d->url);
57 d->urlRange = iNullRange; 58 d->urlRange = iNullRange;
59 d->labelRange = iNullRange;
58 iZap(d->when); 60 iZap(d->when);
59 d->flags = 0; 61 d->flags = 0;
60} 62}
@@ -235,6 +237,7 @@ static iRangecc addLink_GmDocument_(iGmDocument *d, iRangecc line, iGmLinkId *li
235 *linkId = size_PtrArray(&d->links); /* index + 1 */ 237 *linkId = size_PtrArray(&d->links); /* index + 1 */
236 iRangecc desc = capturedRange_RegExpMatch(&m, 2); 238 iRangecc desc = capturedRange_RegExpMatch(&m, 2);
237 trim_Rangecc(&desc); 239 trim_Rangecc(&desc);
240 link->labelRange = desc;
238 link->labelIcon = iNullRange; 241 link->labelIcon = iNullRange;
239 if (!isEmpty_Range(&desc)) { 242 if (!isEmpty_Range(&desc)) {
240 line = desc; /* Just show the description. */ 243 line = desc; /* Just show the description. */
@@ -1522,6 +1525,14 @@ iRangecc linkUrlRange_GmDocument(const iGmDocument *d, iGmLinkId linkId) {
1522 return link->urlRange; 1525 return link->urlRange;
1523} 1526}
1524 1527
1528iRangecc linkLabel_GmDocument(const iGmDocument *d, iGmLinkId linkId) {
1529 const iGmLink *link = link_GmDocument_(d, linkId);
1530 if (isEmpty_Range(&link->labelRange)) {
1531 return link->urlRange;
1532 }
1533 return link->labelRange;
1534}
1535
1525int linkFlags_GmDocument(const iGmDocument *d, iGmLinkId linkId) { 1536int linkFlags_GmDocument(const iGmDocument *d, iGmLinkId linkId) {
1526 const iGmLink *link = link_GmDocument_(d, linkId); 1537 const iGmLink *link = link_GmDocument_(d, linkId);
1527 return link ? link->flags : 0; 1538 return link ? link->flags : 0;
diff --git a/src/gmdocument.h b/src/gmdocument.h
index 1909460f..98eef152 100644
--- a/src/gmdocument.h
+++ b/src/gmdocument.h
@@ -169,6 +169,7 @@ const char * findLoc_GmDocument (const iGmDocument *, iInt2 pos);
169const iGmRun * findRunAtLoc_GmDocument (const iGmDocument *, const char *loc); 169const iGmRun * findRunAtLoc_GmDocument (const iGmDocument *, const char *loc);
170const iString * linkUrl_GmDocument (const iGmDocument *, iGmLinkId linkId); 170const iString * linkUrl_GmDocument (const iGmDocument *, iGmLinkId linkId);
171iRangecc linkUrlRange_GmDocument (const iGmDocument *, iGmLinkId linkId); 171iRangecc linkUrlRange_GmDocument (const iGmDocument *, iGmLinkId linkId);
172iRangecc linkLabel_GmDocument (const iGmDocument *, iGmLinkId linkId);
172iMediaId linkImage_GmDocument (const iGmDocument *, iGmLinkId linkId); 173iMediaId linkImage_GmDocument (const iGmDocument *, iGmLinkId linkId);
173iMediaId linkAudio_GmDocument (const iGmDocument *, iGmLinkId linkId); 174iMediaId linkAudio_GmDocument (const iGmDocument *, iGmLinkId linkId);
174int linkFlags_GmDocument (const iGmDocument *, iGmLinkId linkId); 175int linkFlags_GmDocument (const iGmDocument *, iGmLinkId linkId);
diff --git a/src/ui/documentwidget.c b/src/ui/documentwidget.c
index b0107a75..5d3aa3ba 100644
--- a/src/ui/documentwidget.c
+++ b/src/ui/documentwidget.c
@@ -2449,7 +2449,8 @@ static iBool processEvent_DocumentWidget_(iDocumentWidget *d, const SDL_Event *e
2449 format_CStr("!open noproxy:1 url:%s", cstr_String(linkUrl)) } }, 2449 format_CStr("!open noproxy:1 url:%s", cstr_String(linkUrl)) } },
2450 2); 2450 2);
2451 } 2451 }
2452 iString *linkLabel = collect_String(newRange_String(d->contextLink->text)); 2452 iString *linkLabel = collectNewRange_String(
2453 linkLabel_GmDocument(d->doc, d->contextLink->linkId));
2453 urlEncodeSpaces_String(linkLabel); 2454 urlEncodeSpaces_String(linkLabel);
2454 pushBackN_Array(&items, 2455 pushBackN_Array(&items,
2455 (iMenuItem[]){ { "---", 0, 0, NULL }, 2456 (iMenuItem[]){ { "---", 0, 0, NULL },