GSoC 2017 | Google Summer of Code 2017 (Haiku) report

Google Summer of Code

[GSoC 2017] Preferences GUI Refactoring

SuperPrefs – Control Panel with Categorization and Search for Haiku

Program: GSoC 2017 (
Organization: Haiku (
Project: Preferences GUI Refactoring (
Student: Anirudh M (anirudhm)
Mentors: waddlesplash, Sean Healy

Blog Posts and Discussion regarding the project go at:

Final Report:

Current preview of the application:


[GSoC 2017] Preferences GUI Refactoring Intro

Hello World.

I’m Anirudh Murali (Trac: anirudh; IRC: anirudhm), from the southern region of India. I thank Haiku for selecting me as one of Google Summer of Code 2017 student. I’ll be working on the idea: “Preferences GUI Refactoring” this summer along with my mentors: waddlesplash and Sean Healy.

As of now, if one has to access any Preferences, a right click on the Deskbar, and accessing it with the submenu of Preferences, and still people who are new to Haiku end up selecting the wrong preferences option, atleast it happened for me. Even though Preference options are labelled, new users who aren’t familiar with the terminology take time to find the right option. What I intend to do for this summer is to revamp the access method of Preferences.

Preferences Panel

A Preference Panel containing shortcuts to every preference options, sorted under respective categories. For example, Keyboard, Mouse, Trackpad preferences would be coming under Input section and similarly other options as well.

Here are snapshots from Windows’ Control Panel, macOS’ System Preferences and Ubuntu’s System Settings. Haiku’s Preferences Panel consisting of all preferences listing would make things simpler and easily accessible. One can still access the menu based Preferences listing and open the Preferences in the form of window which is present as of now.


Here’s a mockup of what Haiku’s Preferences Panel would look like (subject to change):


Nearby to every preference option, either in a side pane or nearby the option, a quick toggle of most used preference will be added. Example: Enabling/Disabling Trackpad with a checkbox in the central panel.

Search Implementation with Trie

Along with this, a Search bar to filter the displayed Preference listing. Every preference listing will be assigned with set of meta keywords which will include the options present inside the preference listing, and a Trie with all the keywords pushed in the tree. Using this method for traversal will allow us to fetch results in O(m) timeframe where m is the length of the string entered by the user.


Upon user’s query through the Search bar, depending upon the characters he/she enters, the string must be compared with the trie entries of multiple preference panels and then the preference panels containing the option will be highlighted, similar implementation in macOS’ System Preferences.


This is what I’ll be building this summer, I have plans to work on wildcard search feature, something similar to macOS’s Spotlight search, I’ll work on these after GSoC is done. Let’s see how things proceed.


[GSoC 2017] Preferences GUI Refactoring – Weekly Report 1

Hello World.

This is an update to my previous blog post which dealt with the introduction to the GSoC project which I’ll be working this summer – Preferences GUI Refactoring. It’s been two weeks since the first post went live, so here’s the report for the weeks after that. This being the Community Bonding period, I pretty much did what the title says. Got to know about fellow GSoCers, they really are friendly and helpful. Myself, my mentors (waddlesplash and Sean), PulkoMandy, jua_ and humdinger had our first meeting, infact a very long meeting. The meeting was more of a discussion on the last blog post’s comments. Last blog post received so many suggestions and constructive criticisms, let me thank everyone for their valuable feedback. We did take everything into concern. The major changes that are done to the project after the blog post:

The control panel (we call it SuperPrefs for now) will be segregating preference panels category wise, along with an inner search implementation (as explained in last blog post). We’re dropping off the Preview pane, at least for now, it doesn’t seem to make many changes and there were more major things to be addressed. Incase you missed the last post, here’s a link to that. Note that SuperPrefs is not the final name; the final name will probably just be “Preferences”.

Hurdle #1:

Last week, messed up my Mac by updating Xcode via App Store. I’ve never had problems with updating apps through App Store until last week. I had to pause my download couple of times in between the download progress, and resume it. I’m not sure whether it was because of that, the Command Line tools got messed up, and I wasn’t able to even build Haiku. It seems that the compiler got crashed. There’s even an article about this stating why not to update Xcode through App Store. Xcode Upgrades: Lessons learned. The solution was to completely uninstall Xcode and its Command Line tools and had to reinstall it from the Apple’s developer site downloads page: So, if any macOS users are reading this, do not pause or terminate it in the middle of the update, had to learn it the hard way.


Coming back to Haiku, I learned how the menu entries of the deskbar menu are being fed, and working of Jam. I did a small work on adding SuperPrefs to the menu entry list. Most probably, SuperPrefs will be getting a place in the main menu rather than amongst Preferences menu entries. Here’s a preview:


In further weeks, I’ll be working on the implementation of the SuperPrefs’ app window. The major learning and coding part is yet to come, and am excited about it as well. The changes will be going here at my GitHub profile: AnirudhMurali. No changes as of now, you can see changes in the coming weeks. Thank you!

[GSoC 2017] Preferences GUI Refactoring – Weekly Report 2

Hello World.

This is my first blog post after the Coding Period officially began, I’ve started to write code for the application. During the Community Bonding period, I got the menu listing for SuperPrefs. My last exam got over on June 6. I worked on the basic application layout during the beginning of June. This was how the application looked initially:

Week 0 work

The application hosts seperate sections for holding the Preferences based on their category. I also added a Search field for searching the contents of an application, though this has not been implemented yet.

Now, in order to feed the contents of the app, i.e, the Preferences icon and to launch the respective application. I looked for samples in Haiku, and found axeld has done a good job in building the application FileTypes, I made use of MimeTypeListView and IconView for integrating the list of preferences in the app.

Week 1 work

Also I had to make use of is_application function from FileTypes.h, I’ll now have to work on just keeping the Preferences related apps and removing other entries, and make use of BRoster class to launch the respective application. Then have to work on categorising these apps into their categories. Now that my exams are done, I can dedicate more time for this project. I’ll be updating the code progress along with the preview of the application status in the GitHub repo: AnirudhMurali/SuperPrefs.

That’s it for now, Thanks for reading. 😄

[GSoC 2017] Preferences GUI Refactoring – Weekly Report 3

Hello World.

Now that we’re almost near to the first evaluation, and also it’s been 2 weeks since my last blog post. The last blog post had a plain vanilla GUI without any elements apart from the listview of the applications. I worked on adding icons to the GUI, under respective categories. I’ve hardcoded the categorization part, after the first evaluation, I’ll work on categorizing the applications. I used IconView.h along with some functions from LaunchBox. waddlesplash told me to go with BButton, so will be replacing the IconView with BButton soon as it provides easier handling of labels.

Report 3

This is the current preview of the application. Some formatting work of the labels and icons are to be done still. Only few of the preferences have been added, more thoughts have to be put in categorization, the implementation of the same, and then the rest of the preferences will be added as well.

I’m updating the code progress along with the preview of the application status in the GitHub repo: AnirudhMurali/SuperPrefs.

That’s it for now, Thanks for reading. 😄

[GSoC 2017] Preferences GUI Refactoring – Weekly Report 4

Hello World.

It’s been almost 3 weeks since my last update. The first evaluation was complete, I’d like to thank Haiku for recognizing my work so far. And here’s an update on what I worked on for the past few weeks.

I replaced all IconView with BButton, since it has built in functions for label, icon handling.

I worked on categorizing all preflets based on their categories, and sorted them into respective BBox.

Implemented Localization for the labels, BButton takes the localized app name, if there exists no localized name, takes up the default English app name.

Worked on Search functionality, Search now works with the keywords of the app names. Will extend this functionality to display according to the preflet’s related keywords too.

The search results update as the user type their query, and the preflet is highlighted with a color too.

Here’s a GIF on how SuperPrefs is as of now:

Report 4 work

Currently am working on the Settings menu, which includes Sort as Category, and Sort Alphabetically. Now that Category wise implementation is done, I’m working on providing Alphabetical wise sorting option.

Upcoming goals:

  • Implement Search functionality for related keywords too.
  • An alternative to hardcoded preflet categories.
  • Suggestions are welcome.

Up-to-date code is available at the repository: AnirudhMurali/SuperPrefs.

That’s it for now. Thank you for reading. 😄

[GSoC 2017] Preferences GUI Refactoring – Weekly Report 5

Hello World.

The second evaluation got over recently, and wanted to update my progress. My last blog post had discussion that custom preflets wanted to be added into SuperPrefs. It has been implemented now. Along with the exisitng boxes for specific categories, there’s now a box for Custom preflets, which includes third party preflets which come along with installation of apps. I also was working with implementation of Sorting of the entries in boxes, users can sort it based on Category, or Alphabetically, both has been done now. Followed with some alignment of icons, and the buttons in the UI to look more uniform.

I planned to extend SuperPrefs to support apps too. There’s now a checkbox to display the apps installed, with no categorization though. It does support localized search similar to preferences. Few bugs are ought to be fixed in the case of apps section as some apps get installed in respective folders and not just in root of Applications folder.

Below is a GIF demonstrating the work so far:

Report 5 work

I’ll now work on making the code ready for production, and give a test build as soon as possible. This will most probably be integrated into Deskbar menu, and appear when the Applications and Preferences entries are being selected.

Up-to-date code is available at the repository: AnirudhMurali/SuperPrefs.

That’s it for now. Thank you for reading. 😄

[GSoC 2017] Preferences GUI Refactoring – Weekly Report 6

Hello World.

The last coding period of Google Summer of Code is about to end, and it’s time for us to submit a final report. But I thought to conclude the Weekly Reports with this one, covering the changes of this particular period.

Thanks to Brian Hill (Perelandra0x309) for opening issues in the repo, almost all of the issues posted were fixed and closed.

The search now works on related keywords of all System preflets. Related Keywords search for Custom Preflets is in works.

Below is a GIF demonstrating the work so far:

Report 6 work

Up-to-date code is available at the repository: AnirudhMurali/SuperPrefs. Please give it a try in your local system and feel free to open issues in the repository, if there’s any. I’ll be happy to look into them.

That’s it for now. My final wrap-up blog post will come up soon. Thank you for reading. 😄

[GSoC 2017] Preferences GUI Refactoring – Final Report

Hello World.

This is Anirudh. Here’s my final overall report of my work during Google Summer of Code 2017. My sincere thanks to waddlesplash and Sean Healy, for their excellent mentorship. They immediately responded, and assisted me whenever I needed help. I’m grateful to the Haiku team, community members and my fellow GSoC colleagues for their help, constructive criticism, reporting bugs and helping the project shape better.

Link to the source code/repo:

List of all blog posts:

List of all commits:

Project demo:

Final work

Achieved so far

  • Control Panel Interface
  • Categorization of Preflets
  • Inclusive of both System Prefs and Custom User Prefs
  • Localized Preflets’ Name Search
  • Related Keywords Search
  • Apps View [Needs improvement]

What’s left to do

  • Localization for Related Keywords and additional keywords
  • Option to enable Apps View only if needed
  • Option to set Custom Categories
  • Making individual preferences better [Ironically the original goal]
  • Contribute to Haiku in one way or other

Things learnt

  • How to code and how not to code
  • Better Object Oriented Software Engineering approaches
  • Exposure to how open-source organizations work
  • Of course, Git, C++, Standard Template Library, Haiku API
Non Technically
  • Consistency > Pace
  • Late nights cause Burnout
  • Multi tasking Academic work and GSoC
  • Effective Communication through IRC, Mailing lists
  • Documentation

If you’re a student and reading this for future GSoC programs, I’d highly recommend you to submit a proposal for Haiku. So, it’s been an amazing summer, thanks again Haiku and the Google Summer of Code team.

Anirudh | LinkedIn

Leave a Reply

Your email address will not be published. Required fields are marked *