efreet: track efreetd clients

SVN revision: 78874
This commit is contained in:
Sebastian Dransfeld 2012-11-02 20:12:41 +00:00
parent d96f7e9f98
commit 6e85b4bfcc
4 changed files with 51 additions and 9 deletions

View File

@ -11,6 +11,12 @@
int efreetd_log_dom = -1;
void
quit(void)
{
ecore_main_loop_quit();
}
int
main(void)
{

View File

@ -29,4 +29,6 @@ extern int efreetd_log_dom;
#endif
#define WRN(...) EINA_LOG_DOM_WARN(efreetd_log_dom, __VA_ARGS__)
void quit(void);
#endif

View File

@ -2,6 +2,7 @@
# include <config.h>
#endif
#include <Ecore.h>
#include <EDBus.h>
#include "efreetd.h"
@ -21,16 +22,42 @@ enum
static EDBus_Connection *conn;
static EDBus_Service_Interface *iface;
static Ecore_Timer *shutdown = NULL;
static int clients = 0;
static Eina_Bool
do_shutdown(void *data __UNUSED__)
{
quit();
return ECORE_CALLBACK_CANCEL;
}
static EDBus_Message *
ping(const EDBus_Service_Interface *ifc __UNUSED__, const EDBus_Message *message)
do_register(const EDBus_Service_Interface *ifc __UNUSED__, const EDBus_Message *message)
{
EDBus_Message *reply;
clients++;
if (shutdown) ecore_timer_del(shutdown);
shutdown = NULL;
reply = edbus_message_method_return_new(message);
edbus_message_arguments_set(reply, "b", cache_desktop_exists());
return reply;
}
static EDBus_Message *
do_unregister(const EDBus_Service_Interface *ifc __UNUSED__, const EDBus_Message *message __UNUSED__)
{
clients--;
if (clients <= 0)
{
clients = 0;
if (shutdown) ecore_timer_del(shutdown);
shutdown = ecore_timer_add(10.0, do_shutdown, NULL);
}
return NULL;
}
static EDBus_Message *
add_desktop_dirs(const EDBus_Service_Interface *ifc __UNUSED__, const EDBus_Message *message)
{
@ -105,10 +132,13 @@ static const EDBus_Signal signals[] = {
};
static const EDBus_Method methods[] = {
/* TODO: Register / Unregister */
{
"Ping", NULL, EDBUS_ARGS({"b", "cache exists"}),
ping, 0
"Register", NULL, EDBUS_ARGS({"b", "cache exists"}),
do_register, 0
},
{
"UnRegister", NULL, NULL,
do_unregister, 0
},
{
"AddDesktopDirs", EDBUS_ARGS({"as", "dirs"}), NULL,
@ -130,7 +160,7 @@ static const EDBus_Method methods[] = {
};
static const EDBus_Service_Interface_Desc desc = {
INTERFACE, methods, signals
INTERFACE, methods, signals, NULL, NULL, NULL
};
static void

View File

@ -93,7 +93,7 @@ static void efreet_cache_icon_theme_free(Efreet_Icon_Theme *theme);
static Eina_Bool efreet_cache_check(Eet_File **ef, const char *path, int major);
static void *efreet_cache_close(Eet_File *ef);
static void on_send_ping(void *data, const EDBus_Message *msg, EDBus_Pending *pending);
static void on_send_register(void *data, const EDBus_Message *msg, EDBus_Pending *pending);
static void desktop_cache_update(void *context, const EDBus_Message *msg);
static void icon_cache_update(void *context, const EDBus_Message *msg);
@ -134,7 +134,7 @@ efreet_cache_init(void)
edbus_proxy_signal_handler_add(proxy, "IconCacheUpdate", icon_cache_update, NULL);
edbus_proxy_signal_handler_add(proxy, "DesktopCacheUpdate", desktop_cache_update, NULL);
edbus_proxy_call(proxy, "Ping", on_send_ping, NULL, -1, "");
edbus_proxy_call(proxy, "Register", on_send_register, NULL, -1, "");
/*
* TODO: Needed?
@ -210,7 +210,11 @@ efreet_cache_shutdown(void)
* TODO: Needed??
edbus_name_owner_changed_callback_del(conn, BUS, on_name_owner_changed, conn);
*/
if (conn) edbus_connection_unref(conn);
if (conn)
{
edbus_proxy_call(proxy, "UnRegister", NULL, NULL, -1, "");
edbus_connection_unref(conn);
}
edbus_shutdown();
}
@ -1049,7 +1053,7 @@ efreet_cache_util_names(const char *key)
}
static void
on_send_ping(void *data __UNUSED__, const EDBus_Message *msg, EDBus_Pending *pending __UNUSED__)
on_send_register(void *data __UNUSED__, const EDBus_Message *msg, EDBus_Pending *pending __UNUSED__)
{
const char *errname, *errmsg;
Eina_Bool exists;