diff options
Diffstat (limited to 'src/dialog.cc')
-rw-r--r-- | src/dialog.cc | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/src/dialog.cc b/src/dialog.cc index 15e5d7a9..f830f2d3 100644 --- a/src/dialog.cc +++ b/src/dialog.cc @@ -95,6 +95,24 @@ public: }; }; +class EnterButton : public Fl_Button { +public: + EnterButton (int x,int y,int w,int h, const char* label = 0) : + Fl_Button (x,y,w,h,label) {}; + int handle(int e); +}; + +int EnterButton::handle(int e) +{ + if (e == FL_KEYBOARD && Fl::focus() == this && Fl::event_key() == FL_Enter){ + set_changed(); + simulate_key_action(); + do_callback(); + return 1; + } + return Fl_Button::handle(e); +} + //---------------------------------------------------------------------------- @@ -354,7 +372,7 @@ int a_Dialog_choice5(const char *QuestionTxt, bw = (ww - gap)/nb - gap; xpos += gap; for (int i=1; i <= nb; ++i) { - b = new Fl_Button(xpos, wh-bh, bw, bh, txt[i]); + b = new EnterButton(xpos, wh-bh, bw, bh, txt[i]); b->align(FL_ALIGN_WRAP|FL_ALIGN_CLIP); b->box(FL_UP_BOX); b->callback(choice5_cb, INT2VOIDP(i)); @@ -426,14 +444,14 @@ int a_Dialog_user_password(const char *message, UserPasswordCB cb, void *vp) /* "OK" button */ y += input_h + 20; - Fl_Button *ok_button = new Fl_Button(200, y, 50, button_h, "OK"); + Fl_Button *ok_button = new EnterButton(200, y, 50, button_h, "OK"); ok_button->labelsize(14); ok_button->callback(Dialog_user_password_cb); window->add(ok_button); /* "Cancel" button */ Fl_Button *cancel_button = - new Fl_Button(50, y, 100, button_h, "Cancel"); + new EnterButton(50, y, 100, button_h, "Cancel"); cancel_button->labelsize(14); cancel_button->callback(Dialog_user_password_cb); window->add(cancel_button); |