forked from enlightenment/enlightenment
e: add auto desk lock and unlock to Enlightenment bluez module.
This commit is contained in:
parent
9663eea0e4
commit
da14a2d0eb
|
@ -8,6 +8,10 @@ static Eina_List *instances = NULL;
|
||||||
static E_Module *mod = NULL;
|
static E_Module *mod = NULL;
|
||||||
static char tmpbuf[1024];
|
static char tmpbuf[1024];
|
||||||
|
|
||||||
|
/* Local config */
|
||||||
|
static E_Config_DD *conf_edd = NULL;
|
||||||
|
Config *ebluez4_config = NULL;
|
||||||
|
|
||||||
EAPI E_Module_Api e_modapi = {E_MODULE_API_VERSION, "Bluez4"};
|
EAPI E_Module_Api e_modapi = {E_MODULE_API_VERSION, "Bluez4"};
|
||||||
|
|
||||||
/* Local Functions */
|
/* Local Functions */
|
||||||
|
@ -249,6 +253,32 @@ _ebluez4_cb_forget(void *data, E_Menu *m, E_Menu_Item *mi)
|
||||||
ebluez4_remove_device(dev->obj);
|
ebluez4_remove_device(dev->obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_ebluez4_cb_lock(void *data,
|
||||||
|
E_Menu *m __UNUSED__,
|
||||||
|
E_Menu_Item *mi)
|
||||||
|
{
|
||||||
|
Device *dev = data;
|
||||||
|
int tog;
|
||||||
|
|
||||||
|
tog = e_menu_item_toggle_get(mi);
|
||||||
|
eina_stringshare_replace(&ebluez4_config->lock_dev_name,
|
||||||
|
tog ? dev->name : NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_ebluez4_cb_unlock(void *data,
|
||||||
|
E_Menu *m __UNUSED__,
|
||||||
|
E_Menu_Item *mi)
|
||||||
|
{
|
||||||
|
Device *dev = data;
|
||||||
|
int tog;
|
||||||
|
|
||||||
|
tog = e_menu_item_toggle_get(mi);
|
||||||
|
eina_stringshare_replace(&ebluez4_config->unlock_dev_name,
|
||||||
|
tog ? dev->name : NULL);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_menu_post_deactivate(void *data __UNUSED__, E_Menu *m)
|
_menu_post_deactivate(void *data __UNUSED__, E_Menu *m)
|
||||||
{
|
{
|
||||||
|
@ -290,7 +320,9 @@ _ebluez4_add_devices(Instance *inst)
|
||||||
EINA_LIST_FOREACH(ctxt->devices, iter, dev)
|
EINA_LIST_FOREACH(ctxt->devices, iter, dev)
|
||||||
if (dev->paired)
|
if (dev->paired)
|
||||||
{
|
{
|
||||||
mi = e_menu_item_new(m);
|
Eina_Bool chk;
|
||||||
|
|
||||||
|
mi = e_menu_item_new(m);
|
||||||
e_menu_item_label_set(mi, dev->name);
|
e_menu_item_label_set(mi, dev->name);
|
||||||
e_menu_item_check_set(mi, 1);
|
e_menu_item_check_set(mi, 1);
|
||||||
subm = e_menu_new();
|
subm = e_menu_new();
|
||||||
|
@ -313,6 +345,23 @@ _ebluez4_add_devices(Instance *inst)
|
||||||
submi = e_menu_item_new(subm);
|
submi = e_menu_item_new(subm);
|
||||||
e_menu_item_label_set(submi, "Forget");
|
e_menu_item_label_set(submi, "Forget");
|
||||||
e_menu_item_callback_set(submi, _ebluez4_cb_forget, dev);
|
e_menu_item_callback_set(submi, _ebluez4_cb_forget, dev);
|
||||||
|
|
||||||
|
/* Auto lock when away */
|
||||||
|
submi = e_menu_item_new(subm);
|
||||||
|
e_menu_item_check_set(submi, 1);
|
||||||
|
e_menu_item_label_set(submi, "Lock on disconnect");
|
||||||
|
e_menu_item_callback_set(submi, _ebluez4_cb_lock, dev);
|
||||||
|
chk = ebluez4_config->lock_dev_name && dev->name &&
|
||||||
|
!strcmp(dev->name, ebluez4_config->lock_dev_name);
|
||||||
|
e_menu_item_toggle_set(submi, !!chk);
|
||||||
|
|
||||||
|
submi = e_menu_item_new(subm);
|
||||||
|
e_menu_item_check_set(submi, 1);
|
||||||
|
e_menu_item_label_set(submi, "Unlock on disconnect");
|
||||||
|
e_menu_item_callback_set(submi, _ebluez4_cb_unlock, dev);
|
||||||
|
chk = ebluez4_config->unlock_dev_name && dev->name &&
|
||||||
|
!strcmp(dev->name, ebluez4_config->unlock_dev_name);
|
||||||
|
e_menu_item_toggle_set(submi, !!chk);
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -475,6 +524,18 @@ e_modapi_init(E_Module *m)
|
||||||
{
|
{
|
||||||
mod = m;
|
mod = m;
|
||||||
|
|
||||||
|
conf_edd = E_CONFIG_DD_NEW("Config", Config);
|
||||||
|
#undef T
|
||||||
|
#undef D
|
||||||
|
#define T Config
|
||||||
|
#define D conf_edd
|
||||||
|
E_CONFIG_VAL(D, T, lock_dev_name, STR);
|
||||||
|
E_CONFIG_VAL(D, T, unlock_dev_name, STR);
|
||||||
|
|
||||||
|
ebluez4_config = e_config_domain_load("module.ebluez4", conf_edd);
|
||||||
|
if (!ebluez4_config)
|
||||||
|
ebluez4_config = E_NEW(Config, 1);
|
||||||
|
|
||||||
ebluez4_edbus_init();
|
ebluez4_edbus_init();
|
||||||
|
|
||||||
e_gadcon_provider_register(&_gc_class);
|
e_gadcon_provider_register(&_gc_class);
|
||||||
|
@ -485,6 +546,13 @@ e_modapi_init(E_Module *m)
|
||||||
EAPI int
|
EAPI int
|
||||||
e_modapi_shutdown(E_Module *m)
|
e_modapi_shutdown(E_Module *m)
|
||||||
{
|
{
|
||||||
|
E_CONFIG_DD_FREE(conf_edd);
|
||||||
|
|
||||||
|
eina_stringshare_del(ebluez4_config->lock_dev_name);
|
||||||
|
eina_stringshare_del(ebluez4_config->unlock_dev_name);
|
||||||
|
free(ebluez4_config);
|
||||||
|
ebluez4_config = NULL;
|
||||||
|
|
||||||
ebluez4_edbus_shutdown();
|
ebluez4_edbus_shutdown();
|
||||||
e_gadcon_provider_unregister(&_gc_class);
|
e_gadcon_provider_unregister(&_gc_class);
|
||||||
return 1;
|
return 1;
|
||||||
|
|
|
@ -13,6 +13,15 @@ struct _Instance
|
||||||
E_Dialog *adapters_dialog;
|
E_Dialog *adapters_dialog;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
typedef struct _Config Config;
|
||||||
|
struct _Config
|
||||||
|
{
|
||||||
|
const char *lock_dev_name;
|
||||||
|
const char *unlock_dev_name;
|
||||||
|
};
|
||||||
|
|
||||||
|
extern Config *ebluez4_config;
|
||||||
|
|
||||||
EAPI extern E_Module_Api e_modapi;
|
EAPI extern E_Module_Api e_modapi;
|
||||||
|
|
||||||
EAPI void *e_modapi_init(E_Module *m);
|
EAPI void *e_modapi_init(E_Module *m);
|
||||||
|
|
|
@ -384,6 +384,11 @@ _on_removed(void *context, const EDBus_Message *msg)
|
||||||
dev = eina_list_search_unsorted(ctxt->devices, ebluez4_dev_path_cmp, path);
|
dev = eina_list_search_unsorted(ctxt->devices, ebluez4_dev_path_cmp, path);
|
||||||
fdev = eina_list_search_unsorted(ctxt->found_devices, _dev_addr_cmp,
|
fdev = eina_list_search_unsorted(ctxt->found_devices, _dev_addr_cmp,
|
||||||
dev->addr);
|
dev->addr);
|
||||||
|
|
||||||
|
if (dev->name && ebluez4_config->lock_dev_name &&
|
||||||
|
!strcmp(dev->name, ebluez4_config->lock_dev_name))
|
||||||
|
e_desklock_show(EINA_FALSE);
|
||||||
|
|
||||||
_unset_dev(dev, &ctxt->devices);
|
_unset_dev(dev, &ctxt->devices);
|
||||||
_unset_dev(fdev, &ctxt->found_devices);
|
_unset_dev(fdev, &ctxt->found_devices);
|
||||||
}
|
}
|
||||||
|
@ -422,6 +427,10 @@ _on_device_found(void *context, const EDBus_Message *msg)
|
||||||
dev->paired = paired;
|
dev->paired = paired;
|
||||||
ctxt->found_devices = eina_list_append(ctxt->found_devices, dev);
|
ctxt->found_devices = eina_list_append(ctxt->found_devices, dev);
|
||||||
|
|
||||||
|
if (dev->name && ebluez4_config->unlock_dev_name &&
|
||||||
|
!strcmp(dev->name, ebluez4_config->unlock_dev_name))
|
||||||
|
e_desklock_hide();
|
||||||
|
|
||||||
ebluez4_update_instances(ctxt->found_devices);
|
ebluez4_update_instances(ctxt->found_devices);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue