version 0.5.0 (April 20, 2006): * Significantly rewrote libgalago to be glib-based. * Now requires D-BUS 0.36 or higher. * Worked toward making libgalago more thread-safe. * Improved the unit tests. * Added some protocol documentation. * "Added" signals are no longer blocked when retrieving a list of new objects. Updated the docs to warn about potential problems in the users' code that they should know about. GLib port: - Requires glib 2.8 or higher. - Replaced the home-brewn object model with GObject. - Removed several utility functions and data structures in favor of the glib equivalents. - Replaced many custom or D-BUS data types with glib equivalents. - Worked to make the library easily bindable in most languages. - galago_glib_init() is no longer needed. - Removed galago_init_with_mainloop(). Users of toolkits with other mainloops should integrate the glib mainloop for now. - Removed the logging API. The glib logging API is now being used instead. Initialization and registration: - Changed galago_init() to take flags instead of a feed boolean. - Added an activation-less mode via the GALAGO_INIT_NO_ACTIVATION galago_init() flag, where callers can initiate the library without causing galago-daemon to be activated. - Improved re-registration when galago-daemon dies. This properly unregisters the client or feed when galago-daemon dies and then re-registers when it comes back up, without leaking memory. (Bug #34) - Fixed issues where D-BUS could crash when initializing and uninitializing Galago several times. (Bug #36) - Removed galago_set_exit_with_daemon() and galago_get_exit_with_daemon(). This caused deadlocks in some cases. Feeds will need to connect to the GalagoCore's "unregistered" signal and exit themselves. Object model: - Gave most objects GObject properties and property notifications. - Added support for D-BUS signatures to the objects. - Removed the "native" and "foreign" terms and replaced them with the more politically correct and easier to understand "local" and "remote." Objects that took a "native" boolean now take either a GALAGO_LOCAL or GALAGO_REMOTE flag. This is called its "origin." - Every object now has an origin set, which can be retrieved with galago_object_get_origin(). - D-BUS object paths are no longer computed in libgalago, leaving it up to galago-daemon. - Added base support for remote attributes. This is available on a per-subclass basis. Protocol: - Switched to requiring D-BUS 0.36 or higher. - Moved from our hacky fake arrays to true D-BUS arrays. - Encased such data as property values into VARIANT types. - Removed Avatar and Photo objects. - Added an Image object. - Renamed Account.SetPresence and Account.UnsetPresence to Account.CreatePresence and Account.RemovePresence. - Renamed PresenceSet and PresenceUnset signals to PresenceCreated and PresenceDeleted. GalagoAccount: - galago_account_new() has been removed. galago_service_create_account() should now be used. - galago_account_{set,get}_avatar() now takes/returns a GalagoImage *. - Merged the "connected" and "disconnected" signals into a "connection-state-changed" signal. - Renamed the presence-set signal to presence_created and presence_deleted. - Added support for setting and receiving remote object attributes. GalagoAvatar: - Removed in favor of GalagoImage. GalagoImage: - Added galago_image_new_from_file() and galago_image_new_from_data(). - Renamed galago_image_get_image_data() to galago_image_get_data(). - Removed galago_image_set_image_data(). GalagoImage is now immutable. GalagoPerson: - galago_person_new() has been removed. galago_create_person() should now be used. - galago_person_me_new() has been removed. The "me" person is persistent and can always be retrieved with galago_get_me(). - Clients can no longer create a foreign person. - Person UIDs are now optional, and should only be set when it's tied to a persistent source, such as a database. This allows clients to rely upon these UIDs. - Re-implemented the "account-added" and "account-removed" signals. - galago_person_{set,get}_photo() now takes/returns a GalagoImage *. - Added support for setting a custom priority account calculation function. To set this, connect to the "calc_priority_account" signal on galago_get_core() and return the priority account. If the handlers return NULL, the default calculation function is used. - Replaced the old person properties with the new remote object attributes. GalagoPhoto: - Removed in favor of GalagoImage. GalagoPresence: - galago_presence_new() has been removed. galago_account_create_presence() should now be used. - Moved to an idle model where instead of constantly updating the idle time length, we simply set the time the idle state began. This requires less work from the feed's side, reduces noise on the bus, and provides for more accurate idle time length calculations (since it's just current_time - began_idle_time). GalagoService: - galago_service_new() has been removed. galago_create_service() should now be used. - Clients can no longer create a foreign service. - galago_service_normalize() now returns a pre-allocated string. If you use this, make sure you're freeing the returned string when no longer in use. - Removed galago_add_service() and galago_remove_service(). GalagoStatus: - Added a GALAGO_STATUS_ATTR_MESSAGE define. GalagoValue: - This is now deprecated and shouldn't be used outside of libgalago and galago-daemon. In time, GValue will be used instead. - Fix a bug where galago_value_destroy() wasn't freeing string data. (Bug #26)