From 666d4223c9a467dfeeb21bc45e69f04b937d2ea3 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Tue, 26 Jun 2012 08:05:43 +0000 Subject: [PATCH] add new terminology option to disable that infernal cursor blinking; this should, in theory, be a combo box with different styles (underline, solid, invisible, etc), but imo the first thing is the ability to disable the blinking overall SVN revision: 72856 --- data/themes/default.edc | 7 +++++++ src/bin/config.c | 3 +++ src/bin/config.h | 1 + src/bin/options_behavior.c | 20 ++++++++++++++++++++ src/bin/termio.c | 11 ++++++++++- 5 files changed, 41 insertions(+), 1 deletion(-) diff --git a/data/themes/default.edc b/data/themes/default.edc index 38f906f1..eba0cf88 100644 --- a/data/themes/default.edc +++ b/data/themes/default.edc @@ -510,6 +510,13 @@ collections { } } programs { + program { name: "focus_in_noblink"; + signal: "focus,in,noblink"; + source: "terminology"; + action: STATE_SET "focused" 0.0; + target: "fill"; + target: "outline"; + } program { name: "focus_in"; signal: "focus,in"; source: "terminology"; diff --git a/src/bin/config.c b/src/bin/config.c index 562eda2d..6b863286 100644 --- a/src/bin/config.c +++ b/src/bin/config.c @@ -62,6 +62,8 @@ config_init(void) (edd_base, Config, "jump_on_change", jump_on_change, EET_T_UCHAR); EET_DATA_DESCRIPTOR_ADD_BASIC (edd_base, Config, "flicker_on_key", flicker_on_key, EET_T_UCHAR); + EET_DATA_DESCRIPTOR_ADD_BASIC + (edd_base, Config, "disable_cursor_blink", disable_cursor_blink, EET_T_UCHAR); EET_DATA_DESCRIPTOR_ADD_BASIC (edd_base, Config, "translucent", translucent, EET_T_UCHAR); EET_DATA_DESCRIPTOR_ADD_BASIC @@ -141,6 +143,7 @@ config_load(const char *key) config->translucent = EINA_FALSE; config->jump_on_change = EINA_FALSE; config->flicker_on_key = EINA_TRUE; + config->disable_cursor_blink = EINA_TRUE; // XXX: add // // // more invisible spaces diff --git a/src/bin/config.h b/src/bin/config.h index c5a3b675..e54f1f43 100644 --- a/src/bin/config.h +++ b/src/bin/config.h @@ -19,6 +19,7 @@ struct _Config int vidmod; Eina_Bool jump_on_change; Eina_Bool flicker_on_key; + Eina_Bool disable_cursor_blink; Eina_Bool translucent; Eina_Bool mute; Eina_Bool urg_bell; diff --git a/src/bin/options_behavior.c b/src/bin/options_behavior.c index 85c991f5..49866f23 100644 --- a/src/bin/options_behavior.c +++ b/src/bin/options_behavior.c @@ -19,6 +19,16 @@ _cb_op_behavior_jump_chg(void *data, Evas_Object *obj, void *event __UNUSED__) config_save(config, NULL); } +static void +_cb_op_behavior_cursor_blink_chg(void *data, Evas_Object *obj, void *event __UNUSED__) +{ + Evas_Object *term = data; + Config *config = termio_config_get(term); + config->disable_cursor_blink = elm_check_state_get(obj); + termio_config_update(term); + config_save(config, NULL); +} + static void _cb_op_behavior_flicker_chg(void *data, Evas_Object *obj, void *event __UNUSED__) { @@ -97,6 +107,16 @@ options_behavior(Evas_Object *opbox, Evas_Object *term) evas_object_show(o); evas_object_smart_callback_add(o, "changed", _cb_op_behavior_flicker_chg, term); + + o = elm_check_add(opbox); + evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(o, EVAS_HINT_FILL, 0.5); + elm_object_text_set(o, "Disable cursor blinking"); + elm_check_state_set(o, config->disable_cursor_blink); + elm_box_pack_end(opbox, o); + evas_object_show(o); + evas_object_smart_callback_add(o, "changed", + _cb_op_behavior_cursor_blink_chg, term); o = elm_check_add(opbox); evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0.0); diff --git a/src/bin/termio.c b/src/bin/termio.c index 757b7c5b..0ac94ef5 100644 --- a/src/bin/termio.c +++ b/src/bin/termio.c @@ -526,7 +526,10 @@ _smart_cb_focus_in(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, sd = evas_object_smart_data_get(data); if (!sd) return; - edje_object_signal_emit(sd->cur.obj, "focus,in", "terminology"); + if (sd->config->disable_cursor_blink) + edje_object_signal_emit(sd->cur.obj, "focus,in,noblink", "terminology"); + else + edje_object_signal_emit(sd->cur.obj, "focus,in", "terminology"); if (!sd->win) return; elm_win_keyboard_mode_set(sd->win, ELM_WIN_KEYBOARD_TERMINAL); if (sd->imf) @@ -1576,6 +1579,12 @@ termio_config_update(Evas_Object *obj) termpty_backscroll_set(sd->pty, sd->config->scrollback); sd->scroll = 0; + + edje_object_signal_emit(sd->cur.obj, "focus,out", "terminology"); + if (sd->config->disable_cursor_blink) + edje_object_signal_emit(sd->cur.obj, "focus,in,noblink", "terminology"); + else + edje_object_signal_emit(sd->cur.obj, "focus,in", "terminology"); evas_object_scale_set(sd->grid.obj, elm_config_scale_get()); evas_object_textgrid_font_set(sd->grid.obj, sd->font.name, sd->font.size);