diff --git a/src/uifc/uifc32.c b/src/uifc/uifc32.c index dd801dea79b3255f617eb1f9ee8563e52aa6a736..56e6d9c143b0bc8f63bc2de7db05c3e2a05e9f02 100644 --- a/src/uifc/uifc32.c +++ b/src/uifc/uifc32.c @@ -117,6 +117,7 @@ void uifc_mouse_enable(void) ciomouse_addevent(CIOLIB_BUTTON_1_DRAG_MOVE); ciomouse_addevent(CIOLIB_BUTTON_1_DRAG_END); ciomouse_addevent(CIOLIB_BUTTON_1_CLICK); + ciomouse_addevent(CIOLIB_BUTTON_2_CLICK); ciomouse_addevent(CIOLIB_BUTTON_3_CLICK); showmouse(); } @@ -1627,6 +1628,8 @@ int ugetstr(int left, int top, int width, char *outstr, int max, long mode, int BOOL gotdecimal=FALSE; int soffset=0; struct mouse_event mevnt; + unsigned char *pastebuf=NULL; + unsigned char *pb=NULL; if((str=(uchar *)malloc(max+1))==NULL) { cprintf("UIFC line %d: error allocating %u bytes\r\n" @@ -1669,6 +1672,17 @@ int ugetstr(int left, int top, int width, char *outstr, int max, long mode, int if(i>j) i=j; } + if(mevnt.startx>=left + && mevnt.startx<=left+width + && (mevnt.event==CIOLIB_BUTTON_2_CLICK + || mevnt.event==CIOLIB_BUTTON_3_CLICK)) { + i=mevnt.startx-left+soffset; + if(i>j) + i=j; + pastebuf=getcliptext(); + pb=pastebuf; + f=0; + } } } @@ -1699,11 +1713,20 @@ int ugetstr(int left, int top, int width, char *outstr, int max, long mode, int if(i>j) j=i; str[j]=0; getstrupd(left, top, width, str, i, &soffset); - if(f || (ch=inkey())!=0) + if(f || pb!=NULL || (ch=inkey())!=0) { - if(f) + if(f) { ch=f; - f=0; + f=0; + } + else if(pb!=NULL) { + ch=*(pb++); + if(!*pb) { + free(pastebuf); + pastebuf=NULL; + pb=NULL; + } + } if(ch==CIO_KEY_MOUSE) { if((ch=uifc_getmouse(&mevnt))==0) { if(mevnt.startx>=left @@ -1713,6 +1736,16 @@ int ugetstr(int left, int top, int width, char *outstr, int max, long mode, int if(i>j) i=j; } + if(mevnt.startx>=left + && mevnt.startx<=left+width + && (mevnt.event==CIOLIB_BUTTON_2_CLICK + || mevnt.event==CIOLIB_BUTTON_3_CLICK)) { + i=mevnt.startx-left+soffset; + if(i>j) + i=j; + pastebuf=getcliptext(); + pb=pastebuf; + } } } if(lastkey != NULL) @@ -1791,6 +1824,8 @@ int ugetstr(int left, int top, int width, char *outstr, int max, long mode, int { cursor=_NOCURSOR; _setcursortype(cursor); + if(pastebuf!=NULL) + free(pastebuf); return(-1); } case CR: @@ -1870,6 +1905,8 @@ int ugetstr(int left, int top, int width, char *outstr, int max, long mode, int strcpy(outstr,str); cursor=_NOCURSOR; _setcursortype(cursor); + if(pastebuf!=NULL) + free(pastebuf); return(j); }