X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=ncurses%2Fbase%2Flib_mouse.c;h=2530dec5a6e41f5725f931c610b2683bcdd3a7ca;hp=61ec3c8b71160baedc7ff32089da66f12ae686c9;hb=c976a90788f3e50afc773670ff74c5270ecb48df;hpb=af3d0ee323cbb22d2a7596d564bf68f7307f5076 diff --git a/ncurses/base/lib_mouse.c b/ncurses/base/lib_mouse.c index 61ec3c8b..2530dec5 100644 --- a/ncurses/base/lib_mouse.c +++ b/ncurses/base/lib_mouse.c @@ -1,5 +1,6 @@ /**************************************************************************** - * Copyright (c) 1998-2016,2017 Free Software Foundation, Inc. * + * Copyright 2018-2019,2020 Thomas E. Dickey * + * Copyright 1998-2016,2017 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * @@ -84,7 +85,7 @@ #define CUR SP_TERMTYPE #endif -MODULE_ID("$Id: lib_mouse.c,v 1.175 2017/06/17 22:05:15 tom Exp $") +MODULE_ID("$Id: lib_mouse.c,v 1.184 2020/02/02 23:34:34 tom Exp $") #include @@ -438,7 +439,7 @@ allow_gpm_mouse(SCREEN *sp GCC_UNUSED) #if USE_WEAK_SYMBOLS /* Danger Robinson: do not use dlopen for libgpm if already loaded */ - if ((Gpm_Wgetch)) { + if ((Gpm_Wgetch) != 0) { if (!sp->_mouse_gpm_loaded) { T(("GPM library was already dlopen'd, not by us")); } @@ -486,15 +487,17 @@ load_gpm_library(SCREEN *sp) { sp->_mouse_gpm_found = FALSE; if ((sp->_dlopen_gpm = dlopen(LIBGPM_SONAME, my_RTLD)) != 0) { -#pragma GCC diagnostic push #if (defined(__GNUC__) && (__GNUC__ >= 5)) || defined(__clang__) +#pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wpedantic" #endif if (GET_DLSYM(gpm_fd) == 0 || GET_DLSYM(Gpm_Open) == 0 || GET_DLSYM(Gpm_Close) == 0 || GET_DLSYM(Gpm_GetEvent) == 0) { +#if (defined(__GNUC__) && (__GNUC__ >= 5)) || defined(__clang__) #pragma GCC diagnostic pop +#endif T(("GPM initialization failed: %s", dlerror())); unload_gpm_library(sp); } else { @@ -603,7 +606,7 @@ initialize_mousetype(SCREEN *sp) #if USE_EMX_MOUSE if (!sp->_emxmouse_thread && strstr(SP_TERMTYPE term_names, "xterm") == 0 - && key_mouse) { + && NonEmpty(key_mouse)) { int handles[2]; if (pipe(handles) < 0) { @@ -714,11 +717,8 @@ initialize_mousetype(SCREEN *sp) CallDriver(sp, td_initmouse); #else /* we know how to recognize mouse events under "xterm" */ - if (key_mouse != 0) { - if (!strcmp(key_mouse, xterm_kmous) - || strstr(SP_TERMTYPE term_names, "xterm") != 0) { - init_xterm_mouse(sp); - } + if (NonEmpty(key_mouse)) { + init_xterm_mouse(sp); } else if (strstr(SP_TERMTYPE term_names, "xterm") != 0) { if (_nc_add_to_try(&(sp->_keytry), xterm_kmous, KEY_MOUSE) == OK) init_xterm_mouse(sp); @@ -1104,7 +1104,7 @@ decode_xterm_1005(SCREEN *sp, MEVENT * eventp) #else sp->_ifd, #endif - kbuf + grabbed, 1); + (kbuf + grabbed), (size_t) 1); if (res == -1) break; grabbed += (size_t) res; @@ -1189,7 +1189,7 @@ read_SGR(SCREEN *sp, SGR_DATA * result) #else sp->_ifd, #endif - kbuf + grabbed, 1); + (kbuf + grabbed), (size_t) 1); if (res == -1) break; if ((grabbed + MAX_KBUF) >= (int) sizeof(kbuf)) { @@ -1275,6 +1275,15 @@ decode_xterm_SGR1006(SCREEN *sp, MEVENT * eventp) eventp->bstate = REPORT_MOUSE_POSITION; } } + if (b & 4) { + eventp->bstate |= BUTTON_SHIFT; + } + if (b & 8) { + eventp->bstate |= BUTTON_ALT; + } + if (b & 16) { + eventp->bstate |= BUTTON_CTRL; + } result = (eventp->bstate & REPORT_MOUSE_POSITION) ? TRUE : FALSE; eventp->x = (data.params[1] ? (data.params[1] - 1) : 0); eventp->y = (data.params[2] ? (data.params[2] - 1) : 0);