/* Called `fuse_keyboard_init' as svgalib pollutes the global namespace with keyboard_init... */ void fuse_keyboard_init(void) { struct key_info *ptr; struct spectrum_keys_wrapper *ptr2; keysyms_map_t *ptr3; struct key_text_t *ptr4; keyboard_release_all(); keyboard_data = g_hash_table_new( g_int_hash, g_int_equal ); for( ptr = keyboard_data_table; ptr->key != KEYBOARD_NONE; ptr++ ) g_hash_table_insert( keyboard_data, &( ptr->key ), &( ptr->bit ) ); spectrum_keys = g_hash_table_new( g_int_hash, g_int_equal ); for( ptr2 = spectrum_keys_table; ptr2->input != INPUT_KEY_NONE; ptr2++ ) g_hash_table_insert( spectrum_keys, &( ptr2->input ), &( ptr2->spectrum ) ); keysyms_hash = g_hash_table_new( g_int_hash, g_int_equal ); for( ptr3 = keysyms_map; ptr3->ui; ptr3++ ) g_hash_table_insert( keysyms_hash, &( ptr3->ui ), &( ptr3->fuse ) ); key_text = g_hash_table_new( g_int_hash, g_int_equal ); for( ptr4 = key_text_table; ptr4->key != -1; ptr4++ ) g_hash_table_insert( key_text, &( ptr4->key ), &( ptr4->text ) ); }
static int win32ui_lose_focus( HWND hWnd, WPARAM wParam, LPARAM lParam ) { keyboard_release_all(); ui_mouse_suspend(); return 0; }
int ui_event(void) { XEvent event; XFlush( display ); while( XEventsQueued( display, QueuedAlready ) ) { XNextEvent( display, &event ); switch(event.type) { case ConfigureNotify: xdisplay_configure_notify(event.xconfigure.width, event.xconfigure.height); break; case Expose: xdisplay_area( event.xexpose.x, event.xexpose.y, event.xexpose.width, event.xexpose.height ); break; case ButtonPress: ui_mouse_button( event.xbutton.button, 1 ); break; case ButtonRelease: ui_mouse_button( event.xbutton.button, 0 ); break; case MotionNotify: if( ui_mouse_grabbed ) { ui_mouse_motion( event.xmotion.x - 128, event.xmotion.y - 128 ); if( event.xmotion.x != 128 || event.xmotion.y != 128 ) XWarpPointer( display, None, xui_mainWindow, 0, 0, 0, 0, 128, 128 ); } break; case FocusOut: keyboard_release_all(); ui_mouse_suspend(); break; case FocusIn: ui_mouse_resume(); break; case KeyPress: xkeyboard_keypress(&(event.xkey)); break; case KeyRelease: xkeyboard_keyrelease(&(event.xkey)); break; case ClientMessage: if( event.xclient.format == 32 && event.xclient.data.l[0] == delete_window_atom ) { fuse_emulation_pause(); menu_file_exit(0); fuse_emulation_unpause(); } break; } } return 0; }
int ui_event(void) { XEvent event; while(XCheckMaskEvent(display,~NoEventMask,&event)) { switch(event.type) { case ConfigureNotify: xdisplay_configure_notify(event.xconfigure.width, event.xconfigure.height); break; case Expose: xdisplay_area( event.xexpose.x, event.xexpose.y, event.xexpose.width, event.xexpose.height ); break; case ButtonPress: ui_mouse_button( event.xbutton.button, 1 ); break; case ButtonRelease: ui_mouse_button( event.xbutton.button, 0 ); break; case MotionNotify: if( ui_mouse_grabbed ) { ui_mouse_motion( event.xmotion.x - 128, event.xmotion.y - 128 ); if( event.xmotion.x != 128 || event.xmotion.y != 128 ) XWarpPointer( display, None, xui_mainWindow, 0, 0, 0, 0, 128, 128 ); } break; case FocusOut: keyboard_release_all(); ui_mouse_suspend(); break; case FocusIn: ui_mouse_resume(); break; case KeyPress: xkeyboard_keypress(&(event.xkey)); break; case KeyRelease: xkeyboard_keyrelease(&(event.xkey)); break; case ClientMessage: if( event.xclient.data.l[0] == delete_window_atom ) fuse_exiting = 1; break; } } return 0; }