IBusLookupTable *lookup_table;
gboolean lookup_table_visible;
+ /* filter release */
+ gboolean filter_release;
+
};
typedef struct _BusInputContextPrivate BusInputContextPrivate;
retval = bus_input_context_filter_keyboard_shortcuts (context, keyval, modifiers);
if (retval) {
+ priv->filter_release = TRUE;
reply = ibus_message_new_method_return (message);
ibus_message_append_args (reply,
G_TYPE_BOOLEAN, &retval,
BusInputContextPrivate *priv;
priv = BUS_INPUT_CONTEXT_GET_PRIVATE (context);
+ gboolean retval = FALSE;
+
static GQuark trigger;
static GQuark next_factory;
static GQuark prev_factory;
prev_factory = g_quark_from_static_string ("prev-engine");
}
+ if (priv->filter_release){
+ if(modifiers & IBUS_RELEASE_MASK) {
+ /* filter release key event */
+ return TRUE;
+ }
+ else {
+ /* stop filter release key event */
+ priv->filter_release = FALSE;
+ }
+ }
+
event = ibus_hotkey_profile_filter_key_event (BUS_DEFAULT_HOTKEY_PROFILE,
keyval,
modifiers,
bus_input_context_enable (context);
}
- return enabled != priv->enabled;
+ retval = (enabled != priv->enabled);
}
else if (event == next_factory) {
if (priv->engine == NULL || priv->enabled == FALSE) {
- return FALSE;
+ retval = FALSE;
+ }
+ else {
+ g_signal_emit (context, context_signals[REQUEST_NEXT_ENGINE], 0);
+ retval = TRUE;
}
- g_signal_emit (context, context_signals[REQUEST_NEXT_ENGINE], 0);
- return TRUE;
}
else if (event == prev_factory) {
if (priv->engine == NULL || priv->enabled == FALSE) {
- return FALSE;
+ retval = FALSE;
+ }
+ else {
+ g_signal_emit (context, context_signals[REQUEST_PREV_ENGINE], 0);
+ retval = TRUE;
}
- g_signal_emit (context, context_signals[REQUEST_PREV_ENGINE], 0);
- return TRUE;
}
- else
- return FALSE;
+
+ if (retval == TRUE) {
+ /* begine filter release key event */
+ priv->filter_release = TRUE;
+ }
+
+ return retval;
}