]> ncurses.scripts.mit.edu Git - ncurses.git/blobdiff - ncurses/base/lib_mouse.c
ncurses 5.9 - patch 20120630
[ncurses.git] / ncurses / base / lib_mouse.c
index 0b5dd9e7189a392cd6a6176b40c8197c3ef8729a..f4ad054d7ebef61af8c20b18f7bf49f2c7c52e56 100644 (file)
@@ -84,7 +84,7 @@
 #define CUR SP_TERMTYPE
 #endif
 
-MODULE_ID("$Id: lib_mouse.c,v 1.134 2012/01/21 19:21:29 KO.Myung-Hun Exp $")
+MODULE_ID("$Id: lib_mouse.c,v 1.138 2012/02/29 10:38:46 tom Exp $")
 
 #include <tic.h>
 
@@ -263,7 +263,8 @@ mouse_server(unsigned long param)
                /* sit and wait on the event queue */
                rc = MouReadEventQue(&mouev, &fWait, hmou);
                if (rc) {
-                   sprintf(err, "Error reading mouse queue, rc=%lu.\r\n", rc);
+                   _nc_SPRINTF(err, _nc_SLIMIT(sizeof(err))
+                               "Error reading mouse queue, rc=%lu.\r\n", rc);
                    break;
                }
                if (!sp->_emxmouse_activated)
@@ -289,9 +290,11 @@ mouse_server(unsigned long param)
              finish:
                oldstate = mouev.fs;
            }
-       } else
-           sprintf(err, "Error setting event mask, buttons=%d, rc=%lu.\r\n",
-                   nbuttons, rc);
+       } else {
+           _nc_SPRINTF(err, _nc_SLIMIT(sizeof(err))
+                       "Error setting event mask, buttons=%d, rc=%lu.\r\n",
+                       nbuttons, rc);
+       }
 
        DosWrite(2, err, strlen(err), &rc);
        MouClose(hmou);
@@ -394,11 +397,19 @@ enable_xterm_mouse(SCREEN *sp, int enable)
 
 #if USE_GPM_SUPPORT
 static bool
-allow_gpm_mouse(void)
+allow_gpm_mouse(SCREEN *sp)
 {
     bool result = FALSE;
 
-    /* GPM does printf's without checking if stdout is a terminal */
+#if USE_WEAK_SYMBOLS
+    /* Danger Robinson: do not use dlopen for libgpm if already loaded */
+    if ((Gpm_Wgetch)) {
+       if (!sp->_mouse_gpm_loaded) {
+           T(("GPM library was already dlopen'd, not by us"));
+       }
+    } else
+#endif
+       /* GPM does printf's without checking if stdout is a terminal */
     if (isatty(fileno(stdout))) {
        char *list = getenv("NCURSES_GPM_TERMS");
        char *env = getenv("TERM");
@@ -524,7 +535,7 @@ initialize_mousetype(SCREEN *sp)
 
     /* Try gpm first, because gpm may be configured to run in xterm */
 #if USE_GPM_SUPPORT
-    if (allow_gpm_mouse()) {
+    if (allow_gpm_mouse(sp)) {
        if (!sp->_mouse_gpm_loaded) {
 #ifdef HAVE_LIBDL
            load_gpm_library(sp);