From: John Spray Date: Sat, 2 Oct 2004 23:21:36 +0000 (+0000) Subject: Display accelerator (binding) labels in menus. X-Git-Tag: 1.6.10~14982 X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=005955b52744830d3531b78b671a325b5ba8f41a;hp=ae8999aeba35627e9b85774d5b7ed6d643186de6;p=lyx.git Display accelerator (binding) labels in menus. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@9035 a592a061-630c-0410-9148-cb99ea01b6c8 --- diff --git a/src/frontends/gtk/GLyXKeySym.C b/src/frontends/gtk/GLyXKeySym.C index 86d7855ddd..e345bfe26d 100644 --- a/src/frontends/gtk/GLyXKeySym.C +++ b/src/frontends/gtk/GLyXKeySym.C @@ -13,6 +13,8 @@ #include "GLyXKeySym.h" #include "kbmap.h" +#include "support/lstrings.h" + #include #include @@ -94,9 +96,27 @@ char GLyXKeySym::getISOEncoded(string const & /*encoding*/) const } +//Produce a human readable version (eg "Ctrl+N") string const GLyXKeySym::print(key_modifier::state mod) const { - return kb_keymap::printKeySym(*this, mod); + string buf; + + if (mod & key_modifier::ctrl) + buf += "Ctrl+"; + if (mod & key_modifier::shift) + buf += "Shift+"; + if (mod & key_modifier::alt) + buf += "Alt+"; + + //Uppercase the first letter, for Ctrl+N rather than Ctrl+n, + //and for Ctrl+Greater rather than Ctrl+GREATER + string symname = getSymbolName(); + if (!symname.empty()) { + symname[0] = lyx::support::uppercase(symname[0]); + buf += symname; + } + + return buf; } diff --git a/src/frontends/gtk/GMenubar.C b/src/frontends/gtk/GMenubar.C index df2b90ac92..45a2159d62 100644 --- a/src/frontends/gtk/GMenubar.C +++ b/src/frontends/gtk/GMenubar.C @@ -180,9 +180,6 @@ void GMenubar::onSubMenuActivate(MenuItem const * item, break; case MenuItem::Command: { -#ifdef WITH_WARNINGS -#warning Bindings are not inserted into the menu labels here. (Lgb) -#endif FuncStatus const flag = view_->getLyXFunc().getStatus(i->func()); bool on = flag.onoff(true); @@ -198,10 +195,21 @@ void GMenubar::onSubMenuActivate(MenuItem const * item, gmenu->items().back()); citem.set_active(on); } else { - gmenu->items().push_back( - Gtk::Menu_Helpers::MenuElem( - labelTrans(i->label(), - i->shortcut()))); + //This is necessary because add_accel_label is protected, + //and even if you subclass Gtk::MenuItem then add_accel_label + //doesn't do what you'd expect. + Gtk::MenuItem * item = Gtk::manage(new Gtk::MenuItem); + Gtk::HBox * hbox = Gtk::manage(new Gtk::HBox); + Gtk::Label * label1 = Gtk::manage(new Gtk::Label( + labelTrans(i->label(), i->shortcut()), true)); + Gtk::Label * label2 = Gtk::manage(new Gtk::Label( + " " + i->binding(), false)); + hbox->pack_start(*label1, false, false, 0); + hbox->pack_end(*label2, false, false, 0); + item->add(*hbox); + + gmenu->append(*item); + item->show_all(); } Gtk::MenuItem & item = gmenu->items().back(); item.signal_activate().connect(