billiob pushed a commit to branch master.

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

commit 3c21c13d39ed9a48c4ea5a56c4d901525465f1fc
Author: Boris Faure <bill...@gmail.com>
Date:   Wed Jul 22 23:46:49 2020 +0200

    about: add context menu on twitter link
---
 data/themes/default/base.edc |  6 ++-
 src/bin/about.c              | 93 ++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 98 insertions(+), 1 deletion(-)

diff --git a/data/themes/default/base.edc b/data/themes/default/base.edc
index 29c5911..e835479 100644
--- a/data/themes/default/base.edc
+++ b/data/themes/default/base.edc
@@ -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;
diff --git a/src/bin/about.c b/src/bin/about.c
index 4a9d937..c19278c 100644
--- a/src/bin/about.c
+++ b/src/bin/about.c
@@ -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");

-- 


Reply via email to