From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=DKIM_SIGNED,DKIM_VALID autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 17854 invoked from network); 17 Jun 2021 06:31:52 -0000 Received: from 1ess.inri.net (216.126.196.35) by inbox.vuxu.org with ESMTPUTF8; 17 Jun 2021 06:31:52 -0000 Received: from pb-smtp21.pobox.com ([173.228.157.53]) by 1ess; Thu Jun 17 02:24:16 -0400 2021 Received: from pb-smtp21.pobox.com (unknown [127.0.0.1]) by pb-smtp21.pobox.com (Postfix) with ESMTP id 4DADE12E193 for <9front@9front.org>; Thu, 17 Jun 2021 02:22:01 -0400 (EDT) (envelope-from unobe@cpan.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed; d=pobox.com; h=message-id :to:subject:date:from:in-reply-to:mime-version:content-type :content-transfer-encoding; s=sasl; bh=HF43cFdYfY7B/Ec6ivv888q0I U6HMBvo0c81FDM9UQ8=; b=VrgJxAUA7tEq3VA6Py5qHnz2lzfSGLGZgflhY2xbu DFivmVRIYBYtLpD+C2ReQJiJuuVCGKPiDdtiRGRynBALfRPyrRWu3z1+Pd7bjJNc YIJxxlEQDyWLzkhwsuJAD1yGNSyEIrwYfE38YlvDbAbaZVwipFLVAaefzke2w/X6 XU= Received: from pb-smtp21.sea.icgroup.com (unknown [127.0.0.1]) by pb-smtp21.pobox.com (Postfix) with ESMTP id 466C512E192 for <9front@9front.org>; Thu, 17 Jun 2021 02:22:01 -0400 (EDT) (envelope-from unobe@cpan.org) Received: from samwise (unknown [47.34.135.186]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by pb-smtp21.pobox.com (Postfix) with ESMTPSA id 89AAF12E18E for <9front@9front.org>; Thu, 17 Jun 2021 02:21:58 -0400 (EDT) (envelope-from unobe@cpan.org) Message-ID: <30B545776E29A4E640E836E519922FB9@smtp.pobox.com> To: 9front@9front.org Date: Wed, 16 Jun 2021 23:21:56 -0700 From: unobe@cpan.org In-Reply-To: MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit X-Pobox-Relay-ID: 5203E5C4-CF34-11EB-A3D9-FA9E2DDBB1FC-09620299!pb-smtp21.pobox.com List-ID: <9front.9front.org> List-Help: X-Glyph: ➈ X-Bullshit: blockchain-aware firewall just-in-time framework Subject: Re: [9front] drawterm/gui-cocoa/screen.m: mouse button emulation a la plan9port Reply-To: 9front@9front.org Precedence: bulk Did this patch request get lost? Or was there an issue with it? Quoth boehm.igor@gmail.com: > Dear all, > > Inline is a patch that eases the use of drawterm on mac laptops that > lack mouse buttons. > > For consistency reasons it behaves the same as on plan9port, namely > like this: > > "For systems without a three button mouse, the keyboard modifier keys > can be used to modify the effect of the main mouse button. On Mac > systems, the option key changes the main button to button 2, and the > Command key changes it to button 3. > > Pressing the key after the button is held down adds the button to form > a chord, so that for example on Macs selecting text with the trackpad > button and then typing Option without letting go of the button will > cause a 1-2 chord, cutting the selection. > > These changes were inspired by rsc's plan9port." > > If you prefer to view this diff on GitHub here is a link: > https://github.com/1g0rb0hm/drawterm/commit/6cc968737b0ba5476516b698d8a539d5a2b26b62 > > If this is not the right place to propose drawterm patches or if > changes should be made please let me know. > > Cheers, > Igor > > diff -r 1f70be1f0305 gui-cocoa/screen.m > --- a/gui-cocoa/screen.m Wed Nov 18 23:01:01 2020 +0100 > +++ b/gui-cocoa/screen.m Mon Dec 21 15:12:23 2020 +0100 > @@ -364,43 +364,76 @@ > kbdkey(m, 0); > } > > +- (void)sendmouse:(NSUInteger)b > +{ > + NSPoint p; > + Point q; > + > + p = [self.window mouseLocationOutsideOfEventStream]; > + q.x = p.x; > + q.y = p.y; > + if(!ptinrect(q, gscreen->clipr)) return; > + absmousetrack(p.x, self.frame.size.height - p.y, b, ticks()); > +} > + > - (void)flagsChanged:(NSEvent*)event { > - static NSEventModifierFlags y; > - NSEventModifierFlags x; > + static NSEventModifierFlags omod; > + NSEventModifierFlags m; > + NSUInteger b; > > - x = [event modifierFlags]; > - if((x & ~y & NSEventModifierFlagShift) != 0) > - kbdkey(Kshift, 1); > - if((x & ~y & NSEventModifierFlagControl) != 0) > - kbdkey(Kctl, 1); > - if((x & ~y & NSEventModifierFlagOption) != 0) > - kbdkey(Kalt, 1); > - if((x & ~y & NSEventModifierFlagCapsLock) != 0) > - kbdkey(Kcaps, 1); > - if((~x & y & NSEventModifierFlagShift) != 0) > - kbdkey(Kshift, 0); > - if((~x & y & NSEventModifierFlagControl) != 0) > - kbdkey(Kctl, 0); > - if((~x & y & NSEventModifierFlagOption) != 0) > - kbdkey(Kalt, 0); > - if((x & ~y & NSEventModifierFlagCapsLock) != 0) > - kbdkey(Kcaps, 0); > - y = x; > + m = [event modifierFlags]; > + b = [NSEvent pressedMouseButtons]; > + b = b & ~6 | b << 1 & 4 | b >> 1 & 2; > + if(b){ > + if(m & ~omod & NSEventModifierFlagControl) > + b |= 1; > + if(m & ~omod & NSEventModifierFlagOption) > + b |= 2; > + if(m & ~omod & NSEventModifierFlagCommand) > + b |= 4; > + [self sendmouse:b]; > + }else{ > + if((m & ~omod & NSEventModifierFlagShift) != 0) > + kbdkey(Kshift, 1); > + if((m & ~omod & NSEventModifierFlagControl) != 0) > + kbdkey(Kctl, 1); > + if((m & ~omod & NSEventModifierFlagOption) != 0) > + kbdkey(Kalt, 1); > + if((m & ~omod & NSEventModifierFlagCapsLock) != 0) > + kbdkey(Kcaps, 1); > + if((~m & omod & NSEventModifierFlagShift) != 0) > + kbdkey(Kshift, 0); > + if((~m & omod & NSEventModifierFlagControl) != 0) > + kbdkey(Kctl, 0); > + if((~m & omod & NSEventModifierFlagOption) != 0) > + kbdkey(Kalt, 0); > + if((m & ~omod & NSEventModifierFlagCapsLock) != 0) > + kbdkey(Kcaps, 0); > + } > + omod = m; > } > > - (void)mouseevent:(NSEvent*)event > { > - NSPoint p; > - Point q; > - NSUInteger u; > + NSUInteger b; > + NSEventModifierFlags m; > > - p = [self.window mouseLocationOutsideOfEventStream]; > - u = [NSEvent pressedMouseButtons]; > - q.x = p.x; > - q.y = p.y; > - if(!ptinrect(q, gscreen->clipr)) return; > - u = u & ~6 | u << 1 & 4 | u >> 1 & 2; > - absmousetrack(p.x, self.frame.size.height - p.y, u, ticks()); > + b = [NSEvent pressedMouseButtons]; > + b = b & ~6 | b << 1 & 4 | b >> 1 & 2; > + if(b==1){ > + m = [event modifierFlags]; > + if(m & NSEventModifierFlagOption) > + b=2; > + else if(m & NSEventModifierFlagCommand) > + b=4; > + else if(m & NSEventModifierFlagControl) > + b=8; > + }else if(b==4){ > + m = [event modifierFlags]; > + if(m & NSEventModifierFlagCommand) > + b=8; > + } > + [self sendmouse:b]; > } > > - (void) mouseDown:(NSEvent*)event { [self mouseevent:event]; } > > >