- /* If this is a text grid window, and line input is active, then redirect the key press to the line input GtkEntry */
- if( win->type == wintype_TextGrid && (win->input_request_type == INPUT_REQUEST_LINE || win->input_request_type == INPUT_REQUEST_LINE_UNICODE) )
- {
- if(event->keyval == GDK_Up || event->keyval == GDK_KP_Up
- || event->keyval == GDK_Down || event->keyval == GDK_KP_Down
- || event->keyval == GDK_Left || event->keyval == GDK_KP_Left
- || event->keyval == GDK_Right || event->keyval == GDK_KP_Right
- || event->keyval == GDK_Tab || event->keyval == GDK_KP_Tab
- || event->keyval == GDK_Page_Up || event->keyval == GDK_KP_Page_Up
- || event->keyval == GDK_Page_Down || event->keyval == GDK_KP_Page_Down
- || event->keyval == GDK_Home || event->keyval == GDK_KP_Home
- || event->keyval == GDK_End || event->keyval == GDK_KP_End)
- return FALSE; /* Don't redirect these keys */
- gtk_widget_grab_focus(win->input_entry);
- gtk_editable_set_position(GTK_EDITABLE(win->input_entry), -1);
- gboolean retval = TRUE;
- g_signal_emit_by_name(win->input_entry, "key-press-event", event, &retval);
- return retval; /* Block this key event if the entry handled it */
- }
- if(win->input_request_type != INPUT_REQUEST_CHARACTER &&
- win->input_request_type != INPUT_REQUEST_CHARACTER_UNICODE)
- return FALSE;
-
- int keycode;
-
- switch(event->keyval) {
- case GDK_Up:
- case GDK_KP_Up: keycode = keycode_Up; break;
- case GDK_Down:
- case GDK_KP_Down: keycode = keycode_Down; break;
- case GDK_Left:
- case GDK_KP_Left: keycode = keycode_Left; break;
- case GDK_Right:
- case GDK_KP_Right: keycode = keycode_Right; break;
- case GDK_Linefeed:
- case GDK_Return:
- case GDK_KP_Enter: keycode = keycode_Return; break;
- case GDK_Delete:
- case GDK_BackSpace:
- case GDK_KP_Delete: keycode = keycode_Delete; break;
- case GDK_Escape: keycode = keycode_Escape; break;
- case GDK_Tab:
- case GDK_KP_Tab: keycode = keycode_Tab; break;
- case GDK_Page_Up:
- case GDK_KP_Page_Up: keycode = keycode_PageUp; break;
- case GDK_Page_Down:
- case GDK_KP_Page_Down: keycode = keycode_PageDown; break;
- case GDK_Home:
- case GDK_KP_Home: keycode = keycode_Home; break;
- case GDK_End:
- case GDK_KP_End: keycode = keycode_End; break;
- case GDK_F1:
- case GDK_KP_F1: keycode = keycode_Func1; break;
- case GDK_F2:
- case GDK_KP_F2: keycode = keycode_Func2; break;
- case GDK_F3:
- case GDK_KP_F3: keycode = keycode_Func3; break;
- case GDK_F4:
- case GDK_KP_F4: keycode = keycode_Func4; break;
- case GDK_F5: keycode = keycode_Func5; break;
- case GDK_F6: keycode = keycode_Func6; break;
- case GDK_F7: keycode = keycode_Func7; break;
- case GDK_F8: keycode = keycode_Func8; break;
- case GDK_F9: keycode = keycode_Func9; break;
- case GDK_F10: keycode = keycode_Func10; break;
- case GDK_F11: keycode = keycode_Func11; break;
- case GDK_F12: keycode = keycode_Func12; break;
- default:
- keycode = gdk_keyval_to_unicode(event->keyval);
- /* If keycode is 0, then keyval was not recognized; also return
- unknown if Latin-1 input was requested and the character is not in
- Latin-1 */
- if(keycode == 0 || (win->input_request_type == INPUT_REQUEST_CHARACTER && keycode > 255))
- keycode = keycode_Unknown;
- }