about: add context menu on twitter link

This commit is contained in:
Boris Faure 2020-07-22 23:46:49 +02:00
parent 6b8409dfda
commit 3c21c13d39
Signed by untrusted user who does not match committer: borisfaure
GPG Key ID: 35C0410516166BE8
2 changed files with 98 additions and 1 deletions

View File

@ -374,9 +374,13 @@ group { name: "terminology/base";
target: "twitter.r";
}
program {
signal: "mouse,down,1"; source: "twitter.txt";
signal: "mouse,clicked,1"; source: "twitter.txt";
action: SIGNAL_EMIT "about,twitter" "terminology";
}
program {
signal: "mouse,clicked,3"; source: "twitter.txt";
action: SIGNAL_EMIT "about,twitter,ctx" "terminology";
}
program {
signal: "about,show"; source: "terminology";
action: STATE_SET "visible" 0.0;

View File

@ -6,6 +6,7 @@
#include "config.h"
#include "termio.h"
#define TWITTER_HANDLE "@_Terminology_"
typedef struct _about_ctx {
Evas_Object *layout;
@ -13,6 +14,7 @@ typedef struct _about_ctx {
Evas_Object *win;
Evas_Object *base;
Evas_Object *term;
Evas_Object *ctxpopup;
void (*donecb) (void *data);
void *donedata;
Config *config;
@ -43,6 +45,58 @@ _run_url(const About_Ctx *ctx,
ecore_exe_run(buf, NULL);
}
static void
_cb_ctxpopup_del(void *data,
Evas *_e EINA_UNUSED,
Evas_Object *_obj EINA_UNUSED,
void *_event EINA_UNUSED)
{
About_Ctx *ctx = data;
ctx->ctxpopup = NULL;
}
static void
_cb_ctxpopup_dismissed(void *data,
Evas_Object *obj,
void *_event EINA_UNUSED)
{
About_Ctx *ctx = data;
ctx->ctxpopup = NULL;
evas_object_del(obj);
}
static void
_cb_ctxpopup_copy_twitter(void *data,
Evas_Object *obj,
void *_event EINA_UNUSED)
{
About_Ctx *ctx = data;
elm_cnp_selection_set(ctx->win, ELM_SEL_TYPE_CLIPBOARD,
ELM_SEL_FORMAT_TEXT,
TWITTER_HANDLE,
strlen(TWITTER_HANDLE));
ctx->ctxpopup = NULL;
evas_object_del(obj);
}
static void
_cb_ctxpopup_open_twitter_as_url(void *data,
Evas_Object *obj,
void *_event EINA_UNUSED)
{
About_Ctx *ctx = data;
_run_url(ctx, "https://twitter.com/_Terminology_");
ctx->ctxpopup = NULL;
evas_object_del(obj);
}
static void
_cb_twitter(void *data,
Evas_Object *_obj EINA_UNUSED,
@ -54,6 +108,38 @@ _cb_twitter(void *data,
_run_url(ctx, "https://twitter.com/_Terminology_");
}
static void
_cb_twitter_ctx(void *data,
Evas_Object *_obj EINA_UNUSED,
const char *_sig EINA_UNUSED,
const char *_src EINA_UNUSED)
{
About_Ctx *ctx = data;
Evas_Object *popup;
const char *fmt;
Evas *e = evas_object_evas_get(ctx->base);
Evas_Coord x;
Evas_Coord y;
evas_pointer_canvas_xy_get(e, &x, &y);
popup = elm_ctxpopup_add(ctx->win);
ctx->ctxpopup = popup;
fmt = eina_stringshare_printf(_("Copy '%s'"),
TWITTER_HANDLE);
elm_ctxpopup_item_append(popup, fmt, NULL,
_cb_ctxpopup_copy_twitter, ctx);
elm_ctxpopup_item_append(popup, _("Open"), NULL,
_cb_ctxpopup_open_twitter_as_url, ctx);
evas_object_move(popup, x, y);
evas_object_show(popup);
evas_object_smart_callback_add(popup, "dismissed",
_cb_ctxpopup_dismissed, ctx);
evas_object_event_callback_add(popup, EVAS_CALLBACK_DEL,
_cb_ctxpopup_del, ctx);
}
static void
_cb_mouse_down(void *data,
Evas *_e EINA_UNUSED,
@ -76,6 +162,8 @@ _cb_mouse_down(void *data,
ctx->donecb(ctx->donedata);
elm_layout_signal_callback_del(ctx->base, "about,twitter", "*",
_cb_twitter);
elm_layout_signal_callback_del(ctx->base, "about,twitter,ctx", "*",
_cb_twitter_ctx);
free(ctx);
}
@ -99,6 +187,9 @@ about_show(Evas_Object *win, Evas_Object *base, Evas_Object *term,
ctx->donedata = donedata;
ctx->config = config;
elm_object_part_text_set(base, "twitter.txt",
_("Twitter: @_Terminology_"));
ctx->layout = o = elm_layout_add(win);
if (elm_layout_file_set(o, config_theme_path_get(config),
"terminology/about") == 0)
@ -227,6 +318,8 @@ about_show(Evas_Object *win, Evas_Object *base, Evas_Object *term,
elm_layout_signal_callback_add(base, "about,twitter", "*",
_cb_twitter, ctx);
elm_layout_signal_callback_add(base, "about,twitter,ctx", "*",
_cb_twitter_ctx, ctx);
elm_layout_signal_emit(base, "about,show", "terminology");
elm_object_signal_emit(ctx->layout, "begin" ,"terminology");