KillBonobo

From Evolution

Last updated by Mbarnes 16:56, 20 June 2009 (MDT)

Contents

[edit]

Summary

Of all the GNOME desktop components, Evolution is still by far the heaviest user of GNOME's antiquated CORBA-based component architecture known as Bonobo. Most of the rest of the GNOME desktop has moved on, or never drank the CORBA Kool-Aid to begin with. It's high time for Evolution to follow suit.

This page tracks my efforts to eliminate Evolution's (the application, not the data server) dependence on Bonobo and BonoboUI, in favor of equivalent functionality now provided by GTK+. Specifically, the goal is to convert Evolution's "components" (mail, calendar, etc.) to dynamically loadable GTypeModules, and also use GtkUIManager to manage Evolution's extendible menus and toolbars. Parts of Evolution's Bonobo-oriented plugin architecture will also have to be redesigned.

This effort is occurring on a GNOME Subversion branch named, appropriately, kill-bonobo.

Target release is 2.29.1.

[edit]

News

[Sep 1, 2009] At long last the "kill-bonobo" branch has been merged to Evolution's "master" branch and will debut as 2.29.1. Work on this effort is not yet complete; regression bugs are flowing in and we still have to deal with broken extension packages (especially Evolution-Exchange), but we're in the final stretch now. I'll be blogging more about this once the final traces of Bonobo have been removed.

[Jun 20, 2009] Status update on Kill-Bonobo. Also, test packages for Fedora 12 are now available. Install this repo file to get updates through yum.

[Apr 15, 2009] Spent the last month rewriting Evolution's attachment handling code pretty much from scratch. It was supposed to be a minor tangent for the Kill-Bonobo initiative but quickly ballooned into a project unto itself. Details on my blog and in this Bugzilla ticket. The good news is we can merge it early. The bad news is I'm now another month behind on this effort.

[Jan 27, 2009] Long overdue for an update. You can see from the new screenshot below what's done. I've been running the branch for daily work for a couple weeks now. Here's what's left: the Calendar module (that's the biggest item), mail search bar, labels, various popup menus, plugins, single instance support using Unique, importer, and lots of testing. 2.27 is approaching fast.

[Nov 17, 2008] I've posted the first of a series of status updates to the evolution-hackers mailing list. In short, the Bonobo removal is still progressing but there's a lot left to do, and I'm not working on it full-time anymore. So this may wind up being a 2.28 feature.

[Oct 28, 2008] I'm back to tackling the Calendars module again, this time with a more gradual approach. First priority was to just get the module to come up without GnomeCalendar. With that now done, I'm focused on finishing off the task and memo pads outside of GnomeCalendar. After that, I'll see if I can untangle the date navigator (the mini calendar on the left panel) from GnomeCalendar. That's a bit more dubious, but I stand a better chance of succeeding now that I have running code. (What you see in the screenshot below is basically a placeholder.)

[Oct 13, 2008] The Calendars module has been making my head spin as of late. I've been trying to break up the massive, 4,000-line GnomeCalendar widget to make it more maintainable. At the very least I want to split out the task and memo pads, and possibly the mini-calendar, so that GnomeCalendar is simply a notebook of calendar views. But it's a big tangled mess of code. So I took a few days to clear my head and rough in the Mail module, including all the menu and toolbar items, which was a marathon in itself but less taxing on my poor noggin. Schedule-wise, I've decided 2.25.1 is out. With only three weeks remaining, even if I could get this done in time it would be just barely, and I'd prefer to have at least a couple weeks to fix whatever major breakage I've caused (I'm sure there will be some) before releasing it to bleeding-edge users. 2.25.2 still looks doable.

[Oct 3, 2008] Tasks module is working. Its code is nearly identical to Memos, so it was kind of a freebie. Will test and debug over the weekend, then it's on to the Calendars module.

[Oct 1, 2008] Memos module is done; Tasks should follow shortly. I've also started on some API docs for the new shell design.

[Sep 22, 2008] I've been spending the past few days fighting with Evolution's search UI. As things now stand, simple searches (executed from the search bar) are working but saving those simple searches does not work. Nor does it work properly on the mainline branch. The dialog shown after selecting Search -> Save Search... does not reflect the search you just executed. The difficulty stems from having to represent the search conditions as both an "EBookQuery" and a "FilterRule" at the same time. The "EBookQuery" is used by Evolution-Data-Server to execute the search. The "FilterRule" is used within Evolution to represent the search conditions visually in a "Rule Editor" window, and also to store them on disk. Several of the modules (including Contacts) are simply not set up to deal with FilterRules, and I don't see an easy solution at the moment. So I'm punting for now and moving on to the Tasks and Memos modules. I'll revisit these issues again before I finish the Mail module, which I'm saving for last.

[Sep 12, 2008] Things are starting to look like Evolution again. Contacts module is more or less working; though searching, filtering, and custom views are not yet functional. I'm trying to integrate these into the shell as much as possible to reduce code duplication across modules. I've also fixed a number of long standing alignment issues in the main window that have always bugged me.

[Sep 2, 2008] Contacts module partially working. Shell design holding up well so far. Lately I've been busy rewriting a bunch of ancient infrastructure so I can finish Contacts and move on to Tasks and Memos.

[Aug 27, 2008] Currently I have a working shell implementation that uses GTypeModule instead of Bonobo to dynamically load modules. I also have a very simple test module that demonstrates integration with the skeletal shell window. Recently I've begun working on the Contacts module to see how well my shell design holds up.

[edit]

Shell Design

For this effort, the shell has been rewritten from the ground up. While largely following the old design, and accounting for the fact that Evolution has been a single process application now for several years, the new shell differs in a few important ways:

  • First and foremost, the new shell loads GTypeModules rather than BonoboObjects. I've therefore begun referring to the mailer, calendar, etc. as modules rather than components (as in CORBA components).
  • Each dynamically loaded module implements one type of shell view. Unlike before, shell views now have direct access to the main window, and also to the singleton EShell instance.
  • The various shell views for a particular window all share a common GtkUIManager, so it's possible to refer to actions in foreign shell views by name. Plugins can add their own actions and extend the UI definition via EPluginUI (for which I really need to write some proper documentation).
  • The shell now takes on more responsibility. The base EShellView contains an EShellContent, EShellSidebar and EShellTaskbar instance; each of which may be subclassed by modules. EShellContent, on the right side of the window, manages the search bar, and handles loading built-in views and search rules for its shell view. EShellSidebar, on the left side of the window, manages the gray "info" label that typically gives contexual information such as which mail folder is shown and how many items are selected. EShellTaskbar, at the bottom of the window, displays current operations and error messages for its shell view.

See the Evolution Shell Reference Manual for more details.

[edit]

Screenshots

Image:kill-bonobo-8.png

Mail module is usable!