2012-06-23 23:39:54 -07:00
|
|
|
#include "private.h"
|
|
|
|
|
|
|
|
#include <Elementary.h>
|
2018-01-01 13:57:54 -08:00
|
|
|
#include <assert.h>
|
2012-06-23 23:39:54 -07:00
|
|
|
#include "controls.h"
|
|
|
|
#include "options.h"
|
2012-06-30 04:08:07 -07:00
|
|
|
#include "about.h"
|
2012-06-23 23:39:54 -07:00
|
|
|
#include "termio.h"
|
2013-01-22 07:01:53 -08:00
|
|
|
#include "main.h"
|
2012-06-23 23:39:54 -07:00
|
|
|
|
2018-01-01 15:09:14 -08:00
|
|
|
static Eina_Hash *controls = NULL;
|
|
|
|
|
2018-01-09 14:21:48 -08:00
|
|
|
typedef struct _Controls_Ctx {
|
2018-01-01 15:09:14 -08:00
|
|
|
Evas_Object *frame;
|
2020-04-11 01:41:52 -07:00
|
|
|
Evas_Object *group_input_cx;
|
2018-01-01 15:09:14 -08:00
|
|
|
Evas_Object *over;
|
|
|
|
Evas_Object *win;
|
2020-04-11 01:41:52 -07:00
|
|
|
Win *wn;
|
2018-01-15 13:45:32 -08:00
|
|
|
Evas_Object *base;
|
2018-01-01 15:09:14 -08:00
|
|
|
Evas_Object *bg;
|
|
|
|
Evas_Object *term;
|
|
|
|
void (*donecb) (void *data);
|
|
|
|
void *donedata;
|
2018-01-09 14:21:48 -08:00
|
|
|
} Controls_Ctx;
|
2018-01-01 15:09:14 -08:00
|
|
|
|
2012-06-23 23:39:54 -07:00
|
|
|
|
2020-04-06 14:11:10 -07:00
|
|
|
/* /!\ can free ctx */
|
2018-01-01 13:57:54 -08:00
|
|
|
static void
|
2018-01-09 14:21:48 -08:00
|
|
|
controls_hide(Controls_Ctx *ctx, Eina_Bool call_cb);
|
2018-01-01 15:09:14 -08:00
|
|
|
|
2013-11-01 11:46:23 -07:00
|
|
|
static void
|
2018-01-01 15:09:14 -08:00
|
|
|
_cb_sel_on(void *data,
|
2016-10-05 13:00:22 -07:00
|
|
|
Evas_Object *_term EINA_UNUSED,
|
|
|
|
void *_ev EINA_UNUSED)
|
2013-11-01 11:46:23 -07:00
|
|
|
{
|
2018-01-09 14:21:48 -08:00
|
|
|
Controls_Ctx *ctx = data;
|
2018-01-01 15:09:14 -08:00
|
|
|
Evas_Object *bt_copy = evas_object_data_get(ctx->frame, "bt_copy");
|
2013-11-01 11:46:23 -07:00
|
|
|
if (bt_copy)
|
|
|
|
elm_object_disabled_set(bt_copy, EINA_FALSE);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2018-01-01 15:09:14 -08:00
|
|
|
_cb_sel_off(void *data,
|
2016-10-05 13:00:22 -07:00
|
|
|
Evas_Object *_term EINA_UNUSED,
|
|
|
|
void *_ev EINA_UNUSED)
|
2013-11-01 11:46:23 -07:00
|
|
|
{
|
2018-01-09 14:21:48 -08:00
|
|
|
Controls_Ctx *ctx = data;
|
2018-01-01 15:09:14 -08:00
|
|
|
Evas_Object *bt_copy = evas_object_data_get(ctx->frame, "bt_copy");
|
2013-11-01 11:46:23 -07:00
|
|
|
if (bt_copy)
|
|
|
|
elm_object_disabled_set(bt_copy, EINA_TRUE);
|
|
|
|
}
|
|
|
|
|
2018-07-19 10:17:54 -07:00
|
|
|
static void
|
2018-08-26 11:21:54 -07:00
|
|
|
_cb_hidden(void *data,
|
|
|
|
Evas *_e EINA_UNUSED,
|
|
|
|
Evas_Object *_obj EINA_UNUSED,
|
|
|
|
void *_ev EINA_UNUSED)
|
2012-06-23 23:39:54 -07:00
|
|
|
{
|
2018-08-26 11:21:54 -07:00
|
|
|
Controls_Ctx *ctx = data;
|
|
|
|
Evas_Object *frame = ctx->frame;
|
|
|
|
Evas_Object *o;
|
|
|
|
|
2018-01-01 13:57:54 -08:00
|
|
|
evas_object_del(frame);
|
2018-08-26 11:21:54 -07:00
|
|
|
|
2019-05-26 10:25:44 -07:00
|
|
|
o = elm_layout_content_get(ctx->base, "terminology.controls");
|
2018-08-26 11:21:54 -07:00
|
|
|
if (o)
|
|
|
|
{
|
2019-05-26 10:25:44 -07:00
|
|
|
elm_layout_content_unset(ctx->base, "terminology.controls");
|
2018-08-26 11:21:54 -07:00
|
|
|
}
|
|
|
|
|
2012-06-23 23:39:54 -07:00
|
|
|
elm_cache_all_flush();
|
2018-08-26 11:21:54 -07:00
|
|
|
free(ctx);
|
2012-06-23 23:39:54 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2018-01-01 15:09:14 -08:00
|
|
|
_cb_ct_copy(void *data,
|
2016-10-05 13:00:22 -07:00
|
|
|
Evas_Object *_obj EINA_UNUSED,
|
|
|
|
void *_event EINA_UNUSED)
|
2012-06-23 23:39:54 -07:00
|
|
|
{
|
2018-01-09 14:21:48 -08:00
|
|
|
Controls_Ctx *ctx = data;
|
2018-01-01 15:09:14 -08:00
|
|
|
Evas_Object *term = ctx->term;
|
|
|
|
|
|
|
|
controls_hide(ctx, EINA_TRUE);
|
2020-04-06 14:11:10 -07:00
|
|
|
ctx = NULL;
|
|
|
|
|
2018-01-01 15:09:14 -08:00
|
|
|
termio_take_selection(term, ELM_SEL_TYPE_CLIPBOARD);
|
2012-06-23 23:39:54 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2018-01-01 15:09:14 -08:00
|
|
|
_cb_ct_paste(void *data,
|
2016-10-05 13:00:22 -07:00
|
|
|
Evas_Object *_obj EINA_UNUSED,
|
|
|
|
void *_event EINA_UNUSED)
|
2012-06-23 23:39:54 -07:00
|
|
|
{
|
2018-01-09 14:21:48 -08:00
|
|
|
Controls_Ctx *ctx = data;
|
2018-01-01 15:09:14 -08:00
|
|
|
Evas_Object *term = ctx->term;
|
|
|
|
|
|
|
|
controls_hide(ctx, EINA_TRUE);
|
2020-04-06 14:11:10 -07:00
|
|
|
ctx = NULL;
|
|
|
|
|
2018-01-01 15:09:14 -08:00
|
|
|
termio_paste_selection(term, ELM_SEL_TYPE_CLIPBOARD);
|
2012-06-23 23:39:54 -07:00
|
|
|
}
|
|
|
|
|
2013-03-17 07:52:13 -07:00
|
|
|
static void
|
2018-01-01 15:09:14 -08:00
|
|
|
_cb_ct_new(void *data,
|
2016-10-05 13:00:22 -07:00
|
|
|
Evas_Object *_obj EINA_UNUSED,
|
|
|
|
void *_event EINA_UNUSED)
|
2013-03-17 07:52:13 -07:00
|
|
|
{
|
2018-01-09 14:21:48 -08:00
|
|
|
Controls_Ctx *ctx = data;
|
2020-04-06 14:11:10 -07:00
|
|
|
Evas_Object *term = ctx->term;
|
|
|
|
|
2020-03-25 15:27:18 -07:00
|
|
|
controls_hide(ctx, EINA_TRUE);
|
2020-04-06 14:11:10 -07:00
|
|
|
ctx = NULL;
|
|
|
|
|
|
|
|
main_new(term);
|
2013-03-17 07:52:13 -07:00
|
|
|
}
|
|
|
|
|
2013-01-22 07:01:53 -08:00
|
|
|
static void
|
2018-01-01 15:09:14 -08:00
|
|
|
_cb_ct_split_v(void *data,
|
2016-10-05 13:00:22 -07:00
|
|
|
Evas_Object *_obj EINA_UNUSED,
|
|
|
|
void *_event EINA_UNUSED)
|
2013-01-22 07:01:53 -08:00
|
|
|
{
|
2018-01-09 14:21:48 -08:00
|
|
|
Controls_Ctx *ctx = data;
|
2020-04-06 14:11:10 -07:00
|
|
|
Evas_Object *term = ctx->term;
|
|
|
|
|
|
|
|
|
2020-03-25 15:27:18 -07:00
|
|
|
controls_hide(ctx, EINA_TRUE);
|
2020-04-06 14:11:10 -07:00
|
|
|
ctx = NULL;
|
|
|
|
|
|
|
|
split_vertically(term, NULL);
|
2013-01-22 07:01:53 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2018-01-01 15:09:14 -08:00
|
|
|
_cb_ct_split_h(void *data,
|
2016-10-05 13:00:22 -07:00
|
|
|
Evas_Object *_obj EINA_UNUSED,
|
|
|
|
void *_event EINA_UNUSED)
|
2013-01-22 07:01:53 -08:00
|
|
|
{
|
2018-01-09 14:21:48 -08:00
|
|
|
Controls_Ctx *ctx = data;
|
2020-04-06 14:11:10 -07:00
|
|
|
Evas_Object *term = ctx->term;
|
|
|
|
|
2020-03-25 15:27:18 -07:00
|
|
|
controls_hide(ctx, EINA_TRUE);
|
2020-04-06 14:11:10 -07:00
|
|
|
ctx = NULL;
|
|
|
|
|
|
|
|
split_horizontally(term, NULL);
|
2013-01-22 07:01:53 -08:00
|
|
|
}
|
|
|
|
|
2014-09-20 02:05:32 -07:00
|
|
|
static void
|
2018-01-01 15:09:14 -08:00
|
|
|
_cb_ct_miniview(void *data,
|
2016-10-05 13:00:22 -07:00
|
|
|
Evas_Object *_obj EINA_UNUSED,
|
|
|
|
void *_event EINA_UNUSED)
|
2014-09-20 02:05:32 -07:00
|
|
|
{
|
2018-01-09 14:21:48 -08:00
|
|
|
Controls_Ctx *ctx = data;
|
2018-01-01 15:09:14 -08:00
|
|
|
term_miniview_toggle(termio_term_get(ctx->term));
|
2014-09-20 02:05:32 -07:00
|
|
|
}
|
|
|
|
|
2016-03-02 06:37:02 -08:00
|
|
|
static void
|
2018-01-01 15:09:14 -08:00
|
|
|
_cb_ct_set_title(void *data,
|
2016-10-05 13:00:22 -07:00
|
|
|
Evas_Object *_obj EINA_UNUSED,
|
|
|
|
void *_event EINA_UNUSED)
|
2016-03-02 06:37:02 -08:00
|
|
|
{
|
2018-01-09 14:21:48 -08:00
|
|
|
Controls_Ctx *ctx = data;
|
2018-01-01 15:09:14 -08:00
|
|
|
Evas_Object *term = ctx->term;
|
2020-04-06 14:11:10 -07:00
|
|
|
|
2018-01-01 15:09:14 -08:00
|
|
|
controls_hide(ctx, EINA_TRUE);
|
2020-04-06 14:11:10 -07:00
|
|
|
ctx = NULL;
|
|
|
|
|
2018-01-01 15:09:14 -08:00
|
|
|
term_set_title(termio_term_get(term));
|
2016-03-02 06:37:02 -08:00
|
|
|
}
|
|
|
|
|
2013-01-22 07:01:53 -08:00
|
|
|
static void
|
2018-01-01 15:09:14 -08:00
|
|
|
_cb_ct_close(void *data,
|
2016-10-05 13:00:22 -07:00
|
|
|
Evas_Object *_obj EINA_UNUSED,
|
|
|
|
void *_event EINA_UNUSED)
|
2013-01-22 07:01:53 -08:00
|
|
|
{
|
2018-01-09 14:21:48 -08:00
|
|
|
Controls_Ctx *ctx = data;
|
2018-01-01 15:09:14 -08:00
|
|
|
Evas_Object *term = ctx->term;
|
|
|
|
Evas_Object *win = ctx->win;
|
|
|
|
|
|
|
|
controls_hide(ctx, EINA_TRUE);
|
2020-04-06 14:11:10 -07:00
|
|
|
ctx = NULL;
|
|
|
|
|
2018-01-01 15:09:14 -08:00
|
|
|
term_close(win, term, EINA_FALSE);
|
2013-01-22 07:01:53 -08:00
|
|
|
}
|
|
|
|
|
2018-01-05 14:42:14 -08:00
|
|
|
static void
|
|
|
|
_on_sub_done(void *data)
|
|
|
|
{
|
2018-01-09 14:21:48 -08:00
|
|
|
Controls_Ctx *ctx = data;
|
2018-01-05 14:42:14 -08:00
|
|
|
|
|
|
|
if (ctx->donecb)
|
|
|
|
ctx->donecb(ctx->donedata);
|
|
|
|
|
|
|
|
eina_hash_del(controls, &ctx->win, ctx);
|
|
|
|
|
2018-08-26 11:21:54 -07:00
|
|
|
if (evas_object_visible_get(ctx->frame))
|
|
|
|
{
|
|
|
|
evas_object_event_callback_add(ctx->frame, EVAS_CALLBACK_HIDE,
|
|
|
|
_cb_hidden, ctx);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
_cb_hidden(ctx, NULL, NULL, NULL);
|
|
|
|
}
|
2018-01-05 14:42:14 -08:00
|
|
|
}
|
|
|
|
|
2012-06-23 23:39:54 -07:00
|
|
|
static void
|
2018-01-01 15:09:14 -08:00
|
|
|
_cb_ct_options(void *data,
|
2016-10-05 13:00:22 -07:00
|
|
|
Evas_Object *_obj EINA_UNUSED,
|
|
|
|
void *_event EINA_UNUSED)
|
2012-06-23 23:39:54 -07:00
|
|
|
{
|
2018-01-09 14:21:48 -08:00
|
|
|
Controls_Ctx *ctx = data;
|
2018-01-01 15:09:14 -08:00
|
|
|
|
2018-01-15 13:45:32 -08:00
|
|
|
options_show(ctx->win, ctx->base, ctx->bg, ctx->term, _on_sub_done, ctx);
|
2018-01-01 15:09:14 -08:00
|
|
|
controls_hide(ctx, EINA_FALSE);
|
2012-06-23 23:39:54 -07:00
|
|
|
}
|
|
|
|
|
2018-01-05 14:42:14 -08:00
|
|
|
|
2012-06-24 01:45:10 -07:00
|
|
|
static void
|
2018-01-01 15:09:14 -08:00
|
|
|
_cb_ct_about(void *data,
|
2016-10-05 13:00:22 -07:00
|
|
|
Evas_Object *_obj EINA_UNUSED,
|
|
|
|
void *_event EINA_UNUSED)
|
2012-06-24 01:45:10 -07:00
|
|
|
{
|
2018-01-09 14:21:48 -08:00
|
|
|
Controls_Ctx *ctx = data;
|
2018-01-01 15:09:14 -08:00
|
|
|
|
2018-01-15 13:45:32 -08:00
|
|
|
about_show(ctx->win, ctx->base, ctx->term, _on_sub_done, ctx);
|
2018-01-01 15:09:14 -08:00
|
|
|
controls_hide(ctx, EINA_FALSE);
|
2012-06-24 01:45:10 -07:00
|
|
|
}
|
|
|
|
|
2020-04-11 01:41:52 -07:00
|
|
|
static void
|
|
|
|
_cb_group_input_changed(void *data, Evas_Object *obj EINA_UNUSED,
|
|
|
|
void *_event EINA_UNUSED)
|
|
|
|
{
|
|
|
|
Controls_Ctx *ctx = data;
|
|
|
|
Win *wn = ctx->wn;
|
2020-04-12 08:16:14 -07:00
|
|
|
Config *config = termio_config_get(ctx->term);
|
2020-04-11 01:41:52 -07:00
|
|
|
|
|
|
|
controls_hide(ctx, EINA_TRUE);
|
2020-04-12 08:16:14 -07:00
|
|
|
if (config && config->group_all)
|
|
|
|
win_toggle_all_group(wn);
|
|
|
|
else
|
|
|
|
win_toggle_visible_group(wn);
|
2020-04-11 01:41:52 -07:00
|
|
|
}
|
|
|
|
|
2012-06-30 07:21:00 -07:00
|
|
|
static void
|
2018-01-01 15:09:14 -08:00
|
|
|
_cb_mouse_down(void *data,
|
2016-10-05 13:00:22 -07:00
|
|
|
Evas *_e EINA_UNUSED,
|
|
|
|
Evas_Object *_obj EINA_UNUSED,
|
|
|
|
void *_ev EINA_UNUSED)
|
2012-06-30 07:21:00 -07:00
|
|
|
{
|
2018-01-09 14:21:48 -08:00
|
|
|
Controls_Ctx *ctx = data;
|
2018-01-01 15:09:14 -08:00
|
|
|
|
|
|
|
controls_hide(ctx, EINA_TRUE);
|
2012-06-30 07:21:00 -07:00
|
|
|
}
|
|
|
|
|
2013-04-14 21:52:47 -07:00
|
|
|
static void
|
2018-01-01 13:57:54 -08:00
|
|
|
_cb_saved_del(void *data,
|
2016-10-05 13:00:22 -07:00
|
|
|
Evas *_e EINA_UNUSED,
|
2018-01-01 15:09:14 -08:00
|
|
|
Evas_Object *obj,
|
2016-10-05 13:00:22 -07:00
|
|
|
void *_ev EINA_UNUSED)
|
2013-04-14 21:52:47 -07:00
|
|
|
{
|
2018-01-09 14:21:48 -08:00
|
|
|
Controls_Ctx *ctx = data;
|
2013-04-14 21:52:47 -07:00
|
|
|
|
2018-01-01 15:09:14 -08:00
|
|
|
if (obj == ctx->win)
|
|
|
|
ctx->win = NULL;
|
|
|
|
else if (obj == ctx->term)
|
|
|
|
ctx->term = NULL;
|
|
|
|
|
|
|
|
controls_hide(ctx, EINA_FALSE);
|
2013-01-22 07:01:53 -08:00
|
|
|
}
|
|
|
|
|
2013-03-24 03:56:01 -07:00
|
|
|
static Evas_Object *
|
|
|
|
_button_add(Evas_Object *win, const char *label, const char *icon, Evas_Smart_Cb cb, void *cbdata)
|
|
|
|
{
|
2013-03-25 00:12:05 -07:00
|
|
|
Evas_Object *o, *bt;
|
2018-01-01 13:57:54 -08:00
|
|
|
|
2013-03-24 03:56:01 -07:00
|
|
|
bt = o = elm_button_add(win);
|
|
|
|
evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0.0);
|
|
|
|
evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
|
|
|
|
if (label) elm_object_text_set(o, label);
|
|
|
|
evas_object_smart_callback_add(o, "clicked", cb, cbdata);
|
2018-01-01 13:57:54 -08:00
|
|
|
|
2013-03-24 03:56:01 -07:00
|
|
|
if (icon)
|
|
|
|
{
|
2013-03-25 00:12:05 -07:00
|
|
|
o = elm_icon_add(win);
|
2013-03-24 03:56:01 -07:00
|
|
|
evas_object_size_hint_aspect_set(o, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
|
|
|
|
elm_icon_standard_set(o, icon);
|
|
|
|
elm_object_part_content_set(bt, "icon", o);
|
|
|
|
evas_object_show(o);
|
|
|
|
}
|
2018-01-01 13:57:54 -08:00
|
|
|
|
2013-03-24 03:56:01 -07:00
|
|
|
evas_object_show(bt);
|
|
|
|
return bt;
|
|
|
|
}
|
|
|
|
|
2013-05-23 04:48:59 -07:00
|
|
|
static Evas_Object *
|
|
|
|
_sep_add_v(Evas_Object *win)
|
|
|
|
{
|
|
|
|
Evas_Object *o = elm_separator_add(win);
|
2018-01-01 13:57:54 -08:00
|
|
|
|
2013-05-23 04:48:59 -07:00
|
|
|
evas_object_size_hint_weight_set(o, 0.0, EVAS_HINT_EXPAND);
|
|
|
|
evas_object_size_hint_align_set(o, 0.5, EVAS_HINT_FILL);
|
|
|
|
elm_separator_horizontal_set(o, EINA_FALSE);
|
|
|
|
evas_object_show(o);
|
|
|
|
return o;
|
|
|
|
}
|
|
|
|
|
|
|
|
static Evas_Object *
|
|
|
|
_sep_add_h(Evas_Object *win)
|
|
|
|
{
|
|
|
|
Evas_Object *o = elm_separator_add(win);
|
2018-01-01 13:57:54 -08:00
|
|
|
|
2013-05-23 04:48:59 -07:00
|
|
|
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);
|
|
|
|
evas_object_show(o);
|
|
|
|
return o;
|
|
|
|
}
|
|
|
|
|
2018-01-01 13:57:54 -08:00
|
|
|
static void
|
2018-01-09 14:21:48 -08:00
|
|
|
controls_hide(Controls_Ctx *ctx, Eina_Bool call_cb)
|
2012-06-23 23:39:54 -07:00
|
|
|
{
|
2019-06-17 12:22:17 -07:00
|
|
|
elm_object_focus_set(ctx->frame, EINA_FALSE);
|
2018-01-01 15:09:14 -08:00
|
|
|
if (ctx->win)
|
2012-06-23 23:39:54 -07:00
|
|
|
{
|
2018-01-01 15:09:14 -08:00
|
|
|
evas_object_event_callback_del(ctx->win, EVAS_CALLBACK_DEL, _cb_saved_del);
|
|
|
|
evas_object_smart_callback_del(ctx->win, "selection,on", _cb_sel_on);
|
|
|
|
evas_object_smart_callback_del(ctx->win, "selection,off", _cb_sel_off);
|
2012-06-23 23:39:54 -07:00
|
|
|
}
|
2018-01-01 15:09:14 -08:00
|
|
|
if (ctx->term)
|
2013-04-14 20:43:13 -07:00
|
|
|
{
|
2018-01-01 15:09:14 -08:00
|
|
|
evas_object_event_callback_del(ctx->term, EVAS_CALLBACK_DEL, _cb_saved_del);
|
2019-05-26 10:25:44 -07:00
|
|
|
elm_layout_signal_emit(ctx->base, "controls,hide", "terminology");
|
2013-04-14 20:43:13 -07:00
|
|
|
}
|
2018-01-01 13:57:54 -08:00
|
|
|
|
2018-01-01 15:09:14 -08:00
|
|
|
if (ctx->over)
|
2012-06-23 23:39:54 -07:00
|
|
|
{
|
2018-01-01 15:09:14 -08:00
|
|
|
evas_object_del(ctx->over);
|
2018-01-01 13:57:54 -08:00
|
|
|
}
|
2018-01-01 15:09:14 -08:00
|
|
|
|
2018-01-05 14:42:14 -08:00
|
|
|
if (call_cb)
|
|
|
|
{
|
2018-06-28 10:56:12 -07:00
|
|
|
_on_sub_done(ctx);
|
2018-01-05 14:42:14 -08:00
|
|
|
}
|
2018-01-01 13:57:54 -08:00
|
|
|
}
|
2013-05-23 04:48:59 -07:00
|
|
|
|
2018-01-01 15:09:14 -08:00
|
|
|
|
2018-01-01 13:57:54 -08:00
|
|
|
void
|
2018-01-15 13:45:32 -08:00
|
|
|
controls_show(Evas_Object *win, Evas_Object *base, Evas_Object *bg,
|
|
|
|
Evas_Object *term, void (*donecb) (void *data), void *donedata)
|
2018-01-01 13:57:54 -08:00
|
|
|
{
|
|
|
|
Evas_Object *o;
|
2020-04-10 15:21:54 -07:00
|
|
|
Evas_Object *ct_boxh, *ct_boxv, *ct_box, *ct_box2;
|
2018-01-09 14:21:48 -08:00
|
|
|
Controls_Ctx *ctx;
|
2014-07-17 04:18:57 -07:00
|
|
|
|
2018-06-28 10:56:12 -07:00
|
|
|
if (eina_hash_find(controls, &win) ||
|
2019-05-26 10:25:44 -07:00
|
|
|
elm_layout_content_get(base, "terminology.controls"))
|
2018-01-01 13:57:54 -08:00
|
|
|
{
|
|
|
|
donecb(donedata);
|
|
|
|
return;
|
|
|
|
}
|
2014-07-17 04:18:57 -07:00
|
|
|
|
2018-01-01 15:09:14 -08:00
|
|
|
ctx = malloc(sizeof(*ctx));
|
|
|
|
assert(ctx);
|
|
|
|
ctx->win = win;
|
2020-04-11 01:41:52 -07:00
|
|
|
ctx->wn = win_evas_object_to_win(win);
|
2018-01-15 13:45:32 -08:00
|
|
|
ctx->base = base;
|
2018-01-01 15:09:14 -08:00
|
|
|
ctx->bg = bg;
|
|
|
|
ctx->term = term;
|
|
|
|
ctx->donecb = donecb;
|
|
|
|
ctx->donedata = donedata;
|
|
|
|
|
|
|
|
eina_hash_add(controls, &win, ctx);
|
|
|
|
|
|
|
|
ctx->frame = o = elm_frame_add(win);
|
2018-01-01 13:57:54 -08:00
|
|
|
evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
|
|
|
|
evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
|
|
|
|
elm_object_text_set(o, _("Controls"));
|
2014-07-17 04:18:57 -07:00
|
|
|
|
2018-01-01 13:57:54 -08:00
|
|
|
ct_boxv = o = elm_box_add(win);
|
|
|
|
elm_box_horizontal_set(o, EINA_FALSE);
|
2018-01-01 15:09:14 -08:00
|
|
|
elm_object_content_set(ctx->frame, o);
|
2018-01-01 13:57:54 -08:00
|
|
|
evas_object_show(o);
|
2014-07-17 04:18:57 -07:00
|
|
|
|
2018-01-01 13:57:54 -08:00
|
|
|
ct_boxh = o = elm_box_add(win);
|
|
|
|
elm_box_pack_end(ct_boxv, o);
|
|
|
|
elm_box_horizontal_set(o, EINA_TRUE);
|
|
|
|
evas_object_show(o);
|
2016-03-02 06:37:02 -08:00
|
|
|
|
2018-01-01 13:57:54 -08:00
|
|
|
ct_box = o = elm_box_add(win);
|
|
|
|
elm_box_pack_end(ct_boxh, o);
|
|
|
|
evas_object_show(o);
|
2016-03-02 06:37:02 -08:00
|
|
|
|
2018-01-01 15:09:14 -08:00
|
|
|
o = _button_add(win, _("New"), "window-new",
|
|
|
|
_cb_ct_new, ctx);
|
2018-01-01 13:57:54 -08:00
|
|
|
elm_box_pack_end(ct_box, o);
|
2014-07-17 04:18:57 -07:00
|
|
|
|
2018-01-01 13:57:54 -08:00
|
|
|
o = _sep_add_h(win);
|
|
|
|
elm_box_pack_end(ct_box, o);
|
2014-07-17 04:18:57 -07:00
|
|
|
|
2020-03-26 13:54:51 -07:00
|
|
|
o = _button_add(win, _("Split V"), "split-v",
|
2018-01-01 15:09:14 -08:00
|
|
|
_cb_ct_split_v, ctx);
|
2018-01-01 13:57:54 -08:00
|
|
|
elm_box_pack_end(ct_box, o);
|
2020-03-26 13:54:51 -07:00
|
|
|
|
|
|
|
o = _button_add(win, _("Split H"), "split-h",
|
2018-01-01 15:09:14 -08:00
|
|
|
_cb_ct_split_h, ctx);
|
2018-01-01 13:57:54 -08:00
|
|
|
elm_box_pack_end(ct_box, o);
|
2014-09-20 02:05:32 -07:00
|
|
|
|
2018-01-01 13:57:54 -08:00
|
|
|
o = _sep_add_h(win);
|
|
|
|
elm_box_pack_end(ct_box, o);
|
2014-07-17 04:18:57 -07:00
|
|
|
|
2018-01-01 15:09:14 -08:00
|
|
|
o = _button_add(win, _("Miniview"), "view-restore",
|
|
|
|
_cb_ct_miniview, ctx);
|
2018-01-01 13:57:54 -08:00
|
|
|
elm_box_pack_end(ct_box, o);
|
2014-07-17 04:18:57 -07:00
|
|
|
|
2018-01-01 13:57:54 -08:00
|
|
|
o = _sep_add_h(win);
|
|
|
|
elm_box_pack_end(ct_box, o);
|
2014-07-17 04:18:57 -07:00
|
|
|
|
2018-01-01 15:09:14 -08:00
|
|
|
o = _button_add(win, _("Set title"), "format-text-underline",
|
|
|
|
_cb_ct_set_title, ctx);
|
2018-01-01 13:57:54 -08:00
|
|
|
elm_box_pack_end(ct_box, o);
|
2014-07-17 04:18:57 -07:00
|
|
|
|
2018-01-01 13:57:54 -08:00
|
|
|
o = _sep_add_v(win);
|
|
|
|
elm_box_pack_end(ct_boxh, o);
|
2014-09-20 02:05:32 -07:00
|
|
|
|
2018-01-01 13:57:54 -08:00
|
|
|
ct_box2 = o = elm_box_add(win);
|
|
|
|
elm_box_pack_end(ct_boxh, o);
|
|
|
|
evas_object_show(o);
|
2014-09-20 02:05:32 -07:00
|
|
|
|
2018-01-01 15:09:14 -08:00
|
|
|
o = _button_add(win, _("Copy"), "edit-copy", _cb_ct_copy, ctx);
|
|
|
|
evas_object_data_set(ctx->frame, "bt_copy", o);
|
2018-01-01 13:57:54 -08:00
|
|
|
if (!termio_selection_exists(term))
|
|
|
|
elm_object_disabled_set(o, EINA_TRUE);
|
|
|
|
elm_box_pack_end(ct_box2, o);
|
2014-09-20 02:05:32 -07:00
|
|
|
|
2018-01-01 15:09:14 -08:00
|
|
|
o = _button_add(win, _("Paste"), "edit-paste", _cb_ct_paste, ctx);
|
2018-01-01 13:57:54 -08:00
|
|
|
elm_box_pack_end(ct_box2, o);
|
2013-05-23 04:48:59 -07:00
|
|
|
|
2018-01-01 13:57:54 -08:00
|
|
|
o = _sep_add_h(win);
|
|
|
|
elm_box_pack_end(ct_box2, o);
|
2013-11-01 11:46:23 -07:00
|
|
|
|
2018-01-01 15:09:14 -08:00
|
|
|
o = _button_add(win, _("Settings"), "preferences-desktop", _cb_ct_options, ctx);
|
2018-01-01 13:57:54 -08:00
|
|
|
elm_box_pack_end(ct_box2, o);
|
|
|
|
|
|
|
|
o = _sep_add_h(win);
|
|
|
|
elm_box_pack_end(ct_box2, o);
|
|
|
|
|
2018-01-01 15:09:14 -08:00
|
|
|
o = _button_add(win, _("About"), "help-about", _cb_ct_about, ctx);
|
2018-01-01 13:57:54 -08:00
|
|
|
elm_box_pack_end(ct_box2, o);
|
|
|
|
|
|
|
|
o = _sep_add_h(win);
|
|
|
|
elm_box_pack_end(ct_boxv, o);
|
|
|
|
|
2020-04-11 01:41:52 -07:00
|
|
|
o = elm_check_add(win);
|
|
|
|
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, _("Grouped input"));
|
|
|
|
elm_object_disabled_set(o, win_has_single_child(ctx->wn));
|
|
|
|
elm_check_state_set(o, win_is_group_input(ctx->wn));
|
|
|
|
elm_box_pack_end(ct_boxv, o);
|
|
|
|
evas_object_show(o);
|
|
|
|
ctx->group_input_cx = o;
|
|
|
|
evas_object_smart_callback_add(o, "changed",
|
|
|
|
_cb_group_input_changed, ctx);
|
|
|
|
|
|
|
|
o = _sep_add_h(win);
|
|
|
|
elm_box_pack_end(ct_boxv, o);
|
|
|
|
|
2018-02-25 22:42:16 -08:00
|
|
|
o = _button_add(win, _("Close Terminal"), "window-close", _cb_ct_close, ctx);
|
2020-04-10 15:21:54 -07:00
|
|
|
elm_box_pack_end(ct_boxv, o);
|
2018-01-01 13:57:54 -08:00
|
|
|
|
|
|
|
evas_object_smart_callback_add(win, "selection,on", _cb_sel_on,
|
2018-01-01 15:09:14 -08:00
|
|
|
ctx);
|
2018-01-01 13:57:54 -08:00
|
|
|
evas_object_smart_callback_add(win, "selection,off", _cb_sel_off,
|
2018-01-01 15:09:14 -08:00
|
|
|
ctx);
|
2018-01-01 13:57:54 -08:00
|
|
|
|
2019-05-26 10:25:44 -07:00
|
|
|
elm_layout_content_set(base, "terminology.controls", ctx->frame);
|
2018-01-01 15:09:14 -08:00
|
|
|
evas_object_show(ctx->frame);
|
|
|
|
ctx->over = o = evas_object_rectangle_add(evas_object_evas_get(win));
|
2018-01-01 13:57:54 -08:00
|
|
|
evas_object_color_set(o, 0, 0, 0, 0);
|
2019-05-26 10:25:44 -07:00
|
|
|
elm_layout_content_set(base, "terminology.dismiss", o);
|
2018-01-01 13:57:54 -08:00
|
|
|
evas_object_show(o);
|
|
|
|
evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_DOWN,
|
2018-01-01 15:09:14 -08:00
|
|
|
_cb_mouse_down, ctx);
|
2018-01-01 13:57:54 -08:00
|
|
|
|
2019-05-26 10:25:44 -07:00
|
|
|
elm_layout_signal_emit(base, "controls,show", "terminology");
|
2018-01-01 15:09:14 -08:00
|
|
|
elm_object_focus_set(ctx->frame, EINA_TRUE);
|
|
|
|
evas_object_event_callback_add(ctx->win, EVAS_CALLBACK_DEL, _cb_saved_del, ctx);
|
|
|
|
evas_object_event_callback_add(ctx->term, EVAS_CALLBACK_DEL, _cb_saved_del, ctx);
|
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
controls_init(void)
|
|
|
|
{
|
|
|
|
controls = eina_hash_pointer_new(NULL);
|
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
controls_shutdown(void)
|
|
|
|
{
|
|
|
|
eina_hash_free(controls);
|
|
|
|
controls = NULL;
|
2012-06-23 23:39:54 -07:00
|
|
|
}
|