summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPeng Wu <alexepico@gmail.com>2014-12-05 14:15:49 +0800
committerPeng Wu <alexepico@gmail.com>2014-12-05 14:15:49 +0800
commit3b2635f417d93f5e26d1ef8439441700d55d4d83 (patch)
treead69fd83129b440551a3de6a906f5db926be91e1 /src
parent5d445470457a3bbf3684ef782410ce9cafac57e3 (diff)
downloadibus-libpinyin-3b2635f417d93f5e26d1ef8439441700d55d4d83.tar.gz
ibus-libpinyin-3b2635f417d93f5e26d1ef8439441700d55d4d83.tar.xz
ibus-libpinyin-3b2635f417d93f5e26d1ef8439441700d55d4d83.zip
write pinyin_accelerator_name function
Diffstat (limited to 'src')
-rw-r--r--src/Makefile.am2
-rw-r--r--src/PYEngine.cc65
-rw-r--r--src/PYEngine.h3
3 files changed, 69 insertions, 1 deletions
diff --git a/src/Makefile.am b/src/Makefile.am
index 087957c..035c5fe 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -109,6 +109,7 @@ ibus_engine_libpinyin_CXXFLAGS = \
@SQLITE_CFLAGS@ \
@LIBPINYIN_CFLAGS@ \
@OPENCC_CFLAGS@ \
+ @GDK3_CFLAGS@ \
-DGETTEXT_PACKAGE=\"@GETTEXT_PACKAGE@\" \
-DPKGDATADIR=\"$(pkgdatadir)\" \
-DLIBEXECDIR=\"$(libexecdir)\" \
@@ -129,6 +130,7 @@ ibus_engine_libpinyin_LDADD = \
@SQLITE_LIBS@ \
@LIBPINYIN_LIBS@ \
@OPENCC_LIBS@ \
+ @GDK3_LIBS@ \
$(NULL)
ibus_engine_libpinyin_CXXFLAGS += \
diff --git a/src/PYEngine.cc b/src/PYEngine.cc
index b275c68..f475156 100644
--- a/src/PYEngine.cc
+++ b/src/PYEngine.cc
@@ -19,8 +19,9 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-#include <cstring>
#include "PYEngine.h"
+#include <cstring>
+#include <gdk/gdk.h>
#include "PYPPinyinEngine.h"
#include "PYPBopomofoEngine.h"
@@ -283,5 +284,67 @@ Engine::~Engine (void)
{
}
+gboolean
+pinyin_accelerator_name(guint keyval, guint modifiers, std::string & name) {
+ name = "";
+
+ /* Convert some key press to modifiers. */
+ switch (keyval) {
+ case IBUS_KEY_Control_L:
+ case IBUS_KEY_Control_R:
+ modifiers |= IBUS_CONTROL_MASK;
+ keyval = 0;
+ break;
+ case IBUS_KEY_Alt_L:
+ case IBUS_KEY_Alt_R:
+ modifiers |= IBUS_MOD1_MASK;
+ keyval = 0;
+ break;
+ case IBUS_KEY_Shift_L:
+ case IBUS_KEY_Shift_R:
+ modifiers |= IBUS_SHIFT_MASK;
+ keyval = 0;
+ break;
+ case IBUS_KEY_Meta_L:
+ case IBUS_KEY_Meta_R:
+ modifiers |= IBUS_META_MASK;
+ keyval = 0;
+ break;
+ case IBUS_KEY_Super_L:
+ case IBUS_KEY_Super_R:
+ modifiers |= IBUS_SUPER_MASK;
+ keyval = 0;
+ break;
+ case IBUS_KEY_Hyper_L:
+ case IBUS_KEY_Hyper_R:
+ modifiers |= IBUS_HYPER_MASK;
+ keyval = 0;
+ break;
+ }
+
+ /* Convert modifiers. */
+ if (modifiers & IBUS_CONTROL_MASK)
+ name += "<Control>";
+ if (modifiers & IBUS_MOD1_MASK)
+ name += "<Alt>";
+ if (modifiers & IBUS_SHIFT_MASK)
+ name += "<Shift>";
+ if (modifiers & IBUS_META_MASK)
+ name += "<Meta>";
+ if (modifiers & IBUS_SUPER_MASK)
+ name += "<Super>";
+ if (modifiers & IBUS_HYPER_MASK)
+ name += "<Hyper>";
+
+
+ /* Convert keyval. */
+ if (keyval) {
+ const gchar * symbol = gdk_keyval_name (gdk_keyval_to_lower (keyval));
+ name += symbol;
+ }
+
+ return TRUE;
+}
+
};
diff --git a/src/PYEngine.h b/src/PYEngine.h
index 702520c..5273c34 100644
--- a/src/PYEngine.h
+++ b/src/PYEngine.h
@@ -134,5 +134,8 @@ protected:
};
+gboolean pinyin_accelerator_name(guint keyval, guint modifiers,
+ std::string & name);
+
};
#endif