diff --git a/src/e_mod_places.c b/src/e_mod_places.c index 272c04e..fabee30 100644 --- a/src/e_mod_places.c +++ b/src/e_mod_places.c @@ -19,6 +19,7 @@ static void _places_volume_object_update(Volume *vol, Evas_Object *obj); static void _places_run_fm(void *data, E_Menu *m, E_Menu_Item *mi); + /* Edje callbacks */ void _places_icon_activated_cb(void *data, Evas_Object *o, const char *emission, const char *source); void _places_custom_icon_activated_cb(void *data, Evas_Object *o, const char *emission, const char *source); @@ -72,8 +73,9 @@ places_volume_list_get(void) { return volumes; } + Volume * -places_volume_add(const char *id, int dont_auto_mount, int dont_auto_open) +places_volume_add(const char *id, Eina_Bool first_time) { Volume *v; if (!id) return NULL; @@ -92,12 +94,8 @@ places_volume_add(const char *id, int dont_auto_mount, int dont_auto_open) v->drive_type = ""; v->model = ""; v->bus = ""; - - if (places_conf->auto_mount && !dont_auto_mount) - v->to_mount = EINA_TRUE; - - if (places_conf->auto_open && !dont_auto_open) - v->force_open = EINA_TRUE; + v->to_mount = (places_conf->auto_mount && !first_time); + v->force_open = (places_conf->auto_open && !first_time); volumes = eina_list_append(volumes, v); @@ -189,6 +187,13 @@ places_volume_update(Volume *vol) EINA_LIST_FOREACH(vol->objs, l, obj) _places_volume_object_update(vol, obj); + // mount the volume if needed + if (vol->to_mount && !vol->mounted) + { + places_volume_mount(vol); + vol->to_mount = EINA_FALSE; + } + // the volume has been mounted as requested, open the fm if (vol->force_open && vol->mounted && vol->mount_point) { @@ -387,7 +392,7 @@ places_empty_box(Evas_Object *box) } void -places_mount_volume(Volume *vol) +places_volume_mount(Volume *vol) { Eina_List *opts = NULL; char buf[256]; @@ -676,7 +681,7 @@ _places_icon_activated_cb(void *data, Evas_Object *o, const char *emission, cons else { vol->force_open = EINA_TRUE; - places_mount_volume(vol); + places_volume_mount(vol); } } diff --git a/src/e_mod_places.h b/src/e_mod_places.h index 4a78e87..c96a1b4 100644 --- a/src/e_mod_places.h +++ b/src/e_mod_places.h @@ -46,7 +46,7 @@ struct _Volume void places_init(void); void places_shutdown(void); -Volume *places_volume_add(const char *id, int dont_auto_mount, int dont_auto_open); +Volume *places_volume_add(const char *id, Eina_Bool first_time); void places_volume_del(Volume *v); void places_volume_update(Volume *vol); Volume *places_volume_by_id_get(const char *id); diff --git a/src/e_mod_udisks.c b/src/e_mod_udisks.c index 1b46ab7..52ec68b 100644 --- a/src/e_mod_udisks.c +++ b/src/e_mod_udisks.c @@ -24,7 +24,7 @@ static void _places_udisks_all_devices_cb(void *user_data, void *reply_data, DBu static void _places_udisks_vol_prop_cb(void *data, void *reply_data, DBusError *error); static void _places_udisks_sto_prop_cb(void *data, void *reply_data, DBusError *error); -static Volume* _places_udisks_volume_add(const char *udi); +static Volume* _places_udisks_volume_add(const char *udi, Eina_Bool first_time); static void _places_udisks_mount_func(Volume *vol, Eina_List *opts); static void _places_udisks_unmount_func(Volume *vol, Eina_List *opts); static void _places_udisks_eject_func(Volume *vol, Eina_List *opts); @@ -173,7 +173,7 @@ _places_udisks_all_devices_cb(void *user_data, void *reply_data, DBusError *err) EINA_LIST_FOREACH(udisks_ret->strings, l, udi) { - v = _places_udisks_volume_add(udi); + v = _places_udisks_volume_add(udi, EINA_TRUE); e_udisks_get_all_properties(_places_udisks_conn, udi, _places_udisks_vol_prop_cb, v); } @@ -198,7 +198,7 @@ _places_udisks_device_add_cb(void *data, DBusMessage *msg) } printf("PLACES udisks: DeviceAdded [%s]\n", udi); - v = _places_udisks_volume_add(udi); + v = _places_udisks_volume_add(udi, EINA_FALSE); e_udisks_get_all_properties(_places_udisks_conn, udi, _places_udisks_vol_prop_cb, v); } @@ -425,7 +425,10 @@ _places_udisks_sto_prop_cb(void *data, void *reply_data, DBusError *error) v->valid = EINA_TRUE; // trigger a full redraw, the only way to show a new device places_update_all_gadgets(); - places_print_volume(v); // JUST FOR DEBUG will remove sooner or later + // the update is needed to trigger auto_mount/auto_open + places_volume_update(v); + // TODO JUST FOR DEBUG will remove sooner or later + places_print_volume(v); } else { @@ -436,11 +439,11 @@ _places_udisks_sto_prop_cb(void *data, void *reply_data, DBusError *error) /* Internals */ static Volume* -_places_udisks_volume_add(const char *udi) +_places_udisks_volume_add(const char *udi, Eina_Bool first_time) { Volume *v; - v = places_volume_add(udi, EINA_FALSE, EINA_FALSE); + v = places_volume_add(udi, first_time); if (!v) return NULL; v->mount_func = _places_udisks_mount_func;