Telepathy/Empathy improvements for Gnome Shell



Hi folks,

At the Boston GNOME Summit this weekend just gone, Rob McQueen and I chatted to some of the Gnome Shell team about its Telepathy integration. There are a few tweaks to Empathy, and one slight semantic tweak to the spec, that we decided would make things more awesome. Apologies for people who know how the shell works for length. tl;dr:

• Document that one handler can call HandleChannels() on another to transfer the channel, and add helper API to TpBaseClient to make it easy and do the Client.Handler.HandledChannels bookkeeping;
• hide the tray icon if the shell is running and no channels need approving;
• don't approve 1-1 Text channels if the shell is running;
• make Empathy change the user's presence based on the session state;
• rename Empathy Internet Messaging to Chat in the .desktop file.


When you mouse to the bottom-right of the screen, a tray fades in from the bottom which contains transient notification icons and the avatars of contacts with whom we have ongoing conversations, or we recently spoke to but aren't talking to currently. If you click an avatar, a little bubble appears out of it with the conversation so far plus a text entry. You can chat with the contact right there; or, you can click anywhere in the bubble (except the text entry) to spawn or focus the corresponding Empathy window; or you can hit escape to dismiss it. When the tray's hidden and a new message arrives, a notification appears at the bottom of the screen for a few seconds with the sender's name and the first line of the message; you can click the notification to show the same inline-quick-reply bubble.

First up, credit: this feature is really, really addictive. It's handy to be able to rattle off a quick reply while I'm doing something else, and later get easy access to the full chat window.

At a Telepathy level, the shell needs to be an Approver: incoming channels shouldn't be dispatched to the handler before the user clicks on the bubble. It also needs to be an Observer, to watch ongoing conversations and see when they've ended.

To support the case where we don't have an open channel to a contact the user clicks on, it also has to be a Handler to avoid Empathy being invoked for the channel request. But now we need a way to transfer that channel to Empathy. I think the Shell could actually just call HandleChannels() on Empathy itself. If so, we should document this, and add convenience API to telepathy-glib.

Empathy's notification bubbles for incoming messages and other events need dealing with, but this is a matter for another mail.

Currently, Empathy's tray icon shows up in the bottom-right corner, and flashes continuously while the user is using the mini-chat view on unapproved text channels. We should hide the tray icon when the shell is in use, and only show it when channels need approving. Also, we should not be an approver for 1-1 text channels while the shell is running.

Unrelated to conversations: there's a presence picker in the menu that appears when you click your name. It doesn't offer the full range of IM presences: it's for general desktop presence. If you're Available, notifications get shown to you etc etc; if you're Busy, they hide until you mouse to the corner. The general opinion seems to be that if Empathy is running the user should be signed in (unless they pick Offline, obviously) and if it's not, they shouldn't. So Empathy would listen to the session's state change notifications (between Available and Busy, and the implicit change to/from Away) and update your Telepathy status accordingly. If the user picks Invisible or Away or whatever in Empathy, then this should take priority over the session state.

Finally, Empathy's full name in its desktop file should be changed to Chat. The design is that applications that are part of the desktop platform (like File Browser, Calculator, etc.) should always have unbranded names, and applications that sit on top (such as Firefox, for instance) should have branded names. Empathy is considered part of the desktop.

Regards,
--
Will


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]