Saturday, June 7, 2008

Text Selection Lives!

After finishing up the splitting of most dialogs from the main code, I began to work on adding text selection and dragging. The mouse and drag behavior is pretty much sorted out now and the best part is, text selection works! I've also been working on implementing the clipboard functions, most of which now work, all except for cut in the main viewport. The main problem with this is that currently when you select text from an input, typing characters has no effect (There is no caret or caret callback). This is most likely due to an oversight on the nsgtk side of things.
Unfortunately I will not be able to get much work done this next week as I'll be vacationing with my family in Colorado. But when I return (and after I iron out the rest of the clipboard bugs), I'd like to look into implementing a Find toolbar, but if time becomes an issue I may just have to jump on ahead to Downloads and come back to Find later.

Friday, May 2, 2008

Beginning to reshape the way that the nsgtk scaffolding is constructed. I think it would be better to have each of the dialogs (About, History, Preferences...) to be associated with a specific browser_window (and actually run as GtkDialogs instead of GtkWindows). Each one will be associated with the browser_window from which it was created. That way *all* of the related callbacks/code can be seperated from gtk_scaffolding which will keep the code cleaner as well as make the input easier to handle. This week I'll be messing around with that and perhaps create a new scheme for gtk_scaffolding.

Sunday, April 27, 2008

First Baby Steps

Started adding contextual right click menu functionality. Now if view -> toolbars -> "menu bar" is active the right click menu only displays back forward and refresh (the most commonly used actions), rather than the entire menu as it does if "menu bar" is inactive.

Saturday, April 26, 2008

Worked on adding a "Use Current Page" button to the homepage option in preferences as practice to work out how the gui is set up.
Discovered that the current url is stored in (from the viewpoint of scaffolding.c) g->top_level->bw->current_content->url and that the scaffolding is very confusing ;)

Thursday, April 24, 2008

Re-read the Glade chapter of "Foundations in GTK+ Development" to reacquaint myself with libglade
Began messing around with gtk/gtk_scaffolding.c and gtk/res/netsurf.glade to implement a dynamic right click menu.

Tuesday, April 22, 2008

I've been accepted!


Benefits to the Community

Improving the GTK interface of the NetSurf browser will bring its low footprint and high speed capabilities to a larger, more diverse community; this will help to fulfill Netsurf's goal of Portability. Since there are currently no other fully functional, small-footprint browsers available for GNOME, and because NetSurf was previously only available for RISC OS based systems, this project will open the door for many more users to join the NetSurf community. This project also aims to fulfill another of NetSurf's goals, that of a Superior User Experience. Combining the tried and tested GNOME interface with NetSurf will provide the perfect mix of usability and speed. Improving upon nsgtk will ensure that any GNOME user who adopts NetSurf will find it completely usable and consistent with the rest of his (or her) desktop environment.

Deliverables Summary

* Improved GTK UI that is completely GNOME standards compliant
* Fully functional browser for *nix based systems (and BSD)

Motivation

Perhaps the most important component of a GSoC project is the students motivation to complete it. I know that this will not be an issue because having already met and talked with most of the development team, I am already very excited to contribute to the NetSurf project. UI development has always interested me, and I look forward to applying the knowledge I gained from my recent reading of Andrew Krause's “Foundations of GTK+ Development”. Furthermore, I will be perpetually motivated by the fact that I myself have also been looking for a less resource intensive browser, so in a way I am working on NetSurf GTK for myself. (Which anyone can tell you is almost always the best motivation).

Project Details

My first goal is to bring NetSurf GTK up to the standards detailed in the GNOME Human Interface Guidelines 2.0 [1]. Next I plan on implementing all (or most) of the features required for nsgtk to be considered fully functional. Any remaining time will be spent improving the UI and adding extra features such as tabs and customizable toolbars.

A more specific outline is detailed here:

* Various GUI Fixes
Fix the about and preferences dialogs to comply with Gnome Interface Guidelines[1]. Provide options to show toolbar buttons as text, graphics or both. Also provide an option to return all toolbars to the control center default for this setting. Fix right click menu so that it displays only the most often used actions (But if the menu bar is disabled it will remain the same as it is now). For accessibility purposes, make sure every toolbar action has an equivalent menu item.

* Text Selection and “Find” toolbar (Early June)
Implement the text selection functionality from the core code. Add ability to copy/cut/paste selected text. Add find ability via toolbar, with live search (if its not too expensive), similar to Firefox.

* Downloads Capability (Late June)
Implement downloads using the current “mock-up” design. Once working, redesign downloads dialog perhaps using the Transmission torrent client as inspiration.

* Bookmarks (Early July)
Implement by using folders and tree view. Add “Bookmarks” menu and create “Edit Bookmarks” and “Add Bookmark” dialogs. If enough time remains, reorganize using tags (similar to Epiphany) or investigate other ways of bookmark organization.

* Save/Export (Mid July)
Save page as index file with CSS, Java, and images. Export as text, HTML, and PDF (among other formats). This will most likely involve rewriting the GTK plotters to rely entirely on Cairo rather than GDK, which will present the most elegant solution as Cairo can plot to SVG and PDF easily.

* Simple Printing (Late July)
Setup a working printing dialog that is able to print both the full page or text only. Attempt to add more advanced options such as “Print background images/colors” and selection-only printing.

* More GUI features (Remaining Time / Post GSoC)
Tabbed browsing is an often requested feature and should not take long to implement. Add extra functionality to the location entry by making it double as a bookmark/web search. For instance, if one enters “burgers” as the location, it should first check if it is the name of a bookmark, but if not then query DNS (as usual, to check for local hostnames), but if nothing is returned query the default search engine (to be specified in preferences). Implementing customizable toolbars will open the door to other features like a bookmarks toolbar. I would also like to add a contextual right-click menu (right clicking on an image gives the option to "Save Image As"). If no one else picks up the project, Keyboard Navigation (mostly tabbing between forms) is a definite (but perhaps optimistic) goal.

By the end of the summer I will deliver a fully functional and desktop standards compliant browser.

Project Schedule

I will be maintaining a daily log of my activity, not only what additions and fixes I make, but also what I learn and the problems I'm having. This will help me keep clear track of my goals as well as allow my mentor to know exactly where I am in the process.

Biography

I will be (most likely) attending Purdue university next year to pursue my undergraduate degree in Computer Science. I discovered Linux when I was 14 and began programming in C that same year during a summer program at Vanderbilt University. My first chance to contribute to the open-source community which had fostered my curiosity all throughout high school came this past winter with the advent of GHOPC, the Google Highly Open Participation Contest. During GHOPC I worked under the GNOME Project to develop several patches for programs such as gThumb. I concluded the program with a new appreciation for what open-source meant, as I had never had anyone that I was able to study programming/computer science under. Although while in high school my programming interests were centered mostly around games, I programmed a remake of Asteroids for my AP Java class which earned me AP computer science student of the year, I have lately become more interested in UI development, especially since my participation in GHOPC and my reading of “Foundations in GTK+ Development”. Since this winter I have been eagerly searching for an outlet to further develop my abilities.

Closing Note

Although I am young, I do not doubt my ability to complete this project and look forward instead to the vast amount of experience that it will afford me. One thing is for sure, gentlemen, my skills will pay the bills. I look forward to continuing my work with the most excellent community of NetSurf developers that I have come to know over the past few weeks. Thank you for your time, and I hope this application has earned your serious consideration.

Best regards,
Michael Lester

(It should also be noted that I do plan on continuing to work on nsgtk well after GSoC has ended)

Links to Further Information
[1] http://library.gnome.org/devel/hig-book/stable/