From 75b6ac477e916c070d8465f93d3beaf5b0b6fdf1 Mon Sep 17 00:00:00 2001 From: Markus Gans Date: Sat, 16 Jul 2016 20:39:38 +0200 Subject: [PATCH] Switch to a specific dialog with meta + 1..9 --- ChangeLog | 4 + src/fapp.cpp | 21 ++++- src/fapp.h | 1 + src/fdialog.cpp | 16 ++++ src/fdialog.h | 1 + src/fkey_map.h | 236 +++++++++++++++++++++++++--------------------- src/fmenuitem.cpp | 33 +++---- 7 files changed, 188 insertions(+), 124 deletions(-) diff --git a/ChangeLog b/ChangeLog index 89efd90d..054e9df1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2016-07-16 Markus Gans + * Switch to a specific dialog with meta key + 1..9 + * Add more meta key escape sequences (for putty) + 2016-07-14 Markus Gans * Adding a dialog list with the entries in the chronological order of the generation diff --git a/src/fapp.cpp b/src/fapp.cpp index afd436a0..373c1cde 100644 --- a/src/fapp.cpp +++ b/src/fapp.cpp @@ -399,6 +399,9 @@ void FApplication::processKeyboardEvent() // global keyboard accelerator processAccelerator (getRootWidget()); + + // switch to a specific dialog with Meta + 1..9 + processDialogSwitchAccelerator(); } } // end of else } @@ -428,6 +431,22 @@ void FApplication::processKeyboardEvent() } } +//---------------------------------------------------------------------- +void FApplication::processDialogSwitchAccelerator() +{ + if ( key >= fc::Fmkey_1 && key <= fc::Fmkey_9 ) + { + int n = key - fc::Fmkey_0; + int s = dialog_list->size(); + + if ( s > 0 && s >= n ) + { + FAccelEvent a_ev (fc::Accelerator_Event, focus_widget); + sendEvent (dialog_list->at(n-1), &a_ev); + } + } +} + //---------------------------------------------------------------------- void FApplication::processAccelerator (FWidget* widget) { @@ -1346,7 +1365,7 @@ void FApplication::processCloseWidget() widgetList::iterator iter; iter = close_widget->begin(); - while ( iter != close_widget->end() ) + while ( iter != close_widget->end() && *iter ) { delete *iter; ++iter; diff --git a/src/fapp.h b/src/fapp.h index 12a01258..0d52f4ab 100644 --- a/src/fapp.h +++ b/src/fapp.h @@ -124,6 +124,7 @@ class FApplication : public FWidget bool KeyPressed(); ssize_t readKey(); void processKeyboardEvent(); + void processDialogSwitchAccelerator(); void processAccelerator (FWidget*); void getX11ButtonState (int); bool parseX11Mouse(); diff --git a/src/fdialog.cpp b/src/fdialog.cpp index 74d52bc0..c96407a8 100644 --- a/src/fdialog.cpp +++ b/src/fdialog.cpp @@ -801,6 +801,22 @@ void FDialog::onMouseDoubleClick (FMouseEvent* ev) } } +//---------------------------------------------------------------------- +void FDialog::onAccel (FAccelEvent*) +{ + if ( ! this->isHiddenWindow() && ! this->isActiveWindow() ) + { + FWindow::setActiveWindow(this); + FWidget* focus_widget = this->getFocusWidget(); + FWindow::raiseWindow (this); + + if ( focus_widget ) + focus_widget->setFocus(); + + this->redraw(); + } +} + //---------------------------------------------------------------------- void FDialog::onWindowActive (FEvent*) { diff --git a/src/fdialog.h b/src/fdialog.h index f11c6637..3fc599c8 100644 --- a/src/fdialog.h +++ b/src/fdialog.h @@ -88,6 +88,7 @@ class FDialog : public FWindow void onMouseUp (FMouseEvent*); void onMouseMove (FMouseEvent*); void onMouseDoubleClick (FMouseEvent*); + void onAccel (FAccelEvent*); void onWindowActive (FEvent*); void onWindowInactive (FEvent*); void onWindowRaised (FEvent*); diff --git a/src/fkey_map.h b/src/fkey_map.h index c8ed26db..2ec9c330 100644 --- a/src/fkey_map.h +++ b/src/fkey_map.h @@ -195,113 +195,135 @@ metakeymap; static metakeymap Fmetakey[] = { - { fc::Fmkey_ic , "\033[2;3~" }, // M-insert - { fc::Fmkey_dc , "\033[3;3~" }, // M-delete - { fc::Fmkey_home , "\033[1;3H" }, // M-home - { fc::Fmkey_end , "\033[1;3F" }, // M-end - { fc::Fmkey_ppage , "\033[5;3~" }, // M-prev-page - { fc::Fmkey_npage , "\033[6;3~" }, // M-next-page - { fc::Fmkey_f1 , "\033[1;3P" }, // M-f1 - { fc::Fmkey_f2 , "\033[1;3Q" }, // M-f2 - { fc::Fmkey_f3 , "\033[1;3R" }, // M-f3 - { fc::Fmkey_f4 , "\033[1;3S" }, // M-f4 - { fc::Fmkey_f5 , "\033[15;3~" }, // M-f5 - { fc::Fmkey_f6 , "\033[17;3~" }, // M-f6 - { fc::Fmkey_f7 , "\033[18;3~" }, // M-f7 - { fc::Fmkey_f8 , "\033[19;3~" }, // M-f8 - { fc::Fmkey_f9 , "\033[20;3~" }, // M-f9 - { fc::Fmkey_f10 , "\033[21;3~" }, // M-f10 - { fc::Fmkey_f11 , "\033[23;3~" }, // M-f11 - { fc::Fmkey_f12 , "\033[24;3~" }, // M-f12 - { fc::Fmkey_up , "\033[1;3A" }, // M-up - { fc::Fmkey_down , "\033[1;3B" }, // M-down - { fc::Fmkey_right , "\033[1;3C" }, // M-right - { fc::Fmkey_left , "\033[1;3D" }, // M-left - { fc::Fmkey_sic , "\033[2;4~" }, // shift-M-insert - { fc::Fmkey_sdc , "\033[3;4~" }, // shift-M-delete - { fc::Fmkey_shome , "\033[1;4H" }, // shift-M-home - { fc::Fmkey_send , "\033[1;4F" }, // shift-M-end - { fc::Fmkey_sppage , "\033[5;4~" }, // shift-M-prev-page - { fc::Fmkey_snpage , "\033[6;4~" }, // shift-M-next-page - { fc::Fmkey_sf1 , "\033[1;4P" }, // shift-M-f1 - { fc::Fmkey_sf2 , "\033[1;4Q" }, // shift-M-f2 - { fc::Fmkey_sf3 , "\033[1;4R" }, // shift-M-f3 - { fc::Fmkey_sf4 , "\033[1;4S" }, // shift-M-f4 - { fc::Fmkey_sf5 , "\033[15;4~" }, // shift-M-f5 - { fc::Fmkey_sf6 , "\033[17;4~" }, // shift-M-f6 - { fc::Fmkey_sf7 , "\033[18;4~" }, // shift-M-f7 - { fc::Fmkey_sf8 , "\033[19;4~" }, // shift-M-f8 - { fc::Fmkey_sf9 , "\033[20;4~" }, // shift-M-f9 - { fc::Fmkey_sf10 , "\033[21;4~" }, // shift-M-f10 - { fc::Fmkey_sf11 , "\033[23;4~" }, // shift-M-f11 - { fc::Fmkey_sf12 , "\033[24;4~" }, // shift-M-f12 - { fc::Fmkey_sup , "\033[1;4A" }, // shift-M-up - { fc::Fmkey_sdown , "\033[1;4B" }, // shift-M-down - { fc::Fmkey_sright , "\033[1;4C" }, // shift-M-right - { fc::Fmkey_sleft , "\033[1;4D" }, // shift-M-left - { fc::Fckey_ic , "\033[2;5~" }, // ctrl-insert - { fc::Fckey_dc , "\033[3;5~" }, // ctrl-delete - { fc::Fckey_home , "\033[1;5H" }, // ctrl-home - { fc::Fckey_end , "\033[1;5F" }, // ctrl-end - { fc::Fckey_ppage , "\033[5;5~" }, // ctrl-prev-page - { fc::Fckey_npage , "\033[6;5~" }, // ctrl-next-page - { fc::Fckey_up , "\033[1;5A" }, // ctrl-up - { fc::Fckey_down , "\033[1;5B" }, // ctrl-down - { fc::Fckey_right , "\033[1;5C" }, // ctrl-right - { fc::Fckey_left , "\033[1;5D" }, // ctrl-left - { fc::Fckey_sic , "\033[2;6~" }, // shift-ctrl-M-insert - { fc::Fckey_sdc , "\033[3;6~" }, // shift-ctrl-M-delete - { fc::Fckey_shome , "\033[1;6H" }, // shift-ctrl-M-home - { fc::Fckey_send , "\033[1;6F" }, // shift-ctrl-M-end - { fc::Fckey_sppage , "\033[5;6~" }, // shift-ctrl-M-prev-page - { fc::Fckey_snpage , "\033[6;6~" }, // shift-ctrl-M-next-page - { fc::Fckey_sup , "\033[1;6A" }, // shift-ctrl-M-up - { fc::Fckey_sdown , "\033[1;6B" }, // shift-ctrl-M-down - { fc::Fckey_sright , "\033[1;6C" }, // shift-ctrl-M-right - { fc::Fckey_sleft , "\033[1;6D" }, // shift-ctrl-M-left - { fc::Fcmkey_ic , "\033[2;7~" }, // ctrl-M-insert - { fc::Fcmkey_dc , "\033[3;7~" }, // ctrl-M-delete - { fc::Fcmkey_home , "\033[1;7H" }, // ctrl-M-home - { fc::Fcmkey_end , "\033[1;7F" }, // ctrl-M-end - { fc::Fcmkey_ppage , "\033[5;7~" }, // ctrl-M-prev-page - { fc::Fcmkey_npage , "\033[6;7~" }, // ctrl-M-next-page - { fc::Fcmkey_up , "\033[1;7A" }, // ctrl-M-up - { fc::Fcmkey_down , "\033[1;7B" }, // ctrl-M-down - { fc::Fcmkey_right , "\033[1;7C" }, // ctrl-M-right - { fc::Fcmkey_left , "\033[1;7D" }, // ctrl-M-left - { fc::Fcmkey_sic , "\033[2;8~" }, // shift-ctrl-M-insert - { fc::Fcmkey_sdc , "\033[3;8~" }, // shift-ctrl-M-delete - { fc::Fcmkey_shome , "\033[1;8H" }, // shift-ctrl-M-home - { fc::Fcmkey_send , "\033[1;8F" }, // shift-ctrl-M-end - { fc::Fcmkey_sppage , "\033[5;8~" }, // shift-ctrl-M-prev-page - { fc::Fcmkey_snpage , "\033[6;8~" }, // shift-ctrl-M-next-page - { fc::Fcmkey_sf1 , "\033[1;8P" }, // shift-ctrl-M-f1 - { fc::Fcmkey_sf2 , "\033[1;8Q" }, // shift-ctrl-M-f2 - { fc::Fcmkey_sf3 , "\033[1;8R" }, // shift-ctrl-M-f3 - { fc::Fcmkey_sf4 , "\033[1;8S" }, // shift-ctrl-M-f4 - { fc::Fcmkey_sf5 , "\033[15;8~" }, // shift-ctrl-M-f5 - { fc::Fcmkey_sf6 , "\033[17;8~" }, // shift-ctrl-M-f6 - { fc::Fcmkey_sf7 , "\033[18;8~" }, // shift-ctrl-M-f7 - { fc::Fcmkey_sf8 , "\033[19;8~" }, // shift-ctrl-M-f8 - { fc::Fcmkey_sf9 , "\033[20;8~" }, // shift-ctrl-M-f9 - { fc::Fcmkey_sf10 , "\033[21;8~" }, // shift-ctrl-M-f10 - { fc::Fcmkey_sf11 , "\033[23;8~" }, // shift-ctrl-M-f11 - { fc::Fcmkey_sf12 , "\033[24;8~" }, // shift-ctrl-M-f12 - { fc::Fcmkey_sup , "\033[1;8A" }, // shift-ctrl-M-up - { fc::Fcmkey_sdown , "\033[1;8B" }, // shift-ctrl-M-down - { fc::Fcmkey_sright , "\033[1;8C" }, // shift-ctrl-M-right - { fc::Fcmkey_sleft , "\033[1;8D" }, // shift-ctrl-M-left - { fc::Fkey_menu , "\033[29~" }, // menu - { fc::Fkey_smenu , "\033[29$" }, // shift-menu - { fc::Fkey_smenu , "\033[29;2~" }, // shift-menu - { fc::Fckey_menu , "\033[29^" }, // ctrl-menu - { fc::Fckey_menu , "\033[29;5~" }, // ctrl-menu - { fc::Fckey_smenu , "\033[29@" }, // shift-ctrl-menu - { fc::Fckey_smenu , "\033[29;6~" }, // shift-ctrl-menu - { fc::Fmkey_menu , "\033[29;3~" }, // M-menu - { fc::Fmkey_smenu , "\033[29;4~" }, // shift-M-menu - { fc::Fcmkey_menu , "\033[29;7~" }, // ctrl-M-menu - { fc::Fcmkey_smenu , "\033[29;8~" }, // shift-ctrl-M-menu + { fc::Fmkey_ic , "\033[2;3~" }, // M-insert + { fc::Fmkey_ic , "\033\033[2~" }, // M-insert + { fc::Fmkey_dc , "\033[3;3~" }, // M-delete + { fc::Fmkey_dc , "\033\033[3~" }, // M-delete + { fc::Fmkey_home , "\033[1;3H" }, // M-home + { fc::Fmkey_home , "\033\033[1~" }, // M-home + { fc::Fmkey_end , "\033[1;3F" }, // M-end + { fc::Fmkey_end , "\033\033[4~" }, // M-end + { fc::Fmkey_ppage , "\033[5;3~" }, // M-prev-page + { fc::Fmkey_ppage , "\033\033[5~" }, // M-prev-page + { fc::Fmkey_npage , "\033[6;3~" }, // M-next-page + { fc::Fmkey_npage , "\033\033[6~" }, // M-next-page + { fc::Fmkey_f1 , "\033[1;3P" }, // M-f1 + { fc::Fmkey_f1 , "\033\033[11~"}, // M-f1 + { fc::Fmkey_f2 , "\033[1;3Q" }, // M-f2 + { fc::Fmkey_f2 , "\033\033[12~"}, // M-f2 + { fc::Fmkey_f3 , "\033[1;3R" }, // M-f3 + { fc::Fmkey_f3 , "\033\033[13~"}, // M-f3 + { fc::Fmkey_f4 , "\033[1;3S" }, // M-f4 + { fc::Fmkey_f4 , "\033\033[14~"}, // M-f4 + { fc::Fmkey_f5 , "\033[15;3~" }, // M-f5 + { fc::Fmkey_f5 , "\033\033[15~"}, // M-f5 + { fc::Fmkey_f6 , "\033[17;3~" }, // M-f6 + { fc::Fmkey_f6 , "\033\033[17~"}, // M-f6 + { fc::Fmkey_f7 , "\033[18;3~" }, // M-f7 + { fc::Fmkey_f7 , "\033\033[18~"}, // M-f7 + { fc::Fmkey_f8 , "\033[19;3~" }, // M-f8 + { fc::Fmkey_f8 , "\033\033[19~"}, // M-f8 + { fc::Fmkey_f9 , "\033[20;3~" }, // M-f9 + { fc::Fmkey_f9 , "\033\033[20~"}, // M-f9 + { fc::Fmkey_f10 , "\033[21;3~" }, // M-f10 + { fc::Fmkey_f10 , "\033\033[21~"}, // M-f10 + { fc::Fmkey_f11 , "\033[23;3~" }, // M-f11 + { fc::Fmkey_f11 , "\033\033[23~"}, // M-f11 + { fc::Fmkey_f12 , "\033[24;3~" }, // M-f12 + { fc::Fmkey_f12 , "\033\033[24~"}, // M-f12 + { fc::Fmkey_up , "\033[1;3A" }, // M-up + { fc::Fmkey_up , "\033\033[A" }, // M-up + { fc::Fmkey_down , "\033[1;3B" }, // M-down + { fc::Fmkey_down , "\033\033[B" }, // M-down + { fc::Fmkey_right , "\033[1;3C" }, // M-right + { fc::Fmkey_right , "\033\033[C" }, // M-right + { fc::Fmkey_left , "\033[1;3D" }, // M-left + { fc::Fmkey_left , "\033\033[D" }, // M-left + { fc::Fmkey_sic , "\033[2;4~" }, // shift-M-insert + { fc::Fmkey_sdc , "\033[3;4~" }, // shift-M-delete + { fc::Fmkey_shome , "\033[1;4H" }, // shift-M-home + { fc::Fmkey_send , "\033[1;4F" }, // shift-M-end + { fc::Fmkey_sppage , "\033[5;4~" }, // shift-M-prev-page + { fc::Fmkey_snpage , "\033[6;4~" }, // shift-M-next-page + { fc::Fmkey_sf1 , "\033[1;4P" }, // shift-M-f1 + { fc::Fmkey_sf2 , "\033[1;4Q" }, // shift-M-f2 + { fc::Fmkey_sf3 , "\033[1;4R" }, // shift-M-f3 + { fc::Fmkey_sf4 , "\033[1;4S" }, // shift-M-f4 + { fc::Fmkey_sf5 , "\033[15;4~" }, // shift-M-f5 + { fc::Fmkey_sf6 , "\033[17;4~" }, // shift-M-f6 + { fc::Fmkey_sf7 , "\033[18;4~" }, // shift-M-f7 + { fc::Fmkey_sf8 , "\033[19;4~" }, // shift-M-f8 + { fc::Fmkey_sf9 , "\033[20;4~" }, // shift-M-f9 + { fc::Fmkey_sf10 , "\033[21;4~" }, // shift-M-f10 + { fc::Fmkey_sf11 , "\033[23;4~" }, // shift-M-f11 + { fc::Fmkey_sf12 , "\033[24;4~" }, // shift-M-f12 + { fc::Fmkey_sup , "\033[1;4A" }, // shift-M-up + { fc::Fmkey_sdown , "\033[1;4B" }, // shift-M-down + { fc::Fmkey_sright , "\033[1;4C" }, // shift-M-right + { fc::Fmkey_sleft , "\033[1;4D" }, // shift-M-left + { fc::Fckey_ic , "\033[2;5~" }, // ctrl-insert + { fc::Fckey_dc , "\033[3;5~" }, // ctrl-delete + { fc::Fckey_home , "\033[1;5H" }, // ctrl-home + { fc::Fckey_end , "\033[1;5F" }, // ctrl-end + { fc::Fckey_ppage , "\033[5;5~" }, // ctrl-prev-page + { fc::Fckey_npage , "\033[6;5~" }, // ctrl-next-page + { fc::Fckey_up , "\033[1;5A" }, // ctrl-up + { fc::Fckey_down , "\033[1;5B" }, // ctrl-down + { fc::Fckey_right , "\033[1;5C" }, // ctrl-right + { fc::Fckey_left , "\033[1;5D" }, // ctrl-left + { fc::Fckey_sic , "\033[2;6~" }, // shift-ctrl-M-insert + { fc::Fckey_sdc , "\033[3;6~" }, // shift-ctrl-M-delete + { fc::Fckey_shome , "\033[1;6H" }, // shift-ctrl-M-home + { fc::Fckey_send , "\033[1;6F" }, // shift-ctrl-M-end + { fc::Fckey_sppage , "\033[5;6~" }, // shift-ctrl-M-prev-page + { fc::Fckey_snpage , "\033[6;6~" }, // shift-ctrl-M-next-page + { fc::Fckey_sup , "\033[1;6A" }, // shift-ctrl-M-up + { fc::Fckey_sdown , "\033[1;6B" }, // shift-ctrl-M-down + { fc::Fckey_sright , "\033[1;6C" }, // shift-ctrl-M-right + { fc::Fckey_sleft , "\033[1;6D" }, // shift-ctrl-M-left + { fc::Fcmkey_ic , "\033[2;7~" }, // ctrl-M-insert + { fc::Fcmkey_dc , "\033[3;7~" }, // ctrl-M-delete + { fc::Fcmkey_home , "\033[1;7H" }, // ctrl-M-home + { fc::Fcmkey_end , "\033[1;7F" }, // ctrl-M-end + { fc::Fcmkey_ppage , "\033[5;7~" }, // ctrl-M-prev-page + { fc::Fcmkey_npage , "\033[6;7~" }, // ctrl-M-next-page + { fc::Fcmkey_up , "\033[1;7A" }, // ctrl-M-up + { fc::Fcmkey_down , "\033[1;7B" }, // ctrl-M-down + { fc::Fcmkey_right , "\033[1;7C" }, // ctrl-M-right + { fc::Fcmkey_left , "\033[1;7D" }, // ctrl-M-left + { fc::Fcmkey_sic , "\033[2;8~" }, // shift-ctrl-M-insert + { fc::Fcmkey_sdc , "\033[3;8~" }, // shift-ctrl-M-delete + { fc::Fcmkey_shome , "\033[1;8H" }, // shift-ctrl-M-home + { fc::Fcmkey_send , "\033[1;8F" }, // shift-ctrl-M-end + { fc::Fcmkey_sppage , "\033[5;8~" }, // shift-ctrl-M-prev-page + { fc::Fcmkey_snpage , "\033[6;8~" }, // shift-ctrl-M-next-page + { fc::Fcmkey_sf1 , "\033[1;8P" }, // shift-ctrl-M-f1 + { fc::Fcmkey_sf2 , "\033[1;8Q" }, // shift-ctrl-M-f2 + { fc::Fcmkey_sf3 , "\033[1;8R" }, // shift-ctrl-M-f3 + { fc::Fcmkey_sf4 , "\033[1;8S" }, // shift-ctrl-M-f4 + { fc::Fcmkey_sf5 , "\033[15;8~" }, // shift-ctrl-M-f5 + { fc::Fcmkey_sf6 , "\033[17;8~" }, // shift-ctrl-M-f6 + { fc::Fcmkey_sf7 , "\033[18;8~" }, // shift-ctrl-M-f7 + { fc::Fcmkey_sf8 , "\033[19;8~" }, // shift-ctrl-M-f8 + { fc::Fcmkey_sf9 , "\033[20;8~" }, // shift-ctrl-M-f9 + { fc::Fcmkey_sf10 , "\033[21;8~" }, // shift-ctrl-M-f10 + { fc::Fcmkey_sf11 , "\033[23;8~" }, // shift-ctrl-M-f11 + { fc::Fcmkey_sf12 , "\033[24;8~" }, // shift-ctrl-M-f12 + { fc::Fcmkey_sup , "\033[1;8A" }, // shift-ctrl-M-up + { fc::Fcmkey_sdown , "\033[1;8B" }, // shift-ctrl-M-down + { fc::Fcmkey_sright , "\033[1;8C" }, // shift-ctrl-M-right + { fc::Fcmkey_sleft , "\033[1;8D" }, // shift-ctrl-M-left + { fc::Fkey_menu , "\033[29~" }, // menu + { fc::Fkey_smenu , "\033[29$" }, // shift-menu + { fc::Fkey_smenu , "\033[29;2~" }, // shift-menu + { fc::Fckey_menu , "\033[29^" }, // ctrl-menu + { fc::Fckey_menu , "\033[29;5~" }, // ctrl-menu + { fc::Fckey_smenu , "\033[29@" }, // shift-ctrl-menu + { fc::Fckey_smenu , "\033[29;6~" }, // shift-ctrl-menu + { fc::Fmkey_menu , "\033[29;3~" }, // M-menu + { fc::Fmkey_smenu , "\033[29;4~" }, // shift-M-menu + { fc::Fcmkey_menu , "\033[29;7~" }, // ctrl-M-menu + { fc::Fcmkey_smenu , "\033[29;8~" }, // shift-ctrl-M-menu { fc::Fkey_escape_mintty , "\033O["}, // mintty Esc { fc::Fmkey_space , "\033 " }, // M-' ' { fc::Fmkey_bang , "\033!" }, // M-! diff --git a/src/fmenuitem.cpp b/src/fmenuitem.cpp index 66b3330f..ccda8132 100644 --- a/src/fmenuitem.cpp +++ b/src/fmenuitem.cpp @@ -258,27 +258,28 @@ void FMenuItem::createDialogList (FMenu* winmenu) if ( dialog_list && ! dialog_list->empty() ) { - widgetList::const_iterator iter; - iter = dialog_list->begin(); + widgetList::const_iterator iter, begin; + iter = begin = dialog_list->begin(); - while ( iter != dialog_list->end() ) + while ( iter != dialog_list->end() && *iter ) { - if ( *iter && (*iter)->isDialog() ) + FDialog* win = dynamic_cast(*iter); + + if ( win ) { - FDialog* win = dynamic_cast(*iter); + int n = std::distance(begin, iter); + FString win_title = win->getText(); + FMenuItem* win_item = new FMenuItem (win_title, winmenu); - if ( win ) - { - FString win_title = win->getText(); - FMenuItem* win_item = new FMenuItem (win_title, winmenu); + if ( n < 9 ) + win_item->addAccelerator (fc::Fmkey_1 + n); // Meta + 1..9 - win_item->addCallback - ( - "clicked", - _METHOD_CALLBACK (this, &FMenuItem::cb_switchToDialog), - dynamic_cast(win) - ); - } + win_item->addCallback + ( + "clicked", + _METHOD_CALLBACK (this, &FMenuItem::cb_switchToDialog), + dynamic_cast(win) + ); } ++iter;