Z-Systems Logo

Z-Systems

Think Logically

Z-Systems Developer Blog

Stories and information from the developer

Finestra 2 and the Future

23. September 2011 21:24 | by Z-Human Permalink | Comments (0)

Last weekend, I spent quite a bit of time pushing out the new releases of Finestra, 2.0, and 2.1 shortly thereafter. When I first began work on version 2, I was actually planning to make a simple iterative 1.x release. However, after rereading some of the suggestions made during the past couple of months, I decided to make some fairly large changes to the overall architecture.

In a word, plugins. Like many growing software projects, I was finding it harder to add new functionality without breaking the many interdependencies that had grown between older features. The answer was simple, but it took a bit of time to implement. I split the code base into a bunch of discrete components that did not depend on anything other than the main virtual desktop component. I also implemented a simple plugin model that all of the components use and a plugin loader that automatically seeks out new plugin classes that are loaded at runtime. The end result is a model that is easier to maintain, and easy to develop against.

Currently, only plugins internal to the code base are loaded. In the near future, I plan to make plugins more of an open-ended feature, where you will be able to develop plugins that can be downloaded and used by users without having to install a custom version of Finestra. I will be writing more about this once it is done. For now, if you want to implement a plugin, you will have to submit all of the code for the plugin as a patch to the main Finestra project.

Now for some news on features to come (in the form of integrated plugins, of course). First up is the ability to switch desktops when your mouse hits the edge of your screen. This has been a long-standing work in progress, although no one that hasn’t played directly with the code has seen it. I’ve tried a couple of different approaches for telling when the mouse hits the edge of the screen, such as a low-level mouse hook and a polling timer. Neither is really something I want to use, so more work is needed. The problem with using a low-level mouse hook is that it can make your mouse cursor move more slowly since Finestra code gets run every time you move the mouse (for every pixel of movement, and every click, etc.). Polling timers, likewise, are almost a bad idea, and there isn’t really a good way to get the timing right in this case without running the timer fairly quickly. This can drain battery life on laptops, slow down the machine, and more. Hopefully I’ll be able to solve this issue relatively quickly.

Another feature that is on the drawing board for the next feature-oriented release is the ability to persist different desktop icons for each virtual desktop. This has been a highly-requested feature over the years, but it poses a lot of problems, both technical and interaction-wise. For example, when you exit Finestra, should it just display all icons that appeared on all desktops? Should each virtual desktop just hide/show the icons in different arrangements from the original desktop? Or should each desktop start with a completely clean slate? I will be making these decisions fairly soon, so feel free to share your input (especially any technical preferences) on the issue.

FeedSubscribe

Month List