keyboard switcher: optional flags/icons?

First, I apologize for not having followed the flag threads or reviewed
all of them. Second, I apologize if this is a really bad idea; it's
something that occurred to me when I read a few of the messages, I
didn't see it among those, and I haven't thought it through. Third,
I haven't seen any part of the current interfaces, so I may be about
to describe what's already there.

You might say I'm raising this up a flagpole to see if anyone salutes it.

How about providing a "Use an icon" interface in the keyboard layout
switcher preferences?  As I understand it, the main thing in the switcher
prefs is to select which layouts are available for fast switching.
I.e., the switcher is a small clickable thing on the panel which when
clicked cycles through keyboard layouts, so the prefs determine which
layouts are cycled through.

It can look like this, a scrollable checklist:
  | [ ] Layout A   |*|
  | [ ] Layout B   |*|
  | [/] Layout C   |*|
  | [ ] Layout D   | |
  | [/] Layout E   | |
  | [/] Layout F   | |
  | [ ] Layout G   |^|
  | [ ] Layout H   |v|

So here with Layout C, Layout E, and Layout F checked, the switcher itself
displays something which indicates Layout C is currently selected. When
the switcher is clicked once, the layout changes to Layout E. When clicked
again, it changes to Layout F. And when clicked yet again, it changes back
to Layout C.

The user needs two additional pieces of information:
1) What will represent a layout in the switcher?
2) What does the layout actually look like?

For the first piece, we have the flag problem. Flags would be good because
they're easily recognized in the periphery, and bad because some people
or governments with nuclear weapons refuse to grow up.

What I propose is to allow the user to select any image. There's an
ongoing discussion on usability list to revamp the icon selector and
it should be suitable for this. The interface could look like this:

  Layouts:              Switcher Icon:
  +----------------+-+       ___________
  | [ ] Layout A   |*|      /           \
  | [ ] Layout B   |*|      | Some icon |
  |-[/]-Layout C---|*|      |  for      |
  | [ ] Layout D   | |      | Layout C  |
  | [/] Layout E   | |      \___________/
  | [/] Layout F   | |
  | [ ] Layout G   |^|  +------------------------+
  | [ ] Layout H   |v|  | Select another icon... |
  +----------------+-+  +------------------------+

Here the dashes indicate a selected row, and the icon is that for
the selected row; in this example, Layout C.  The button labelled
"Select another icon..." would open the icon selector dialog.
(For detail of that dialog, see usability gnome org)

The default icon would be whatever Sergei is planning for flagless
scenario. Whether flags are available in the icon selector would
depend on the sources of icons used by the selector. The user would also
be able to use any image file, assuming the icon selector allows that.
No association between flags and layouts would be assumed. If a layout
is suitable for use in the US and Canada, the user could pick either
flag to represent it, or even -say- the icon for folders.

Thus users would be able to choose from a flag collection if they have
it, or choose just some random images. (Btw, the spot that displays
the icon should be a drop target, so the user can drag in an image
from anywhere, even the web.)

The last part of the interface is what the layout looks like. This
span the width of the window and be placed below the what I've
already specified:

  Layouts:              Switcher Icon:
  +----------------+-+       ___________
  | [ ] Layout A   |*|      /           \
  | [ ] Layout B   |*|      | Some icon |
  |-[/]-Layout C---|*|      |  for      |
  | [ ] Layout D   | |      | Layout C  |
  | [/] Layout E   | |      \___________/
  | [/] Layout F   | |
  | [ ] Layout G   |^|  +------------------------+
  | [ ] Layout H   |v|  | Select another icon... |
  +----------------+-+  +------------------------+

  Layout Details for Layout C
  |                                              |
  |   Some representation of the keyboard.       |
  |    Preferably zoomable so it's small,        |
  |    but still able to show all info.          |
  |                                              |
  +-----------------------+ +--------------------+
  | Modify this layout... | | Remove this layout |
  +-----------------------+ +--------------------+

The "Modify this layout..." button would allow for tweaks. A tweaked
layout would not change the original layout in the list, but instead
would add a new one; e.g., "Layout C (modified)". The second button,
"Remove this layout" would only be sensitive for modified layouts.
Clicking "Modify this layout..." when an already modified layout is
selected should directly modify the selected layout. Clicking it
when one of the default layouts is selected should create a copy
and modify the copy, even if other modified copies exist. If the
user chooses to modify a checked original, then the check should be
removed from the original and added to the modified copy, as that
is most likely what the user expects. Of course, if the user goes
back to the now unchecked original and re-checks it, then it
should behave as usual - adding the original to the list.

The interface described above can be instant apply, however the
icon selector and layout modifier should be modal dialogs (i.e.,
with OK and Cancel) transient for the main window. Note that
changing the icon can be a modeless operation if the user just
drags and drops an icon. (Really, dragging is a mode, but it's
less obtrusive than a modal dialog.) Layout modification might
also skip the modal dialog if the keyboard representation allows
direct modification, but it should be a mode in the window so it
doesn't happen accidentally. This would work like this:
1) User clicks "Modify this layout..."
2) The representation is focused and adds a row of buttons including
   an OK and a Cancel button.
3) The other parts of the window, except Help, become insensitive.
4) An item is added to the list for the new layout, if needed.

So, for example, the window now looks like:

 Layouts:                                           Switcher Icon:
 /---------------------------------------------+-\     _____________________
 | [ ] Layout A                                |*|    /                     \
 | [ ] Layout B                                |*|    | Some icon           |
 | [ ] Layout C                                |*|    |  for                |
 |-[/]-Layout C-(modified)---------------------| |    | Layout C (modified) |
 | [/] Layout E                                | |    \_____________________/
 | [/] Layout F                                | |
 | [ ] Layout G                                |^|  /------------------------\
 | [ ] Layout H                                |v|  | Select another icon... |
 \---------------------------------------------+-/  \------------------------/

 Layout Details for Layout C (modified)
 |#####                                                                      |
 |#Esc#F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12   Prnt ScLk Pause              |
 |#####                                                                      |
 | `   1  2  3  4  5  6  7  8  9  0  -  =  BS   Ins  Home PgUp   NmLk /  * - |
 | Tab  Q  W  E  R  T  Y  U  I  O  P  [  ]  \   Del  End  PgDn     7  8  9 + |
 | Ctrl  A  S  D  F  G  H  J  K  L  ; '  Entr                      4  5  6 E |
 | Shift  Z  X  C  V  B  N  M  ,  .  /  Shift         Up           1  2  3 N |
 | Ctrl Alt         SpaceBar         Alt Ctrl   Left Down Right    0     . T |
 | _Edit Key | _Add Key | _Remove Key | _Show MainGroup v| _Cancel |   _OK   |
 /-----------------------\ /--------------------\
 | Modify this layout... | | Remove this layout |
 \-----------------------/ \--------------------/

 +-------+                                                           /-------\
 | Help  |                                                           | Close |
 +-------+                                                           \-------/

Here the boxes with slashes (/,\) in the corners indicate insensitive
widgets. The hashed (#) square around Esc is a selection ring. Pressing
one of the buttons ("Edit Key", "Add Key", etc.) below the keyboard
would affect the key with the selection ring around it. (I don't know
what buttons are actually needed.) "Cancel" and "OK" would exit the
modifying mode as usual and the row of buttons would disappear.
The "Close" button in the window is insensitive, but we can't control
the one in the window frame. If the user clicks that, the computer
should beep and subtly indicate the mode needs to be left - perhaps
by flashing the OK button once.

"Show MainGroup v" (the 'v' is an arrow) is an option menu to show
other groups in the layout. (The things AltGr controls, afaik.) It
should perhaps be below the layout, so that it can be useful when
not modifying the layout.

I have in mind that the zoom would work similar to gucharmap's: the
selected key would show a tooltip-like popup with more details. To
make keyboard access more fluid, arrow keys should move the selection
ring within the keyboard and Tab should move to and from it.

I don't know what else is in the keyboard control panel, but what
I've described could go on a "Layout" tab of that. The keyboard
switcher itself could be presented in the notification area when
the user has checked more than one keyboard layout, and removed if
the user select only one. In this way, the desktop automatically
supports the common intent.

I seem to have gotten a bit carried away. :-) I'll stop now.


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