From: Vadim Zeitlin Date: Sat, 9 Mar 2002 12:23:11 +0000 (+0000) Subject: added support for non alphanumeric simple character accelerators X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/a070d8ce248adad3c88c91588447d8fa2a2750ff added support for non alphanumeric simple character accelerators git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@14514 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/docs/changes.txt b/docs/changes.txt index 37e0315ec3..7b5e0d626a 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -140,6 +140,7 @@ wxGTK: - wxDirDialog now presents the file system in standard Unix way - wxButton now honours wxBU_EXACTFIT - wxStaticBox now honours wxALIGN_XXX styles +- added support for non alphanumeric simple character accelerators ('-', '=') wxHTML: diff --git a/src/common/menucmn.cpp b/src/common/menucmn.cpp index b9ecb0cf07..1f2b9fcbb7 100644 --- a/src/common/menucmn.cpp +++ b/src/common/menucmn.cpp @@ -82,11 +82,25 @@ wxAcceleratorEntry *wxGetAccelFromString(const wxString& label) else if ( current == _("shift") ) accelFlags |= wxACCEL_SHIFT; else { - wxLogDebug(wxT("Unknown accel modifier: '%s'"), - current.c_str()); + // we may have "Ctrl-+", for example, but we still want to + // catch typos like "Crtl-A" so only give the warning if we + // have something before the current '+' or '-', else take + // it as a literal symbol + if ( current.empty() ) + { + current += label[n]; + + // skip clearing it below + continue; + } + else + { + wxLogDebug(wxT("Unknown accel modifier: '%s'"), + current.c_str()); + } } - current.Empty(); + current.clear(); } else { current += wxTolower(label[n]); diff --git a/src/gtk/menu.cpp b/src/gtk/menu.cpp index fd598295af..d3aee69d38 100644 --- a/src/gtk/menu.cpp +++ b/src/gtk/menu.cpp @@ -1145,6 +1145,7 @@ int wxMenu::FindMenuIdByMenuItem( GtkWidget *menuItem ) const // ---------------------------------------------------------------------------- #if (GTK_MINOR_VERSION > 0) && wxUSE_ACCEL + static wxString GetHotKey( const wxMenuItem& item ) { wxString hotkey; @@ -1178,7 +1179,9 @@ static wxString GetHotKey( const wxMenuItem& item ) hotkey << wxT('F') << code - WXK_F1 + 1; break; - // GTK seems to use XStringToKeySym here + // TODO: we should use gdk_keyval_name() (a.k.a. + // XKeysymToString) here as well as hardcoding the keysym + // names this might be not portable case WXK_NUMPAD_INSERT: hotkey << wxT("KP_Insert" ); break; @@ -1192,15 +1195,18 @@ static wxString GetHotKey( const wxMenuItem& item ) hotkey << wxT("Delete" ); break; - // if there are any other keys wxGetAccelFromString() may return, - // we should process them here + // if there are any other keys wxGetAccelFromString() may + // return, we should process them here default: - if ( wxIsalnum(code) ) + if ( code < 127 ) { - hotkey << (wxChar)code; - - break; + gchar *name = gdk_keyval_name((guint)code); + if ( name ) + { + hotkey << name; + break; + } } wxFAIL_MSG( wxT("unknown keyboard accel") ); @@ -1211,6 +1217,7 @@ static wxString GetHotKey( const wxMenuItem& item ) return hotkey; } + #endif // wxUSE_ACCEL diff --git a/src/gtk1/menu.cpp b/src/gtk1/menu.cpp index fd598295af..d3aee69d38 100644 --- a/src/gtk1/menu.cpp +++ b/src/gtk1/menu.cpp @@ -1145,6 +1145,7 @@ int wxMenu::FindMenuIdByMenuItem( GtkWidget *menuItem ) const // ---------------------------------------------------------------------------- #if (GTK_MINOR_VERSION > 0) && wxUSE_ACCEL + static wxString GetHotKey( const wxMenuItem& item ) { wxString hotkey; @@ -1178,7 +1179,9 @@ static wxString GetHotKey( const wxMenuItem& item ) hotkey << wxT('F') << code - WXK_F1 + 1; break; - // GTK seems to use XStringToKeySym here + // TODO: we should use gdk_keyval_name() (a.k.a. + // XKeysymToString) here as well as hardcoding the keysym + // names this might be not portable case WXK_NUMPAD_INSERT: hotkey << wxT("KP_Insert" ); break; @@ -1192,15 +1195,18 @@ static wxString GetHotKey( const wxMenuItem& item ) hotkey << wxT("Delete" ); break; - // if there are any other keys wxGetAccelFromString() may return, - // we should process them here + // if there are any other keys wxGetAccelFromString() may + // return, we should process them here default: - if ( wxIsalnum(code) ) + if ( code < 127 ) { - hotkey << (wxChar)code; - - break; + gchar *name = gdk_keyval_name((guint)code); + if ( name ) + { + hotkey << name; + break; + } } wxFAIL_MSG( wxT("unknown keyboard accel") ); @@ -1211,6 +1217,7 @@ static wxString GetHotKey( const wxMenuItem& item ) return hotkey; } + #endif // wxUSE_ACCEL