use dbus to tell e.TeamWork whenever a link is detected

This was requested by the crazy e18 release manager.
This commit is contained in:
Boris Faure 2013-06-15 22:39:35 +02:00
parent 3ed65bbcdc
commit f1c3bf52ca
6 changed files with 88 additions and 2 deletions

View File

@ -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

View File

@ -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 = \

54
src/bin/dbus.c Normal file
View File

@ -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

8
src/bin/dbus.h Normal file
View File

@ -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

View File

@ -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)

View File

@ -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;
}