static GQuark next_factory;
static GQuark prev_factory;
+ static guint prev_keyval = 0;
+ static guint prev_modifiers = 0;
+
GQuark event;
if (trigger == 0) {
event = ibus_hotkey_profile_filter_key_event (BUS_DEFAULT_HOTKEY_PROFILE,
keyval,
modifiers,
+ prev_keyval,
+ prev_modifiers,
0);
+ prev_keyval = keyval;
+ prev_modifiers = modifiers;
+
if (event == trigger) {
if (priv->engine == NULL) {
g_signal_emit (context, context_signals[REQUEST_ENGINE], 0, NULL);
ibus_hotkey_profile_filter_key_event (IBusHotkeyProfile *profile,
guint keyval,
guint modifiers,
+ guint prev_keyval,
+ guint prev_modifiers,
gpointer user_data)
{
IBusHotkeyProfilePrivate *priv;
.modifiers = modifiers & priv->mask,
};
+ if ((modifiers & IBUS_RELEASE_MASK) && keyval != prev_keyval) {
+ return 0;
+ }
+
GQuark event = (GQuark) GPOINTER_TO_UINT (g_tree_lookup (priv->hotkeys, &hotkey));
if (event != 0) {