Template Version: @(#)sac_nextcase %I% %G% SMI
This information is Copyright 2009 Sun Microsystems
1. Introduction
    1.1. Project/Component Working Name:
         Virtual Keyboard Input Method
    1.2. Name of Document Author/Supplier:
         Author:  Naoyuki Ishimura
    1.3  Date of This Document:
        21 January, 2009
4. Technical Description

OVERVIEW

As an extension to the current IIIMF keyboard layout emulation feature [1],
this project proposes to add GUI-based virtual keyboard on our desktop.

Virtual keyboard is a graphical representation of computer keyboard on
GUI desktop that can be summoned on as needed based on the current input
mode and can be used to input characters by clicking on the graphically
represented keys on the virtual keyboard.

The virtual keyboard that will be delivered by this project will not only
supply an additional way of inputting characters (by clicking on the keys on
the virtual keyboard), but also allow individual users to create a new
keyboard layout as a new emulation based input mode or customize the current
and existing keyboard layout as needed so that they can re-map keys, assign
a different character (or a set of characters) on a key, or do both on
the current keyboard layout and keys.

Once customized layout is saved with your specified name, it can be used
persistently. User can create as many as custom layout they wish; and they
will be usable for both at the virtual keyboard and, if chosen so, also
with the physical keyboard.

This feature has been asked by US government and EMEA customers specifically
for Unicode/UTF-8 locales to aid multiscript input and also to allow user
customization of the keyboard layouts. As we do not add any new features to
CDE, in the same manner and context, we do not plan to back-port this to
legacy codeset locales at this point unless we have a requirement with
some specific revenue number attached. We also consider that the existing
input modes and methods quite good enough and sufficient for such legacy
codeset locales.

Once approved by PSARC, we will also go through xDesign/HCI review so that
the resulting GUI will meet Sun standard and be intuitive as much as possible.


TECHNICAL DETAILS

(1) User Interface:

The virtual keyboard [9] which can be invoked from terminals or GUI desktop    |
menu has keyboard window and control panel as its main user interface          |
components:                                                                    |

- Keyboard window:

  This will be the main interface that users will use to see and interact
  with to input characters and also to customize with.

  Users can have and use multiple keyboard windows on their desktop.
  In terms of how to group and organize such multiple keyboard windows,
  there will be three different styles that one can choose from: stand-alone,
  internal frame, and tab styles. (For more details, please see the sub-section
  on the control panel at below.)

  Each keyboard window will show a keyboard layout with usual character and
  modifier keys based on the XKB symbol and geometry data of the current
  input mode. Users can select a specific XKB symbol, an XKB geometry, or
  both, such as "US/English" symbol, "Generic 101" geometry, and so on.
  [10, 11, 12]

  A character key will act like a push button and a modifier key will act
  like a toggle button as specified in the XKB data. Each key will show the
  currently effective character(s) based on the combined state of the key
  with the modifier keys. As an example, if Caps Lock key is in effect,
  the key for 'a' will show 'A'. (Please see "Appendix A: Visual effect with
  modifier keys" at pages 4 and 5 of [10].)

  The character(s) shown on the keys will also be customizable.

  When the keyboard window's context menu is brought up by clicking on         |
  the right mouse button at the window, one can also choose to show or hide    |
  the control panel, select symbol data, edit keys, and do some other          |
  convenience operations directly. [11]                                        |

- Control panel:

  The control panel can be used to control keyboard window style and mode
  among other things as shown in [12].
  
  The style defines how keyboard windows are organized. As noted at the above
  sub-section, the following three different styles will be supported:

  -- Stand-alone frame style: Each keyboard will be displayed as a separate
     top-level window.

  -- Internal frame style: One or more keyboards will be displayed within
     a top-level container window as internal frame windows.

  -- Tab frame style: Each keyboard will be displayed in a tab pane of
     a top-level container window.

  Please see "Appendix B: Multiple view with different styles" at pages 5 and
  6 at [10] for a couple of concept designs.

  The mode defines whether keyboard windows are in input mode or in
  design mode (i.e., edit or customization mode). When the current mode is in
  input mode, if one clicks on a key, associated character(s) will go to
  an application that had the input focus the last. While it is in design
  mode, users can edit the keyboard layout and keys for a customization.

  When "New Keyboard" button is pressed along with selections on symbol and
  geometry, a new keyboard layout (and thus a new input mode) can be created
  and saved.

  There will be also a check box for "Synchronize with physical keyboard"
  which can be used to instruct the current keyboard layout emulation input
  mode to follow the customized keyboard layout and keys on the virtual
  keyboard window.

  As noted earlier, some of the operations on the control panel can also be
  done via the context menu of the keyboard window.

(2) Keyboard customization and keyboard data handling:

When it is in design mode, the keyboard window will be used as the keyboard
layout editor. For each key, users can specify a character or a set of
characters by using an associated text field or by doing copy or swap          |
operations via drag-and-drop. (Using the same drag-and-drop, the copy          |
operation is done between two keyboards and the swap is done within            |
a single keyboard.)                                                            |

When a user creates his own keyboard layout (symbol) data, it will be saved in
the user's own directory ($HOME/.iiim/vkb/) as an XML file. It will have user
specified layout name and will be sent to the input method server. (Similar
effect will also take place if one customizes an existing keyboard layout.)

At that time, input method switcher [2] will be notified to update its
language list to include the newly created keyboard layout so that the user
can select it from the input method switcher menu afterward.

To make the customization persistent, it is one of the responsibilities of
the IIIM start-up client program (/usr/lib/iiim/iiimx-settings-init) which
will send the custom keyboard layout data, if any, to the input method server
at the start of a new GUI desktop session.

(3) Input mechanism on character(s):

The character(s) from a virtual keyboard is passed as input method committed
text to other applications. What that means is that the virtual keyboard
generated text data can be any Unicode character or text and will not be
restricted to XKeyEvent data of X11.

        [Virtual keyboard]
                |
                |
           character(s)
                |
                |     +--character(s)--> [GUI client with last input focus]
                V    /
       [Input Method Server]

(4) Pre-defined keyboard symbol and geometry data:

Virtual keyboard has pre-defined geometry and symbol data set that came from
XKB geometry and symbol data [1]. As of today, they are stored separately in
IIIM private directory and thus, during run-time, it does not need X11 XKB.
The symbol data are shared with IIIMF keyboard layout emulation functionality.

As previously discussed during the review of [1], once we have a set of
interfaces established between IM and Xlib/X servers (especially Xorg and
Xnewt) on the XKB operations, we will transparently replace this redundant
component by using the future interfaces between the IM and the X servers
so that there will be a single set of XKB data in the system for the above
mentioned system components.

(5) Candidates for future enhancement:

The first implementation from this project will not include the following.
They are possible candidates for future enhancement and we will come back
again with new PSARC case(s) as needed:

- System-wide availability of custom layout:
  Currently, the customized layout data is only for and per user.
  System-wide customization will be considered when there is a formal
  requirement.

- Function keys and other features of physical keyboards:
  The virtual keyboard input method at this point aims only at character
  input. Emulating all functionalities of physical keyboard is not currently
  considered. Thus function key support and such will be considered when
  it is formally required.


INTERFACE STABILITY

There is no significantly notable interfaces imported. The project exports
the following interfaces.

    Interfaces                      Stability        Note
    ----------                      ---------        ----
    /usr/bin/iiim-keyboard          Committed        Virtual keyboard itself [9]

    /usr/lib/iiim/VKB.jar           Project Private  Virtual keyboard jar file

    /usr/lib/iiim/libiiimvkb_jni.so Project Private  Virtual keyboard lib file

    /etc/iiim/geometry.vkz          Project Private  Virtual keyboard private
                                                     data file

    /usr/share/gnome/help/iiim-keyboard/*            GUI help file
                                    Project Private 

    $HOME/.iiim/vkb/*               Project Private  Customized data


RELEASE BINDING

The project team asks for Micro/Patch release binding.


REFERENCES

[1] PSARC 2007/028 EMEA input methods with keyboard layout emulation
[2] PSARC 2005/525 IIIMF upgrade to revision 12
[3] Internet/Intranet Input Method Architecture:
        http://www.openi18n.org/subgroups/im/iiimf/whitepaper/whitepaper.html
    The same HTML file will be available at the case directory:
        
http://www.opensolaris.org/os/community/arc/caselog/2009/041/materials/iiimf-whitepaper.html
[4] Internet-Intranet Input Method Protocol (IIIMP) specification:
        http://www.openi18n.org/subgroups/im/iiimf/protocol/spec.html
    The same HTML file will be available at the case directory:
        
http://www.opensolaris.org/os/community/arc/caselog/2009/041/materials/iiimp-spec.html
[5] ASARC 1999/276 /usr/lib/im directory for platform independent Input Method
    Systems
[6] ASARC 1998/515 Multi Script Input Support in UTF-8 locales
[7] ASARC 1998/422 IIIMP - Internet/Intranet Input Method Protocol
[8] ASARC 1997/359 Multilingual Input Method Server for X/Java/Corba
[9] iiim-keyboard(1) man page:
        
http://www.opensolaris.org/os/community/arc/caselog/2009/041/materials/iiim-keyboard.1
[10] High-level Virtual Keyboard UI/Module design (v0.2):
        
http://www.opensolaris.org/os/community/arc/caselog/2009/041/materials/VKB_design_02.pdf
[11] Draft keyboard window screen snapshots:
        
http://www.opensolaris.org/os/community/arc/caselog/2009/041/materials/Keyboard.png
        
http://www.opensolaris.org/os/community/arc/caselog/2009/041/materials/Input-mode-context-menu.png
        
http://www.opensolaris.org/os/community/arc/caselog/2009/041/materials/Edit-mode-context-menu.png
[12] Draft control panel window screen dump:
        
http://www.opensolaris.org/os/community/arc/caselog/2009/041/materials/ControlPanel.png

6. Resources and Schedule
    6.4. Steering Committee requested information
        6.4.1. Consolidation C-team Name:
                G11N
    6.5. ARC review type: FastTrack
    6.6. ARC Exposure: open


Reply via email to