billiob pushed a commit to branch master.

http://git.enlightenment.org/apps/terminology.git/commit/?id=f03b84b8699a3965b572f52e319d90acfa10f87d

commit f03b84b8699a3965b572f52e319d90acfa10f87d
Author: Boris Faure <bill...@gmail.com>
Date:   Thu Mar 15 21:59:43 2018 +0100

    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 20210ed..8b536cb 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 75d1284..86fa048 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);

-- 


Reply via email to