now everyone should use their hackergotchi as their avatar

I was doing the work to close #645921, so we can finally remove the legacy theme code from Empathy. This required rewriting the legacy themes as Adium themes, which once I came to understand how Adium themes work, was really not that difficult.

Then I started thinking what else could I do… so I decided to do this:

Planet GNOME Empathy Theme

It could stand for a little bit of tweaking, but that should be easy for someone to do. I realised what’s especially nice about using WebKit is that we’ve opened ourselves up to the whole world of HTML5 and CSS3 in our themes. Chat themes animated by CSS transitions anyone?

We’re still looking for someone to make a good default Empathy theme for GNOME 3 (#645920). I’m hoping that having ported the default themes to HTML should make it easier for someone to use one of them as a launching point.

For reference, Adium theme documentation:

Finding redundant GObject classes in Empathy

As part of a bugfix I did today1, I made a commit to remove a redundant class from Empathy, which made me wonder if there were any other redundant classes in Empathy. A quick grep of G_DEFINE_ told me there are some 116 classes in Empathy, so I wasn’t going to check them all by hand.

Instead I put together this script, which I share with you in case it’s useful, which basically checks for all classes defined with G_DEFINE_TYPE and then looks to see if anything with that namespace is used in another file. It generates false positives for classes that aren’t used outside the file they’re defined in, or classes that have different namespaces to the classname, but it produces a much more manageable list.

I did consider looking for unused symbols, but couldn’t work out an easy way to do it properly. Empathy’s compile process is split into two archive libraries (libempathy.a and libempathy-gtk.a) and several binaries (empathy, empathy-call, empathy-accounts, etc.), so I couldn’t think of a way to ask the linker to find any unused symbols. I put together this second script, which will build a list of symbols in archives and look for those symbols copied into the binaries, which gets some of the way there, but will miss any unused symbols defined in the binaries’ sources (src/).

  1. Thanks, as always, to my employer, Collabora, for letting me work on Empathy []

Empathy and GNOME Online Accounts

Today at the IM, Contacts and Social hackfest we talked about supporting chat accounts in GNOME Online Accounts.

I did some work exposing accounts from GNOME Online Accounts to Telepathy (Bug #652543). It still needs a little bit of work, but from Empathy it looks like this1:

Empathy Accounts

With this work Empathy will prompt for the account password when there is a GOA account. Guillaume is currently working on extending Empathy’s authentication handler to authenticate automatically using the credentials from GOA (#652546).

Bastien is extending GOA to include a Chat account type so that you can control whether to enable chat from Online Accounts (#652574).

  1. ignore the other Google Talk entry, that’s my non-GOA chat account []

announcementses

The biographies of the advisory group for the Ada Initiative was recently announced and I’m extremely proud to say that I’m a part of it.

In other news, I merged support for contact blocking in Empathy 2.33.2, which will be in the Empathy 2.34 release (the gtk2 branch of Empathy), for Telepathy connection managers that support blocking (at least Google Talk). Hopefully my talented GOPW intern Chandi will find time to forward port that work to master (i.e. Empathy 3.x) before I do, so everyone else can enjoy it too.

Thanks to the hard work of other Collaborans (Emilio and Sjoerd), Empathy 2.33.2 also has experimental support for Call, the new VoIP API in Telepathy that supports a lot more than the older StreamedMedia API.

Empathy master ported to GSettings

GLib 2.25.9 just came out, which included a GSettings bugfix I needed, so I’ve just merged the GSettings port branch I wrote for Empathy into master. Unfortunately this does not come with a fancy screenshot. It uses the DConf backend by default, if you do not have DConf, your settings won’t be preserved between instances.

This work includes a .convert file that can be used by gsettings-data-convert to convert from GConf to DConf. I got kinda bored of maintaining this file by hand, so I wrote an XSL script to generate it from the schema XML.

Bugs in GNOME Bugzilla please :)

Also, to the Americans and Canadians who enjoy Australian, female folk singers: my favourite band is touring your countries for the next three months (you have to click Next on the page to see every gig). You should go and see them!

empathy: the future's gonna be awesome

So we've been doing a bit of work on Empathy lately (but too late for GNOME 2.30 I'm afraid), and trying out some crazy new ideas.

One of these Favourite Contacts. You can now mark contacts in your contact list as favourites, and they will always been shown at the top of your roster (as well as in any groups they're a part of).

Another is Frequent Contacts. This information is generated by the new telepathy-logger service, and shows which of your contacts (on your contact list) message you most frequently.

The telepathy-logger is a new desktop wide logging service in development that applications (such as Zeitgeist) will be able to query to retrieve conversations that take place via Telepathy. As well as recording the actual messages you send and receive it also generates statistics, such as your most frequent contacts. This means information such as your favourite and recent contacts are also available to other Telepathy clients (perhaps they could appear integrated into GNOME Shell along with current conversations).

We're also considering adding Recent Contacts, so you can quickly return to a conversation you have been recently having after you close the window.

GTK+ client-side-windows and threading

Some people (including me) had noticed that recent Empathy's video calling was breaking with recent GTK+ builds. Some people (not including me) were smart enough to work out the bug was related to client-side-windows.

In CSW-enabled GTK+, calls to GDK_WINDOW_XID() — the function with returns the XID of a GdkWindow — implicitly makes a call to gdk_window_ensure_native() before retrieving the XID. It does this so that there is a window on the X server to return the XID for, and thus ideally no one's application will break under CSW. The problem in Empathy was that the first call to GDK_WINDOW_XID() happened in a thread, which in the olden days would have been harmless, but now it can magically result in your window being allocated server side.

The fix for Empathy (and maybe your program to) is to call gdk_window_ensure_native() as soon as the widget is realized. In Empathy we're calling GDK_WINDOW_XID(), because we don't want to depend on GTK+ 2.18, which looks a lot like this.