diff --git a/src/uifc/uifc32.c b/src/uifc/uifc32.c
index 7a88c85f2ced1818fbf270914a07f889a7861ed8..a5b82cc002b1739b64630e70857f4c92d2154753 100644
--- a/src/uifc/uifc32.c
+++ b/src/uifc/uifc32.c
@@ -1754,9 +1754,10 @@ int ugetstr(int left, int top, int width, char *outstr, int max, long mode, int
 		f=inkey();
 		if(f==CIO_KEY_MOUSE) {
 			if((f=uifc_getmouse(&mevnt))==0) {
-				if((mevnt.starty != top
-						|| (mevnt.startx > left+width
-						    || mevnt.startx < left))
+				if(mode & K_MOUSEEXIT
+						&& (mevnt.starty != top
+							|| mevnt.startx > left+width
+						    || mevnt.startx < left)
 						&& mevnt.event==CIOLIB_BUTTON_1_CLICK) {
 					if(lastkey)
 						*lastkey=CIO_KEY_MOUSE;
@@ -1828,6 +1829,16 @@ int ugetstr(int left, int top, int width, char *outstr, int max, long mode, int
 			}
 			if(ch==CIO_KEY_MOUSE) {
 				if((ch=uifc_getmouse(&mevnt))==0) {
+					if(mode & K_MOUSEEXIT 
+							&& (mevnt.starty != top
+								|| mevnt.startx > left+width
+						    	|| mevnt.startx < left)
+							&& mevnt.event==CIOLIB_BUTTON_1_CLICK) {
+						if(lastkey)
+							*lastkey=CIO_KEY_MOUSE;
+						ungetmouse(&mevnt);
+						return(j);
+					}
 					if(mevnt.starty == top
 							&& mevnt.startx>=left
 							&& mevnt.startx<=left+width