<http://mail.jabber.org/pipermail/summit/2010-February/000528.html> describes a Google Talk extension which allows the client to ask the server to queue up presence updates rather than sending them to it immediately. This has the side-effect of reducing the frequency of the server's whitespace pings to about once every 30 minutes, rather than once every 30 seconds, which would fix <https://bugs.maemo.org/show_bug.cgi?id=8581>.
I have a branch of 0.8 which makes Gabble listen to an MCE event stating that the device has become inactive or active, and send the relevant commands to the server. It's Maemo-specific — we don't have a standard way to do this on the desktop — but hey.
One thing this branch doesn't do is replace our whitespace keepalive pings (which are sent less frequently than the GTalk server's pings) with the <flush/> command. I'm not sure whether that's a good idea, in any case. The radio's waking up every few minutes for the keepalives, so on the one hand we may as well; on the other hand, eds-backend-telepathy on Maemo 5 listens to this same MCE signal and doesn't push presence updates to the UI when the device is idle, so they'd be ignored anyway.
> +gabble_slacker_dispose (GObject *object)
Should chain up to the parent's dispose
> +gabble_slacker_finalize (GObject *object)
Should chain up to the parent's finalize, or just not exist
Otherwise, looks good to me.
(In reply to comment #2)
> > +gabble_slacker_dispose (GObject *object)
> Should chain up to the parent's dispose
> > +gabble_slacker_finalize (GObject *object)
> Should chain up to the parent's finalize, or just not exist
review+, ship it.
One minor comment:
+ ((GObjectClass *) gabble_slacker_parent_class)->dispose (object);
This assumes that the parent class *has* a dispose(). For dispose() that's OK, because its parent is GObject, which has an API guarantee that it will do certain things (e.g. kill off weak refs) when disposed, hence it must continue to have a dispose() forever; but it's not OK for (say) constructed(), so I've been using a "check before chaining up" pattern consistently for all similar functions.
(For instance, see
(In reply to comment #4)
> review+, ship it.
Shipped to 0.8.
> One minor comment:
> + ((GObjectClass *) gabble_slacker_parent_class)->dispose (object);
> This assumes that the parent class *has* a dispose().
Yes, I know.