parent
d96f7e9f98
commit
6e85b4bfcc
|
@ -11,6 +11,12 @@
|
||||||
|
|
||||||
int efreetd_log_dom = -1;
|
int efreetd_log_dom = -1;
|
||||||
|
|
||||||
|
void
|
||||||
|
quit(void)
|
||||||
|
{
|
||||||
|
ecore_main_loop_quit();
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
main(void)
|
main(void)
|
||||||
{
|
{
|
||||||
|
|
|
@ -29,4 +29,6 @@ extern int efreetd_log_dom;
|
||||||
#endif
|
#endif
|
||||||
#define WRN(...) EINA_LOG_DOM_WARN(efreetd_log_dom, __VA_ARGS__)
|
#define WRN(...) EINA_LOG_DOM_WARN(efreetd_log_dom, __VA_ARGS__)
|
||||||
|
|
||||||
|
void quit(void);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
# include <config.h>
|
# include <config.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include <Ecore.h>
|
||||||
#include <EDBus.h>
|
#include <EDBus.h>
|
||||||
|
|
||||||
#include "efreetd.h"
|
#include "efreetd.h"
|
||||||
|
@ -21,16 +22,42 @@ enum
|
||||||
static EDBus_Connection *conn;
|
static EDBus_Connection *conn;
|
||||||
static EDBus_Service_Interface *iface;
|
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 *
|
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;
|
EDBus_Message *reply;
|
||||||
|
|
||||||
|
clients++;
|
||||||
|
if (shutdown) ecore_timer_del(shutdown);
|
||||||
|
shutdown = NULL;
|
||||||
reply = edbus_message_method_return_new(message);
|
reply = edbus_message_method_return_new(message);
|
||||||
edbus_message_arguments_set(reply, "b", cache_desktop_exists());
|
edbus_message_arguments_set(reply, "b", cache_desktop_exists());
|
||||||
return reply;
|
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 *
|
static EDBus_Message *
|
||||||
add_desktop_dirs(const EDBus_Service_Interface *ifc __UNUSED__, const EDBus_Message *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[] = {
|
static const EDBus_Method methods[] = {
|
||||||
/* TODO: Register / Unregister */
|
|
||||||
{
|
{
|
||||||
"Ping", NULL, EDBUS_ARGS({"b", "cache exists"}),
|
"Register", NULL, EDBUS_ARGS({"b", "cache exists"}),
|
||||||
ping, 0
|
do_register, 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"UnRegister", NULL, NULL,
|
||||||
|
do_unregister, 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"AddDesktopDirs", EDBUS_ARGS({"as", "dirs"}), NULL,
|
"AddDesktopDirs", EDBUS_ARGS({"as", "dirs"}), NULL,
|
||||||
|
@ -130,7 +160,7 @@ static const EDBus_Method methods[] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
static const EDBus_Service_Interface_Desc desc = {
|
static const EDBus_Service_Interface_Desc desc = {
|
||||||
INTERFACE, methods, signals
|
INTERFACE, methods, signals, NULL, NULL, NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
|
@ -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 Eina_Bool efreet_cache_check(Eet_File **ef, const char *path, int major);
|
||||||
static void *efreet_cache_close(Eet_File *ef);
|
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 desktop_cache_update(void *context, const EDBus_Message *msg);
|
||||||
static void icon_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, "IconCacheUpdate", icon_cache_update, NULL);
|
||||||
edbus_proxy_signal_handler_add(proxy, "DesktopCacheUpdate", desktop_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?
|
* TODO: Needed?
|
||||||
|
@ -210,7 +210,11 @@ efreet_cache_shutdown(void)
|
||||||
* TODO: Needed??
|
* TODO: Needed??
|
||||||
edbus_name_owner_changed_callback_del(conn, BUS, on_name_owner_changed, conn);
|
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();
|
edbus_shutdown();
|
||||||
}
|
}
|
||||||
|
@ -1049,7 +1053,7 @@ efreet_cache_util_names(const char *key)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
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;
|
const char *errname, *errmsg;
|
||||||
Eina_Bool exists;
|
Eina_Bool exists;
|
||||||
|
|
Loading…
Reference in New Issue