billiob pushed a commit to branch master.

commit 6d8c81050e28234440b3fd1e5793af2e0f8c738f
Author: Boris Faure <[email protected]>
Date:   Sat Jun 15 23:37:10 2013 +0200

    change dbus link_detect to mousein/out
---
 src/bin/dbus.c       | 61 ++++++++++++++++++++++++++++++++++++++++++++++++----
 src/bin/dbus.h       |  3 ++-
 src/bin/termio.c     | 17 ++++++++++++---
 src/bin/termiolink.c |  8 ++-----
 4 files changed, 75 insertions(+), 14 deletions(-)

diff --git a/src/bin/dbus.c b/src/bin/dbus.c
index bbed85d..7f06b1e 100644
--- a/src/bin/dbus.c
+++ b/src/bin/dbus.c
@@ -6,26 +6,78 @@
 
 static Eldbus_Connection *ty_dbus_conn = NULL;
 static Eldbus_Object *ty_e_object = NULL;
+static Eina_Stringshare *_current_url = NULL;
 
 void
-ty_dbus_link_detect(const char *url)
+_cleanup_current_url(void)
 {
    Eldbus_Message *msg;
 
+   if ((!ty_e_object) || (!_current_url)) return;
+
    msg = eldbus_message_method_call_new("org.enlightenment.wm.service",
                                         "/org/enlightenment/wm/RemoteObject",
                                         "org.enlightenment.wm.Teamwork",
-                                        "LinkDetect");
+                                        "LinkMouseOut");
+
+   eldbus_message_arguments_append(msg, "s", _current_url);
+   eldbus_object_send(ty_e_object, msg, NULL, NULL, -1);
+
+   eina_stringshare_del(_current_url);
+   _current_url = NULL;
+}
+
+void
+ty_dbus_link_mouseout(const char *url)
+{
+   Eldbus_Message *msg;
+
+   if (!ty_e_object) return;
+
+   if ((!url) ||
+       ((_current_url) && (!strcmp(url, _current_url))))
+     {
+        _cleanup_current_url();
+        return;
+     }
+
+   _cleanup_current_url();
+
+   msg = eldbus_message_method_call_new("org.enlightenment.wm.service",
+                                        "/org/enlightenment/wm/RemoteObject",
+                                        "org.enlightenment.wm.Teamwork",
+                                        "LinkMouseOut");
 
    eldbus_message_arguments_append(msg, "s", url);
    eldbus_object_send(ty_e_object, msg, NULL, NULL, -1);
 }
 
+
 void
-ty_dbus_init(void)
+ty_dbus_link_mousein(const char *url)
 {
-   Eldbus_Service_Interface *iface;
+   Eldbus_Message *msg;
+
+   if (!ty_e_object) return;
+
+   if ((_current_url) && (!strcmp(url, _current_url))) return;
+
+   msg = eldbus_message_method_call_new("org.enlightenment.wm.service",
+                                        "/org/enlightenment/wm/RemoteObject",
+                                        "org.enlightenment.wm.Teamwork",
+                                        "LinkMouseIn");
 
+   _cleanup_current_url();
+
+   _current_url = eina_stringshare_add(url);
+
+   eldbus_message_arguments_append(msg, "s", _current_url);
+   eldbus_object_send(ty_e_object, msg, NULL, NULL, -1);
+}
+
+void
+ty_dbus_init(void)
+{
    if (ty_dbus_conn) return;
 
    eldbus_init();
@@ -39,6 +91,7 @@ ty_dbus_init(void)
 void
 ty_dbus_shutdown(void)
 {
+   _cleanup_current_url();
    if (ty_dbus_conn) eldbus_connection_unref(ty_dbus_conn);
    ty_dbus_conn = NULL;
    ty_e_object = NULL;
diff --git a/src/bin/dbus.h b/src/bin/dbus.h
index 089e113..0583708 100644
--- a/src/bin/dbus.h
+++ b/src/bin/dbus.h
@@ -1,7 +1,8 @@
 #ifndef _DBUS_H__
 #define _DBUS_H__ 1
 
-void ty_dbus_link_detect(const char *url);
+void ty_dbus_link_mousein(const char *url);
+void ty_dbus_link_mouseout(const char *url);
 void ty_dbus_init(void);
 void ty_dbus_shutdown(void);
 
diff --git a/src/bin/termio.c b/src/bin/termio.c
index 1f26921..7657d9a 100644
--- a/src/bin/termio.c
+++ b/src/bin/termio.c
@@ -527,8 +527,13 @@ _smart_mouseover_apply(Evas_Object *obj)
                          &x1, &y1, &x2, &y2);
    if (!s)
      {
-        if (sd->link.string) free(sd->link.string);
-        sd->link.string = NULL;
+        if (sd->link.string)
+          {
+             if (link_is_url(sd->link.string))
+                ty_dbus_link_mouseout(sd->link.string);
+             free(sd->link.string);
+             sd->link.string = NULL;
+           }
         sd->link.x1 = -1;
         sd->link.y1 = -1;
         sd->link.x2 = -1;
@@ -536,11 +541,17 @@ _smart_mouseover_apply(Evas_Object *obj)
         _update_link(obj, same_link, same_geom);
         return;
      }
-   
+
    if ((sd->link.string) && (!strcmp(sd->link.string, s)))
      same_link = EINA_TRUE;
    if (sd->link.string) free(sd->link.string);
    sd->link.string = s;
+
+   if ((!same_link) && (link_is_url(s)))
+     {
+        ty_dbus_link_mousein(s);
+     }
+
    if ((x1 == sd->link.x1) && (y1 == sd->link.y1) &&
        (x2 == sd->link.x2) && (y2 == sd->link.y2))
      same_geom = EINA_TRUE;
diff --git a/src/bin/termiolink.c b/src/bin/termiolink.c
index f7255e5..d624e06 100644
--- a/src/bin/termiolink.c
+++ b/src/bin/termiolink.c
@@ -205,10 +205,10 @@ _termio_link_find(Evas_Object *obj, int cx, int cy,
         if ((len > 1) && (!endmatch))
           {
              Eina_Bool is_file = _is_file(s);
-             Eina_Bool is_url = link_is_url(s);
+
              if (is_file ||
                  link_is_email(s) ||
-                 is_url)
+                 link_is_url(s))
                {
                   if (x1r) *x1r = x1;
                   if (y1r) *y1r = y1;
@@ -221,10 +221,6 @@ _termio_link_find(Evas_Object *obj, int cx, int cy,
                        free(s);
                        return ret;
                     }
-                  else if (is_url)
-                    {
-                       ty_dbus_link_detect(s);
-                    }
 
                   return s;
                }

-- 

------------------------------------------------------------------------------
This SF.net email is sponsored by Windows:

Build for Windows Store.

http://p.sf.net/sfu/windows-dev2dev

Reply via email to