diff options
Diffstat (limited to 'src/ui/inputwidget.c')
-rw-r--r-- | src/ui/inputwidget.c | 28 |
1 files changed, 26 insertions, 2 deletions
diff --git a/src/ui/inputwidget.c b/src/ui/inputwidget.c index eac195b9..f4302887 100644 --- a/src/ui/inputwidget.c +++ b/src/ui/inputwidget.c | |||
@@ -314,9 +314,13 @@ void selectAll_InputWidget(iInputWidget *d) { | |||
314 | refresh_Widget(as_Widget(d)); | 314 | refresh_Widget(as_Widget(d)); |
315 | } | 315 | } |
316 | 316 | ||
317 | iLocalDef iBool isEditing_InputWidget_(const iInputWidget *d) { | ||
318 | return (flags_Widget(constAs_Widget(d)) & selected_WidgetFlag) != 0; | ||
319 | } | ||
320 | |||
317 | void begin_InputWidget(iInputWidget *d) { | 321 | void begin_InputWidget(iInputWidget *d) { |
318 | iWidget *w = as_Widget(d); | 322 | iWidget *w = as_Widget(d); |
319 | if (flags_Widget(w) & selected_WidgetFlag) { | 323 | if (isEditing_InputWidget_(d)) { |
320 | /* Already active. */ | 324 | /* Already active. */ |
321 | return; | 325 | return; |
322 | } | 326 | } |
@@ -346,7 +350,7 @@ void begin_InputWidget(iInputWidget *d) { | |||
346 | 350 | ||
347 | void end_InputWidget(iInputWidget *d, iBool accept) { | 351 | void end_InputWidget(iInputWidget *d, iBool accept) { |
348 | iWidget *w = as_Widget(d); | 352 | iWidget *w = as_Widget(d); |
349 | if (~flags_Widget(w) & selected_WidgetFlag) { | 353 | if (!isEditing_InputWidget_(d)) { |
350 | /* Was not active. */ | 354 | /* Was not active. */ |
351 | return; | 355 | return; |
352 | } | 356 | } |
@@ -614,6 +618,15 @@ static iBool processEvent_InputWidget_(iInputWidget *d, const SDL_Event *ev) { | |||
614 | end_InputWidget(d, iTrue); | 618 | end_InputWidget(d, iTrue); |
615 | return iFalse; | 619 | return iFalse; |
616 | } | 620 | } |
621 | else if ((isCommand_UserEvent(ev, "copy") || isCommand_UserEvent(ev, "input.copy")) && | ||
622 | isEditing_InputWidget_(d)) { | ||
623 | copy_InputWidget_(d, argLabel_Command(command_UserEvent(ev), "cut")); | ||
624 | return iTrue; | ||
625 | } | ||
626 | else if (isCommand_UserEvent(ev, "input.paste") && isEditing_InputWidget_(d)) { | ||
627 | paste_InputWidget_(d); | ||
628 | return iTrue; | ||
629 | } | ||
617 | else if (isCommand_UserEvent(ev, "theme.changed")) { | 630 | else if (isCommand_UserEvent(ev, "theme.changed")) { |
618 | if (d->buffered) { | 631 | if (d->buffered) { |
619 | updateBuffered_InputWidget_(d); | 632 | updateBuffered_InputWidget_(d); |
@@ -675,6 +688,17 @@ static iBool processEvent_InputWidget_(iInputWidget *d, const SDL_Event *ev) { | |||
675 | case finished_ClickResult: | 688 | case finished_ClickResult: |
676 | return iTrue; | 689 | return iTrue; |
677 | } | 690 | } |
691 | if (ev->type == SDL_MOUSEBUTTONDOWN && ev->button.button == SDL_BUTTON_RIGHT && | ||
692 | contains_Widget(w, init_I2(ev->button.x, ev->button.y))) { | ||
693 | iWidget *clipMenu = findWidget_App("clipmenu"); | ||
694 | if (isVisible_Widget(clipMenu)) { | ||
695 | closeMenu_Widget(clipMenu); | ||
696 | } | ||
697 | else { | ||
698 | openMenuFlags_Widget(clipMenu, mouseCoord_Window(get_Window()), iFalse); | ||
699 | } | ||
700 | return iTrue; | ||
701 | } | ||
678 | if (ev->type == SDL_KEYUP && isFocused_Widget(w)) { | 702 | if (ev->type == SDL_KEYUP && isFocused_Widget(w)) { |
679 | return iTrue; | 703 | return iTrue; |
680 | } | 704 | } |