billiob pushed a commit to branch master.
commit f1c3bf52ca25d4b6f70b4bb45cbbb64363194256
Author: Boris Faure <[email protected]>
Date: Sat Jun 15 22:39:35 2013 +0200
use dbus to tell e.TeamWork whenever a link is detected
This was requested by the crazy e18 release manager.
---
configure.ac | 12 ++++++++++++
src/bin/Makefile.am | 3 ++-
src/bin/dbus.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++
src/bin/dbus.h | 8 ++++++++
src/bin/main.c | 5 +++++
src/bin/termiolink.c | 8 +++++++-
6 files changed, 88 insertions(+), 2 deletions(-)
diff --git a/configure.ac b/configure.ac
index 95759d5..cc2c80b 100644
--- a/configure.ac
+++ b/configure.ac
@@ -38,6 +38,15 @@ requirements="\
PKG_CHECK_MODULES([TERMINOLOGY], [${requirements}])
+PKG_CHECK_MODULES([ELDBUS],
+ [eldbus],
+ [
+ AC_DEFINE(HAVE_ELDBUS, 1, [DBUS support])
+ have_eldbus="yes"
+ ],
+ [have_eldbus="no"]
+ )
+
AC_CHECK_FUNCS(mkstemps)
EFL_WITH_BIN([edje], [edje-cc], [edje_cc])
@@ -96,3 +105,6 @@ echo
echo "Installation...............: make install (as root if needed, with 'su'
or 'sudo')"
echo " prefix...................: $prefix"
echo
+echo "Features:"
+echo " dbus................: $have_eldbus"
+echo
diff --git a/src/bin/Makefile.am b/src/bin/Makefile.am
index c6b2779..e95dae7 100644
--- a/src/bin/Makefile.am
+++ b/src/bin/Makefile.am
@@ -6,7 +6,7 @@ terminology_CPPFLAGS = -I. \
-DPACKAGE_BIN_DIR=\"$(bindir)\" -DPACKAGE_LIB_DIR=\"$(libdir)\" \
-DPACKAGE_DATA_DIR=\"$(pkgdatadir)\" @TERMINOLOGY_CFLAGS@
-terminology_LDADD = @TERMINOLOGY_LIBS@
+terminology_LDADD = @TERMINOLOGY_LIBS@ @ELDBUS_LIBS@
terminology_SOURCES = \
private.h \
@@ -41,6 +41,7 @@ lz4/lz4.c lz4/lz4.h \
utf8.c utf8.h \
win.c win.h \
utils.c utils.h \
+dbus.c dbus.h \
extns.h
tybg_SOURCES = \
diff --git a/src/bin/dbus.c b/src/bin/dbus.c
new file mode 100644
index 0000000..bbed85d
--- /dev/null
+++ b/src/bin/dbus.c
@@ -0,0 +1,54 @@
+#include "private.h"
+#include <Elementary.h>
+#include "dbus.h"
+#ifdef HAVE_ELDBUS
+#include <Eldbus.h>
+
+static Eldbus_Connection *ty_dbus_conn = NULL;
+static Eldbus_Object *ty_e_object = NULL;
+
+void
+ty_dbus_link_detect(const char *url)
+{
+ Eldbus_Message *msg;
+
+ msg = eldbus_message_method_call_new("org.enlightenment.wm.service",
+ "/org/enlightenment/wm/RemoteObject",
+ "org.enlightenment.wm.Teamwork",
+ "LinkDetect");
+
+ eldbus_message_arguments_append(msg, "s", url);
+ eldbus_object_send(ty_e_object, msg, NULL, NULL, -1);
+}
+
+void
+ty_dbus_init(void)
+{
+ Eldbus_Service_Interface *iface;
+
+ if (ty_dbus_conn) return;
+
+ eldbus_init();
+
+ ty_dbus_conn = eldbus_connection_get(ELDBUS_CONNECTION_TYPE_SESSION);
+ ty_e_object = eldbus_object_get(ty_dbus_conn,
+ "org.enlightenment.wm.service",
+ "/org/enlightenment/wm/RemoteObject");
+}
+
+void
+ty_dbus_shutdown(void)
+{
+ if (ty_dbus_conn) eldbus_connection_unref(ty_dbus_conn);
+ ty_dbus_conn = NULL;
+ ty_e_object = NULL;
+ eldbus_shutdown();
+}
+
+#else
+
+void ty_dbus_link_detect(const char *url __UNUSED__) {}
+void ty_dbus_init(void) {}
+void ty_dbus_shutdown(void) {}
+
+#endif
diff --git a/src/bin/dbus.h b/src/bin/dbus.h
new file mode 100644
index 0000000..089e113
--- /dev/null
+++ b/src/bin/dbus.h
@@ -0,0 +1,8 @@
+#ifndef _DBUS_H__
+#define _DBUS_H__ 1
+
+void ty_dbus_link_detect(const char *url);
+void ty_dbus_init(void);
+void ty_dbus_shutdown(void);
+
+#endif
diff --git a/src/bin/main.c b/src/bin/main.c
index acd4211..5bbf3dc 100644
--- a/src/bin/main.c
+++ b/src/bin/main.c
@@ -13,6 +13,7 @@
#include "utils.h"
#include "ipc.h"
#include "sel.h"
+#include "dbus.h"
#if (ELM_VERSION_MAJOR == 1) && (ELM_VERSION_MINOR < 8)
#define PANES_TOP "left"
@@ -2936,12 +2937,16 @@ remote:
if (nowm)
ecore_evas_focus_set(ecore_evas_ecore_evas_get(
evas_object_evas_get(wn->win)), 1);
+
+ ty_dbus_init();
+
elm_run();
end:
#if (ECORE_VERSION_MAJOR > 1) || (ECORE_VERSION_MINOR >= 8)
free(cmd);
#endif
+ ty_dbus_shutdown();
ipc_shutdown();
while (wins)
diff --git a/src/bin/termiolink.c b/src/bin/termiolink.c
index 8731da2..f7255e5 100644
--- a/src/bin/termiolink.c
+++ b/src/bin/termiolink.c
@@ -2,6 +2,7 @@
#include <Elementary.h>
#include "termio.h"
#include "utils.h"
+#include "dbus.h"
static Eina_Bool
coord_back(int *x, int *y, int w, int h __UNUSED__)
@@ -204,9 +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) ||
- link_is_url(s))
+ is_url)
{
if (x1r) *x1r = x1;
if (y1r) *y1r = y1;
@@ -219,6 +221,10 @@ _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