forked from enlightenment/terminology
and now also use gesture layer for long-press for control panel and
zoom controls too for font size change (happens to make ctrl+mouse wheel zoom too) SVN revision: 73122
This commit is contained in:
parent
f9474527a9
commit
654e760033
195
src/bin/termio.c
195
src/bin/termio.c
|
@ -40,6 +40,7 @@ struct _Termio
|
|||
} sel1, sel2;
|
||||
Eina_Bool sel : 1;
|
||||
} backup;
|
||||
int zoom_fontsize_start;
|
||||
int scroll;
|
||||
unsigned int last_keyup;
|
||||
Eina_List *seq;
|
||||
|
@ -430,9 +431,37 @@ _paste_selection(Evas_Object *obj, Elm_Sel_Type type)
|
|||
}
|
||||
|
||||
static void
|
||||
_smart_cb_key_up(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
|
||||
_font_size_set(Evas_Object *obj, int size)
|
||||
{
|
||||
Evas_Event_Key_Up *ev = event_info;
|
||||
Termio *sd = evas_object_smart_data_get(obj);
|
||||
Config *config = termio_config_get(obj);
|
||||
if (!sd) return;
|
||||
|
||||
if (size < 5) size = 5;
|
||||
else if (size > 100) size = 100;
|
||||
if (config)
|
||||
{
|
||||
Evas_Coord mw = 1, mh = 1;
|
||||
int gw, gh;
|
||||
|
||||
config->temporary = EINA_TRUE;
|
||||
config->font.size = size;
|
||||
gw = sd->grid.w;
|
||||
gh = sd->grid.h;
|
||||
evas_object_size_hint_min_get(obj, &mw, &mh);
|
||||
sd->noreqsize = 1;
|
||||
termio_config_update(obj);
|
||||
sd->noreqsize = 0;
|
||||
evas_object_size_hint_min_get(obj, &mw, &mh);
|
||||
evas_object_data_del(obj, "sizedone");
|
||||
evas_object_size_hint_request_set(obj, mw * gw, mh * gh);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_smart_cb_key_up(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event)
|
||||
{
|
||||
Evas_Event_Key_Up *ev = event;
|
||||
Termio *sd;
|
||||
|
||||
sd = evas_object_smart_data_get(data);
|
||||
|
@ -517,23 +546,7 @@ _smart_cb_key_down(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__,
|
|||
|
||||
EINA_LIST_FREE(sd->seq, str) eina_stringshare_del(str);
|
||||
sd->composing = EINA_FALSE;
|
||||
if (config)
|
||||
{
|
||||
Evas_Coord mw = 1, mh = 1;
|
||||
int gw, gh;
|
||||
|
||||
config->temporary = EINA_TRUE;
|
||||
config->font.size += 1;
|
||||
gw = sd->grid.w;
|
||||
gh = sd->grid.h;
|
||||
evas_object_size_hint_min_get(obj, &mw, &mh);
|
||||
sd->noreqsize = 1;
|
||||
termio_config_update(data);
|
||||
sd->noreqsize = 0;
|
||||
evas_object_size_hint_min_get(data, &mw, &mh);
|
||||
evas_object_data_del(data, "sizedone");
|
||||
evas_object_size_hint_request_set(data, mw * gw, mh * gh);
|
||||
}
|
||||
if (config) _font_size_set(data, config->font.size + 1);
|
||||
goto end;
|
||||
}
|
||||
else if (!strcmp(ev->keyname, "KP_Subtract"))
|
||||
|
@ -542,23 +555,7 @@ _smart_cb_key_down(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__,
|
|||
|
||||
EINA_LIST_FREE(sd->seq, str) eina_stringshare_del(str);
|
||||
sd->composing = EINA_FALSE;
|
||||
if (config)
|
||||
{
|
||||
Evas_Coord mw = 1, mh = 1;
|
||||
int gw, gh;
|
||||
|
||||
config->temporary = EINA_TRUE;
|
||||
config->font.size -= 1;
|
||||
gw = sd->grid.w;
|
||||
gh = sd->grid.h;
|
||||
evas_object_size_hint_min_get(obj, &mw, &mh);
|
||||
sd->noreqsize = 1;
|
||||
termio_config_update(data);
|
||||
sd->noreqsize = 0;
|
||||
evas_object_size_hint_min_get(data, &mw, &mh);
|
||||
evas_object_data_del(data, "sizedone");
|
||||
evas_object_size_hint_request_set(data, mw * gw, mh * gh);
|
||||
}
|
||||
if (config) _font_size_set(data, config->font.size - 1);
|
||||
goto end;
|
||||
}
|
||||
else if (!strcmp(ev->keyname, "KP_Multiply"))
|
||||
|
@ -567,23 +564,7 @@ _smart_cb_key_down(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__,
|
|||
|
||||
EINA_LIST_FREE(sd->seq, str) eina_stringshare_del(str);
|
||||
sd->composing = EINA_FALSE;
|
||||
if (config)
|
||||
{
|
||||
Evas_Coord mw = 1, mh = 1;
|
||||
int gw, gh;
|
||||
|
||||
config->temporary = EINA_TRUE;
|
||||
config->font.size = 10;
|
||||
gw = sd->grid.w;
|
||||
gh = sd->grid.h;
|
||||
evas_object_size_hint_min_get(obj, &mw, &mh);
|
||||
sd->noreqsize = 1;
|
||||
termio_config_update(data);
|
||||
sd->noreqsize = 0;
|
||||
evas_object_size_hint_min_get(data, &mw, &mh);
|
||||
evas_object_data_del(data, "sizedone");
|
||||
evas_object_size_hint_request_set(data, mw * gw, mh * gh);
|
||||
}
|
||||
if (config) _font_size_set(data, 10);
|
||||
goto end;
|
||||
}
|
||||
else if (!strcmp(ev->keyname, "KP_Divide"))
|
||||
|
@ -1210,6 +1191,9 @@ _smart_cb_mouse_wheel(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED_
|
|||
sd = evas_object_smart_data_get(data);
|
||||
if (!sd) return;
|
||||
if (sd->pty->altbuf) return;
|
||||
if (evas_key_modifier_is_set(ev->modifiers, "Control")) return;
|
||||
if (evas_key_modifier_is_set(ev->modifiers, "Alt")) return;
|
||||
if (evas_key_modifier_is_set(ev->modifiers, "Shift")) return;
|
||||
sd->scroll -= (ev->z * 4);
|
||||
if (sd->scroll > sd->pty->backscroll_num)
|
||||
sd->scroll = sd->pty->backscroll_num;
|
||||
|
@ -1278,11 +1262,86 @@ _cursor_cb_move(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, voi
|
|||
_imf_cursor_set(sd);
|
||||
}
|
||||
|
||||
static Evas_Event_Flags
|
||||
_smart_cb_gest_long_start(void *data, void *event __UNUSED__)
|
||||
{
|
||||
// Elm_Gesture_Taps_Info *p = event;
|
||||
Termio *sd = evas_object_smart_data_get(data);
|
||||
|
||||
if (!sd) return EVAS_EVENT_FLAG_ON_HOLD;
|
||||
evas_object_smart_callback_call(data, "options", NULL);
|
||||
return EVAS_EVENT_FLAG_ON_HOLD;
|
||||
}
|
||||
|
||||
static Evas_Event_Flags
|
||||
_smart_cb_gest_zoom_start(void *data, void *event)
|
||||
{
|
||||
Elm_Gesture_Zoom_Info *p = event;
|
||||
Termio *sd = evas_object_smart_data_get(data);
|
||||
Config *config = termio_config_get(data);
|
||||
|
||||
if (!sd) return EVAS_EVENT_FLAG_ON_HOLD;
|
||||
if (config)
|
||||
{
|
||||
sd->zoom_fontsize_start = config->font.size;
|
||||
_font_size_set(data, (double)sd->zoom_fontsize_start * p->zoom);
|
||||
}
|
||||
return EVAS_EVENT_FLAG_ON_HOLD;
|
||||
}
|
||||
|
||||
static Evas_Event_Flags
|
||||
_smart_cb_gest_zoom_move(void *data, void *event)
|
||||
{
|
||||
Elm_Gesture_Zoom_Info *p = event;
|
||||
Termio *sd = evas_object_smart_data_get(data);
|
||||
Config *config = termio_config_get(data);
|
||||
|
||||
if (!sd) return EVAS_EVENT_FLAG_ON_HOLD;
|
||||
if (config)
|
||||
{
|
||||
sd->zoom_fontsize_start = config->font.size;
|
||||
_font_size_set(data, (double)sd->zoom_fontsize_start * p->zoom);
|
||||
}
|
||||
return EVAS_EVENT_FLAG_ON_HOLD;
|
||||
}
|
||||
|
||||
static Evas_Event_Flags
|
||||
_smart_cb_gest_zoom_end(void *data, void *event)
|
||||
{
|
||||
Elm_Gesture_Zoom_Info *p = event;
|
||||
Termio *sd = evas_object_smart_data_get(data);
|
||||
Config *config = termio_config_get(data);
|
||||
|
||||
if (!sd) return EVAS_EVENT_FLAG_ON_HOLD;
|
||||
if (config)
|
||||
{
|
||||
sd->zoom_fontsize_start = config->font.size;
|
||||
_font_size_set(data, (double)sd->zoom_fontsize_start * p->zoom);
|
||||
}
|
||||
return EVAS_EVENT_FLAG_ON_HOLD;
|
||||
}
|
||||
|
||||
static Evas_Event_Flags
|
||||
_smart_cb_gest_zoom_abort(void *data, void *event __UNUSED__)
|
||||
{
|
||||
// Elm_Gesture_Zoom_Info *p = event;
|
||||
Termio *sd = evas_object_smart_data_get(data);
|
||||
Config *config = termio_config_get(data);
|
||||
|
||||
if (!sd) return EVAS_EVENT_FLAG_ON_HOLD;
|
||||
if (config)
|
||||
{
|
||||
sd->zoom_fontsize_start = config->font.size;
|
||||
_font_size_set(data, sd->zoom_fontsize_start);
|
||||
}
|
||||
return EVAS_EVENT_FLAG_ON_HOLD;
|
||||
}
|
||||
|
||||
static void
|
||||
_imf_event_commit_cb(void *data, Ecore_IMF_Context *ctx __UNUSED__, void *event_info)
|
||||
_imf_event_commit_cb(void *data, Ecore_IMF_Context *ctx __UNUSED__, void *event)
|
||||
{
|
||||
Termio *sd = data;
|
||||
char *str = event_info;
|
||||
char *str = event;
|
||||
DBG("IMF committed '%s'", str);
|
||||
if (!str) return;
|
||||
termpty_write(sd->pty, str, strlen(str));
|
||||
|
@ -1293,7 +1352,7 @@ _smart_add(Evas_Object *obj)
|
|||
{
|
||||
Termio *sd;
|
||||
Evas_Object_Smart_Clipped_Data *cd;
|
||||
Evas_Object *o;
|
||||
Evas_Object *o, *g;
|
||||
int i, j, k, l, n;
|
||||
|
||||
_parent_sc.add(obj);
|
||||
|
@ -1367,7 +1426,7 @@ _smart_add(Evas_Object *obj)
|
|||
sd->event = o;
|
||||
evas_object_color_set(o, 0, 0, 0, 0);
|
||||
evas_object_show(o);
|
||||
|
||||
|
||||
evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_DOWN,
|
||||
_smart_cb_mouse_down, obj);
|
||||
evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_UP,
|
||||
|
@ -1641,7 +1700,7 @@ Evas_Object *
|
|||
termio_add(Evas_Object *parent, Config *config, const char *cmd, int w, int h)
|
||||
{
|
||||
Evas *e;
|
||||
Evas_Object *obj;
|
||||
Evas_Object *obj, *g;
|
||||
Termio *sd;
|
||||
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(parent, NULL);
|
||||
|
@ -1655,6 +1714,26 @@ termio_add(Evas_Object *parent, Config *config, const char *cmd, int w, int h)
|
|||
|
||||
_termio_config_set(obj, config);
|
||||
|
||||
g = elm_gesture_layer_add(parent);
|
||||
elm_gesture_layer_attach(g, sd->event);
|
||||
|
||||
elm_gesture_layer_cb_set(g, ELM_GESTURE_N_LONG_TAPS,
|
||||
ELM_GESTURE_STATE_START, _smart_cb_gest_long_start,
|
||||
obj);
|
||||
|
||||
elm_gesture_layer_cb_set(g, ELM_GESTURE_ZOOM,
|
||||
ELM_GESTURE_STATE_START, _smart_cb_gest_zoom_start,
|
||||
obj);
|
||||
elm_gesture_layer_cb_set(g, ELM_GESTURE_ZOOM,
|
||||
ELM_GESTURE_STATE_MOVE, _smart_cb_gest_zoom_move,
|
||||
obj);
|
||||
elm_gesture_layer_cb_set(g, ELM_GESTURE_ZOOM,
|
||||
ELM_GESTURE_STATE_END, _smart_cb_gest_zoom_end,
|
||||
obj);
|
||||
elm_gesture_layer_cb_set(g, ELM_GESTURE_ZOOM,
|
||||
ELM_GESTURE_STATE_ABORT, _smart_cb_gest_zoom_abort,
|
||||
obj);
|
||||
|
||||
termpty_init();
|
||||
|
||||
sd->pty = termpty_new(cmd, w, h, config->scrollback);
|
||||
|
|
Loading…
Reference in New Issue