What do keyboards and socks NOT have in common?

by Michael S. Kaplan, published on 2007/01/19 03:01 -05:00, original URI: http://blogs.msdn.com/b/michkap/archive/2007/01/19/1491959.aspx

It is an old nursery rhyme and it goes something like this:

All around Microsoft Windows
The programs added keyboards;
Windows thought 'twas all in fun, but
Pop goes the LangBar!

Ok, I may have misremembered the words and misplaced a mulberry bush somewhere. You get the idea....

There are a whole lot of programs that add input methods in Windows.

And it isn't just keyboards; the Text Services Framework includes IMEs, speech, handwriting, and lots of other technologies surrounding the issue of getting text content from users.

Hell, you can't even change your user locale without adding a new keyboard or sometimes even more than one....

In fact, there are times that you add a keyboard and then if you look again later you see that the Text Services Framework has added some of those other related input technologies on the language you have chosen.

The bleeding things are like wire hangers, reproducing any time you turn your back on them!

This is really just the opposite of socks, which seem to disappear one by one when you don't pay attention....snd the ones that disappear are never the singles, they are one half of another pair, every time!

I have been wracking my brains trying to understand this behavior.

Not the changing user locale one, I have seen that code (once upon a time I owned that code!). And people were complaining that changing the user locale did not give them an obvious way to type in the language they switched to.

And not what the new MSKLC will be doing (adding the keyboard you install to the Language Bar is a heavily requested feature of the current version of MSKLC).

Oh hell, could it be that every product does what I just did, and talked themselves into thinking that users want keyboards popping up like roaches in a dirty hovel with uncovered food?

Or maybe it is just that the retarded definition of the words install and uninstall as applied throughout the Win32 API documentation that causes them to not mean "installed on the computer" but instead "added to the Language Bar". This definition has everyone so confused that they hardly know which end is up.

It gets worse when you think about functions like LoadKeyboardLayout and UnloadKeyboardLayout, which can add a layout to or remove a layout from the Language Bar, while doing nothing to persist the change (makes you wonder what happens if you call SystemParametersInfo with the SPI_SETDEFAULTINPUTLANG flag and the HKL returned by LoadKeyboardLayout. Is Windows smart enough to not set the default to something that it does not load when log off and log back in?

(Recurring nightmare could be taking clothes out of the dryer and finding a Gernan keyboard in there?)

Now mind you I am not saying that keyboard SHOULD be like socks -- I mean, losing a layout seems infinitely worse than getting new ones every once in a while. But is the answer to "no one can find our uber-cool Spaceman Spiff keyboard of a feature that our program randomly installs" really to just dump it into the Language Bar?

Maybe there should be a better choice here, for the sake of usability. One that makes the Language Bar less of a dumping ground of per-session and per-user and per-thread and per-process and per-profile randomosity....

(And I am saying this as one of the huge champions for adding yet another instance of the problem into the world in the very near future (albeit the first one that actually makes more direct sense than any prior incarnation of the issue -- there being no better reason to add a keyboard than in a package whose only job is to install a keyboard).

Thought maybe the rest of the world can think twice before treating these features as "pay attention to me!" groupies that can only get people to find them by randomly adding them to the user's language bar....


This post brought to you by  (U+13a7, a.k.a. CHEROKEE LETTER KA)

no comments

go to newer or older post, or back to index or month or day