Re: GtkComboBox design issues



The questions I'll address are UI ones; you probably want to mail
Arlo Rose <arlo workthatmouse com>
(the UI lead for Eazel, was in charge of Mac OS 8 UI, etc.)
(cc'ing to the list), as he can probably help a lot with such things
(or even test some of them out -- they have a UI test lab there!).

I'll include my amateur opinions below.

Thus spake Kristian Rietveld:
> 2. Owen told about the issue of duplicates in his mail of Oct 26. I think
> this problem only applies to the GtkComboBoxText. Having the same
> GtkWidget on the grid of the GtkComboBoxGrid twice isn't possible. But the
> question is: Do we want duplicates or not? Do we want an option to switch
> the allowance of duplicates on/off?

Do we have a particular case where duplicates are useful?
I'd like to see a good reason to support them, esp. if they add
complexity to the API/codebase.
Otherwise I'm tempted by eXtreme Programming: do the simplest thing
that works.
OTOH Qt allows duplicates, right? So Troll Tech thinks someone has a
use for duplicates.

Basically from the perspective of pop-up menus, duplicates make no
sense, but from the perspective of a shell-type command-line history
they make sense; two different paradigms -- I don't know which is
closer to what a combobox is/should be.

> 3. Which kind of {tab,auto}completion do we want in the
> GtkComboBoxText? It now has tabcompletion when typing and it'll try to
> autocomplete if the user presses enter.

This is a difficult one, as we have 3 standards:
(1) Shell tab-completion/arrow to scroll command history
(2) Browser-style (IE/Moz) autocompletion
(3) Tab switches between widgets in dialogs

1 & 3 conflict in what the behaviour of tab is, and many people feel
strongly about both, so it probably should be configurable.
The default setting should be TAB switches widgets (not completion),
as that's what newbies are familiar with, and anyone who has TAB
completion hardwired into their brain can probably figure out gnomecc.
Which leaves two questions:
(a) how do you keyboard navigate widgets if TAB is bound to completion?
 { I have no idea, and neither would most users -- ideas? }
(b) if not TAB, then what key should be the completion character??
 { some people have suggested Space (problem if your string has spaces
   in it), other options could be Right Arrow (at the end of your
   input? might make editing input harder) or Esc (conflicts with Esc
   = Cancel) }

Also, enter should not default to autocomplete if this is an `editable
combobox' (er, where the user input new strings), but could be if it
were a non-editable combobox (i.e., pop-up menu). However, if it were
autocomplete on one and not the other, this could be confusing.

So this is a thorny question.
My suggestion (off the top of my head):
Pop-up a list of possible completions in the menu/list below.
If the user likes a completion, they can hit DOWN to scroll through
the options. In particular if there is a unique completion, hitting
DOWN provide `tab'-completion.
This provides a tabcompletion that:
* Is visually obvious (you hit down to scroll down the list)
{ Yes, there is a problem if the combobox is near the bottom of the
screen, so the menu pops above the combobox; thus,
make DOWN go to the FIRST item on the completion  list,
and UP go to the LAST item.
This results in: consistent keyboard
usage (so you don't need to look at the screen) and intuitive
behaviour both times.}, which makes it easy for new users to discover,
and means that the non-standard (not TAB) key isn't a problem.

* Doesn't interfere with TAB navigation.

* Leverages the advantages of a GUI to show an updating list of
  possible completions, which can easily be scrolled through
  (or selected by mouse, if that's your game) (this actually makes it
  MORE useable than a commandline!)</buzzwords>

The only problem I see with this is that the tab-complete list might
flash when updating quickly (esp. for fast typists); solutions would
be:
(a) fix the size of the tab-complete list box/window so it doesn't
resize when its contents change
(prolly make it as big as possible, though preferably below the
input box -- none of this microsoft 3-4 line endless scroll-buffer;
the user should see as many completions as possible)
(b) queue box refreshes, so it changes maybe 1x/second at most?
    (this needs testing prolly)
(c) and if the user hits DOWN, immediately refresh the list based on
    the completions of the current textbuffer.

Re: autocompletion:
The ONLY time you should have autocompletion (IMHO) is if the user is
selecting from a FIXED list of options (i.e., a popup menu), and there
is only one possible completion, in which case it would be fine to
either (or both):
(a) complete the user's input (but highlighting it so it can be
    killed)
(b) make Enter select the unique completion.

The reasons I think this should be the only time that happens is:
(1) If there is not a fixed list of options, than maybe the user wants
    to enter a new input which we don't know about, so we shouldn't
    second-guess the user (in some webbrowser I had an awful time
    trying to get it to NOT autocomplete -- I got in the habit of
    leaving a SPACE right in front of my cursor so it wouldn't try to
    autocomplete. This contortion should be avoided)
(2) If there's more than one possible completion, there's no
    obvious/natural/canonical way to choose one completion over the
    others. Any attempt to do so confuses the user `Hey, I wanted the
    other one!'.

I think this resolves all problems (intuitive, useable, doesn't get in
the way/conflict with other user expectations)...

> I hope somebody will respond, so I can get these issues right before I
> release the next snapshot (which I intend to do in about 2 weeks)...

Sorry about not commenting earlier -- I've been a bit busy; however,
I'll definitely take a look at your next snapshot, and maybe at the
latest one.

-- 
  -nils
Public key: http://www.nbarth.net/~nbarth/pub-key.txt

Attachment: pgpoH4QgY652g.pgp
Description: PGP signature



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]