From 3b2635f417d93f5e26d1ef8439441700d55d4d83 Mon Sep 17 00:00:00 2001 From: Peng Wu Date: Fri, 5 Dec 2014 14:15:49 +0800 Subject: write pinyin_accelerator_name function --- src/Makefile.am | 2 ++ src/PYEngine.cc | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++- src/PYEngine.h | 3 +++ 3 files changed, 69 insertions(+), 1 deletion(-) (limited to 'src') 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 #include "PYEngine.h" +#include +#include #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 += ""; + if (modifiers & IBUS_MOD1_MASK) + name += ""; + if (modifiers & IBUS_SHIFT_MASK) + name += ""; + if (modifiers & IBUS_META_MASK) + name += ""; + if (modifiers & IBUS_SUPER_MASK) + name += ""; + if (modifiers & IBUS_HYPER_MASK) + name += ""; + + + /* 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 -- cgit