Implementation of tab grouping in Rekonq using sessions and a panorama view
Short description: In Rekonq managing a lot of tabs is a troublesome task. This projects aim to make organizing tabs into sessions possible by supplying an attractive GUI called the panorama view. From panorama, a user can load a session [group of tabs], store a session, or modify the tabs in it. This way, a user can organize tabs into sessions like 'study', 'mail and contacts', 'web apps', and 'work', and load and store them individually. It will reduce the hassle of managing many unorganized tabs at once.
Name: Tirtha Chatterjee
Email Address: firstname.lastname@example.org
Freenode IRC Nick: wyuka
IM Service and Username:
Location (City, Country and/or Time Zone):
Implementation of tab grouping in Rekonq using sessions and a panorama view
Motivation for Proposal / Goal:
Tabbed browsing, when it was introduced, offered huge breakthroughs in browsing comfort. But there has been little changes in the way tabs have been dealt with ever since. This has given rise to two important use cases-
- Many people use tabs as temporary bookmarks to mark whatever they want to surf or check out later. They just open it up in a new tab. For example, I find a good link or tutorial, and I open up a new tab, so that I can look at it when I have the time. This gives rise to a lot of unorganised tabs waiting to be viewed. They clutter up the tab strip and make tabbed browsing a harder task.
- Many users have this specific style of browsing - I look for xyz in Google, then open up 4-5 relevant entries in new tabs. I open up links in these tabs further in new tabs. This increases the number of tabs. Many users today have an average tab count of over 20.
Rekonq currently has "< >" buttons at the end of the tab strip to browse through tabs. But there is no way of organising or grouping those tabs under groups, so that they can be expanded and collapsed at will. This will add a logical and more intuitive way of browsing through tabs. Firefox 4 has introduced the Panorama view to group tabs.
This feature will allow the user to group tabs under separate sessions which can be independently loaded and saved through a panorama-like view. Sessions are stored, edited, loaded from the Panorama view. All sessions can be previewed through thumbnails and loaded into separate windows accordingly. Each session is loaded in a separate window, and tab changes done in the window can be stored to the session using the Panorama. Also, tabs from one session can be drag-dropped into another session, or tabs may be added or removed.
- Improve the actual SessionManager class [currently it only restores sessions after Rekonq is restarted]. Functionality will be added to it to support loading and storing individual sessions into XML files using the QXml module. A Session class will store information about a User Session [the tabs in the session and its thumbnails], and allow its storing and loading. SessionManager will manage the loading and storing of these User Sessions. Research will be done on whether a single file will be used for all sessions or separate files, each for one session. If a single file is used, the xml document will look like this -
<session name="Work" id="0">
<tab id="0" url="http://www.google.com/" thumbnail="0-0">
<tab id="1" url="http://en.wikipedia.org/Wiki/Main_Page/" thumbnail="0-1">
<session name="Apps" id="1">
<tab id="0" url="http://mail.google.com/" thumbnail="1-0">
<tab id="1" url="http://www.facebook.com/" thumbnail="1-1">
<tab id="2" url="http://www.twitter.com/#" thumbnail="1-2">
<session name="GSOC" id="2">
<tab id="0" url="http://www.kde.org/" thumbnail="2-0">
<tab id="1" url="http://rekonq.kde.org/" thumbnail="2-1">
The thumbnails will be stored in a separate directory, where they will be named using a combination of session id and tab id.
Work has been done already by developers to store tab history in the session-file. This will be integrated into the code after implementation of the new SessionManager is done.
- Write a SessionView class that uses Qt Graphics View framework, and shows individual sessions in a panorama-like fashion. The sessions are represented as groups containing thumbnails of tabs. Each Session is displayed using a SessionWidget class, again using Qt Graphics View. These SessionWidget will contain PreviewWidget classes, every widget showing a thumbnail of tab along with the Favicon. These thumbnails are stored along with the tab url and history data whenever a Session is saved. The SessionView will become visible when a button is clicked or a hotkey pressed, and this will hide the MainView widget. The SessionView will allow the sessions to be saved and loaded at runtime, and edited [ drag/drop tab from one session to another, etc].
As a feature, the user will be prompted when (s)he tries to close a window if (s)he wishes to save changes made to the session.
Tentative Timeline (in weekly intervals until 2 weeks after the end of GSoC):
- Till May 1: Read through the codebase, fix bugs, get a feel of how each of the classes work.
- May 1 to May 5: Learn Pixmap and other relevant API for creating and displaying the thumbnails and favicons.
- May 6 to May 21: Study Qt Graphics View framework. Learn to produce effects and animations with Qt. Write sample test code to practise.
- May 22 to May 30: Prototype my classes and prepare an idea of how each of them will function.
- May 31 to June 12: Write the Session class that stores and loads sessions [initially just the URL]. Perform necessary changes in SessionManager. Test it by hardcoding a session load from a file into the program.
- June 13 to June 19: Add support to save thumbnails for the stored Sessions [both preview and thumbnail].
- June 20 to June 25: Research will be done as to how the sessions will be physically stored on the hard disk.
- June 26 to July 2: Implement a basic SessionView class that can show Sessions as read-only widgets [ SessionWidget ].
- July 3 to July 10: Implement saving and loading User Sessions using SessionView.
- July 11 to July 15: Add functionality to promt for saving session changes.
- July 16 to July 25: Perform thorough research on the usability and ergonomics of the GUI design, with help from community. Any necessary modifications are made. Rigorous tests are performed and any bugs in the implementation are fixed.
- July 26 to July 29: Research to be done to understand the implications of the eventual shift of MainView widget from KTabWidget to QGraphicsWidget.
- July 30 to August 4: Integrate tab history into the SessionManager to store history of all changes in the tab.
- August 5 to August 16: Two weeks backup time kept for unforseen delays or changes during project.
- August 17 to August 22: Improve documentation of written code, improve code quality.
- August 22: Pens down date.
- August 22 to September 5 [ After GSOC ]: Effort will be made so that the changes feature in the next stable release. Program will be sent out and reviewed by the community and feedback taken. The next plan is to associate these User Sessions with Plasma Activities. This and other such improvements will continue to take place.
Do you have other obligations from late May to early August (school, work, vacation, etc.)? Please note that we expect the Summer of Code to be a full-time, 40-hr a week occupation. It is important to be clear and upfront about other commitments that you may have during that time.
I will be free during the entire summer coding period and will be available approximately 12 hours a day, 7 days a week. I will usually work at 09:30 to 21:30 UTC. My college will start from the last week of July, but even at that time I will be able to commit myself 7 hours everyday, 7 days a week. From the last week of July, I will be able to work from 15:30 to 22:30 UTC.
About Me (let us know who you are!):
I am Tirtha Chatterjee, an undergraduate student of Computer Science and Engineering. I am from Durgapur, India. I am a Linux and FOSS enthusiast, and spend most of my time coding. I have been contributing to FOSS for the last one year and a half. I was introduced to the KDE development in conf.KDE.in in 2011 in Bengaluru, India.
My blog address is http://thebengaliheart.wordpress.com/
To mention a few contributions, I have committed patches to Pidgin, XChat and Axel, Lekhonee. I have written a log viewer plugin for Pidgin that is meant to eventually replace Pidgin's original log viewer.
I am very dedicated in whatever I do. I will put in all my energy to give more than 40 hours a week into this job, and complete my project in time. I have kept some time as backup to prevent any unwanted situation. Also, I would continue to work on this project even after GSOC, and give effort to push the code to the stable version as soon as possible. I plan to actively maintain my code and do bug-fixing even after my GSOC time period is over.