static void handle_event(void) { ggi_event ev; TeleEvent g_ev; ggiEventRead(vis, &ev, emAll); if ((ev.any.type == evKeyPress) && (ev.key.sym == GIIK_F12)) { fprintf(stderr, "ABORTING...\n"); quit=1; return; } if (translate_to_tele(user, &g_ev, &ev) == 0) { int err = tserver_write(user, &g_ev); if (err == TELE_ERROR_SHUTDOWN) { /* Client has gone away */ close_connection(1); return; } } }
void ggi_visual_get_event (void * vis, Visual_Event * visual_event) { gii_event event_buffer; int err; err = ggiEventRead(VISUAL_T(vis), &event_buffer, emKey | emPointer); switch(event_buffer.any.type) { case evPtrAbsolute: visual_event->type = Visual_Mouse_Move_Event; visual_event->mouse_move.x = event_buffer.pmove.x; visual_event->mouse_move.y = event_buffer.pmove.y; break; case evPtrRelative: fprintf(stderr, "evPtrRelative\n"); break; case evPtrButtonPress: old_buttons |= (1 << (event_buffer.pbutton.button - 1)); visual_event->type = Visual_Mouse_Button_Event; visual_event->mouse_button.buttons = old_buttons; visual_event->mouse_button.state = 0; break; case evPtrButtonRelease: old_buttons &= ~(1 << (event_buffer.pbutton.button - 1)); visual_event->type = Visual_Mouse_Button_Event; visual_event->mouse_button.buttons = old_buttons; visual_event->mouse_button.state = 0; break; case evKeyPress: visual_event->type = Visual_Key_Press_Event; map_key(&event_buffer.key, &visual_event->key); break; case evKeyRelease: visual_event->type = Visual_Key_Release_Event; map_key(&event_buffer.key, &visual_event->key); break; case evKeyRepeat: visual_event->type = Visual_Key_Repeat_Event; map_key(&event_buffer.key, &visual_event->key); break; default: fprintf(stderr, "Unknown GII type %d in ggi_visual_get_event\n", event_buffer.any.type); } }
static void check_events(void) { struct timeval tv = {0, 0}; ggi_event event; ggi_event_mask mask; if ((mask = ggiEventPoll(ggi_conf.vis, emAll, &tv))) { if (ggiEventRead(ggi_conf.vis, &event, emAll) != 0) { mp_dbg(MSGT_VO, MSGL_DBG3, "type: %4x, origin: %4x, " "sym: %4x, label: %4x, button=%4x\n", event.any.origin, event.any.type, event.key.sym, event.key.label, event.key.button); switch (event.any.type) { case evKeyPress: switch (event.key.sym) { case GIIK_PAsterisk: /* PStar */ case GIIUC_Asterisk: mplayer_put_key('*'); break; case GIIK_PSlash: case GIIUC_Slash: mplayer_put_key('/'); break; case GIIK_PPlus: case GIIUC_Plus: mplayer_put_key('+'); break; case GIIK_PMinus: case GIIUC_Minus: mplayer_put_key('-'); break; case GIIUC_o: case GIIUC_O: mplayer_put_key('o'); break; case GIIUC_g: case GIIUC_G: mplayer_put_key('g'); break; case GIIUC_z: case GIIUC_Z: mplayer_put_key('z'); break; case GIIUC_x: case GIIUC_X: mplayer_put_key('x'); break; case GIIUC_m: case GIIUC_M: mplayer_put_key('m'); break; case GIIUC_d: case GIIUC_D: mplayer_put_key('d'); break; case GIIUC_q: case GIIUC_Q: mplayer_put_key('q'); break; case GIIUC_h: case GIIUC_H: mplayer_put_key('h'); break; case GIIUC_l: case GIIUC_L: mplayer_put_key('l'); break; case GIIUC_Space: case GIIUC_p: case GIIUC_P: mplayer_put_key('p'); break; case GIIK_Up: mplayer_put_key(KEY_UP); break; case GIIK_Down: mplayer_put_key(KEY_DOWN); break; case GIIK_Left: mplayer_put_key(KEY_LEFT); break; case GIIK_Right: mplayer_put_key(KEY_RIGHT); break; case GIIK_PageUp: mplayer_put_key(KEY_PAGE_UP); break; case GIIK_PageDown: mplayer_put_key(KEY_PAGE_DOWN); break; default: break; } /* switch */ break; } /* switch */ } /* if */ } /* if */ return; }
static void GetEvent (void) { ggi_event ev; uint32 b; ggiEventRead (ggivis, &ev, emAll); switch (ev.any.type) { case evKeyPress: Key_Event (XLateKey (&ev.key), 0, true); break; case evKeyRelease: Key_Event (XLateKey (&ev.key), 0, false); break; case evPtrRelative: mouse_x += (float) ev.pmove.x; mouse_y += (float) ev.pmove.y; break; case evPtrAbsolute: mouse_x += (float) (ev.pmove.x - p_mouse_x); mouse_y += (float) (ev.pmove.y - p_mouse_y); p_mouse_x = ev.pmove.x; p_mouse_y = ev.pmove.y; break; case evPtrButtonPress: if (!mouse_avail) return; b = ev.pbutton.button - 1; if (b < NUM_STDBUTTONS) { Key_Event (K_MOUSE1 + b, 0, true); } else if (b < NUM_STDBUTTONS + 2) { b -= 3; if (b) Key_Event (K_MWHEELDOWN, 0, true); else Key_Event (K_MWHEELUP, 0, true); } else if (b < NUM_BUTTONS) { Key_Event (K_AUX32 - NUM_BUTTONS + b, 0, true); } break; case evPtrButtonRelease: if (!mouse_avail) return; b = ev.pbutton.button - 1; if (b < NUM_STDBUTTONS) { Key_Event (K_MOUSE1 + b, 0, false); } else if (b < NUM_STDBUTTONS + 2) { b -= 3; if (b) Key_Event (K_MWHEELDOWN, 0, false); else Key_Event (K_MWHEELUP, 0, false); } else if (b < NUM_BUTTONS) { Key_Event (K_AUX32 - NUM_BUTTONS + b, 0, false); } break; #if 0 case ConfigureNotify: //printf("config notify\n"); config_notify_width = ev.xconfigure.width; config_notify_height = ev.xconfigure.height; config_notify = 1; break; default: #endif } }
void GGI_PumpEvents(_THIS) { struct timeval *tvp, tv = { 0, 0 }; ggi_event ev; tvp = &tv; while (ggiEventPoll(VIS, emAll, tvp)) { int queueevent_mouse = 0, queueevent_kbd = 0; static int buttons = 0; static int mouse_x = 0, mouse_y = 0, mouse_z = 0; int x = 0, y = 0, z = 0, rx = 0, ry = 0, rz = 0; int pressed_mouse, pressed_kbd; SDL_keysym keysym; posted = 0; ggiEventRead(VIS, &ev, emAll); switch (ev.any.type) { case evPtrRelative: x = ev.pmove.x; y = ev.pmove.y; z = ev.pmove.wheel; posted += SDL_PrivateMouseMotion(0, 1, x, y); break; case evPtrAbsolute: if (mouse_x != ev.pmove.x || mouse_y != ev.pmove.y || mouse_z != ev.pmove.wheel) { x = ev.pmove.x - mouse_x; y = ev.pmove.y - mouse_y; z = ev.pmove.wheel - mouse_z; mouse_x = ev.pmove.x; mouse_y = ev.pmove.y; mouse_z = ev.pmove.wheel; posted += SDL_PrivateMouseMotion(0, 1, x, y); } break; case evPtrButtonPress: posted += SDL_PrivateMouseButton(SDL_PRESSED, ev.pbutton.button, 0, 0); break; case evPtrButtonRelease: posted += SDL_PrivateMouseButton(SDL_RELEASED, ev.pbutton.button, 0, 0); break; case evKeyPress: case evKeyRepeat: posted += SDL_PrivateKeyboard(SDL_PRESSED, GGI_TranslateKey(&ev, &keysym)); break; case evKeyRelease: posted += SDL_PrivateKeyboard(SDL_RELEASED, GGI_TranslateKey(&ev, &keysym)); break; case evCommand: fprintf(stderr, "Command event %x recieved\n", ev.cmd.code); break; default: fprintf(stderr, "Unhandled event type %d\n", ev.any.type); break; } } }
void GGI_PumpEvents(_THIS) { struct timeval *tvp, tv = { 0, 0 }; ggi_event ev; tvp = &tv; /* ggiFlush(VIS); */ while (ggiEventPoll(VIS, emAll, tvp)) /* while (ggiEventPoll(VIS, (emKeyboard | emPointer | emCommand), tvp)) */ { int queueevent_mouse = 0, queueevent_kbd = 0; static int buttons = 0; static int mouse_x = 0, mouse_y = 0, mouse_z = 0; int x = 0, y = 0, z = 0, rx = 0, ry = 0, rz = 0; int pressed_mouse, pressed_kbd; SDL_keysym keysym; posted = 0; /* FIXME: We do not actually want all events, only * mouse and keyboard events. Having to handle all * events will slow things down. */ ggiEventRead(VIS, &ev, emAll); /* ggiEventRead(VIS, &ev, (emKeyboard | emPointer | emCommand)); */ switch (ev.any.type) { case evPtrRelative: x = ev.pmove.x; y = ev.pmove.y; z = ev.pmove.wheel; posted += SDL_PrivateMouseMotion(0, 1, x, y); break; case evPtrAbsolute: if (mouse_x != ev.pmove.x || mouse_y != ev.pmove.y || mouse_z != ev.pmove.wheel) { x = ev.pmove.x - mouse_x; y = ev.pmove.y - mouse_y; z = ev.pmove.wheel - mouse_z; mouse_x = ev.pmove.x; mouse_y = ev.pmove.y; mouse_z = ev.pmove.wheel; posted += SDL_PrivateMouseMotion(0, 1, x, y); } break; case evPtrButtonPress: posted += SDL_PrivateMouseButton(SDL_PRESSED, ev.pbutton.button, 0, 0); break; case evPtrButtonRelease: posted += SDL_PrivateMouseButton(SDL_RELEASED, ev.pbutton.button, 0, 0); break; case evKeyPress: case evKeyRepeat: posted += SDL_PrivateKeyboard(SDL_PRESSED, GGI_TranslateKey(&ev, &keysym)); break; case evKeyRelease: posted += SDL_PrivateKeyboard(SDL_RELEASED, GGI_TranslateKey(&ev, &keysym)); break; case evCommand: fprintf(stderr, "Command event %x recieved\n", ev.cmd.code); break; default: fprintf(stderr, "Unhandled event type %d\n", ev.any.type); break; } } }
int do_menu(struct menu * m , int selected) { /* select a menu item by either a number or with arrow keys */ int i; int evmask; ggi_event ev; struct timeval t={0,0}; int oldselection = selected; draw_window(&m->w); if (m->toptext != NULL) { ggiSetGCForeground(m->w.vis, ggiMapColor(m->w.vis,&m->toptextcolor)); /* FIXME*/ ggiPuts(m->w.vis, m->w.xorigin+m->toptextx, m->w.yorigin+m->toptexty, m->toptext); } if (m->bottomtext != NULL){ ggiSetGCForeground(m->w.vis, ggiMapColor(m->w.vis,&m->bottomtextcolor)); /* FIXME*/ ggiPuts(m->w.vis, m->w.xorigin+m->bottomtextx, m->w.yorigin+m->bottomtexty, m->bottomtext); } for (i = 0;i<=m->lastentry;i++){ if (i!=selected){ ggiSetGCForeground(m->w.vis, ggiMapColor(m->w.vis,&m->entrycolor)); ggiSetGCBackground(m->w.vis, ggiMapColor(m->w.vis,&m->w.backgroundcolor)); } else { ggiSetGCForeground(m->w.vis, ggiMapColor(m->w.vis,&m->selectedcolor)); ggiSetGCBackground(m->w.vis, ggiMapColor(m->w.vis, &m->selectedbackgroundcolor)); } ggiPuts( m->w.vis, m->w.xorigin + m->entry[i].x, m->w.yorigin + m->entry[i].y, m->entry[i].text); } for (;;){ /* if we are in asynchronous mode, we must guarantee */ /* the user sees he's next. */ ggiFlush(m->w.vis); /* get a keypress */ evmask = emKey; ggiEventPoll(m->w.vis, evmask, NULL); while (ggiEventPoll(m->w.vis, evmask,&t)){ do { ggiEventRead(m->w.vis,&ev, evmask); } while (!((1<<ev.any.type)&evmask)); switch(ev.any.type){ case evKeyPress: case evKeyRepeat: switch(ev.key.sym){ case '1':selected = 0; break; case '2':selected = 1; break; case '3':selected = 2; break; case '4':selected = 3; break; case '5':selected = 4; break; case '6':selected = 5; break; case '7':selected = 6; break; case '8':selected = 7; break; case '9':selected = 8; break; case GIIK_Up: selected--; break; case GIIK_Down: selected++; break; case GIIK_Enter: ggiFlush(m->w.vis); /* just to make sure */ return (selected); break; /* never get here */ case GIIUC_Escape: ggiFlush(m->w.vis); /* just to make sure */ return (-1); default: /*printf("unknown sym=%4x code=%4x\n", ev.key.sym, ev.key.code);*/ break; } default: /*printf("can't handle this event yet.\n");*/ break; } } ggiSetGCForeground(m->w.vis, ggiMapColor(m->w.vis,&m->entrycolor)); ggiSetGCBackground(m->w.vis, ggiMapColor(m->w.vis,&m->w.backgroundcolor)); ggiPuts( m->w.vis, m->w.xorigin+m->entry[oldselection].x, m->w.yorigin+m->entry[oldselection].y, m->entry[oldselection].text); if (selected<0) selected = 0; if (selected > m->lastentry) selected = m->lastentry; ggiSetGCForeground(m->w.vis, ggiMapColor(m->w.vis,&m->selectedcolor)); ggiSetGCBackground(m->w.vis, ggiMapColor(m->w.vis, &m->selectedbackgroundcolor)); ggiPuts( m->w.vis, m->w.xorigin + m->entry[selected].x, m->w.yorigin + m->entry[selected].y, m->entry[selected].text); oldselection = selected; } }
int ImouseRead( int *xcurs, int *ycurs) { #ifdef GGI struct timeval tv={0,0}; while (ggiEventPoll(ggiVis, emPointer, &tv) > 0) { ggi_event ev; int oldbutton=xg_mousebutton; ggiEventRead(ggiVis, &ev, emPointer); if (ev.any.type == evPtrButtonPress) xg_mousebutton = ev.pbutton.button; if (ev.any.type == evPtrButtonRelease) xg_mousebutton = 0; if (ev.any.type == evPtrRelative) { *xcurs += ev.pmove.x; *ycurs += ev.pmove.y; } if (ev.any.type == evPtrAbsolute) { *xcurs = ev.pmove.x; *ycurs = ev.pmove.y; } if(*xcurs<xg_mouserange_xmin) *xcurs=xg_mouserange_xmin; if(*xcurs>xg_mouserange_xmax) *xcurs=xg_mouserange_xmax; if(*ycurs<xg_mouserange_ymin) *ycurs=xg_mouserange_ymin; if(*ycurs>xg_mouserange_ymax) *ycurs=xg_mouserange_ymax; if(xg_mousebutton!=oldbutton) //otherwise we would catch mouse release event on slow PCs... return xg_mousebutton; }//loop return xg_mousebutton; #else if(MouseWasUpdatedInThread || mouse_update()) { MouseWasUpdatedInThread=0; xg_mousebutton=mouse_getbutton(); *xcurs=mouse_getx(); *ycurs=mouse_gety(); // if(button!=0) // printf("[mouse=%d]",button); switch(xg_mousebutton) //?? SVGAlib mouse events .... { case 4: xg_mousebutton=1; break; case 1: xg_mousebutton=2; break; case 2: xg_mousebutton=4; //? break; } } return xg_mousebutton; #endif }
int bioskey(int cmd) { #ifdef GGI struct timeval tv={0,0}; if(cmd==2) return modifiers; if (ggiEventPoll(ggiVis, emKey, &tv) > 0) { if(cmd==1) return 1; else { ggi_event ev; ggiEventRead(ggiVis, &ev, emKey); modifiers=ev.key.modifiers; if (ev.any.type == evKeyPress || ev.any.type == evKeyRepeat) { return ev.key.sym; }//endif } } return 0; #else fd_set readset; struct timeval t={0,0}; unsigned char buf[6]; if(buffered!=0) { if(cmd==1) return 1; else { int ret=buffered; buffered=0; return ret; } } FD_ZERO(&readset); FD_SET(0, &readset); if (select(STDIN_FILENO+1, &readset, NULL, NULL, &t) <= 0) { return 0; } if(cmd==1) return 1; read(STDIN_FILENO, buf, 1); if ( buf[0] != 27 /* escape */) { return (int) buf[0]; } /* Wait a bit, to see if the character following escape was '[' * which signals an ANSI key. */ if (select(STDIN_FILENO+1, &readset, NULL, NULL, &t) <= 0) { usleep(10000l); /* wait 1/100th of a second */ } if (select(STDIN_FILENO+1, &readset, NULL, NULL, &t) <= 0) { /* Timed out : must have been plain escape key */ return (int)buf[0]; } read(STDIN_FILENO, buf+1, 1); if (buf[1] != '[') { /* Nope, not an ANSI key sequence */ buffered=(int)buf[1]; return (int)buf[0]; } /* handle the ANSI key sequences */ read(STDIN_FILENO, buf+2, 1); buf[3] = buf[4] = buf[5] = 0; if (isdigit(buf[2]) || (buf[2] == '[')) { read(STDIN_FILENO, buf+3, 1); } if (isdigit(buf[3])) { read(STDIN_FILENO, buf+4, 1); } #define CMP_KEY(S,K) if (strcmp(buf+2, (S)) == 0) {return (int)(K);} CMP_KEY("A", UPARROW); CMP_KEY("B", DOWNARROW); CMP_KEY("C", RIGHTARROW); CMP_KEY("D", LEFTARROW); CMP_KEY("1~", HOMEKEY); CMP_KEY("4~", ENDKEY); CMP_KEY("2~", INSERT); CMP_KEY("3~", DELETEKEY); CMP_KEY("5~", PAGEUP); CMP_KEY("6~", PAGEDOWN); CMP_KEY("[A", F1); CMP_KEY("[B", F2); CMP_KEY("[C", F3); CMP_KEY("[D", F4); CMP_KEY("[E", F5); CMP_KEY("17~", F6); CMP_KEY("18~", F7); CMP_KEY("19~", F8); CMP_KEY("20~", F9); CMP_KEY("21~", F10); CMP_KEY("23~", F11); CMP_KEY("24~", F12); #undef CMP_KEY printf("Unrecognized ANSI sequence: %s\n",buf+2); return 0; #endif }