Hello all,
Nate suggested that it might be a good idea for me to vocalize my thoughts on a particular recent patch to Ink. I don't think that this is a bad patch at all, as it demonstrates how quickly we can change the behavior of this application, and integrate it with the source base. Not only that but it is a perfect example of how the dev plan works.
Patch now, talk later.
So that's what I'm here to do, in reference to the patch which applies the Escape key event to hiding the currently selected dialog. The points I am taking issue with stem from both my years of experience using Adobe Illustrator, as well as being a thoughtful user of all manner of software applications. While I don't have any reference handy to any sort of HIG on this behavior, I'm sure you'll take me on my word that using the Escape key in this manner is a "bad thing". Here's why:
#1. Intended behavior. When I am editing a value in a dialog, and I type the wrong value into a text field, I would immediately think "Escape that command" or "Revert" this results in me hitting the Escape key, where I expect that I can then type in the appropriate value into the text field. Instead, Inkscape will kindly void my transaction and hide the input mechanism. This results in me having to open the dialog again, and enter the new value. Instead of hiding the dialog, I believe that the event tree should happen in this order: - Revert any currently focused field to it's previous value. - If no fields are currently focused, send the main focus of the application to the Canvas window. This will leave the dialog in it's current position, ( which is only a problem until we figure out how to root these dialogs in a constant location ) and perform the Escape routine as expected.
#2. Spatiality When aiming to provide users with a consistent and workflow-friendly interface, it is of the utmost importance that we allow the user to decide what is placed where, and when. This means that palettes really should respond to meta-keys at all ( save for undo and enter for application of current edit ) The dialogs in Inkscape are non-modal, and therefore closing them is not a trivial thing. It is forseeable that in the future, a dialog such as the Object Properties window will remain open for the duration of a work cycle. It would be used to monitor a drag operation for placement of a shape in the current document, as well as other utilities. When dialogs become not only mechanisms to edit information, but also to view information, the location on the screen simply *must* be maintained. Dialogs that move and disappear are of only moderate usefulness.
#3. Alternatives In Illustrator, you can hide all dialogs by hitting "Tab", this provides you with a quick device for previewing your work without interface clutter, or maximizing your work area regardless of tool panels. Tab again will show the dialogs that were hidden in the last operation. I propose that we implement this with one addition: Shift+Tab, or Shift+~ would be used for closing the currently selected ( focused ) dialog. While I don't believe that users will often want to close dialogs such as Object Style, or Properties, there are some dialogs which operate in a near modal fashion: Transformation ( which could be seen as a single cycle operation ) "Open Transformation Dialog"->"Apply Transformation"->"Close Transformation Dialog" however these sorts of operations should be grouped together. Perhaps we could spend some time identifying which palettes would most likely remain open, and which would be single cycle operations, group them together, and apply different UI characteristics for each group. If those key commands are reserved, I'm sure we could find an equally appropriate set of actions to assign to this process. I don't think it's without cause that the patch was applied, however I do think that we should be aiming at producing dialogs which the user will keep open and assign locations to. This is the sort of thing that increases productivity with any application, without much effort from the user.
I believe that the term Dialog is being misused here, and perhaps that is where most of the problem is coming from. To be effective, we should class out the windows that should be palettes apart from the dialogs. We could then provide some form of modality for the dialogs that are left, and windows would behave differently depending on what was to be done. I welcome any further discussion on this, as I could be totally off-base with the entire thing. I guess we really wouldn't know until we could see it implemented both ways and by then all the work would be done.
Thanks for your time and patience, -Thomas