static void do_cleanup(void) { pthread_mutex_trylock(&mtx_tty); #ifdef CONFIG_GPM if (fd_gpm >= 0) { Gpm_Close(); } #endif vt_silent_cleanup(); }
static void exit_tty() { #if 0 termcap_put_raw_str(termcap_ME); termcap_set_color(COLOR_WHITE | COLOR_BACK_BLACK); if (clear_on_exit) termcap_clear_screen(); termcap_set_cursor(Lines - 1, 0); termcap_put_raw_str(termcap_TE); termcap_put_raw_str(termcap_KE); termcap_flush(); #endif stop_scan_mode(0); #ifdef _WIN32 if (w32_console) return; #endif #ifndef _WIN32 if (xterm_mouse) /* xterm */ { const char msg[] = "\033[?1000l\033[?1001r"; write(1, msg, sizeof(msg) - 1); } /* enable cursor */ if (screen_data) { termcap_put_raw_str(screen_data, screen_data->termcap_VE); termcap_flush(screen_data); } #endif #ifdef HAVE_GPM_H if (gpm_fd >= 0) Gpm_Close(); #endif tcsetattr(0, TCSADRAIN, &start_mode); }
int main(int argc, char **argv) { int vc; /* argv: console number */ Gpm_Connect conn; /* connection to gpm */ fd_set fds; /* select virtual console, 0 if not set */ vc = (argc == 2) ? strtol(argv[1],NULL,10) : 0; conn.eventMask = GPM_MOVE; /* read only moves */ conn.defaultMask = ~GPM_HARD; /* inverted GPM_HARD mask */ conn.minMod = 0; conn.maxMod = ~0; if(Gpm_Open(&conn,vc) == -1) { printf("Cannot connect to gpm!\n"); return 1; } if(gpm_fd == -2) { printf("I must be run on the console\n"); return 1; } while(1) { /* read data */ FD_ZERO(&fds); FD_SET(gpm_fd, &fds); if (select(gpm_fd+1, &fds, 0, 0, 0) < 0 && errno == EINTR) continue; if (FD_ISSET(gpm_fd, &fds)) { Gpm_Event evt; if (Gpm_GetEvent(&evt) > 0) { display_data(&evt, NULL); } else { printf("Gpm_GetEvent failed\n"); } } } Gpm_Close(); /* close connection */ return 0; }
void disable_mouse (void) { if (!mouse_enabled) return; mouse_enabled = FALSE; switch (use_mouse_p) { #ifdef HAVE_LIBGPM case MOUSE_GPM: Gpm_Close (); break; #endif case MOUSE_XTERM_NORMAL_TRACKING: /* disable SGR extended mouse reporting */ printf (ESC_STR "[?1006l"); /* disable mouse tracking */ printf (ESC_STR "[?1000l"); /* restore old highlight mouse tracking */ printf (ESC_STR "[?1001r"); fflush (stdout); break; case MOUSE_XTERM_BUTTON_EVENT_TRACKING: /* disable SGR extended mouse reporting */ printf (ESC_STR "[?1006l"); /* disable mouse tracking */ printf (ESC_STR "[?1002l"); /* restore old highlight mouse tracking */ printf (ESC_STR "[?1001r"); fflush (stdout); break; default: break; } }
int main(int argc, char** argv) { Gpm_Connect conn; const int len = sizeof(Gpm_Connect); int exit_status = 0; conn.eventMask = (unsigned short)(-1); conn.defaultMask = 0; conn.minMod = 0; conn.maxMod = (unsigned short)(-1); if (0 > Gpm_Open(&conn,0)) { fprintf(stderr,"disable-paste: cannot open mouse connection\n"); exit(1); } conn.vc = GPM_REQ_NOPASTE; conn.pid = 0; if (len > write(gpm_fd, &conn, len)) { fprintf(stderr,"disable-paste: cannot write request\n"); exit_status = 2; } Gpm_Close(); exit(exit_status); }
static void unhandle_fb_mouse(void) { if (fb_hgpm >= 0) set_handlers(fb_hgpm, (void (*)(void *))NULL, (void (*)(void *))NULL, (void (*)(void *))NULL, NULL); #ifndef USE_GPM_DX fb_hgpm = -1; if (fb_old_ws_v) { int rs; EINTRLOOP(rs, ioctl(1, TIOCSWINSZ, &fb_old_ws)); fb_old_ws_v = 0; } #endif Gpm_Close(); #ifdef SIGTSTP install_signal_handler(SIGTSTP, (void (*)(void *))sig_tstp, NULL, 0); #endif #ifdef SIGCONT install_signal_handler(SIGCONT, (void (*)(void *))sig_cont, NULL, 0); #endif #ifdef SIGTTIN install_signal_handler(SIGTTIN, (void (*)(void *))sig_tstp, NULL, 0); #endif }
gint viper_kmio_gpm(MEVENT *mouse_event,guint cmd) { extern guint32 viper_global_flags; extern int gpm_tried; extern int gpm_fd; struct pollfd mio_poll; struct timespec sleep_time={.tv_sec=0,.tv_nsec=5000}; static int mio_fd=-1; Gpm_Connect gpm_connect; Gpm_Event g_event; gint array_sz; gint i; int fflags; if(cmd == CMD_GPM_CLOSE) { if(mio_fd > 0) Gpm_Close(); mio_fd=-1; return 0; } if(mouse_event==NULL) return -1; /* could not connect to the GPM server. */ if(gpm_fd==-2 || (gpm_fd==-1 && gpm_tried==TRUE)) return -1; memset(&g_event,0,sizeof(g_event)); if(mio_fd==-1) { memset(&gpm_connect,0,sizeof(gpm_connect)); gpm_connect.defaultMask=0; /* do not propgate any GPM events */ gpm_connect.eventMask=GPM_MOVE | GPM_UP | GPM_DOWN | GPM_DRAG; gpm_connect.maxMod=~0; /* allow all modifiers ie. CTRL, SHFT, ALT */ mio_fd=Gpm_Open(&gpm_connect,0); if(mio_fd > 0 && (viper_global_flags & VIPER_GPM_SIGIO)) { fcntl(mio_fd,F_SETOWN,getpid()); fflags=fcntl(mio_fd,F_GETFL); fcntl(mio_fd,F_SETFL,fflags | FASYNC); } } if(mio_fd==-1) return -1; memset(&mio_poll,0,sizeof(mio_poll)); mio_poll.events=POLLIN; mio_poll.fd=mio_fd; if(poll(&mio_poll,1,1)<1) return -1; if(Gpm_GetEvent(&g_event)<1) return -1; memset(mouse_event,0,sizeof(MEVENT)); mouse_event->bstate=g_event.modifiers; mouse_event->x=g_event.x-1; mouse_event->y=g_event.y-1; array_sz=sizeof(x_ncurses_state)/sizeof(x_ncurses_state[0]); if(!(GPM_CLICK_STRICT(g_event.type))) { for(i=0;i<array_sz;i++) { /* sift by mode... ignore COOKED table entries */ if(x_gpm_mode[i]==X_GPM_COOKED) continue; /* sift raw event... GPM_UP, GPM_DOWN, etc. */ if(!(g_event.type & x_gpm_event[i])) continue; /* sift which physical button... GPM_B_LEFT, etc. */ if(g_event.buttons != x_gpm_button[i]) continue; mouse_event->bstate |= x_ncurses_state[i]; break; } } if(GPM_CLICK_STRICT(g_event.type)) { for(i=0;i<array_sz;i++) { /* sift by mode... ignore RAW table entries */ if(x_gpm_mode[i]==X_GPM_RAW) continue; /* sift cooked event... GPM_SINGLE, GPM_DOUBLE, etc. */ if(!(g_event.type & x_gpm_event[i])) continue; /* sift which physical button... GPM_B_LEFT, etc. */ if(g_event.buttons != x_gpm_button[i]) continue; mouse_event->bstate=x_ncurses_state[i]; break; } } if((g_event.type & GPM_DRAG) || (g_event.type & GPM_MOVE)) mouse_event->bstate = REPORT_MOUSE_POSITION; if(mouse_event->bstate!=0) { while(ungetmouse(mouse_event)==ERR) { nanosleep(&sleep_time,NULL); } } return 0; }
vrpn_Mouse::~vrpn_Mouse() { #if defined(linux) && defined(VRPN_USE_GPM_MOUSE) Gpm_Close(); #endif }
static void gpm_uninit(aa_context * c) { __curses_usegpm = 0; Gpm_Close(); }
void mouse_close(void) { Gpm_Close(); }
static int gpmOpenConnection (void) { switch (gpmConnectionState) { case GCS_CLOSED: { Gpm_Connect options = { .eventMask = GPM_MOVE, .defaultMask = ~0, .minMod = 0, .maxMod = ~0 }; gpm_tried = 0; gpm_zerobased = 1; if (Gpm_Open(&options, -1) == -1) { logMessage(GPM_LOG_LEVEL, "GPM open error: %s", strerror(errno)); asyncSetAlarmIn(NULL, 5000, gpmResetConnection, NULL); gpmConnectionState = GCS_FAILED; return 0; } logMessage(GPM_LOG_LEVEL, "GPM opened: fd=%d con=%d", gpm_fd, gpm_consolefd); gpmConnectionState = GCS_OPENED; } case GCS_OPENED: return 1; } return 0; } static void gpmCloseConnection (int alreadyClosed) { if (gpmConnectionState == GCS_OPENED) { if (!alreadyClosed) Gpm_Close(); logMessage(GPM_LOG_LEVEL, "GPM closed"); } gpmConnectionState = GCS_CLOSED; } #endif /* HAVE_LIBGPM */ static int routeCursor_RealScreen (int column, int row, int screen) { return startRouting(column, row, screen); } static int highlightRegion_RealScreen (int left, int right, int top, int bottom) { FILE *console = getConsole(); if (console) { #ifdef HAVE_LIBGPM if (gpmOpenConnection() && (gpm_fd >= 0)) { if (Gpm_DrawPointer(left, top, fileno(console)) != -1) return 1; if (errno != EINVAL) { logMessage(GPM_LOG_LEVEL, "Gpm_DrawPointer error: %s", strerror(errno)); gpmCloseConnection(0); return 0; } } #endif /* HAVE_LIBGPM */ } return 0; }
static int done_mouse(void) { return Gpm_Close(); }