summaryrefslogtreecommitdiff
path: root/src/ui/documentwidget.c
diff options
context:
space:
mode:
authorJaakko Keränen <jaakko.keranen@iki.fi>2020-07-25 14:27:15 +0300
committerJaakko Keränen <jaakko.keranen@iki.fi>2020-07-25 14:27:15 +0300
commitb5eef5cbddab73c7bdcd5be00e8228377b0a4ef1 (patch)
tree89e1b746b41b657ba95e940e37d2b044ee80f162 /src/ui/documentwidget.c
parent570818dfd9f979a04375bbe0657139c62df34387 (diff)
DocumentWidget: Context menu
Diffstat (limited to 'src/ui/documentwidget.c')
-rw-r--r--src/ui/documentwidget.c21
1 files changed, 9 insertions, 12 deletions
diff --git a/src/ui/documentwidget.c b/src/ui/documentwidget.c
index 4197332a..aa24be48 100644
--- a/src/ui/documentwidget.c
+++ b/src/ui/documentwidget.c
@@ -37,6 +37,7 @@ struct Impl_DocumentWidget {
37 const iGmRun *hoverLink; 37 const iGmRun *hoverLink;
38 iClick click; 38 iClick click;
39 iScrollWidget *scroll; 39 iScrollWidget *scroll;
40 iWidget *menu;
40}; 41};
41 42
42iDefineObjectConstruction(DocumentWidget) 43iDefineObjectConstruction(DocumentWidget)
@@ -56,6 +57,13 @@ void init_DocumentWidget(iDocumentWidget *d) {
56 init_PtrArray(&d->visibleLinks); 57 init_PtrArray(&d->visibleLinks);
57 init_Click(&d->click, d, SDL_BUTTON_LEFT); 58 init_Click(&d->click, d, SDL_BUTTON_LEFT);
58 addChild_Widget(w, iClob(d->scroll = new_ScrollWidget())); 59 addChild_Widget(w, iClob(d->scroll = new_ScrollWidget()));
60 d->menu =
61 makeMenu_Widget(w,
62 (iMenuItem[]){ { "Back", SDLK_LEFT, KMOD_PRIMARY, "navigate.back" },
63 { "Forward", SDLK_RIGHT, KMOD_PRIMARY, "navigate.forward" },
64 { "---", 0, 0, NULL },
65 { "Reload", 'r', KMOD_PRIMARY, "navigate.reload" } },
66 4);
59} 67}
60 68
61void deinit_DocumentWidget(iDocumentWidget *d) { 69void deinit_DocumentWidget(iDocumentWidget *d) {
@@ -82,12 +90,6 @@ static iRect documentBounds_DocumentWidget_(const iDocumentWidget *d) {
82 return rect; 90 return rect;
83} 91}
84 92
85static iRangecc getLine_(iRangecc text) {
86 iRangecc line = { text.start, text.start };
87 for (; *line.end != '\n' && line.end != text.end; line.end++) {}
88 return line;
89}
90
91static void requestUpdated_DocumentWidget_(iAnyObject *obj) { 93static void requestUpdated_DocumentWidget_(iAnyObject *obj) {
92 iDocumentWidget *d = obj; 94 iDocumentWidget *d = obj;
93 const int wasPending = exchange_Atomic(&d->isSourcePending, iTrue); 95 const int wasPending = exchange_Atomic(&d->isSourcePending, iTrue);
@@ -335,12 +337,6 @@ static iBool processEvent_DocumentWidget_(iDocumentWidget *d, const SDL_Event *e
335 case ' ': 337 case ' ':
336 postCommand_Widget(w, "scroll.page arg:%d", key == SDLK_PAGEUP ? -1 : +1); 338 postCommand_Widget(w, "scroll.page arg:%d", key == SDLK_PAGEUP ? -1 : +1);
337 return iTrue; 339 return iTrue;
338 case 'r':
339 if (mods == KMOD_PRIMARY) {
340 fetch_DocumentWidget_(d);
341 return iTrue;
342 }
343 break;
344 case '0': { 340 case '0': {
345 extern int enableHalfPixelGlyphs_Text; 341 extern int enableHalfPixelGlyphs_Text;
346 enableHalfPixelGlyphs_Text = !enableHalfPixelGlyphs_Text; 342 enableHalfPixelGlyphs_Text = !enableHalfPixelGlyphs_Text;
@@ -372,6 +368,7 @@ static iBool processEvent_DocumentWidget_(iDocumentWidget *d, const SDL_Event *e
372 refresh_Widget(w); 368 refresh_Widget(w);
373 } 369 }
374 } 370 }
371 processContextMenuEvent_Widget(d->menu, ev);
375 switch (processEvent_Click(&d->click, ev)) { 372 switch (processEvent_Click(&d->click, ev)) {
376 case finished_ClickResult: 373 case finished_ClickResult:
377 if (d->hoverLink) { 374 if (d->hoverLink) {