diff options
author | sky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-07-01 20:14:50 +0000 |
---|---|---|
committer | sky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-07-01 20:14:50 +0000 |
commit | 0ea548267d30b10c6d7f899573eb37b793c1b346 (patch) | |
tree | dddce09315c6010d047dda6ec9c29d6aa5befc36 /base/gtk_util.cc | |
parent | a0c4b343dfa64780f7395d7e3a6e8ebe853a5ec3 (diff) | |
download | chromium_src-0ea548267d30b10c6d7f899573eb37b793c1b346.zip chromium_src-0ea548267d30b10c6d7f899573eb37b793c1b346.tar.gz chromium_src-0ea548267d30b10c6d7f899573eb37b793c1b346.tar.bz2 |
Moves gtk accelerator processing functions to base/gtk_util so I can
use them from views and gfx.
Sorry for the new patch on this and not an update. Not sure what happened.
BUG=none
TEST=none
Review URL: http://codereview.chromium.org/2809047
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@51409 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/gtk_util.cc')
-rw-r--r-- | base/gtk_util.cc | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/base/gtk_util.cc b/base/gtk_util.cc new file mode 100644 index 0000000..79fc485 --- /dev/null +++ b/base/gtk_util.cc @@ -0,0 +1,49 @@ +// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "base/gtk_util.h" + +namespace gtk_util { + +namespace { + +// Common implementation of ConvertAcceleratorsFromWindowsStyle() and +// RemoveWindowsStyleAccelerators(). +// Replaces all ampersands (as used in our grd files to indicate mnemonics) +// to |target|. Similarly any underscores get replaced with two underscores as +// is needed by pango. +std::string ConvertAmperstandsTo(const std::string& label, + const std::string& target) { + std::string ret; + ret.reserve(label.length() * 2); + for (size_t i = 0; i < label.length(); ++i) { + if ('_' == label[i]) { + ret.push_back('_'); + ret.push_back('_'); + } else if ('&' == label[i]) { + if (i + 1 < label.length() && '&' == label[i + 1]) { + ret.push_back('&'); + ++i; + } else { + ret.append(target); + } + } else { + ret.push_back(label[i]); + } + } + + return ret; +} + +} // namespace + +std::string ConvertAcceleratorsFromWindowsStyle(const std::string& label) { + return ConvertAmperstandsTo(label, "_"); +} + +std::string RemoveWindowsStyleAccelerators(const std::string& label) { + return ConvertAmperstandsTo(label, ""); +} + +} // namespace gtk_util |