Skip to content
May 14, 2011 / thebengaliheart

Thoughts about tab grouping in Rekonq

I was reflecting upon the options I have as to in what manner exactly will I implement tab grouping into Rekonq. I have come up with three possibilities –

  1. Use the Kate / Konqueror model for sessions. The sessions will be collections of tabs, and will load into separate windows. One must explicitly save a session for the tabs to be remembered for next time. The tabs in the sessions do not have correspondence to the actual tab instances. There will be some added eyecandy to modify the sessions, by providing a panorama view to drag / drop tabs between sessions, or remove tabs, without actually loading the session. I do not feel this is of much use. Here are a few reasons why –
    • Being allowed to drag-drop or delete tabs from sessions is very useless without actually opening it.
    • The big reason is, the purpose of tab grouping isn’t actually served in this model. Even if I am able to store or load sessions, what do I achieve? The main reason for tab grouping is that a user keeps clicking and surfing at will, opening more and more tabs till he can’t manage them. This is where a web browser differs from a text editor. Changes in it happen dynamically, and the need for grouping is dynamic and instantaneous. The moment I feel that I am having too many tabs, I should be able to move a few of them to another tab group, clearing up the clutter. A user may have his tabs organized under work, play, school, but when one starts browsing, our surfing patterns hardly follows that organization. We click on links here and there, and may soon land up in an article on the lastest android app in market while in the school session. Now, i have no way to clear the clutter of so many tabs. Most I can do is, save the session, close it, then drag its tabs one by one into another session. Seems astoundingly foolish right? I have come to the conclusion that web browsers, being totally different from text editors or other static applications, require dynamic sessions, that is, sessions that are changed on-the-fly and have a direct way to clear the tab clutter.
  2. The above point brings me to my next option, a similar implementation, but dynamic. Here all sessions will be loaded when the app is loaded. Thus, the sessions stop behaving as sessions, and are better suited to be called tab groups. These tab groups are one per window. We offer the same glossy panorama view to change the tab groups, but here, each tab in the tab group is directly associated with a WebTab instance. That is, since all changes in tabs are immediately stored to the individual tab groups, so each tab in the tab group actually reflects a current tab. Thus, I can now drag/drop tabs between sessions to reduce the clutter, beautifully managing them. Also I do not need to worry about explicitly storing my changes everytime I add a new tab so that I can see it next time I open rekonq.
  3. The third option is amost like the second one, but allows for multiple tab groups per window. This would make the eye-candly look all the more catchy I suppose, but would cause the session management code to become unnecessarily complex. Also, I need to keep track of detached tabs which will not be visible in the KTabWidget. Every addition of a tab into a window would require a process of selecting an appropriate group first. Not to mention, this would cause huge changes in the codebase.

As has been apparent in my judgement of the three options, I prefer the second one more currently. I will still think on it for some days. In the meanwhile please do put in your valuable suggestions.

May 9, 2011 / thebengaliheart

Option to disable KDE wallet in Rekonq

I have this habit, or paranoia rather, of not storing my passwords with the browser. I never let the browser remember passwords for me. Maybe this is because a lot of my friends use my laptop at times, and it becomes risky to have autologin on for websites. So whenever I use a browser, the first thing I do is turn off the ‘Offer to store passwords’ option or similar. I was sad that Rekonq, my favourite browser, did not have this feature. So I wrote this patch that adds a setting which allows the user to disable the notification saying "Do you want to store the …" by unchecking a checkbox. Here goes a screenshot –

Snapshot of the settings dialog

May 2, 2011 / thebengaliheart

Getting GSOC – the awesomest experience!

And finally my dream came true. I am a GSoCer now. Even though it sounds maybe like a GNOME game for soccer, I am going to work under KDE 🙂

My work is for Rekonq, the lightweight browser which is tightly integrated into KDE. It has been two months now since I’ve been using KDE, and it has been ~ 25 days since I wrote my first patch for Rekonq. My idea was original and not already there in the ideas list of KDE. I suggested it on the rekonq mailing list, and it was accepted.

WIll start with the preparations as soon as the exams are over. I’m keeping up with the community in the meantime.

Will come up with details of my project very soon, when my blog is added to Till then, bye blog. Here is my proposal abstract:

And here goes the link to my proposal, in case anyone wants to refer to a sample proposal while participating next time:

April 21, 2011 / thebengaliheart

Waiting for the 25th

Long time I’ve written here. Exams keeping me busy … Eagerly waiting for GSOC results on the 25th.
Bye till then 🙂

March 31, 2011 / thebengaliheart

Tab grouping for Rekonq using sessions

Ever since I have attended, I have grown a certain liking to the KDE community. Truly speaking, in my one year in the opensource world, I have felt that the KDE guys are one of the most encouraging and active groups around. The developers actively offer help, and questions are always addressed and answered. It is a very closely-knit community.

I may submit 2-3 proposals for this year’s Google Summer of Code. One of them which I personally find very very interesting is implementing Tab Groups in the Rekonq browser, the WebKit-based lightweight KDE browser, that is now the default for Kubuntu. It has most of the features that a good modern browser has, but there is no option to group tabs under categories, or sessions, as I would like to call them. Each session has a name, for example, GSOC, study, surfing, etc. There are some tabs that span accross sessions, called application tabs or pinned tabs. Such a thing can be implemented by having a special session called pinned session. I hacked a bit on the Rekonq codebase, and after getting an idea about the coding style and understanding how I want to implement what I want to implement, I started off immediately with coding. Here is my progress so far –

  • I have written a Session class that holds information about the session, basically the list of tabs, current tab and the title of the session.
  • I created a SessionWidget class which shows all tabs in a session as thumbnails, and highlights the current tab. Currently it is a QFrame, but I plan to change it to a QGraphicsView. It uses a Session object internally.
  • A SessionsView class shows all SessionWidget objects. The MainView is hidden when this is shown, and this is hidden when MainView is shown.
  • I made a few changes to the MainView class so that it can load Session objects, and connected the tabsChanged signal of MainView to update the current Session object.
  • Currently a hotkey shows the SessionsView with the SessionWidget for the current session, it has thumbnails of the tabs from current session only, and highlights the current tab.

These points are mostly code-specific and will only be clear when one reads through the Rekonq codebase. As an overview, quite some of the backend code is done, and a lot of work remains to be done in the frontend. Here is a preview screenshot of what I achieved –

Hoping to learn a lot and work a lot this summer.

March 12, 2011 / thebengaliheart

Project Management with Nepomuk

I came across this GSOC idea while looking at the KDE ideas list. I have thought of two test cases for the project, and hope to come up with a full-fledged proposal soon.

Nepomuk allows for us to store semantic data about all our applications and data in a store and easily query through them. The idea is to implement the concept of associating data with certain projects. Data will be associated to certain projects and can be queried or shared accordingly.

Use Cases
1. Joe is working on his school project about ‘Natural Disasters’. He surfs the web in Konqueror to look for past natural disasters and reasons for it. He presses a hotkey and the annotations sidebar opens up. He drags the text into the bar or right clicks on the text and selects “Annotate …”, and selects the project under which to annotate. He downloads some images into his Downloads directory, and add them to the project ‘Natural Disasters’. Later one day, he searches for “natural disasters” and gets the annotated texts and images.

2. Jack is working to implement a new feature in Strigi. He files a bug and bookmarks the page from Konqueror. He stores the bookmark under the “multithreaded Strigi” project. He creates a folder to start writing the code. He right-clicks on the folder in Dolphin and adds it to the “multithreaded Strigi” project. He refers to an ebook about Multithreaded applications, opening it up in Okular. On page 43, he right clicks on the 3rd paragraph and selects “Annotate …” and then adds the text to the project. He opens Akonadi and adds his mentor’s contact to the project. He opens up the Project Explorer, opens the project ‘multithreaded Strigi’, and gets a list of all the bookmarks, ebook annotations and source code files.

March 10, 2011 / thebengaliheart


I was going through the ideas page for the OpenSuSE GSOC 2011 wiki page when I came up with this idea of making zypper searches more intuitive and user-friendly. Zypper is a package manager for OpenSuSE much like Yum is for Fedora, while zypper appeared to be more user-friendly to me.

The idea was to make Zypper searches sort the relevant results in an intuitive way, and add other developments to add to it. To start off, I took up this bug, which is about adding the support to search for multiple strings which must all occur in the search result to be displayed. Basically, currently zypper allows only for –match-any option, which means if I search abc def it will return results with either abc or def in them. The –match-all option, as the name says, would require both abc and def to be present in the package name for it to be displayed as a result. Currently the –match-all option is used as a placeholder, and mimics –match-any in functionality.

I looked through the code, and thanks to the extremely useful suggestions given as comments on the bug in the bugzilla, I did not take me much time to figure out what exactly I needed to change. After I was done, I was rejoiced to see the –match-all option work beautifully.

My patch is currently added as an attachment to the bug in the bugzilla itself. Refer to the above link of the bug to look at my patch if interested.