On Thu, 7 Oct 2010 07:53:11 +0900 Carsten Haitzler (The Rasterman) <ras...@rasterman.com> said:
i fixed it for you... spank! > On Mon, 4 Oct 2010 23:33:23 -0700 "Enlightenment SVN" > <no-re...@enlightenment.org> said: > > along the way with all your efm commits here you broke removable device > storage. devices appear in e17 - but they mount "/" when you open them up (ie > u see /usr, /bin, /lib, /tmp etc. from /). > > > Log: > > complete rewrite of all includes and file splitting to completely abstract > > dbus out of efm Author: discomfitor > > Date: 2010-10-04 23:33:23 -0700 (Mon, 04 Oct 2010) > > New Revision: 53051 > > > > Added: > > trunk/e/src/bin/e_fm/Makefile.am trunk/e/src/bin/e_fm/e_fm_main.h > > trunk/e/src/bin/e_fm/e_fm_main_dbus.c trunk/e/src/bin/e_fm/e_fm_main_dbus.h > > trunk/e/src/bin/e_fm_shared_codec.c trunk/e/src/bin/e_fm_shared_codec.h > > trunk/e/src/bin/e_fm_shared_dbus.c trunk/e/src/bin/e_fm_shared_dbus.h > > trunk/e/src/bin/e_fm_shared_types.h Removed: trunk/e/src/bin/e_fm_shared.h > > Modified: trunk/e/src/bin/Makefile.am trunk/e/src/bin/e_fm.c > > trunk/e/src/bin/e_fm.h trunk/e/src/bin/e_fm/e_fm_ipc.c > > trunk/e/src/bin/e_fm/e_fm_ipc.h trunk/e/src/bin/e_fm/e_fm_main.c > > trunk/e/src/bin/e_fm_dbus.c > > > > Modified: trunk/e/src/bin/Makefile.am > > =================================================================== > > --- trunk/e/src/bin/Makefile.am 2010-10-05 06:33:19 UTC (rev 53050) > > +++ trunk/e/src/bin/Makefile.am 2010-10-05 06:33:23 UTC (rev 53051) > > @@ -159,7 +159,9 @@ > > e_exec.h \ > > e_widget_font_preview.h \ > > e_fm_custom.h \ > > -e_fm_shared.h \ > > +e_fm_shared_types.h \ > > +e_fm_shared_codec.h \ > > +e_fm_shared_dbus.h \ > > e_config_data.h \ > > e_intl_data.h \ > > e_toolbar.h \ > > @@ -277,6 +279,8 @@ > > e_int_border_prop.c \ > > e_entry_dialog.c \ > > e_fm.c \ > > +e_fm_shared_codec.c \ > > +e_fm_shared_dbus.c \ > > e_fm_dbus.c \ > > e_fm_op_registry.c \ > > e_widget_scrollframe.c \ > > > > Modified: trunk/e/src/bin/e_fm/e_fm_ipc.c > > =================================================================== > > --- trunk/e/src/bin/e_fm/e_fm_ipc.c 2010-10-05 06:33:19 UTC (rev > > 53050) +++ trunk/e/src/bin/e_fm/e_fm_ipc.c 2010-10-05 06:33:23 UTC > > (rev 53051) @@ -33,17 +33,12 @@ > > #include <Evas.h> > > #include <Efreet.h> > > #include <Eet.h> > > -#include <E_DBus.h> > > -#ifdef HAVE_EUKIT > > -#include <E_Ukit.h> > > -#else > > -#include <E_Hal.h> > > -#endif > > + > > #include <eina_stringshare.h> > > > > #include "e.h" > > #include "e_fm_ipc.h" > > - > > +//#include "e_fm_shared_c.h" > > #include "e_fm_op.h" > > > > > > @@ -118,7 +113,7 @@ > > int x,y; > > }; > > > > -#include "e_fm_shared.h" > > + > > /* local subsystem globals */ > > Ecore_Ipc_Server *_e_fm_ipc_server = NULL; > > > > > > Modified: trunk/e/src/bin/e_fm/e_fm_ipc.h > > =================================================================== > > --- trunk/e/src/bin/e_fm/e_fm_ipc.h 2010-10-05 06:33:19 UTC (rev > > 53050) +++ trunk/e/src/bin/e_fm/e_fm_ipc.h 2010-10-05 06:33:23 UTC > > (rev 53051) @@ -1,6 +1,8 @@ > > #ifndef E_FM_IPC_H > > #define E_FM_IPC_H > > > > +#include "e_fm_shared_types.h" > > + > > int _e_fm_ipc_init(void); > > Eina_Bool _e_fm_ipc_slave_data_cb(void *data, int type, void *event); > > Eina_Bool _e_fm_ipc_slave_error_cb(void *data, int type, void *event); > > > > Modified: trunk/e/src/bin/e_fm/e_fm_main.c > > =================================================================== > > --- trunk/e/src/bin/e_fm/e_fm_main.c 2010-10-05 06:33:19 UTC (rev > > 53050) +++ trunk/e/src/bin/e_fm/e_fm_main.c 2010-10-05 06:33:23 UTC > > (rev 53051) @@ -42,16 +42,8 @@ > > #include <Ecore.h> > > #include <Ecore_Ipc.h> > > #include <Ecore_File.h> > > -#include <Evas.h> > > -#include <Efreet.h> > > #include <Eet.h> > > -#include <E_DBus.h> > > -#ifdef HAVE_EUKIT > > -#include <E_Ukit.h> > > -#else > > -#include <E_Hal.h> > > -#endif > > -#include <eina_stringshare.h> > > +#include <Evas.h> > > > > #define E_TYPEDEFS > > #include "e_config_data.h" > > @@ -60,57 +52,41 @@ > > #include "e_config_data.h" > > #include "e_fm_op.h" > > > > +/* if using ehal, functions will point to _e_fm_main_dbus_X > > + * if using eeze, functions will point to _e_fm_main_eeze_X > > + */ > > +#ifndef HAVE_EEZE_MOUNT > > +#include "e_fm_main_dbus.h" > > +#include "e_fm_shared_dbus.h" > > +#define _E_FM(FUNC) _e_fm_main_dbus_##FUNC > > +#define _E_FM_SHARED(FUNC) _e_fm_shared_dbus_##FUNC > > +#else > > +#include "e_fm_main_eeze.h" > > +#define _E_FM(FUNC) _e_fm_main_eeze_##FUNC > > +#define _E_FM_SHARED(FUNC) _e_fm_shared_eeze_##FUNC > > +#endif > > + > > /* FIXME: things to add to the slave enlightenment_fm process and ipc to e: > > * > > * * reporting results of fop's (current status - what has been don, what > > failed etc.) > > - * * dbus removable device monitoring (in e17 itself now via ecore_dbus - > > move to enlightenment_fm and ipc removable device add/del and anything else) > > + * * dbus removable device monitoring (in e17 itself now via e_dbus - move > > to enlightenment_fm and ipc removable device add/del and anything else) > > * * mount/umount of removable devices (to go along with removable device > > support - put it in here and message back mount success/failure and where it > > is now mounted - remove from e17 itself) > > * > > */ > > -static E_DBus_Signal_Handler *_hal_poll = NULL; > > > > #ifndef EAPI > > #define EAPI > > #endif > > > > -#define E_FM_SHARED_DATATYPES > > -#include "e_fm_shared.h" > > -#undef E_FM_SHARED_DATATYPES > > +#include "e_fm_main.h" > > +#include "e_fm_shared_types.h" > > +#include "e_fm_shared_codec.h" > > +#include "e_fm_ipc.h" > > > > + > > static void _e_fm_init(void); > > static void _e_fm_shutdown(void); > > -static void _e_dbus_cb_dev_all(void *user_data, void *reply_data, DBusError > > *error); -static void _e_dbus_cb_dev_store(void *user_data, void > > *reply_data, DBusError *error); -static void _e_dbus_cb_dev_vol(void > > *user_data, void *reply_data, DBusError *error); -static void > > _e_dbus_cb_store_is(void *user_data, void *reply_data, DBusError *error); > > -static void _e_dbus_cb_vol_is(void *user_data, void *reply_data, DBusError > > *error); -static void _e_dbus_cb_dev_add(void *data, DBusMessage *msg); > > -static void _e_dbus_cb_dev_del(void *data, DBusMessage *msg); -static void > > _e_dbus_cb_cap_add(void *data, DBusMessage *msg); -static void > > _e_dbus_cb_prop_modified(void *data, DBusMessage *msg); -static void > > _e_dbus_cb_store_prop(void *data, void *reply_data, DBusError *error); > > -static void _e_dbus_cb_vol_prop(void *data, void *reply_data, DBusError > > *error); -static void _e_dbus_cb_vol_prop_mount_modified(void *data, void > > *reply_data, DBusError *error); -static void _e_dbus_cb_vol_mounted(void > > *user_data, void *method_return, DBusError *error); -static void > > _e_dbus_cb_vol_unmounted(void *user_data, void *method_return, DBusError > > *error); -static void _e_dbus_cb_vol_unmounted_before_eject(void *user_data, > > void *method_return, DBusError *error); -static Eina_Bool > > _e_dbus_vb_vol_ejecting_after_unmount(void *data); -static void > > _e_dbus_cb_vol_ejected(void *user_data, void *method_return, DBusError > > *error); -static int _e_dbus_format_error_msg(char **buf, E_Volume *v, > > DBusError *error); -static void _hal_test(void *data, DBusMessage *msg, > > DBusError *error); -static void _e_hal_poll(void *data, DBusMessage *msg); > > -static Eina_Bool _e_dbus_vol_mount_timeout(void *data); -static Eina_Bool > > _e_dbus_vol_unmount_timeout(void *data); -static Eina_Bool > > _e_dbus_vol_eject_timeout(void *data); - -#define E_FM_MOUNT_TIMEOUT 30.0 > > -#define E_FM_UNMOUNT_TIMEOUT 60.0 > > -#define E_FM_EJECT_TIMEOUT 15.0 > > - > > -static E_DBus_Connection *_e_dbus_conn = NULL; > > -extern Ecore_Ipc_Server *_e_fm_ipc_server; > > - > > /* contains: > > * _e_volume_edd > > * _e_storage_edd > > @@ -121,10 +97,7 @@ > > * _e_storage_volume_edd_init() > > * _e_storage_volume_edd_shutdown() > > */ > > -#define E_FM_SHARED_CODEC > > -#include "e_fm_shared.h" > > -#undef E_FM_SHARED_CODEC > > -#include "e_fm_ipc.h" > > + > > /* externally accessible functions */ > > int > > main(int argc, char **argv) > > @@ -169,6 +142,7 @@ > > } > > > > _e_fm_shutdown(); > > + _e_storage_volume_edd_shutdown(); > > ecore_ipc_shutdown(); > > ecore_file_shutdown(); > > ecore_shutdown(); > > @@ -178,917 +152,60 @@ > > static void > > _e_fm_init(void) > > { > > - e_dbus_init(); > > - e_hal_init(); > > - _e_dbus_conn = e_dbus_bus_get(DBUS_BUS_SYSTEM); > > - /* previously, this assumed that if dbus was running, hal was running. > > */ > > - if (_e_dbus_conn) > > - e_dbus_get_name_owner(_e_dbus_conn, E_HAL_SENDER, _hal_test, NULL); > > + _E_FM(init)(); > > } > > > > static void > > _e_fm_shutdown(void) > > { > > - if (_e_dbus_conn) > > - e_dbus_connection_close(_e_dbus_conn); > > - _e_storage_volume_edd_shutdown(); > > - e_hal_shutdown(); > > - e_dbus_shutdown(); > > + _E_FM(shutdown)(); > > } > > > > -static void > > -_e_hal_poll(void *data __UNUSED__, DBusMessage *msg) > > +EAPI void > > +e_volume_mount(E_Volume *v) > > { > > - DBusError err; > > - const char *name, *from, *to; > > - > > - dbus_error_init(&err); > > - if (!dbus_message_get_args(msg, &err, > > - DBUS_TYPE_STRING, &name, > > - DBUS_TYPE_STRING, &from, > > - DBUS_TYPE_STRING, &to, > > - DBUS_TYPE_INVALID)) > > - dbus_error_free(&err); > > - > > - printf("name: %s\nfrom: %s\nto: %s\n", name, from, to); > > - if ((name) && !strcmp(name, E_HAL_SENDER)) > > - _hal_test(NULL, NULL, NULL); > > + _E_FM(volume_mount)(v); > > } > > > > -static void > > -_hal_test(void *data __UNUSED__, DBusMessage *msg __UNUSED__, DBusError > > *error) -{ > > - if ((error) && (dbus_error_is_set(error))) > > - { > > - dbus_error_free(error); > > - if (!_hal_poll) > > - _hal_poll = > > - e_dbus_signal_handler_add(_e_dbus_conn, > > - E_DBUS_FDO_BUS, E_DBUS_FDO_PATH, > > - E_DBUS_FDO_INTERFACE, > > - "NameOwnerChanged", _e_hal_poll, NULL); > > - return; > > - } > > - if (_hal_poll) > > - e_dbus_signal_handler_del(_e_dbus_conn, _hal_poll); > > > > - e_hal_manager_get_all_devices(_e_dbus_conn, _e_dbus_cb_dev_all, NULL); > > - e_hal_manager_find_device_by_capability(_e_dbus_conn, "storage", > > - _e_dbus_cb_dev_store, NULL); > > - e_hal_manager_find_device_by_capability(_e_dbus_conn, "volume", > > - _e_dbus_cb_dev_vol, NULL); > > - > > - e_dbus_signal_handler_add(_e_dbus_conn, E_HAL_SENDER, > > - E_HAL_MANAGER_PATH, > > - E_HAL_MANAGER_INTERFACE, > > - "DeviceAdded", _e_dbus_cb_dev_add, NULL); > > - e_dbus_signal_handler_add(_e_dbus_conn, E_HAL_SENDER, > > - E_HAL_MANAGER_PATH, > > - E_HAL_MANAGER_INTERFACE, > > - "DeviceRemoved", _e_dbus_cb_dev_del, NULL); > > - e_dbus_signal_handler_add(_e_dbus_conn, E_HAL_SENDER, > > - E_HAL_MANAGER_PATH, > > - E_HAL_MANAGER_INTERFACE, > > - "NewCapability", _e_dbus_cb_cap_add, NULL); > > -} > > - > > -static void > > -_e_dbus_cb_dev_all(void *user_data __UNUSED__, void *reply_data, DBusError > > *error) -{ > > - E_Hal_Manager_Get_All_Devices_Return *ret = reply_data; > > - Eina_List *l; > > - char *udi; > > - > > - if (!ret || !ret->strings) return; > > - > > - if (dbus_error_is_set(error)) > > - { > > - dbus_error_free(error); > > - return; > > - } > > - > > - EINA_LIST_FOREACH(ret->strings, l, udi) > > - { > > -// printf("DB INIT DEV+: %s\n", udi); > > - e_hal_device_query_capability(_e_dbus_conn, udi, "storage", > > - _e_dbus_cb_store_is, (void*)eina_stringshare_add(udi)); > > - e_hal_device_query_capability(_e_dbus_conn, udi, "volume", > > - _e_dbus_cb_vol_is, (void*)eina_stringshare_add(udi)); > > - } > > -} > > - > > -static void > > -_e_dbus_cb_dev_store(void *user_data __UNUSED__, void *reply_data, > > DBusError *error) -{ > > - E_Hal_Manager_Find_Device_By_Capability_Return *ret = reply_data; > > - Eina_List *l; > > - char *device; > > - > > - if (!ret || !ret->strings) return; > > - > > - if (dbus_error_is_set(error)) > > - { > > - dbus_error_free(error); > > - return; > > - } > > - > > - EINA_LIST_FOREACH(ret->strings, l, device) > > - { > > -// printf("DB STORE+: %s\n", device); > > - e_storage_add(device); > > - } > > -} > > - > > -static void > > -_e_dbus_cb_dev_vol(void *user_data __UNUSED__, void *reply_data, DBusError > > *error) -{ > > - E_Hal_Manager_Find_Device_By_Capability_Return *ret = reply_data; > > - Eina_List *l; > > - char *device; > > - > > - if (!ret || !ret->strings) return; > > - > > - if (dbus_error_is_set(error)) > > - { > > - dbus_error_free(error); > > - return; > > - } > > - > > - EINA_LIST_FOREACH(ret->strings, l, device) > > - { > > -// printf("DB VOL+: %s\n", device); > > - e_volume_add(device, 1); > > - } > > -} > > - > > -static void > > -_e_dbus_cb_store_is(void *user_data, void *reply_data, DBusError *error) > > -{ > > - char *udi = user_data; > > - E_Hal_Device_Query_Capability_Return *ret = reply_data; > > - > > - if (dbus_error_is_set(error)) > > - { > > - dbus_error_free(error); > > - goto error; > > - } > > - > > - if (ret && ret->boolean) > > - { > > -// printf("DB STORE IS+: %s\n", udi); > > - e_storage_add(udi); > > - } > > - > > - error: > > - eina_stringshare_del(udi); > > -} > > - > > -static void > > -_e_dbus_cb_vol_is(void *user_data, void *reply_data, DBusError *error) > > -{ > > - char *udi = user_data; > > - E_Hal_Device_Query_Capability_Return *ret = reply_data; > > - > > - if (dbus_error_is_set(error)) > > - { > > - dbus_error_free(error); > > - goto error; > > - } > > - > > - if (ret && ret->boolean) > > - { > > -// printf("DB VOL IS+: %s\n", udi); > > - e_volume_add(udi, 0); > > - } > > - > > - error: > > - eina_stringshare_del(udi); > > -} > > - > > -static void > > -_e_dbus_cb_dev_add(void *data __UNUSED__, DBusMessage *msg) > > -{ > > - DBusError err; > > - char *udi = NULL; > > - > > - dbus_error_init(&err); > > - dbus_message_get_args(msg, &err, DBUS_TYPE_STRING, &udi, > > DBUS_TYPE_INVALID); > > - if (!udi) return; > > - e_hal_device_query_capability(_e_dbus_conn, udi, "storage", > > - _e_dbus_cb_store_is, (void*) > > eina_stringshare_add(udi)); > > - e_hal_device_query_capability(_e_dbus_conn, udi, "volume", > > - _e_dbus_cb_vol_is, (void*) > > eina_stringshare_add(udi)); -} > > - > > -static void > > -_e_dbus_cb_dev_del(void *data __UNUSED__, DBusMessage *msg) > > -{ > > - DBusError err; > > - char *udi; > > - > > - dbus_error_init(&err); > > - > > - dbus_message_get_args(msg, > > - &err, DBUS_TYPE_STRING, > > - &udi, DBUS_TYPE_INVALID); > > -// printf("DB DEV-: %s\n", udi); > > - e_storage_del(udi); > > - e_volume_del(udi); > > -} > > - > > -static void > > -_e_dbus_cb_cap_add(void *data __UNUSED__, DBusMessage *msg) > > -{ > > - DBusError err; > > - char *udi, *capability; > > - > > - dbus_error_init(&err); > > - > > - dbus_message_get_args(msg, > > - &err, DBUS_TYPE_STRING, > > - &udi, DBUS_TYPE_STRING, > > - &capability, DBUS_TYPE_INVALID); > > - if (!strcmp(capability, "storage")) > > - { > > -// printf("DB STORE CAP+: %s\n", udi); > > - e_storage_add(udi); > > - } > > -} > > - > > -static void > > -_e_dbus_cb_prop_modified(void *data, DBusMessage *msg) > > -{ > > - E_Volume *v; > > - DBusMessageIter iter, sub, subsub; > > - struct { > > - const char *name; > > - int added; > > - int removed; > > - } prop; > > - int num_changes = 0, i; > > - > > - if (!(v = data)) return; > > - > > - if (dbus_message_get_error_name(msg)) > > - { > > - printf("DBUS ERROR: %s\n", dbus_message_get_error_name(msg)); > > - return; > > - } > > - if (!dbus_message_iter_init(msg, &iter)) return; > > - > > - if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_INT32) return; > > - dbus_message_iter_get_basic(&iter, &num_changes); > > - if (num_changes == 0) return; > > - > > - dbus_message_iter_next(&iter); > > - if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_ARRAY) return; > > - dbus_message_iter_recurse(&iter, &sub); > > - > > - for (i = 0; i < num_changes; i++, dbus_message_iter_next(&sub)) > > - { > > - dbus_message_iter_recurse(&sub, &subsub); > > - > > - if (dbus_message_iter_get_arg_type(&subsub) != DBUS_TYPE_STRING) > > break; > > - dbus_message_iter_get_basic(&subsub, &(prop.name)); > > - if (!strcmp(prop.name, "volume.mount_point")) > > - { > > - e_hal_device_get_all_properties(_e_dbus_conn, v->udi, > > - > > _e_dbus_cb_vol_prop_mount_modified, > > - v); > > - return; > > - } > > - > > - dbus_message_iter_next(&subsub); > > - dbus_message_iter_next(&subsub); > > - } > > -} > > - > > -static void > > -_e_dbus_cb_store_prop(void *data, void *reply_data, DBusError *error) > > -{ > > - E_Storage *s = data; > > - E_Hal_Properties *ret = reply_data; > > - int err = 0; > > - > > - if (!ret) goto error; > > - > > - if (dbus_error_is_set(error)) > > - { > > - dbus_error_free(error); > > - goto error; > > - } > > - > > - s->bus = e_hal_property_string_get(ret, "storage.bus", &err); > > - if (err) goto error; > > - s->bus = eina_stringshare_add(s->bus); > > - s->drive_type = e_hal_property_string_get(ret, "storage.drive_type", > > &err); > > - if (err) goto error; > > - s->drive_type = eina_stringshare_add(s->drive_type); > > - s->model = e_hal_property_string_get(ret, "storage.model", &err); > > - if (err) goto error; > > - s->model = eina_stringshare_add(s->model); > > - s->vendor = e_hal_property_string_get(ret, "storage.vendor", &err); > > - if (err) goto error; > > - s->vendor = eina_stringshare_add(s->vendor); > > - s->serial = e_hal_property_string_get(ret, "storage.serial", &err); > > -// if (err) goto error; > > - if (err) printf("Error getting serial for %s\n", s->udi); > > - s->serial = eina_stringshare_add(s->serial); > > - > > - s->removable = e_hal_property_bool_get(ret, "storage.removable", &err); > > - > > - if (s->removable) > > - { > > - s->media_available = e_hal_property_bool_get(ret, > > "storage.removable.media_available", &err); > > - s->media_size = e_hal_property_uint64_get(ret, > > "storage.removable.media_size", &err); > > - } > > - > > - s->requires_eject = e_hal_property_bool_get(ret, > > "storage.requires_eject", &err); > > - s->hotpluggable = e_hal_property_bool_get(ret, "storage.hotpluggable", > > &err); > > - s->media_check_enabled = e_hal_property_bool_get(ret, > > "storage.media_check_enabled", &err); > > - > > - s->icon.drive = e_hal_property_string_get(ret, "storage.icon.drive", > > &err); > > - s->icon.drive = eina_stringshare_add(s->icon.drive); > > - s->icon.volume = e_hal_property_string_get(ret, "storage.icon.volume", > > &err); > > - s->icon.volume = eina_stringshare_add(s->icon.volume); > > - > > -// printf("++STO:\n udi: %s\n bus: %s\n drive_type: %s\n model: %s\n > > vendor: %s\n serial: %s\n icon.drive: %s\n icon.volume: %s\n\n", s->udi, > > s->bus, s->drive_type, s->model, s->vendor, s->serial, s->icon.drive, > > s->icon.volume); > > - s->validated = EINA_TRUE; > > - { > > - void *msg_data; > > - int msg_size; > > - > > - msg_data = eet_data_descriptor_encode(_e_storage_edd, s, > > &msg_size); > > - if (msg_data) > > - { > > - ecore_ipc_server_send(_e_fm_ipc_server, > > - 6/*E_IPC_DOMAIN_FM*/, > > - E_FM_OP_STORAGE_ADD, > > - 0, 0, 0, msg_data, msg_size); > > - free(msg_data); > > - } > > - } > > - return; > > - > > - error: > > -// printf("ERR %s\n", s->udi); > > - e_storage_del(s->udi); > > -} > > - > > -static Eina_List *_e_stores = NULL; > > - > > -EAPI E_Storage * > > -e_storage_add(const char *udi) > > -{ > > - E_Storage *s; > > - > > - if (!udi) return NULL; > > - if (e_storage_find(udi)) return NULL; > > - s = calloc(1, sizeof(E_Storage)); > > - if (!s) return NULL; > > - s->udi = eina_stringshare_add(udi); > > - _e_stores = eina_list_append(_e_stores, s); > > - e_hal_device_get_all_properties(_e_dbus_conn, s->udi, > > - _e_dbus_cb_store_prop, s); > > - return s; > > -} > > - > > EAPI void > > -e_storage_del(const char *udi) > > +e_volume_unmount(E_Volume *v) > > { > > - E_Storage *s; > > - > > - s = e_storage_find(udi); > > - if (!s) return; > > - if (s->validated) > > - { > > -// printf("--STO %s\n", s->udi); > > - ecore_ipc_server_send(_e_fm_ipc_server, > > - 6/*E_IPC_DOMAIN_FM*/, > > - E_FM_OP_STORAGE_DEL, > > - 0, 0, 0, s->udi, strlen(s->udi) + 1); > > - } > > - _e_stores = eina_list_remove(_e_stores, s); > > - _e_storage_free(s); > > + _E_FM(volume_unmount)(v); > > } > > > > -E_Storage * > > -e_storage_find(const char *udi) > > -{ > > - Eina_List *l; > > - E_Storage *s; > > - > > - EINA_LIST_FOREACH(_e_stores, l, s) > > - { > > - if (!strcmp(udi, s->udi)) return s; > > - } > > - return NULL; > > -} > > - > > -static void > > -_e_dbus_cb_vol_prop(void *data, void *reply_data, DBusError *error) > > -{ > > - E_Volume *v = data; > > - E_Storage *s = NULL; > > - E_Hal_Device_Get_All_Properties_Return *ret = reply_data; > > - int err = 0; > > - const char *str = NULL; > > - > > - if (!ret) goto error; > > - if (dbus_error_is_set(error)) > > - { > > - dbus_error_free(error); > > - goto error; > > - } > > - > > - /* skip volumes with volume.ignore set */ > > - if (e_hal_property_bool_get(ret, "volume.ignore", &err) || err) > > - goto error; > > - > > - /* skip volumes that aren't filesystems */ > > - str = e_hal_property_string_get(ret, "volume.fsusage", &err); > > - if (err || !str) goto error; > > - if (strcmp(str, "filesystem")) goto error; > > - str = NULL; > > - > > - v->uuid = e_hal_property_string_get(ret, "volume.uuid", &err); > > - if (err) goto error; > > - v->uuid = eina_stringshare_add(v->uuid); > > - > > - v->label = e_hal_property_string_get(ret, "volume.label", &err); > > -// if (err) goto error; > > - v->label = eina_stringshare_add(v->label); > > - > > - v->fstype = e_hal_property_string_get(ret, "volume.fstype", &err); > > -// if (err) goto error; > > - v->fstype = eina_stringshare_add(v->fstype); > > - > > - v->size = e_hal_property_uint64_get(ret, "volume.size", &err); > > - > > - v->mounted = e_hal_property_bool_get(ret, "volume.is_mounted", &err); > > - if (err) goto error; > > - > > - v->partition = e_hal_property_bool_get(ret, "volume.is_partition", > > &err); > > - if (err) goto error; > > - > > - v->mount_point = e_hal_property_string_get(ret, "volume.mount_point", > > &err); > > - if (err) goto error; > > - v->mount_point = eina_stringshare_add(v->mount_point); > > - > > - if (v->partition) > > - { > > - v->partition_number = e_hal_property_int_get(ret, > > "volume.partition.number", NULL); > > - v->partition_label = e_hal_property_string_get(ret, > > "volume.partition.label", NULL); > > - v->partition_label = eina_stringshare_add(v->partition_label); > > - } > > - > > - v->parent = e_hal_property_string_get(ret, "info.parent", &err); > > - if ((!err) && (v->parent)) > > - { > > - s = e_storage_find(v->parent); > > - if (s) > > - { > > - v->storage = s; > > - s->volumes = eina_list_append(s->volumes, v); > > - } > > - } > > - v->parent = eina_stringshare_add(v->parent); > > - > > -// printf("++VOL:\n udi: %s\n uuid: %s\n fstype: %s\n size: %llu\n > > label: %s\n partition: %d\n partition_number: %d\n partition_label: %s\n > > mounted: %d\n mount_point: %s\n", v->udi, v->uuid, v->fstype, v->size, > > v->label, v->partition, v->partition_number, v->partition ? > > v->partition_label : "(not a partition)", v->mounted, v->mount_point); -// > > if (s) printf(" for storage: %s\n", s->udi); -// else printf(" storage > > unknown\n"); > > - v->validated = EINA_TRUE; > > - { > > - void *msg_data; > > - int msg_size; > > - > > - msg_data = eet_data_descriptor_encode(_e_volume_edd, v, &msg_size); > > - if (msg_data) > > - { > > - ecore_ipc_server_send(_e_fm_ipc_server, > > - 6/*E_IPC_DOMAIN_FM*/, > > - E_FM_OP_VOLUME_ADD, > > - 0, 0, 0, msg_data, msg_size); > > - free(msg_data); > > - } > > - } > > - return; > > - > > - error: > > - e_volume_del(v->udi); > > - return; > > -} > > - > > -static int > > -_e_dbus_format_error_msg(char **buf, E_Volume *v, DBusError *error) > > -{ > > - int size, vu, vm, en; > > - char *tmp; > > - > > - vu = strlen(v->udi) + 1; > > - vm = strlen(v->mount_point) + 1; > > - en = strlen(error->name) + 1; > > - size = vu + vm + en + strlen(error->message) + 1; > > - tmp = *buf = malloc(size); > > - > > - strcpy(tmp, v->udi); > > - tmp += vu; > > - strcpy(tmp, v->mount_point); > > - tmp += vm; > > - strcpy(tmp, error->name); > > - tmp += en; > > - strcpy(tmp, error->message); > > - > > - return size; > > -} > > - > > -static void > > -_e_dbus_cb_vol_prop_mount_modified(void *data, void *reply_data, DBusError > > *error) -{ > > - E_Volume *v = data; > > - E_Hal_Device_Get_All_Properties_Return *ret = reply_data; > > - int err = 0; > > - > > - if (!ret) return; > > - if (dbus_error_is_set(error)) > > - { > > - char *buf; > > - int size; > > - > > - size = _e_dbus_format_error_msg(&buf, v, error); > > - if (v->mounted) > > - ecore_ipc_server_send(_e_fm_ipc_server, 6/*E_IPC_DOMAIN_FM*/, > > E_FM_OP_UNMOUNT_ERROR, > > - 0, 0, 0, buf, size); > > - else > > - ecore_ipc_server_send(_e_fm_ipc_server, 6/*E_IPC_DOMAIN_FM*/, > > E_FM_OP_MOUNT_ERROR, > > - 0, 0, 0, buf, size); > > - dbus_error_free(error); > > - free(buf); > > - return; > > - } > > - > > - v->mounted = e_hal_property_bool_get(ret, "volume.is_mounted", &err); > > - if (err) printf("HAL Error : can't get volume.is_mounted property"); > > - > > - if (v->mount_point) eina_stringshare_del(v->mount_point); > > - v->mount_point = e_hal_property_string_get(ret, "volume.mount_point", > > &err); > > - if (err) printf("HAL Error : can't get volume.is_mount_point property"); > > - v->mount_point = eina_stringshare_add(v->mount_point); > > - > > -// printf("**VOL udi: %s mount_point: %s mounted: %d\n", v->udi, > > v->mount_point, v->mounted); > > - { > > - char *buf; > > - int size; > > - > > - size = strlen(v->udi) + 1 + strlen(v->mount_point) + 1; > > - buf = alloca(size); > > - strcpy(buf, v->udi); > > - strcpy(buf + strlen(buf) + 1, v->mount_point); > > - if (v->mounted) > > - ecore_ipc_server_send(_e_fm_ipc_server, > > - 6/*E_IPC_DOMAIN_FM*/, > > - E_FM_OP_MOUNT_DONE, > > - 0, 0, 0, buf, size); > > - else > > - ecore_ipc_server_send(_e_fm_ipc_server, > > - 6/*E_IPC_DOMAIN_FM*/, > > - E_FM_OP_UNMOUNT_DONE, > > - 0, 0, 0, buf, size); > > - } > > - return; > > -} > > - > > -static Eina_List *_e_vols = NULL; > > - > > -EAPI E_Volume * > > -e_volume_add(const char *udi, char first_time) > > -{ > > - E_Volume *v; > > - > > - if (!udi) return NULL; > > - if (e_volume_find(udi)) return NULL; > > - v = calloc(1, sizeof(E_Volume)); > > - if (!v) return NULL; > > -// printf("VOL+ %s\n", udi); > > - v->udi = eina_stringshare_add(udi); > > - v->icon = NULL; > > - v->first_time = first_time; > > - _e_vols = eina_list_append(_e_vols, v); > > - e_hal_device_get_all_properties(_e_dbus_conn, v->udi, > > - _e_dbus_cb_vol_prop, v); > > - v->prop_handler = e_dbus_signal_handler_add(_e_dbus_conn, E_HAL_SENDER, > > - udi, > > - E_HAL_DEVICE_INTERFACE, > > - "PropertyModified", > > _e_dbus_cb_prop_modified, v); > > - v->guard = NULL; > > - > > - return v; > > -} > > - > > EAPI void > > -e_volume_del(const char *udi) > > +e_volume_eject(E_Volume *v) > > { > > - E_Volume *v; > > - > > - v = e_volume_find(udi); > > - if (!v) return; > > - if (v->guard) > > - { > > - ecore_timer_del(v->guard); > > - v->guard = NULL; > > - } > > - if (v->prop_handler) e_dbus_signal_handler_del(_e_dbus_conn, > > v->prop_handler); > > - if (v->validated) > > - { > > -// printf("--VOL %s\n", v->udi); > > - /* FIXME: send event of storage volume (disk) removed */ > > - ecore_ipc_server_send(_e_fm_ipc_server, > > - 6/*E_IPC_DOMAIN_FM*/, > > - E_FM_OP_VOLUME_DEL, > > - 0, 0, 0, v->udi, strlen(v->udi) + 1); > > - } > > - _e_vols = eina_list_remove(_e_vols, v); > > - _e_volume_free(v); > > + _E_FM(volume_eject)(v); > > } > > > > EAPI E_Volume * > > e_volume_find(const char *udi) > > { > > - Eina_List *l; > > - E_Volume *v; > > - > > - EINA_LIST_FOREACH(_e_vols, l, v) > > - { > > - if (!strcmp(udi, v->udi)) return v; > > - } > > - return NULL; > > + return _E_FM(volume_find)(udi); > > } > > > > -static Eina_Bool > > -_e_dbus_vol_mount_timeout(void *data) > > -{ > > - E_Volume *v = data; > > - DBusError error; > > - char *buf; > > - int size; > > - > > - v->guard = NULL; > > - dbus_pending_call_cancel(v->op); > > - error.name = "org.enlightenment.fm2.MountTimeout"; > > - error.message = "Unable to mount the volume with specified time-out."; > > - size = _e_dbus_format_error_msg(&buf, v, &error); > > - ecore_ipc_server_send(_e_fm_ipc_server, 6/*E_IPC_DOMAIN_FM*/, > > E_FM_OP_MOUNT_ERROR, > > - 0, 0, 0, buf, size); > > - free(buf); > > - > > - return ECORE_CALLBACK_CANCEL; > > -} > > - > > -static void > > -_e_dbus_cb_vol_mounted(void *user_data, void *method_return __UNUSED__, > > DBusError *error) -{ > > - E_Volume *v = user_data; > > - char *buf; > > - int size; > > - > > - if (v->guard) > > - { > > - ecore_timer_del(v->guard); > > - v->guard = NULL; > > - } > > - > > - if (dbus_error_is_set(error)) > > - { > > - size = _e_dbus_format_error_msg(&buf, v, error); > > - ecore_ipc_server_send(_e_fm_ipc_server, 6/*E_IPC_DOMAIN_FM*/, > > E_FM_OP_MOUNT_ERROR, > > - 0, 0, 0, buf, size); > > - dbus_error_free(error); > > - free(buf); > > - return; > > - } > > - > > -#if 0 > > - v->mounted = EINA_TRUE; > > -// printf("MOUNT: %s from %s\n", v->udi, v->mount_point); > > - size = strlen(v->udi) + 1 + strlen(v->mount_point) + 1; > > - buf = alloca(size); > > - strcpy(buf, v->udi); > > - strcpy(buf + strlen(buf) + 1, v->mount_point); > > - ecore_ipc_server_send(_e_fm_ipc_server, > > - 6/*E_IPC_DOMAIN_FM*/, > > - E_FM_OP_MOUNT_DONE, > > - 0, 0, 0, buf, size); > > -#endif > > -} > > - > > EAPI void > > -e_volume_mount(E_Volume *v) > > +e_storage_del(const char *udi) > > { > > - char buf[256]; > > - char buf2[256]; > > - const char *mount_point; > > - Eina_List *opt = NULL; > > - > > - if (!v || v->guard || !v->mount_point || strncmp(v->mount_point, > > "/media/", 7)) > > - return; > > - > > - mount_point = v->mount_point + 7; > > -// printf("mount %s %s [fs type = %s]\n", v->udi, v->mount_point, > > v->fstype); - > > - if ((!strcmp(v->fstype, "vfat")) || > > - (!strcmp(v->fstype, "ntfs")) > > - ) > > - { > > -#if !defined(__FreeBSD__) > > - snprintf(buf, sizeof(buf), "uid=%i", (int)getuid()); > > - opt = eina_list_append(opt, buf); > > -#endif > > - } > > - > > - if ((!strcmp(v->fstype, "vfat")) || > > - (!strcmp(v->fstype, "ntfs")) || > > - (!strcmp(v->fstype, "iso9660")) > > - ) > > - { > > - snprintf(buf2, sizeof(buf2), "utf8"); > > - opt = eina_list_append(opt, buf2); > > - } > > - else if ((!strcmp(v->fstype, "fat")) || > > - (!strcmp(v->fstype, "jfs")) > > -// (!strcmp(v->fstype, "udf")) > > - ) > > - { > > - snprintf(buf2, sizeof(buf2), "iocharset=utf8"); > > - opt = eina_list_append(opt, buf2); > > - } > > - > > - v->guard = ecore_timer_add(E_FM_MOUNT_TIMEOUT, > > _e_dbus_vol_mount_timeout, v); > > - v->op = e_hal_device_volume_mount(_e_dbus_conn, v->udi, mount_point, > > - v->fstype, opt, > > _e_dbus_cb_vol_mounted, v); > > - eina_list_free(opt); > > + _E_FM(storage_del)(udi); > > } > > > > -static Eina_Bool > > -_e_dbus_vol_unmount_timeout(void *data) > > +EAPI E_Storage * > > +e_storage_find(const char *udi) > > { > > - E_Volume *v = data; > > - DBusError error; > > - char *buf; > > - int size; > > - > > - v->guard = NULL; > > - dbus_pending_call_cancel(v->op); > > - error.name = "org.enlightenment.fm2.UnmountTimeout"; > > - error.message = "Unable to unmount the volume with specified time-out."; > > - size = _e_dbus_format_error_msg(&buf, v, &error); > > - ecore_ipc_server_send(_e_fm_ipc_server, 6/*E_IPC_DOMAIN_FM*/, > > E_FM_OP_UNMOUNT_ERROR, > > - 0, 0, 0, buf, size); > > - free(buf); > > - > > - return ECORE_CALLBACK_CANCEL; > > + return _E_FM(storage_find)(udi); > > } > > > > -static void > > -_e_dbus_cb_vol_unmounted(void *user_data, void *method_return __UNUSED__, > > DBusError *error) +void > > +_e_storage_free(E_Storage *s) > > { > > - E_Volume *v = user_data; > > - char *buf; > > - int size; > > - > > - if (v->guard) > > - { > > - ecore_timer_del(v->guard); > > - v->guard = NULL; > > - } > > - > > - if (dbus_error_is_set(error)) > > - { > > - size = _e_dbus_format_error_msg(&buf, v, error); > > - ecore_ipc_server_send(_e_fm_ipc_server, 6/*E_IPC_DOMAIN_FM*/, > > E_FM_OP_UNMOUNT_ERROR, > > - 0, 0, 0, buf, size); > > - dbus_error_free(error); > > - free(buf); > > - return; > > - } > > - > > -#if 0 > > - v->mounted = EINA_FALSE; > > -// printf("UNMOUNT: %s from %s\n", v->udi, v->mount_point); > > - size = strlen(v->udi) + 1 + strlen(v->mount_point) + 1; > > - buf = alloca(size); > > - strcpy(buf, v->udi); > > - strcpy(buf + strlen(buf) + 1, v->mount_point); > > - ecore_ipc_server_send(_e_fm_ipc_server, > > - 6/*E_IPC_DOMAIN_FM*/, > > - E_FM_OP_UNMOUNT_DONE, > > - 0, 0, 0, buf, size); > > -#endif > > + _E_FM_SHARED(storage_free)(s); > > } > > > > -EAPI void > > -e_volume_unmount(E_Volume *v) > > +void > > +_e_volume_free(E_Volume *v) > > { > > -// printf("unmount %s %s\n", v->udi, v->mount_point); > > - if (!v || v->guard) return; > > - > > - v->guard = ecore_timer_add(E_FM_UNMOUNT_TIMEOUT, > > _e_dbus_vol_unmount_timeout, v); > > - v->op = e_hal_device_volume_unmount(_e_dbus_conn, v->udi, NULL, > > - _e_dbus_cb_vol_unmounted, v); > > + _E_FM_SHARED(volume_free)(v); > > } > > - > > -static Eina_Bool > > -_e_dbus_vol_eject_timeout(void *data) > > -{ > > - E_Volume *v = data; > > - DBusError error; > > - char *buf; > > - int size; > > - > > - v->guard = NULL; > > - dbus_pending_call_cancel(v->op); > > - error.name = "org.enlightenment.fm2.EjectTimeout"; > > - error.message = "Unable to eject the media with specified time-out."; > > - size = _e_dbus_format_error_msg(&buf, v, &error); > > - ecore_ipc_server_send(_e_fm_ipc_server, 6/*E_IPC_DOMAIN_FM*/, > > E_FM_OP_EJECT_ERROR, > > - 0, 0, 0, buf, size); > > - free(buf); > > - > > - return ECORE_CALLBACK_CANCEL; > > -} > > - > > -static Eina_Bool > > -_e_dbus_vb_vol_ejecting_after_unmount(void *data) > > -{ > > - E_Volume *v = data; > > - > > - v->guard = ecore_timer_add(E_FM_EJECT_TIMEOUT, > > _e_dbus_vol_eject_timeout, v); > > - v->op = e_hal_device_volume_eject(_e_dbus_conn, v->udi, NULL, > > - _e_dbus_cb_vol_ejected, v); > > - > > - return ECORE_CALLBACK_CANCEL; > > -} > > - > > -static void > > -_e_dbus_cb_vol_unmounted_before_eject(void *user_data, void *method_return, > > DBusError *error) -{ > > - E_Volume *v = user_data; > > - char err; > > - > > - err = dbus_error_is_set(error) ? 1 : 0; > > - _e_dbus_cb_vol_unmounted(user_data, method_return, error); > > - > > - // delay is required for all message handlers were executed after > > unmount > > - if (!err) > > - ecore_timer_add(1.0, _e_dbus_vb_vol_ejecting_after_unmount, v); > > -} > > - > > -static void > > -_e_dbus_cb_vol_ejected(void *user_data, void *method_return __UNUSED__, > > DBusError *error) -{ > > - E_Volume *v = user_data; > > - char *buf; > > - int size; > > - > > - if (v->guard) > > - { > > - ecore_timer_del(v->guard); > > - v->guard = NULL; > > - } > > - > > - if (dbus_error_is_set(error)) > > - { > > - size = _e_dbus_format_error_msg(&buf, v, error); > > - ecore_ipc_server_send(_e_fm_ipc_server, 6/*E_IPC_DOMAIN_FM*/, > > E_FM_OP_EJECT_ERROR, > > - 0, 0, 0, buf, size); > > - dbus_error_free(error); > > - free(buf); > > - return; > > - } > > - > > - size = strlen(v->udi) + 1; > > - buf = alloca(size); > > - strcpy(buf, v->udi); > > - ecore_ipc_server_send(_e_fm_ipc_server, > > - 6/*E_IPC_DOMAIN_FM*/, > > - E_FM_OP_EJECT_DONE, > > - 0, 0, 0, buf, size); > > -} > > - > > -EAPI void > > -e_volume_eject(E_Volume *v) > > -{ > > - if (!v || v->guard) return; > > - > > - if (v->mounted) > > - { > > - v->guard = ecore_timer_add(E_FM_UNMOUNT_TIMEOUT, > > _e_dbus_vol_unmount_timeout, v); > > - v->op = e_hal_device_volume_unmount(_e_dbus_conn, v->udi, NULL, > > - > > _e_dbus_cb_vol_unmounted_before_eject, v); > > - } > > - else > > - { > > - v->guard = ecore_timer_add(E_FM_EJECT_TIMEOUT, > > _e_dbus_vol_eject_timeout, v); > > - v->op = e_hal_device_volume_eject(_e_dbus_conn, v->udi, NULL, > > - _e_dbus_cb_vol_ejected, v); > > - } > > -} > > > > Modified: trunk/e/src/bin/e_fm.c > > =================================================================== > > --- trunk/e/src/bin/e_fm.c 2010-10-05 06:33:19 UTC (rev 53050) > > +++ trunk/e/src/bin/e_fm.c 2010-10-05 06:33:23 UTC (rev 53051) > > @@ -449,10 +449,9 @@ > > * _e_storage_volume_edd_init() > > * _e_storage_volume_edd_shutdown() > > */ > > -#define E_FM_SHARED_CODEC > > -#include "e_fm_shared.h" > > -#undef E_FM_SHARED_CODEC > > > > +#include "e_fm_shared_codec.h" > > + > > static inline Eina_Bool > > _e_fm2_icon_realpath(const E_Fm2_Icon *ic, char *buf, int buflen) > > { > > @@ -2914,7 +2913,7 @@ > > { > > E_Storage *s; > > > > - s = eet_data_descriptor_decode(_e_storage_edd, e->data, > > e->size); > > + s = _e_fm_shared_codec_storage_decode(e->data, e->size); > > if (s) e_fm2_dbus_storage_add(s); > > } > > break; > > @@ -2936,7 +2935,7 @@ > > { > > E_Volume *v; > > > > - v = eet_data_descriptor_decode(_e_volume_edd, e->data, > > e->size); > > + v = _e_fm_shared_codec_volume_decode(e->data, e->size); > > if (v) > > { > > e_fm2_dbus_volume_add(v); > > > > Modified: trunk/e/src/bin/e_fm.h > > =================================================================== > > --- trunk/e/src/bin/e_fm.h 2010-10-05 06:33:19 UTC (rev 53050) > > +++ trunk/e/src/bin/e_fm.h 2010-10-05 06:33:23 UTC (rev 53051) > > @@ -47,9 +47,7 @@ > > typedef struct _E_Fm2_Icon E_Fm2_Icon; > > typedef struct _E_Fm2_Icon_Info E_Fm2_Icon_Info; > > > > -#define E_FM_SHARED_DATATYPES > > -#include "e_fm_shared.h" > > -#undef E_FM_SHARED_DATATYPES > > +#include "e_fm_shared_types.h" > > > > #else > > #ifndef E_FM_H > > > > Modified: trunk/e/src/bin/e_fm_dbus.c > > =================================================================== > > --- trunk/e/src/bin/e_fm_dbus.c 2010-10-05 06:33:19 UTC (rev 53050) > > +++ trunk/e/src/bin/e_fm_dbus.c 2010-10-05 06:33:23 UTC (rev 53051) > > @@ -1,9 +1,7 @@ > > #include "e_fm_dbus.h" > > +#include "e_fm_shared_codec.h" > > +#include "e_fm_shared_dbus.h" > > > > -#define E_FM_SHARED_CODEC > > -#include "e_fm_shared.h" > > -#undef E_FM_SHARED_CODEC > > - > > static void _e_fm2_volume_write(E_Volume *v) EINA_ARG_NONNULL(1); > > static void _e_fm2_volume_erase(E_Volume *v) EINA_ARG_NONNULL(1); > > static void _e_fm2_dbus_mount_free(E_Fm2_Mount *m); EINA_ARG_NONNULL(1); > > @@ -74,7 +72,7 @@ > > { > > // printf("STO- %s\n", s->udi); > > _e_stores = eina_list_remove(_e_stores, s); > > - _e_storage_free(s); > > + _e_fm_shared_dbus_storage_free(s); > > } > > > > EAPI E_Storage * > > @@ -279,7 +277,7 @@ > > _e_fm2_dbus_unmount_ok(m); > > _e_fm2_dbus_mount_free(m); > > } > > - _e_volume_free(v); > > + _e_fm_shared_dbus_volume_free(v); > > } > > > > static void > > > > > > ------------------------------------------------------------------------------ > > Beautiful is writing same markup. Internet Explorer 9 supports > > standards for HTML5, CSS3, SVG 1.1, ECMAScript5, and DOM L2 & L3. > > Spend less time writing and rewriting code and more time creating great > > experiences on the web. Be a part of the beta today. > > http://p.sf.net/sfu/beautyoftheweb > > _______________________________________________ > > enlightenment-svn mailing list > > enlightenment-...@lists.sourceforge.net > > https://lists.sourceforge.net/lists/listinfo/enlightenment-svn > > > > > -- > ------------- Codito, ergo sum - "I code, therefore I am" -------------- > The Rasterman (Carsten Haitzler) ras...@rasterman.com > > > ------------------------------------------------------------------------------ > Beautiful is writing same markup. Internet Explorer 9 supports > standards for HTML5, CSS3, SVG 1.1, ECMAScript5, and DOM L2 & L3. > Spend less time writing and rewriting code and more time creating great > experiences on the web. Be a part of the beta today. > http://p.sf.net/sfu/beautyoftheweb > _______________________________________________ > enlightenment-devel mailing list > enlightenment-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/enlightenment-devel > -- ------------- Codito, ergo sum - "I code, therefore I am" -------------- The Rasterman (Carsten Haitzler) ras...@rasterman.com ------------------------------------------------------------------------------ Beautiful is writing same markup. Internet Explorer 9 supports standards for HTML5, CSS3, SVG 1.1, ECMAScript5, and DOM L2 & L3. Spend less time writing and rewriting code and more time creating great experiences on the web. Be a part of the beta today. http://p.sf.net/sfu/beautyoftheweb _______________________________________________ enlightenment-devel mailing list enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel