fix the font/live zoom control issue.

When you focus on other window while you pressing the ctrl/alt key at the enventor,
the ctrl/alt key pressed context can be corrupted.

because enventor keeps the extra flag for ctrl/alt key press states.
but in the problem case, the unpress key won't be trigged.

enventor doesn't need to keep the extra flag but track the modifiers in key event.

@fix
This commit is contained in:
ChunEon Park 2015-06-12 17:03:45 +09:00
parent 5b7bdd95ba
commit 82d31b3418
1 changed files with 43 additions and 58 deletions

View File

@ -9,29 +9,11 @@
typedef struct app_s
{
Evas_Object *enventor;
Eina_Bool ctrl_pressed : 1;
Eina_Bool alt_pressed : 1;
Eina_Bool template_new : 1;
} app_data;
int main(int argc, char **argv);
static Eina_Bool
main_key_up_cb(void *data, int type EINA_UNUSED, void *ev)
{
Ecore_Event_Key *event = ev;
app_data *ad = data;
if (!strcmp("Control_L", event->key))
ad->ctrl_pressed = EINA_FALSE;
if (!strcmp("Alt_L", event->key))
ad->alt_pressed = EINA_FALSE;
return ECORE_CALLBACK_PASS_ON;
}
void
auto_comp_toggle(app_data *ad)
{
@ -163,7 +145,8 @@ main_mouse_wheel_cb(void *data, int type EINA_UNUSED, void *ev)
app_data *ad = data;
Evas_Coord x, y, w, h;
if (!ad->ctrl_pressed) return ECORE_CALLBACK_PASS_ON;
if (event->modifiers != ECORE_EVENT_MODIFIER_CTRL)
return ECORE_CALLBACK_PASS_ON;
//View Scale
Evas_Object *view = enventor_object_live_view_get(ad->enventor);
@ -582,101 +565,109 @@ default_template_insert(app_data *ad)
}
static Eina_Bool
alt_func(app_data *ad, const char *key)
alt_func(app_data *ad, Ecore_Event_Key *event)
{
if (event->modifiers != ECORE_EVENT_MODIFIER_ALT)
return EINA_FALSE;
//Full Edit View
if (!strcmp(key, "Left"))
if (!strcmp(event->key, "Left"))
{
base_live_view_full_view();
return ECORE_CALLBACK_DONE;
return EINA_TRUE;
}
//Full Live View
if (!strcmp(key, "Right"))
if (!strcmp(event->key, "Right"))
{
base_enventor_full_view();
return ECORE_CALLBACK_DONE;
return EINA_TRUE;
}
//Full Console View
if (!strcmp(key, "Up"))
if (!strcmp(event->key, "Up"))
{
base_console_full_view();
return ECORE_CALLBACK_DONE;
return EINA_TRUE;
}
//Full Editors View
if (!strcmp(key, "Down"))
if (!strcmp(event->key, "Down"))
{
base_editors_full_view();
return ECORE_CALLBACK_DONE;
return EINA_TRUE;
}
return EINA_FALSE;
}
static Eina_Bool
ctrl_func(app_data *ad, const char *key)
ctrl_func(app_data *ad, Ecore_Event_Key *event)
{
if (event->modifiers != ECORE_EVENT_MODIFIER_CTRL)
return EINA_FALSE;
//Save
if (!strcmp(key, "s") || !strcmp(key, "S"))
if (!strcmp(event->key, "s") || !strcmp(event->key, "S"))
{
file_mgr_edc_save();
return ECORE_CALLBACK_DONE;
return EINA_TRUE;
}
//Delete Line
if (!strcmp(key, "d") || !strcmp(key, "D"))
if (!strcmp(event->key, "d") || !strcmp(event->key, "D"))
{
enventor_object_line_delete(ad->enventor);
return ECORE_CALLBACK_DONE;
return EINA_TRUE;
}
//Find/Replace
if (!strcmp(key, "f") || !strcmp(key, "F"))
if (!strcmp(event->key, "f") || !strcmp(event->key, "F"))
{
live_edit_cancel();
search_open(ad->enventor);
return ECORE_CALLBACK_DONE;
return EINA_TRUE;
}
//Goto Line
if (!strcmp(key, "l") || !strcmp(key, "L"))
if (!strcmp(event->key, "l") || !strcmp(event->key, "L"))
{
live_edit_cancel();
goto_open(ad->enventor);
return ECORE_CALLBACK_DONE;
return EINA_TRUE;
}
//Part Highlight
if (!strcmp(key, "h") || !strcmp(key, "H"))
if (!strcmp(event->key, "h") || !strcmp(event->key, "H"))
{
part_highlight_toggle(ad);
return ECORE_CALLBACK_DONE;
return EINA_TRUE;
}
//Swallow Dummy Object
if (!strcmp(key, "w") || !strcmp(key, "W"))
if (!strcmp(event->key, "w") || !strcmp(event->key, "W"))
{
dummy_swallow_toggle(ad);
return ECORE_CALLBACK_DONE;
return EINA_TRUE;
}
//Template Code
if (!strcmp(key, "t") || !strcmp(key, "T"))
if (!strcmp(event->key, "t") || !strcmp(event->key, "T"))
{
default_template_insert(ad);
return ECORE_CALLBACK_DONE;
return EINA_TRUE;
}
//Auto Indentation
if (!strcmp(key, "i") || !strcmp(key, "I"))
if (!strcmp(event->key, "i") || !strcmp(event->key, "I"))
{
auto_indent_toggle(ad);
return ECORE_CALLBACK_DONE;
return EINA_TRUE;
}
//Auto Completion
if (!strcmp(key, "o") || !strcmp(key, "O"))
if (!strcmp(event->key, "o") || !strcmp(event->key, "O"))
{
auto_comp_toggle(ad);
return ECORE_CALLBACK_DONE;
return EINA_TRUE;
}
//Live Edit
if (!strcmp(key, "e") || !strcmp(key, "E"))
if (!strcmp(event->key, "e") || !strcmp(event->key, "E"))
{
live_edit_toggle();
return ECORE_CALLBACK_DONE;
return EINA_TRUE;
}
return ECORE_CALLBACK_PASS_ON;
return EINA_FALSE;
}
static Eina_Bool
@ -724,17 +715,13 @@ main_key_down_cb(void *data, int type EINA_UNUSED, void *ev)
if (menu_activated_get() > 0) return ECORE_CALLBACK_PASS_ON;
if (file_mgr_warning_is_opened()) return ECORE_CALLBACK_PASS_ON;
if (ad->ctrl_pressed)
return ctrl_func(ad, event->key);
if (ad->alt_pressed)
return alt_func(ad, event->key);
if (ctrl_func(ad, event)) return ECORE_CALLBACK_DONE;
if (alt_func(ad, event)) return ECORE_CALLBACK_DONE;
//Control Key
if (!strcmp("Control_L", event->key))
{
enventor_object_ctxpopup_dismiss(ad->enventor);
ad->ctrl_pressed = EINA_TRUE;
return ECORE_CALLBACK_PASS_ON;
}
@ -742,7 +729,6 @@ main_key_down_cb(void *data, int type EINA_UNUSED, void *ev)
if (!strcmp("Alt_L", event->key))
{
enventor_object_ctxpopup_dismiss(ad->enventor);
ad->alt_pressed = EINA_TRUE;
return ECORE_CALLBACK_PASS_ON;
}
@ -844,7 +830,6 @@ static Eina_Bool
init(app_data *ad, int argc, char **argv)
{
ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, main_key_down_cb, ad);
ecore_event_handler_add(ECORE_EVENT_KEY_UP, main_key_up_cb, ad);
ecore_event_handler_add(ECORE_EVENT_MOUSE_WHEEL, main_mouse_wheel_cb, ad);
elm_setup();