
Seeing that the deadline has been extended, I'm considering applying for the Google Summer of Code. My idea is to implement customizable toolbars (preferably via a drag-and-drop interface similar to that in Firefox). This would apply to both the tools bar and the toolbar that sits below the menus, but wouldn't need to apply to the toolbox (the tool-specific toolbar).
The steps involved: 1. (required) Create the required prefs infrastructure (proposed: eq. "tools.selector.order", -1 means not in the toolbar, sorting by this pref determines order) 2. (required) Move the relevant portions of code to gtkmm, probably refactoring along the way. 3. (required) Implement a drag-and-drop customization interface ("Customize Interface" item in Edit), using the Gtk::Toolbar class. 4. (bonus) Work on a preliminary architecture to allow extensions to define custom toolbar buttons. 5. (bonus) Allow grouping toolbar buttons into a compound button like the New button in OpenOffice or Back/Forward in Firefox
I would like to know: a) Whether it is doable in the GSoC timeframe, b) Where is the code that creates & manages the tool buttons? I need a further look at it before I decide. Obviously it's not in tools-switch.cpp. Is it dispersed among the event context GObjects?
Regards, Krzysztof (Chris) Kosiński

No comments yet, so I fleshed this out some more. Please comment on this proposal.
The proposal is to implement user-customizable toolbars in Inkscape and a drag-and-drop interface to modify them, familiar from Firefox and Evince. This includes the main toolbar and the tools bar.
One of the motivations for this project is that Inkscape is quickly becoming unusable on small screens due to the amount of new features and tools added. Additionally, there is a planned project to create a simplified version of Inkscape, intented for children and small form factor devices. Customizable toolbars would be the first step to allow this project to be completed without having to maintain a separate source tree for it (i.e. just by shipping a modified preferences file).
The toolbar code in Inkscape dates back to Sodipodi, and as such uses GTK via its C interface. The implementation will involve porting this code to use the C++ bindings. Drag-and-drop will be implemented using the methods exposed by the Gtk::Toolbar class.
Implementation plan: 1. Port the toolbar code to gtkmm. 2. Create the preferenes infrastructure to store the toolbar layout. 3. Modify the toolbar code to create the toolbar from the preferences file. 4. Create a dialog that will allow the user to customize the toolbar contents by dragging and dropping buttons onto the toolbar. 5. Create an API to allow extensions to define new toolbar buttons. Modify one extension to make use of this API.
Evince can be used as an UI blueprint.
Actualy, this is very much in scope of the Kidscape project: https://blueprints.launchpad.net/inkscape/+spec/kidscape-project
Regards, Krzysztof Kosiński
participants (1)
-
Krzysztof Kosiński