From f03b84b8699a3965b572f52e319d90acfa10f87d Mon Sep 17 00:00:00 2001 From: Boris Faure Date: Thu, 15 Mar 2018 21:59:43 +0100 Subject: [PATCH] options: select default cursor --- src/bin/config.h | 4 +- src/bin/options_behavior.c | 174 ++++++++++++++++++++++++++++++++++++- 2 files changed, 174 insertions(+), 4 deletions(-) diff --git a/src/bin/config.h b/src/bin/config.h index 20210edc..8b536cb0 100644 --- a/src/bin/config.h +++ b/src/bin/config.h @@ -28,8 +28,8 @@ struct _Config_Color typedef enum _Cursor_Shape { CURSOR_SHAPE_BLOCK = 0, - CURSOR_SHAPE_BAR = 1, - CURSOR_SHAPE_UNDERLINE = 2 + CURSOR_SHAPE_UNDERLINE = 1, + CURSOR_SHAPE_BAR = 2 } Cursor_Shape; struct _Config diff --git a/src/bin/options_behavior.c b/src/bin/options_behavior.c index 75d1284c..86fa0481 100644 --- a/src/bin/options_behavior.c +++ b/src/bin/options_behavior.c @@ -7,6 +7,7 @@ #include "options.h" #include "options_behavior.h" #include "main.h" +#include "utils.h" typedef struct _Behavior_Ctx { Evas_Object *op_w; @@ -35,7 +36,6 @@ _cb_op_behavior_##_cfg_name(void *data, Evas_Object *obj, \ CB(jump_on_change, 0); CB(jump_on_keypress, 0); -CB(disable_cursor_blink, 1); CB(disable_visual_bell, 1); CB(bell_rings, 0); CB(flicker_on_key, 0); @@ -182,6 +182,174 @@ _parent_del_cb(void *data, free(ctx); } + +static void +_cursors_changed_cb(void *data, Evas_Object *obj, + void *event_info EINA_UNUSED) +{ + Behavior_Ctx *ctx = data; + Config *config = ctx->config; + int value = elm_radio_value_get(obj) - 1; + + config->disable_cursor_blink = value % 2; + config->cursor_shape = value / 2; + + termio_config_update(ctx->term); + windows_update(); + config_save(config, NULL); +} + +static void +_add_cursors_option(Evas_Object *bx, + Behavior_Ctx *ctx) +{ + Evas_Object *o, *lbl, *rd, *rdg, *layout, *oe; + + o = elm_separator_add(bx); + 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_separator_horizontal_set(o, EINA_TRUE); + elm_box_pack_end(bx, o); + evas_object_show(o); + + lbl = elm_label_add(bx); + evas_object_size_hint_weight_set(lbl, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(lbl, 0.0, 0.0); + elm_layout_text_set(lbl, NULL, _("Default cursor:")); + elm_box_pack_end(bx, lbl); + evas_object_show(lbl); + + /* Blinking Block */ + rd = elm_radio_add(bx); + evas_object_size_hint_weight_set(rd, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(rd, EVAS_HINT_FILL, 0.5); + rdg = rd; + elm_object_text_set(rd, _("Blinking Block")); + elm_radio_state_value_set(rd, 1); + layout = elm_layout_add(rd); + oe = elm_layout_edje_get(layout); + theme_apply(oe, ctx->config, "terminology/cursor"); + evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_image_resizable_set(layout, EINA_FALSE, EINA_FALSE); + elm_object_part_content_set(rd, "icon", layout); + elm_box_pack_end(bx, rd); + evas_object_show(rd); + edje_object_signal_emit(oe, "focus,out", "terminology"); + edje_object_signal_emit(oe, "focus,in", "terminology"); + evas_object_smart_callback_add(rd, "changed", _cursors_changed_cb, ctx); + + /* Steady Block */ + rd = elm_radio_add(bx); + evas_object_size_hint_weight_set(rd, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(rd, EVAS_HINT_FILL, 0.5); + elm_object_text_set(rd, _("Steady Block")); + elm_radio_state_value_set(rd, 2); + elm_radio_group_add(rd, rdg); + layout = elm_layout_add(rd); + oe = elm_layout_edje_get(layout); + theme_apply(oe, ctx->config, "terminology/cursor"); + evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_image_resizable_set(layout, EINA_FALSE, EINA_FALSE); + elm_object_part_content_set(rd, "icon", layout); + elm_box_pack_end(bx, rd); + evas_object_show(rd); + edje_object_signal_emit(oe, "focus,out", "terminology"); + edje_object_signal_emit(oe, "focus,in,noblink", "terminology"); + evas_object_smart_callback_add(rd, "changed", _cursors_changed_cb, ctx); + + /* Blinking Underline */ + rd = elm_radio_add(bx); + evas_object_size_hint_weight_set(rd, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(rd, EVAS_HINT_FILL, 0.5); + elm_object_text_set(rd, _("Blinking Underline")); + elm_radio_state_value_set(rd, 3); + elm_radio_group_add(rd, rdg); + layout = elm_layout_add(rd); + oe = elm_layout_edje_get(layout); + theme_apply(oe, ctx->config, "terminology/cursor_underline"); + evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_image_resizable_set(layout, EINA_FALSE, EINA_FALSE); + elm_object_part_content_set(rd, "icon", layout); + elm_box_pack_end(bx, rd); + evas_object_show(rd); + edje_object_signal_emit(oe, "focus,out", "terminology"); + edje_object_signal_emit(oe, "focus,in", "terminology"); + evas_object_smart_callback_add(rd, "changed", _cursors_changed_cb, ctx); + + /* Steady Underline */ + rd = elm_radio_add(bx); + evas_object_size_hint_weight_set(rd, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(rd, EVAS_HINT_FILL, 0.5); + elm_object_text_set(rd, _("Steady Underline")); + elm_radio_state_value_set(rd, 4); + elm_radio_group_add(rd, rdg); + layout = elm_layout_add(rd); + oe = elm_layout_edje_get(layout); + theme_apply(oe, ctx->config, "terminology/cursor_underline"); + evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_image_resizable_set(layout, EINA_FALSE, EINA_FALSE); + elm_object_part_content_set(rd, "icon", layout); + elm_box_pack_end(bx, rd); + evas_object_show(rd); + edje_object_signal_emit(oe, "focus,out", "terminology"); + edje_object_signal_emit(oe, "focus,in,noblink", "terminology"); + evas_object_smart_callback_add(rd, "changed", _cursors_changed_cb, ctx); + + /* Blinking Bar */ + rd = elm_radio_add(bx); + evas_object_size_hint_weight_set(rd, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(rd, EVAS_HINT_FILL, 0.5); + elm_object_text_set(rd, _("Blinking Bar")); + elm_radio_state_value_set(rd, 5); + elm_radio_group_add(rd, rdg); + layout = elm_layout_add(rd); + oe = elm_layout_edje_get(layout); + theme_apply(oe, ctx->config, "terminology/cursor_bar"); + evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_image_resizable_set(layout, EINA_FALSE, EINA_FALSE); + elm_object_part_content_set(rd, "icon", layout); + elm_box_pack_end(bx, rd); + evas_object_show(rd); + edje_object_signal_emit(oe, "focus,out", "terminology"); + edje_object_signal_emit(oe, "focus,in", "terminology"); + evas_object_smart_callback_add(rd, "changed", _cursors_changed_cb, ctx); + + /* Steady Bar */ + rd = elm_radio_add(bx); + evas_object_size_hint_weight_set(rd, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(rd, EVAS_HINT_FILL, 0.5); + elm_object_text_set(rd, _("Steady Bar")); + elm_radio_state_value_set(rd, 6); + elm_radio_group_add(rd, rdg); + layout = elm_layout_add(rd); + oe = elm_layout_edje_get(layout); + theme_apply(oe, ctx->config, "terminology/cursor_bar"); + evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_image_resizable_set(layout, EINA_FALSE, EINA_FALSE); + elm_object_part_content_set(rd, "icon", layout); + elm_box_pack_end(bx, rd); + evas_object_show(rd); + edje_object_signal_emit(oe, "focus,out", "terminology"); + edje_object_signal_emit(oe, "focus,in,noblink", "terminology"); + evas_object_smart_callback_add(rd, "changed", _cursors_changed_cb, ctx); + + o = elm_separator_add(bx); + 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_separator_horizontal_set(o, EINA_TRUE); + elm_box_pack_end(bx, o); + evas_object_show(o); + + elm_radio_value_set(rdg, + 1 + 2 * ctx->config->cursor_shape + (ctx->config->disable_cursor_blink ? 1 : 0)); +} + void options_behavior(Evas_Object *opbox, Evas_Object *term) { @@ -235,8 +403,10 @@ options_behavior(Evas_Object *opbox, Evas_Object *term) CX(_("Scroll to bottom on new content"), jump_on_change, 0); CX(_("Scroll to bottom when a key is pressed"), jump_on_keypress, 0); + + _add_cursors_option(bx, ctx); + CX(_("React to key presses"), flicker_on_key, 0); - CX(_("Cursor blinking"), disable_cursor_blink, 1); CX(_("Visual Bell"), disable_visual_bell, 1); CX(_("Bell rings"), bell_rings, 0); CX(_("Urgent Bell"), urg_bell, 0);