uint32_t mod = state();
-#ifdef __APPLE__
- /* We use both bits (MOD2|META) for Primary on OS X,
- * but we don't want MOD2 showing up in listings.
- */
-
- if (mod & GDK_MOD2_MASK) {
- mod &= ~GDK_MOD2_MASK;
- }
-#endif
-
return gtk_accelerator_get_label (key(), (GdkModifierType) mod);
}
int mod = kb.state();
-#ifdef __APPLE__
- /* See comments in Keyboard::Keyboard about GTK handling of MOD2, META and the Command key.
- *
- * If we do not do this, GTK+ won't show the correct text for shortcuts in menus.
- */
-
- if (mod & GDK_MOD2_MASK) {
- mod = mod | GDK_META_MASK;
- }
-#endif
Gtk::AccelMap::add_entry (what->get_accel_path(), kb.key(), (Gdk::ModifierType) mod);
}
(void) kbm.insert (new_pair).first;
}
+ DEBUG_TRACE (DEBUG::Bindings, string_compose ("add binding between %1 and %2, group [%3]\n",
+ kb, action_name, (group ? group->value() : string())));
+
if (can_save) {
Keyboard::keybindings_changed ();
}
ostr << PROGRAM_NAME;
ostr << "</title>\n";
-
- ostr << "<style>\n";
- ostr << "\n\
-.key-name-even, .key-name-odd\n\
-{\n\
- font-weight: bold;\n\
-}\n\
-\n\
-.key-action-odd, .key-action-even\n\
-{\n\
- font-weight: normal;\n\
- font-style: italic;\n\
-}";
- ostr << "</style>\n";
-
ostr << "</head>\n<body>\n";
- ostr << "<div class=\"container\">\n";
+ ostr << "<table border=\"2\" cellpadding=\"6\"><tbody>\n\n";
+ ostr << "<tr>\n\n";
+
+ /* first column: separate by group */
+ ostr << "<td>\n\n";
+ for (list<Bindings*>::const_iterator b = bindings.begin(); b != bindings.end(); ++b) {
+ (*b)->save_as_html (ostr, true);
+ }
+ ostr << "</td>\n\n";
+ //second column
+ ostr << "<td style=\"vertical-align:top\">\n\n";
for (list<Bindings*>::const_iterator b = bindings.begin(); b != bindings.end(); ++b) {
- (*b)->save_as_html (ostr);
+ (*b)->save_as_html (ostr, false);
}
+ ostr << "</td>\n\n";
+
+
+ ostr << "</tr>\n\n";
+ ostr << "</tbody></table>\n\n";
- ostr << "</div>\n";
ostr << "</body>\n";
ostr << "</html>\n";
}
void
-Bindings::save_as_html (ostream& ostr) const
+Bindings::save_as_html (ostream& ostr, bool categorize) const
{
if (!press_bindings.empty()) {
- ostr << "<div class=\"binding-set\">\n";
- ostr << "<h1>";
- ostr << name();
- ostr << "</h1>\n\n";
-
- /* first pass: separate by group */
+ ostr << "<h2><u>";
+ if (categorize)
+ ostr << _("Window") << ": " << name() << _(" (Categorized)");
+ else
+ ostr << _("Window") << ": " << name() << _(" (Alphabetical)");
+ ostr << "</u></h2>\n\n";
typedef std::map<std::string, std::vector<KeybindingMap::const_iterator> > GroupMap;
GroupMap group_map;
for (KeybindingMap::const_iterator k = press_bindings.begin(); k != press_bindings.end(); ++k) {
+
if (k->first.name().empty()) {
continue;
}
string group_name;
- if (!k->second.group_name.empty()) {
+ if (categorize && !k->second.group_name.empty()) {
group_name = k->second.group_name;
} else {
- group_name = X_("nogroup");
+ group_name = _("Uncategorized");
}
GroupMap::iterator gm = group_map.find (group_name);
}
}
+
for (GroupMap::const_iterator gm = group_map.begin(); gm != group_map.end(); ++gm) {
- ostr << "<div class=\"group\">\n";
- ostr << "<div class=\"group-name\">" << gm->first << "</div>\n";
-
+ if (categorize) {
+ ostr << "<h3>" << gm->first << "</h3>\n";
+ }
+
for (vector<KeybindingMap::const_iterator>::const_iterator k = gm->second.begin(); k != gm->second.end(); ++k) {
if ((*k)->first.name().empty()) {
string key_name = (*k)->first.native_short_name ();
replace_all (key_name, X_("KP_"), X_("Numpad "));
+ replace_all (key_name, X_("nabla"), X_("Tab"));
string::size_type pos;
key_name.replace (pos, strlen (targets[n]), replacements[n]);
}
}
+
+ key_name.append(" ");
+
+ while (key_name.length()<28)
+ key_name.append("-");
- ostr << "<div class=\"key\">" << key_name << "</div>";
- ostr << "<div class=\"action\">" << action->get_label() << "</div>\n";
+ ostr << "<span style=\"font-family:monospace;\">" << key_name;
+ ostr << "<i>" << action->get_label() << "</i></span></br>\n";
}
- ostr << "</div>\n\n";
- }
+ ostr << "\n\n";
- ostr << "</div>\n";
+ }
+
+ ostr << "\n";
}
}
return km.find(kb) != km.end();
}
+std::string
+Bindings::bound_name (KeyboardKey const& kb, Operation op) const
+{
+ const KeybindingMap& km = get_keymap(op);
+ KeybindingMap::const_iterator b = km.find(kb);
+ if (b == km.end()) {
+ return "";
+ }
+ return b->second.action_name;
+}
+
bool
Bindings::is_registered (Operation op, std::string const& action_name) const
{
std::ostream& operator<<(std::ostream& out, Gtkmm2ext::KeyboardKey const & k) {
char const *gdk_name = gdk_keyval_name (k.key());
- return out << "Key " << k.key() << " (" << (gdk_name ? gdk_name : "no-key") << ") state " << hex << k.state() << dec;
+ return out << "Key " << k.key() << " (" << (gdk_name ? gdk_name : "no-key") << ") state "
+ << hex << k.state() << dec << ' ' << show_gdk_event_state (k.state());
}