Friday, 20 November 2015 01:00

A Year's Progress: The Shell

Written by 

This is part of a series of articles covering ReactOS development since the Indiegogo campaign.

As you may remember, the ReactOS Community Edition is going to be based on the amazing ReactOS 0.4 series about to be launched. ReactOS 0.4 has a lower failure rate (less that 0.1% failure from over 10 million tests!), comes with support for NTFS and ext3 file systems, and improves hardware compatibility. All of this will become part of the Community Edition, in addition to a new visual interface and much more!

Because of your backing the Indiegogo campaign, one of ReactOS 0.4's biggest deliverables will be the new shell. The shell, on ReactOS and Windows, is the graphical interface that a user interacts with. It encompasses the desktop, taskbar, start menu, and file explorer. What good would a great visual style be, if it was full of holes and bugs?

So let’s go over how the ReactOS user interface has evolved over the last few years, and discover what your support has made possible.

History

Martin Fuchs wrote the original explorer for ReactOS 0.2.0, the first release with a graphical user interface. It provided the functionality a user would expect of explorer, with a look and feel mimicking Windows Classic. A lot of needed functionality was unimplemented at the time of its design, leaving explorer to implement missing pieces that should have been provided by other components. Martin had to add many hacks and clever workarounds to get the functionality he wanted. It didn't help that most of it what he needed was undocumented by Microsoft. The project had gained a working shell, but one that was inherently incompatible to Windows.

Martin's explorer

From the start, it was known that the shell would one day need to be replaced by one compatible with Windows. Developing a new explorer would be a titanic effort. Thomas Bluemel laid the groundwork and wrote a basic shell that worked on Windows. Later on, Andrew Hill refactored the relevant libraries in ReactOS to better fit the needs of the project and the new explorer. Still, this was not enough to match what the old shell provided, or to even have it working properly on ReactOS.

But then you backed the ReactOS Community Edition, and everything changed.

With your backing, the Indiegogo campaign brought in funding to develop ReactOS. Some of that funding was used to hire two developers, Giannis Adamopoulos and David Quintana, to work on the shell and related components. In a third round of development, these two developers made great progress in the shell.

The new shell

The old explorer did a fantastic job presenting a Windows Classic look and feel. At first glance, there's not much different with the new explorer. However, if you take a closer look, you will notice that the start button has bolded text, the toolbars are gone, and some items in the start menu have been removed. This is to be expected, as the focus of this effort was to change the implementation, not the presentation.

As a nice little touch, the banner in the start menu has one of the newer Community logo icons; a small token to the Indiegogo campaign that made this development possible.

Looking at the taskbar properties, the design is much closer to the Windows layout.

Explorer properties

Aside from all these visual changes, all the internals have been completely rewritten for compatibility. You wouldn’t believe how much changed! With a Windows-compatible implementation, other software integrates much better: start menu entries, right-click context menus, even third-party shells.

File explorer

In terms of visible changes, the file explorer has the biggest departure from the old explorer. Its overhaul brings it in line with Windows XP and Windows Server 2003 features and options. A cleaner and easier to use design. See for yourself:

File explorer comparison

One of the biggest hindrances with the old explorer (right side) was having "Back", "Forward", and "Up" buttons that did not work. These buttons work correctly in the new explorer, making navigation much more convenient and less frustrating.

Copying and moving data has been vastly improved. Thanks to community member Huw Campbell, they can now done asynchronously, allowing explorer to be used while the operation completes in the background. The old explorer did these operations synchronously, meaning it would be unresponsive until it completed the request. No more waiting to move hundreds of megabytes of data before browsing another folder or opening the start menu!

Copy dialog

Huw is also responsible for implementing drag and drop support, which works as a complementary feature to the asynchronous operations. Just like in Windows, simply make a selection, drag it to the location you want it in, and drop!

Theme support

Theming of the shell is important for presentability. It lets a user change the style to better reflect their aesthetics. The old explorer had very limited support for theming. Title bars and buttons would use the theme style, but the taskbar and start menu would not. The new explorer, with its proper implementation, can use a theme’s visual elements across all its components. This is not limited to the project own themes; any theme designed for Windows XP will work, too!

ReactOS includes two visual styles: Classic – what everyone is familiar with – and Lautus. Lautus is a Windows theme designed by community member Maciej Janiszewski. This theme was so well received that design concepts for the Community Edition are based on it.

Many graphical issues have been resolved with updates to the shell and theme. Lautus works substantially better in newer development builds. The taskbar uses the correct theme colors and, after a restart of explorer, the start button icon.

Explorer using the Lautus theme

Some theming issues still need to be resolved. As this will be an important feature for the Community Edition, it can be expected that these will be worked on early in the 0.4 series.

Polished icons

There is also an ongoing effort to clean up icons for ReactOS 0.4. Community members Jared Smudde and Henry Tang Ih have been providing the project with newer icons. Many of these improvements may be hard to notice, as it can be as small as rounding edges, improving sharpness, or changing the color. However, these small changes have a big impact on the overall visual quality.

Taking a look at the desktop, we can see some icons that were replaced with newer ones. Can you spot the differences?

Icon comparison

On the top is the desktop icons as seen in ReactOS 0.3.17. On the bottom is the newer set of icons used in development builds.

Community Edition

The shell is the cornerstone of the user experience that the Community Edition will deliver. For those of you wondering if the Community Edition will look like these screenshots, don’t worry! It will include its own theme and set of icons that will significantly differentiate itself from the standard ReactOS release. These Community Edition changes will provide the vibrant and beautiful design you got behind.

ReactOS CE Control Panel

3 comments

  • Comment Link gabriel costa Friday, 20 November 2015 03:25 posted by gabriel costa

    Whe will the 0.4 version be released? Is there a date already? I can't wait to test it (the ReactOS team simply read my about about ext3 support). It looks beautiful.
    Congratulations ReactOS team. :-)

    Report
  • Comment Link Phosphorus Moscu Saturday, 21 November 2015 15:14 posted by Phosphorus Moscu

    Yes Yes!
    https://www.youtube.com/watch?v=P3ALwKeSEYs

    Report
  • Comment Link Daniel Monday, 23 November 2015 09:46 posted by Daniel

    Damn, I really want to see this project thrive, the world needs it to thrive, you need more exposure! Considering Microsofts latest and greatest fascist terms of service, and Windows 10 literally being spyware on its own, we need an alternative now more than ever, not just the people who hate windows, but also the people who love it!

    Report

Leave a comment

Make sure you enter the (*) required information where indicated. HTML code is not allowed.