Ну очень интересно что ж это за баг такой.
Вот в коде https://code.ros.org/svn/opencv/trunk/opencv/modules/highgui/src/window_gtk.cpp есть интересная штука.
static gboolean icvOnKeyPress( GtkWidget * /*widget*/,
GdkEventKey* event, gpointer /*user_data*/ )
{
int code = 0;
switch( event->keyval )
{
case GDK_Escape:
code = 27;
break;
case GDK_Return:
case GDK_Linefeed:
code = '\n';
break;
case GDK_Tab:
code = '\t';
break;
default:
code = event->keyval;
}
code |= event->state << 16;
#ifdef HAVE_GTHREAD
if(thread_started) g_mutex_lock(last_key_mutex);
#endif
last_key = code;
"code |= event->state << 16;"
По ходу это и есть тот сдвиг за 16 бит