forked from enlightenment/efl
watch changes:
event data is now returned device/event strings are now deleted after callback is complete SVN revision: 48813
This commit is contained in:
parent
dc91f4ebbf
commit
7c1298ea04
|
@ -11,32 +11,32 @@ typedef struct kbdmouse
|
||||||
|
|
||||||
static void
|
static void
|
||||||
/* event will always be a syspath starting with /sys */
|
/* event will always be a syspath starting with /sys */
|
||||||
catch_events(const char *event, void *data, Eudev_Watch *watch)
|
catch_events(const char *device, const char *event, void *data, Eudev_Watch *watch)
|
||||||
{
|
{
|
||||||
kbdmouse *akbdmouse = data;
|
kbdmouse *akbdmouse = data;
|
||||||
Eina_List *l;
|
Eina_List *l;
|
||||||
const char *name, *dev, *type;
|
const char *name, *dev, *type;
|
||||||
int new = 0;
|
int new = 0;
|
||||||
|
|
||||||
/* the event that comes through will be prefixed by "/sys"
|
/* the device that comes through will be prefixed by "/sys"
|
||||||
* but the saved name will not, so we check for the saved name
|
* but the saved name will not, so we check for the saved name
|
||||||
* inside the event name
|
* inside the device name
|
||||||
*/
|
*/
|
||||||
EINA_LIST_FOREACH(akbdmouse->kbds, l, name)
|
EINA_LIST_FOREACH(akbdmouse->kbds, l, name)
|
||||||
if (strstr(event, name)) goto end;
|
if (strstr(device, name)) goto end;
|
||||||
EINA_LIST_FOREACH(akbdmouse->mice, l, name)
|
EINA_LIST_FOREACH(akbdmouse->mice, l, name)
|
||||||
if (strstr(event, name)) goto end;
|
if (strstr(device, name)) goto end;
|
||||||
|
|
||||||
/* check to see if the device was just plugged in */
|
/* check to see if the device was just plugged in */
|
||||||
if (e_udev_syspath_is_kbd(event) || e_udev_syspath_is_mouse(event))
|
if (e_udev_syspath_is_kbd(device) || e_udev_syspath_is_mouse(device))
|
||||||
{
|
{
|
||||||
new = 1;
|
new = 1;
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
/* if we reach here, the event is neither a keyboard nor a mouse that we saw
|
/* if we reach here, the device is neither a keyboard nor a mouse that we saw
|
||||||
* previously, so we print a moderately amusing message and bail
|
* previously, so we print a moderately amusing message and bail
|
||||||
*/
|
*/
|
||||||
printf("Sneaky sneaky! But %s is not a keyboard or a mouse!!\n", event);
|
printf("Sneaky sneaky! But %s is not a keyboard or a mouse!!\n", device);
|
||||||
return;
|
return;
|
||||||
|
|
||||||
end:
|
end:
|
||||||
|
@ -46,7 +46,7 @@ end:
|
||||||
*/
|
*/
|
||||||
if (new)
|
if (new)
|
||||||
{
|
{
|
||||||
dev = e_udev_syspath_get_devpath(event);
|
dev = e_udev_syspath_get_devpath(device);
|
||||||
type = "plugged in";
|
type = "plugged in";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -127,7 +127,7 @@ extern "C" {
|
||||||
EAPI Eina_Bool e_udev_syspath_is_kbd(const char *syspath);
|
EAPI Eina_Bool e_udev_syspath_is_kbd(const char *syspath);
|
||||||
EAPI Eina_Bool e_udev_syspath_is_touchpad(const char *syspath);
|
EAPI Eina_Bool e_udev_syspath_is_touchpad(const char *syspath);
|
||||||
|
|
||||||
EAPI Eudev_Watch *e_udev_watch_add(Eudev_Type type, void(*func)(const char *, void *, Eudev_Watch *), void *user_data);
|
EAPI Eudev_Watch *e_udev_watch_add(Eudev_Type type, void(*func)(const char *, const char *, void *, Eudev_Watch *), void *user_data);
|
||||||
EAPI void *e_udev_watch_del(Eudev_Watch *watch);
|
EAPI void *e_udev_watch_del(Eudev_Watch *watch);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|
|
@ -12,7 +12,7 @@ struct Eudev_Watch
|
||||||
/* private */
|
/* private */
|
||||||
struct _store_data
|
struct _store_data
|
||||||
{
|
{
|
||||||
void(*func)(const char *, void *, Eudev_Watch *);
|
void(*func)(const char *, const char *, void *, Eudev_Watch *);
|
||||||
void *data;
|
void *data;
|
||||||
struct udev_monitor *mon;
|
struct udev_monitor *mon;
|
||||||
Eudev_Type type;
|
Eudev_Type type;
|
||||||
|
@ -28,7 +28,7 @@ _get_syspath_from_watch(void *data, Ecore_Fd_Handler *fd_handler)
|
||||||
struct _store_data *store = data;
|
struct _store_data *store = data;
|
||||||
struct udev_device *device;
|
struct udev_device *device;
|
||||||
const char *ret, *test;
|
const char *ret, *test;
|
||||||
void(*func)(const char *, void *, Eudev_Watch *) = store->func;
|
void(*func)(const char *, const char *, void *, Eudev_Watch *) = store->func;
|
||||||
void *sdata = store->data;
|
void *sdata = store->data;
|
||||||
Eudev_Watch *watch = store->watch;
|
Eudev_Watch *watch = store->watch;
|
||||||
int cap = 0;
|
int cap = 0;
|
||||||
|
@ -89,13 +89,25 @@ _get_syspath_from_watch(void *data, Ecore_Fd_Handler *fd_handler)
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
test = eina_stringshare_add(udev_device_get_action(device));
|
||||||
|
if (!test)
|
||||||
|
{
|
||||||
|
udev_device_unref(device);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
ret = eina_stringshare_add(udev_device_get_syspath(device));
|
ret = eina_stringshare_add(udev_device_get_syspath(device));
|
||||||
if (!ret) return 0;
|
if (!ret)
|
||||||
|
{
|
||||||
|
udev_device_unref(device);
|
||||||
|
eina_stringshare_del(test);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
udev_device_unref(device);
|
udev_device_unref(device);
|
||||||
|
|
||||||
(*func)(ret, sdata, watch);
|
(*func)(ret, test, sdata, watch);
|
||||||
|
eina_stringshare_del(test);
|
||||||
|
eina_stringshare_del(ret);
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
|
@ -108,7 +120,8 @@ error:
|
||||||
*
|
*
|
||||||
* @param subsystem The subsystem type. See @ref Subsystem_Types
|
* @param subsystem The subsystem type. See @ref Subsystem_Types
|
||||||
* @param device_type The device type. See @ref Device_Types
|
* @param device_type The device type. See @ref Device_Types
|
||||||
* @param func The function to call when the watch receives data
|
* @param func The function to call when the watch receives data;
|
||||||
|
* must take (const char *device, const char *event_type, void *data, Eudev_Watch *watch)
|
||||||
* @param user_data Data to pass to the callback function
|
* @param user_data Data to pass to the callback function
|
||||||
*
|
*
|
||||||
* @return A watch struct for the watch type specified, or NULL on failure
|
* @return A watch struct for the watch type specified, or NULL on failure
|
||||||
|
@ -116,7 +129,7 @@ error:
|
||||||
* @ingroup udev
|
* @ingroup udev
|
||||||
*/
|
*/
|
||||||
EAPI Eudev_Watch *
|
EAPI Eudev_Watch *
|
||||||
e_udev_watch_add(Eudev_Type type, void(*func)(const char *, void *, Eudev_Watch *), void *user_data)
|
e_udev_watch_add(Eudev_Type type, void(*func)(const char *, const char *, void *, Eudev_Watch *), void *user_data)
|
||||||
{
|
{
|
||||||
struct udev *udev;
|
struct udev *udev;
|
||||||
struct udev_monitor *mon;
|
struct udev_monitor *mon;
|
||||||
|
|
Loading…
Reference in New Issue