4331 ^ false |
4331 ^ false |
4332 ! ! |
4332 ! ! |
4333 |
4333 |
4334 !XWorkstation methodsFor:'event forwarding'! |
4334 !XWorkstation methodsFor:'event forwarding'! |
4335 |
4335 |
|
4336 buttonMotion:view state:state x:x y:y rootX:rX rootY:rY time:time |
|
4337 "forward a buttonMotion event for some view" |
|
4338 |
|
4339 self buttonMotion:state x:x y:y view:view |
|
4340 ! |
|
4341 |
|
4342 buttonPress:view button:button state:state x:x y:y rootX:rX rootY:rY time:time |
|
4343 "forward a buttonPress event for some view" |
|
4344 |
|
4345 |logicalButton nextMultiClickTime| |
|
4346 |
|
4347 altDown := state bitTest:altModifierMask. |
|
4348 metaDown := state bitTest:metaModifierMask. |
|
4349 shiftDown := state bitTest:(self shiftModifierMask). |
|
4350 ctrlDown := state bitTest:(self ctrlModifierMask). |
|
4351 |
|
4352 eventRootX := rX. |
|
4353 eventRootY := rY. |
|
4354 |
|
4355 "/ physical to logical button translation |
|
4356 logicalButton := buttonTranslation at:button ifAbsent:button. |
|
4357 buttonsPressed := buttonsPressed bitOr:(1 bitShift:logicalButton-1). |
|
4358 |
|
4359 multiClickTimeDelta notNil ifTrue:[ |
|
4360 nextMultiClickTime := time + multiClickTimeDelta. |
|
4361 multiClickTime notNil ifTrue:[ |
|
4362 time < multiClickTime ifTrue:[ |
|
4363 multiClickTime := nextMultiClickTime. |
|
4364 self buttonMultiPress:logicalButton x:x y:y view:view. |
|
4365 ^ self. |
|
4366 ] |
|
4367 ]. |
|
4368 multiClickTime := nextMultiClickTime. |
|
4369 ]. |
|
4370 |
|
4371 self buttonPress:logicalButton x:x y:y view:view |
|
4372 ! |
|
4373 |
4336 buttonPress:button x:x y:y view:aView |
4374 buttonPress:button x:x y:y view:aView |
4337 "forward a button-press event for some view" |
4375 "forward a button-press event for some view" |
4338 |
4376 |
|
4377 aView isNil ifTrue:[ |
|
4378 "/ event arrived, after I destroyed it myself |
|
4379 ^ self |
|
4380 ]. |
4339 button == 1 ifTrue:[ |
4381 button == 1 ifTrue:[ |
4340 activateOnClick == true ifTrue:[ |
4382 activateOnClick == true ifTrue:[ |
4341 "/ dont raise above an active popup view. |
4383 "/ dont raise above an active popup view. |
4342 (activeKeyboardGrab isNil and:[activePointerGrab isNil]) ifTrue:[ |
4384 (activeKeyboardGrab isNil and:[activePointerGrab isNil]) ifTrue:[ |
4343 aView topView raise. |
4385 aView topView raise. |
4344 "/ ] ifFalse:[ |
4386 "/ ] ifFalse:[ |
4345 "/ activeKeyboardGrab printCR. |
4387 "/ activeKeyboardGrab printCR. |
4346 "/ activePointerGrab printCR. |
4388 "/ activePointerGrab printCR. |
4347 ] |
4389 ] |
4348 ]. |
4390 ]. |
4349 ]. |
4391 ]. |
4350 super buttonPress:button x:x y:y view:aView |
4392 super buttonPress:button x:x y:y view:aView |
4351 |
4393 |
4352 |
4394 |
4353 |
4395 |
|
4396 ! |
|
4397 |
|
4398 buttonRelease:view button:button state:state x:x y:y rootX:rX rootY:rY time:time |
|
4399 "forward a buttonPress event for some view" |
|
4400 |
|
4401 |logicalButton| |
|
4402 |
|
4403 altDown := state bitTest:altModifierMask. |
|
4404 metaDown := state bitTest:metaModifierMask. |
|
4405 shiftDown := state bitTest:(self shiftModifierMask). |
|
4406 ctrlDown := state bitTest:(self ctrlModifierMask). |
|
4407 |
|
4408 eventRootX := rX. |
|
4409 eventRootY := rY. |
|
4410 |
|
4411 "/ physical to logical button translation |
|
4412 logicalButton := buttonTranslation at:button ifAbsent:button. |
|
4413 |
|
4414 buttonsPressed := buttonsPressed bitClear:(1 bitShift:logicalButton-1). |
|
4415 |
|
4416 self buttonRelease:logicalButton x:x y:y view:view |
4354 ! |
4417 ! |
4355 |
4418 |
4356 circulateNotifyView:aView |
4419 circulateNotifyView:aView |
4357 "sent, when the stacking order changes. |
4420 "sent, when the stacking order changes. |
4358 ignored for now." |
4421 ignored for now." |
4523 |
4596 |
4524 "Created: 4.4.1997 / 17:59:37 / cg" |
4597 "Created: 4.4.1997 / 17:59:37 / cg" |
4525 "Modified: 6.4.1997 / 14:50:44 / cg" |
4598 "Modified: 6.4.1997 / 14:50:44 / cg" |
4526 ! |
4599 ! |
4527 |
4600 |
|
4601 expose:view x:x y:y width:w height:h count:count |
|
4602 "forward an expose event for some view" |
|
4603 |
|
4604 self exposeX:x y:y width:w height:h view:view. |
|
4605 |
|
4606 |
|
4607 |
|
4608 |
|
4609 ! |
|
4610 |
|
4611 focusIn:view mode:mode detail:detail |
|
4612 "forward a key-press event for some view" |
|
4613 |
|
4614 self focusInView:view |
|
4615 ! |
|
4616 |
|
4617 focusOut:view mode:mode detail:detail |
|
4618 "forward a key-press event for some view" |
|
4619 |
|
4620 self focusOutView:view |
|
4621 ! |
|
4622 |
|
4623 graphicsExpose:view x:x y:y width:w height:h count:count |
|
4624 "forward a graphics-expose event for some view" |
|
4625 |
|
4626 self graphicsExposeX:x y:y width:w height:h final:(count==0) view:view |
|
4627 |
|
4628 |
|
4629 |
|
4630 |
|
4631 ! |
|
4632 |
4528 gravityNotifyView:aView |
4633 gravityNotifyView:aView |
4529 "ignored for now" |
4634 "ignored for now" |
4530 |
4635 |
4531 "/ aView gravityNotify |
4636 "/ aView gravityNotify |
4532 ! |
4637 ! |
4533 |
4638 |
|
4639 keyPress:view key:key code:keyCode state:state x:x y:y rootX:rX rootY:rY time:time |
|
4640 "forward a key-press event for some view" |
|
4641 |
|
4642 altDown := state bitTest:altModifierMask. |
|
4643 metaDown := state bitTest:metaModifierMask. |
|
4644 shiftDown := state bitTest:(self shiftModifierMask). |
|
4645 ctrlDown := state bitTest:(self ctrlModifierMask). |
|
4646 |
|
4647 key isNil ifTrue:[ |
|
4648 "/ happens sometimes on some systems |
|
4649 "/ (alt-graph on sun has no keysym) |
|
4650 ^ self |
|
4651 ]. |
|
4652 eventRootX := rX. |
|
4653 eventRootY := rY. |
|
4654 self keyPress:key x:x y:y view:view. |
|
4655 |
|
4656 |
|
4657 ! |
|
4658 |
|
4659 keyRelease:view key:key code:keyCode state:state x:x y:y rootX:rX rootY:rY time:time |
|
4660 "forward a key-release event for some view" |
|
4661 |
|
4662 altDown := state bitTest:altModifierMask. |
|
4663 metaDown := state bitTest:metaModifierMask. |
|
4664 shiftDown := state bitTest:(self shiftModifierMask). |
|
4665 ctrlDown := state bitTest:(self ctrlModifierMask). |
|
4666 |
|
4667 key isNil ifTrue:[ |
|
4668 "/ happens sometimes on some systems |
|
4669 "/ (alt-graph on sun has no keysym) |
|
4670 ^ self |
|
4671 ]. |
|
4672 eventRootX := rX. |
|
4673 eventRootY := rY. |
|
4674 self keyRelease:key x:x y:y view:view. |
|
4675 |
|
4676 |
|
4677 |
|
4678 |
|
4679 ! |
|
4680 |
4534 mapRequestView:aView |
4681 mapRequestView:aView |
4535 "ignored for now" |
4682 "ignored for now" |
4536 |
4683 |
4537 "/ aView mapRequest |
4684 "/ aView mapRequest |
|
4685 ! |
|
4686 |
|
4687 pointerEnter:view x:x y:y rootX:rX rootY:rY state:state mode:mode detail:detail time:time |
|
4688 "forward a pointer enter event for some view" |
|
4689 |
|
4690 altDown := state bitTest:altModifierMask. |
|
4691 metaDown := state bitTest:metaModifierMask. |
|
4692 shiftDown := state bitTest:(self shiftModifierMask). |
|
4693 ctrlDown := state bitTest:(self ctrlModifierMask). |
|
4694 |
|
4695 eventRootX := rX. |
|
4696 eventRootY := rY. |
|
4697 self pointerEnter:state x:x y:y view:view |
|
4698 ! |
|
4699 |
|
4700 pointerLeave:view x:x y:y rootX:rX rootY:rY state:state mode:mode detail:detail time:time |
|
4701 "forward a pointer leave event for some view" |
|
4702 |
|
4703 altDown := state bitTest:altModifierMask. |
|
4704 metaDown := state bitTest:metaModifierMask. |
|
4705 shiftDown := state bitTest:(self shiftModifierMask). |
|
4706 ctrlDown := state bitTest:(self ctrlModifierMask). |
|
4707 |
|
4708 eventRootX := rX. |
|
4709 eventRootY := rY. |
|
4710 self pointerLeave:state view:view |
4538 ! |
4711 ! |
4539 |
4712 |
4540 propertyChangeView:aView |
4713 propertyChangeView:aView |
4541 "sent when an X property changes. |
4714 "sent when an X property changes. |
4542 This is a very X-specific mechanism." |
4715 This is a very X-specific mechanism." |
4543 |
4716 |
|
4717 aView isNil ifTrue:[ |
|
4718 "/ event arrived, after I destroyed it myself |
|
4719 ^ self |
|
4720 ]. |
4544 aView propertyChange |
4721 aView propertyChange |
4545 ! |
4722 ! |
4546 |
4723 |
4547 reparentedView:aView |
4724 reparentedView:aView |
4548 "ignored for now" |
4725 "ignored for now" |
4684 "Modified: / 17.6.1998 / 20:24:40 / cg" |
4861 "Modified: / 17.6.1998 / 20:24:40 / cg" |
4685 ! ! |
4862 ! ! |
4686 |
4863 |
4687 !XWorkstation methodsFor:'event handling'! |
4864 !XWorkstation methodsFor:'event handling'! |
4688 |
4865 |
|
4866 decomposeLastEventInto:eventArr |
|
4867 "extracet event fields and place them into an array: |
|
4868 the fields are: |
|
4869 1: windowID |
|
4870 2: eventType-ID |
|
4871 3: eventTypeSymbol |
|
4872 |
|
4873 4.. args |
|
4874 " |
|
4875 %{ |
|
4876 # define ANYBUTTON (Button1MotionMask | Button2MotionMask | Button3MotionMask) |
|
4877 |
|
4878 OBJ eB; |
|
4879 XEvent *ev; |
|
4880 int ev_x, ev_y; |
|
4881 |
|
4882 # define ae ((XAnyEvent *)ev) |
|
4883 # define ee ((XExposeEvent *)ev) |
|
4884 # define ke ((XKeyPressedEvent *)ev) |
|
4885 # define be ((XButtonPressedEvent *)ev) |
|
4886 # define ce ((XConfigureEvent *)ev) |
|
4887 # define cr ((XConfigureRequestEvent *)ev) |
|
4888 # define me ((XMotionEvent *)ev) |
|
4889 # define ele ((XCrossingEvent *)ev) |
|
4890 # define de ((XDestroyWindowEvent *)ev) |
|
4891 # define ve ((XVisibilityEvent *)ev) |
|
4892 # define fe ((XFocusChangeEvent *)ev) |
|
4893 # define cre ((XCreateWindowEvent *)ev) |
|
4894 # define mape ((XMappingEvent *)ev) |
|
4895 # define gre ((XGravityEvent *)ev) |
|
4896 # define rr ((XResizeRequestEvent *)ev) |
|
4897 # define cie ((XCirculateEvent *)ev) |
|
4898 # define pe ((XPropertyEvent *)ev) |
|
4899 # define sce ((XSelectionClearEvent *)ev) |
|
4900 # define cme ((XColormapEvent *)ev) |
|
4901 |
|
4902 KeySym keySym; |
|
4903 unsigned char buffer[10]; |
|
4904 int i, nchars; |
|
4905 char *keySymString; |
|
4906 char keySymStringBuffer[32]; |
|
4907 unsigned INT nextMultiClickTime; |
|
4908 OBJ arg, sym, t, windowID; |
|
4909 |
|
4910 eB = __INST(eventBuffer); |
|
4911 |
|
4912 if (__isByteArray(eB)) { |
|
4913 ev = (XEvent *)(__ByteArrayInstPtr(eB)->ba_element); |
|
4914 } else { |
|
4915 printf("DISPLAY: no eventBuffer\n"); |
|
4916 RETURN (false); |
|
4917 } |
|
4918 if (!__isArray(eventArr)) { |
|
4919 printf("DISPLAY: bad argument\n"); |
|
4920 RETURN (false); |
|
4921 } |
|
4922 if (__arraySize(eventArr) < 11) { |
|
4923 printf("DISPLAY: bad argument\n"); |
|
4924 RETURN (false); |
|
4925 } |
|
4926 |
|
4927 if (((t = __INST(lastId)) != nil) |
|
4928 && __isExternalAddress(t) |
|
4929 && (_WindowVal(t) == ae->window)) { |
|
4930 windowID = t; |
|
4931 } else { |
|
4932 windowID = __MKEXTERNALADDRESS(ae->window); |
|
4933 } |
|
4934 |
|
4935 __ArrayInstPtr(eventArr)->a_element[0] = windowID; __STORE(eventArr, windowID); |
|
4936 __ArrayInstPtr(eventArr)->a_element[1] = __MKSMALLINT(ev->type); |
|
4937 |
|
4938 switch (ev->type) { |
|
4939 case KeyRelease: |
|
4940 sym = @symbol(keyRelease:key:code:state:x:y:rootX:rootY:time:); |
|
4941 goto keyPressAndRelease; |
|
4942 |
|
4943 case KeyPress: |
|
4944 sym = @symbol(keyPress:key:code:state:x:y:rootX:rootY:time:); |
|
4945 /* FALL INTO */ |
|
4946 |
|
4947 keyPressAndRelease: |
|
4948 arg = nil; |
|
4949 nchars = XLookupString(ke, (char *)buffer, sizeof(buffer), &keySym, NULL); |
|
4950 if (nchars |
|
4951 && (((buffer[0] >= ' ') && (buffer[0] <= '~')) |
|
4952 || (buffer[0] >= 0x80))) { |
|
4953 arg = _MKCHARACTER(buffer[0])/* *_CharacterTable[buffer[0]] */; |
|
4954 keySymString = NULL; |
|
4955 } else { |
|
4956 keySymString = XKeysymToString(keySym); |
|
4957 if (keySymString) { |
|
4958 arg = __MKSTRING(keySymString); |
|
4959 } |
|
4960 } |
|
4961 |
|
4962 if (arg == nil) { |
|
4963 /* happens sometimes (alt-graph on sun has no keysym) */ |
|
4964 RETURN (false); |
|
4965 } |
|
4966 |
|
4967 __ArrayInstPtr(eventArr)->a_element[2] = sym; |
|
4968 |
|
4969 __ArrayInstPtr(eventArr)->a_element[3] = arg; __STORE(eventArr, arg); |
|
4970 __ArrayInstPtr(eventArr)->a_element[4] = t = __MKUINT(ke->keycode); __STORE(eventArr, t); |
|
4971 __ArrayInstPtr(eventArr)->a_element[5] = __mkSmallInteger(ke->state); |
|
4972 __ArrayInstPtr(eventArr)->a_element[6] = __mkSmallInteger(ke->x); |
|
4973 __ArrayInstPtr(eventArr)->a_element[7] = __mkSmallInteger(ke->y); |
|
4974 __ArrayInstPtr(eventArr)->a_element[8] = __mkSmallInteger(ke->x_root); |
|
4975 __ArrayInstPtr(eventArr)->a_element[9] = __mkSmallInteger(ke->y_root); |
|
4976 __ArrayInstPtr(eventArr)->a_element[10] = t = __MKUINT(ke->time); __STORE(eventArr, t); |
|
4977 RETURN (true); |
|
4978 |
|
4979 case ButtonPress: |
|
4980 sym = @symbol(buttonPress:button:state:x:y:rootX:rootY:time:); |
|
4981 goto buttonPressAndRelease; |
|
4982 |
|
4983 case ButtonRelease: |
|
4984 sym = @symbol(buttonRelease:button:state:x:y:rootX:rootY:time:); |
|
4985 /* fall into */ |
|
4986 |
|
4987 buttonPressAndRelease: |
|
4988 __ArrayInstPtr(eventArr)->a_element[2] = sym; |
|
4989 __ArrayInstPtr(eventArr)->a_element[3] = __mkSmallInteger(be->button); |
|
4990 __ArrayInstPtr(eventArr)->a_element[4] = __mkSmallInteger(ke->state); |
|
4991 __ArrayInstPtr(eventArr)->a_element[5] = __mkSmallInteger(be->x); |
|
4992 __ArrayInstPtr(eventArr)->a_element[6] = __mkSmallInteger(be->y); |
|
4993 __ArrayInstPtr(eventArr)->a_element[7] = __mkSmallInteger(be->x_root); |
|
4994 __ArrayInstPtr(eventArr)->a_element[8] = __mkSmallInteger(be->y_root); |
|
4995 __ArrayInstPtr(eventArr)->a_element[9] = t = __MKUINT(be->time); __STORE(eventArr, t); |
|
4996 RETURN (true); |
|
4997 |
|
4998 case MotionNotify: |
|
4999 __ArrayInstPtr(eventArr)->a_element[2] = @symbol(buttonMotion:state:x:y:rootX:rootY:time:); |
|
5000 |
|
5001 __ArrayInstPtr(eventArr)->a_element[3] = __mkSmallInteger(me->state); |
|
5002 __ArrayInstPtr(eventArr)->a_element[4] = __mkSmallInteger(me->x); |
|
5003 __ArrayInstPtr(eventArr)->a_element[5] = __mkSmallInteger(me->y); |
|
5004 __ArrayInstPtr(eventArr)->a_element[6] = __mkSmallInteger(me->x_root); |
|
5005 __ArrayInstPtr(eventArr)->a_element[7] = __mkSmallInteger(me->y_root); |
|
5006 __ArrayInstPtr(eventArr)->a_element[8] = t = __MKUINT(me->time); __STORE(eventArr, t); |
|
5007 RETURN (true); |
|
5008 |
|
5009 case FocusIn: |
|
5010 __ArrayInstPtr(eventArr)->a_element[2] = @symbol(focusIn:mode:detail:); |
|
5011 goto focusInOut; |
|
5012 |
|
5013 case FocusOut: |
|
5014 __ArrayInstPtr(eventArr)->a_element[2] = @symbol(focusOut:mode:detail:); |
|
5015 /* fall into */ |
|
5016 |
|
5017 focusInOut: |
|
5018 __ArrayInstPtr(eventArr)->a_element[3] = __mkSmallInteger(fe->mode); |
|
5019 __ArrayInstPtr(eventArr)->a_element[4] = __mkSmallInteger(fe->detail); |
|
5020 RETURN (true); |
|
5021 |
|
5022 |
|
5023 case EnterNotify: |
|
5024 __ArrayInstPtr(eventArr)->a_element[2] = @symbol(pointerEnter:x:y:rootX:rootY:state:mode:detail:time:); |
|
5025 goto enterLeave; |
|
5026 |
|
5027 case LeaveNotify: |
|
5028 __ArrayInstPtr(eventArr)->a_element[2] = @symbol(pointerLeave:x:y:rootX:rootY:state:mode:detail:time:); |
|
5029 /* fall into */ |
|
5030 |
|
5031 enterLeave: |
|
5032 __ArrayInstPtr(eventArr)->a_element[3] = __mkSmallInteger(ele->x); |
|
5033 __ArrayInstPtr(eventArr)->a_element[4] = __mkSmallInteger(ele->y); |
|
5034 __ArrayInstPtr(eventArr)->a_element[5] = __mkSmallInteger(ele->x_root); |
|
5035 __ArrayInstPtr(eventArr)->a_element[6] = __mkSmallInteger(ele->y_root); |
|
5036 __ArrayInstPtr(eventArr)->a_element[7] = __mkSmallInteger(ele->state); |
|
5037 __ArrayInstPtr(eventArr)->a_element[8] = __mkSmallInteger(ele->mode); |
|
5038 __ArrayInstPtr(eventArr)->a_element[9] = __mkSmallInteger(ele->detail); |
|
5039 __ArrayInstPtr(eventArr)->a_element[10] = t = __MKUINT(ele->time); __STORE(eventArr, t); |
|
5040 RETURN (true); |
|
5041 |
|
5042 case Expose: |
|
5043 __ArrayInstPtr(eventArr)->a_element[2] = @symbol(expose:x:y:width:height:count:); |
|
5044 goto expose; |
|
5045 |
|
5046 case GraphicsExpose: |
|
5047 __ArrayInstPtr(eventArr)->a_element[2] = @symbol(graphicsExpose:x:y:width:height:count:); |
|
5048 /* fall into */ |
|
5049 |
|
5050 expose: |
|
5051 __ArrayInstPtr(eventArr)->a_element[3] = __mkSmallInteger(ee->x); |
|
5052 __ArrayInstPtr(eventArr)->a_element[4] = __mkSmallInteger(ee->y); |
|
5053 __ArrayInstPtr(eventArr)->a_element[5] = __mkSmallInteger(ee->width); |
|
5054 __ArrayInstPtr(eventArr)->a_element[6] = __mkSmallInteger(ee->height); |
|
5055 __ArrayInstPtr(eventArr)->a_element[7] = __mkSmallInteger(ee->count); |
|
5056 RETURN (true); |
|
5057 |
|
5058 case NoExpose: |
|
5059 __ArrayInstPtr(eventArr)->a_element[2] = @symbol(noExposeView:); |
|
5060 RETURN (true); |
|
5061 |
|
5062 case VisibilityNotify: |
|
5063 __ArrayInstPtr(eventArr)->a_element[2] = @symbol(visibilityNotify:state:); |
|
5064 switch (ve->state) { |
|
5065 case VisibilityUnobscured: |
|
5066 __ArrayInstPtr(eventArr)->a_element[3] = @symbol(unobscured); |
|
5067 break; |
|
5068 case VisibilityPartiallyObscured: |
|
5069 __ArrayInstPtr(eventArr)->a_element[3] = @symbol(partiallyObscured); |
|
5070 break; |
|
5071 case VisibilityFullyObscured: |
|
5072 __ArrayInstPtr(eventArr)->a_element[3] = @symbol(fullyObscured); |
|
5073 break; |
|
5074 } |
|
5075 RETURN (true); |
|
5076 |
|
5077 case CreateNotify: |
|
5078 __ArrayInstPtr(eventArr)->a_element[2] = @symbol(createWindow:x:y:width:height:); |
|
5079 __ArrayInstPtr(eventArr)->a_element[3] = __mkSmallInteger(cre->x); |
|
5080 __ArrayInstPtr(eventArr)->a_element[4] = __mkSmallInteger(cre->y); |
|
5081 __ArrayInstPtr(eventArr)->a_element[5] = __mkSmallInteger(cre->width); |
|
5082 __ArrayInstPtr(eventArr)->a_element[6] = __mkSmallInteger(cre->height); |
|
5083 RETURN (true); |
|
5084 |
|
5085 case DestroyNotify: |
|
5086 __ArrayInstPtr(eventArr)->a_element[2] = @symbol(destroyedView:); |
|
5087 RETURN (true); |
|
5088 |
|
5089 case UnmapNotify: |
|
5090 __ArrayInstPtr(eventArr)->a_element[2] = @symbol(unmappedView:); |
|
5091 RETURN (true); |
|
5092 |
|
5093 case MapNotify: |
|
5094 __ArrayInstPtr(eventArr)->a_element[2] = @symbol(mappedView:); |
|
5095 RETURN (true); |
|
5096 |
|
5097 case ConfigureNotify: |
|
5098 __ArrayInstPtr(eventArr)->a_element[2] = @symbol(configure:x:y:width:height:above:); |
|
5099 __ArrayInstPtr(eventArr)->a_element[3] = __mkSmallInteger(ce->x); |
|
5100 __ArrayInstPtr(eventArr)->a_element[4] = __mkSmallInteger(ce->y); |
|
5101 __ArrayInstPtr(eventArr)->a_element[5] = __mkSmallInteger(ce->width); |
|
5102 __ArrayInstPtr(eventArr)->a_element[6] = __mkSmallInteger(ce->height); |
|
5103 __ArrayInstPtr(eventArr)->a_element[7] = nil; |
|
5104 if (ce->above != None) { |
|
5105 __ArrayInstPtr(eventArr)->a_element[8] = t = __MKEXTERNALADDRESS(ce->above); __STORE(eventArr, t); |
|
5106 } |
|
5107 RETURN (true); |
|
5108 |
|
5109 case GravityNotify: |
|
5110 __ArrayInstPtr(eventArr)->a_element[2] = @symbol(gravityNotify:x:y:); |
|
5111 __ArrayInstPtr(eventArr)->a_element[3] = __mkSmallInteger(gre->x); |
|
5112 __ArrayInstPtr(eventArr)->a_element[4] = __mkSmallInteger(gre->y); |
|
5113 RETURN (true); |
|
5114 break; |
|
5115 |
|
5116 case ResizeRequest: |
|
5117 __ArrayInstPtr(eventArr)->a_element[2] = @symbol(resizeRequest:width:height:); |
|
5118 __ArrayInstPtr(eventArr)->a_element[3] = __mkSmallInteger(rr->width); |
|
5119 __ArrayInstPtr(eventArr)->a_element[4] = __mkSmallInteger(rr->height); |
|
5120 RETURN (true); |
|
5121 break; |
|
5122 |
|
5123 case ConfigureRequest: |
|
5124 __ArrayInstPtr(eventArr)->a_element[2] = @symbol(configureRequest:x:y:width:height:above:detail:); |
|
5125 __ArrayInstPtr(eventArr)->a_element[3] = __mkSmallInteger(cr->x); |
|
5126 __ArrayInstPtr(eventArr)->a_element[4] = __mkSmallInteger(cr->y); |
|
5127 __ArrayInstPtr(eventArr)->a_element[5] = __mkSmallInteger(cr->width); |
|
5128 __ArrayInstPtr(eventArr)->a_element[6] = __mkSmallInteger(cr->height); |
|
5129 __ArrayInstPtr(eventArr)->a_element[7] = nil; |
|
5130 if (cr->above != None) { |
|
5131 __ArrayInstPtr(eventArr)->a_element[7] = t = __MKEXTERNALADDRESS(cr->above); __STORE(eventArr, t); |
|
5132 } |
|
5133 switch (cr->detail) { |
|
5134 case Above: |
|
5135 __ArrayInstPtr(eventArr)->a_element[8] = @symbol(above); |
|
5136 break; |
|
5137 case Below: |
|
5138 __ArrayInstPtr(eventArr)->a_element[8] = @symbol(below); |
|
5139 break; |
|
5140 case TopIf: |
|
5141 __ArrayInstPtr(eventArr)->a_element[8] = @symbol(topIf); |
|
5142 break; |
|
5143 case BottomIf: |
|
5144 __ArrayInstPtr(eventArr)->a_element[8] = @symbol(bottomIf); |
|
5145 break; |
|
5146 case Opposite: |
|
5147 __ArrayInstPtr(eventArr)->a_element[8] = @symbol(opposite); |
|
5148 break; |
|
5149 default: |
|
5150 __ArrayInstPtr(eventArr)->a_element[8] = nil; |
|
5151 break; |
|
5152 } |
|
5153 RETURN (true); |
|
5154 break; |
|
5155 |
|
5156 case CirculateNotify: |
|
5157 __ArrayInstPtr(eventArr)->a_element[2] = @symbol(circulateNotify:place:); |
|
5158 goto circulate; |
|
5159 |
|
5160 case CirculateRequest: |
|
5161 __ArrayInstPtr(eventArr)->a_element[2] = @symbol(circulateNotify:place:); |
|
5162 /* fall into */ |
|
5163 circulate: |
|
5164 switch (cie->place) { |
|
5165 case PlaceOnTop: |
|
5166 __ArrayInstPtr(eventArr)->a_element[3] = @symbol(placeOnTop); |
|
5167 break; |
|
5168 case PlaceOnBottom: |
|
5169 __ArrayInstPtr(eventArr)->a_element[3] = @symbol(placeOnBottom); |
|
5170 break; |
|
5171 default: |
|
5172 __ArrayInstPtr(eventArr)->a_element[3] = nil; |
|
5173 break; |
|
5174 } |
|
5175 RETURN (true); |
|
5176 break; |
|
5177 |
|
5178 case PropertyNotify: |
|
5179 __ArrayInstPtr(eventArr)->a_element[2] = @symbol(propertyChange:atom:state:time:); |
|
5180 __ArrayInstPtr(eventArr)->a_element[3] = t = __MKUINT(pe->atom); __STORE(eventArr, t); |
|
5181 switch (pe->state) { |
|
5182 case PropertyNewValue: |
|
5183 __ArrayInstPtr(eventArr)->a_element[4] = @symbol(newValue); |
|
5184 break; |
|
5185 case PropertyDelete: |
|
5186 __ArrayInstPtr(eventArr)->a_element[4] = @symbol(deleted); |
|
5187 break; |
|
5188 default: |
|
5189 __ArrayInstPtr(eventArr)->a_element[4] = nil; |
|
5190 break; |
|
5191 } |
|
5192 __ArrayInstPtr(eventArr)->a_element[3] = t = __MKUINT(pe->time); __STORE(eventArr, t); |
|
5193 RETURN (true); |
|
5194 break; |
|
5195 |
|
5196 case SelectionClear: |
|
5197 __ArrayInstPtr(eventArr)->a_element[2] = @symbol(propertyChange:atom:time:); |
|
5198 __ArrayInstPtr(eventArr)->a_element[3] = t = __MKUINT(sce->selection); __STORE(eventArr, t); |
|
5199 __ArrayInstPtr(eventArr)->a_element[4] = t = __MKUINT(sce->time); __STORE(eventArr, t); |
|
5200 RETURN (true); |
|
5201 break; |
|
5202 |
|
5203 case SelectionRequest: |
|
5204 /* |
|
5205 * someone wants the selection |
|
5206 */ |
|
5207 __ArrayInstPtr(eventArr)->a_element[2] = @symbol(selectionRequest:requestor:selection:target:property:time:); |
|
5208 __ArrayInstPtr(eventArr)->a_element[3] = t = __MKUINT(ev->xselectionrequest.requestor); __STORE(eventArr, t); |
|
5209 __ArrayInstPtr(eventArr)->a_element[4] = t = __MKUINT(ev->xselectionrequest.selection); __STORE(eventArr, t); |
|
5210 __ArrayInstPtr(eventArr)->a_element[5] = t = __MKUINT(ev->xselectionrequest.target); __STORE(eventArr, t); |
|
5211 __ArrayInstPtr(eventArr)->a_element[6] = t = __MKUINT(ev->xselectionrequest.property); __STORE(eventArr, t); |
|
5212 __ArrayInstPtr(eventArr)->a_element[7] = t = __MKUINT(ev->xselectionrequest.time); __STORE(eventArr, t); |
|
5213 RETURN (true); |
|
5214 |
|
5215 case SelectionNotify: |
|
5216 /* |
|
5217 * returned selection value (answer from SelectionRequest) |
|
5218 */ |
|
5219 __ArrayInstPtr(eventArr)->a_element[2] = @symbol(selectionNotify:selection:target:property:time:); |
|
5220 __ArrayInstPtr(eventArr)->a_element[3] = t = __MKUINT(ev->xselectionrequest.selection); __STORE(eventArr, t); |
|
5221 __ArrayInstPtr(eventArr)->a_element[4] = t = __MKUINT(ev->xselectionrequest.target); __STORE(eventArr, t); |
|
5222 __ArrayInstPtr(eventArr)->a_element[5] = t = __MKUINT(ev->xselectionrequest.property); __STORE(eventArr, t); |
|
5223 __ArrayInstPtr(eventArr)->a_element[6] = t = __MKUINT(ev->xselectionrequest.time); __STORE(eventArr, t); |
|
5224 RETURN (true); |
|
5225 |
|
5226 case ColormapNotify: |
|
5227 __ArrayInstPtr(eventArr)->a_element[2] = @symbol(colormapNotify:state:); |
|
5228 __ArrayInstPtr(eventArr)->a_element[3] = cme->state == ColormapInstalled ? true : false; |
|
5229 RETURN (true); |
|
5230 break; |
|
5231 |
|
5232 case ClientMessage: |
|
5233 if (ev->xclient.message_type == (int) _AtomVal(__INST(protocolsAtom))) { |
|
5234 if ((ev->xclient.data.l[0] == (int) _AtomVal(__INST(quitAppAtom))) |
|
5235 || (ev->xclient.data.l[0] == (int) _AtomVal(__INST(deleteWindowAtom)))) { |
|
5236 __ArrayInstPtr(eventArr)->a_element[2] = @symbol(terminateView:); |
|
5237 RETURN (true); |
|
5238 } |
|
5239 if (ev->xclient.data.l[0] == (int) _AtomVal(__INST(saveYourselfAtom))) { |
|
5240 __ArrayInstPtr(eventArr)->a_element[2] = @symbol(saveAndTerminateView:); |
|
5241 RETURN (true); |
|
5242 } |
|
5243 } |
|
5244 /* |
|
5245 * any other client message |
|
5246 */ |
|
5247 __ArrayInstPtr(eventArr)->a_element[2] = @symbol(clientMessage:type:format:data:); |
|
5248 __ArrayInstPtr(eventArr)->a_element[3] = __MKSMALLINT(ev->xclient.message_type); |
|
5249 __ArrayInstPtr(eventArr)->a_element[4] = __MKSMALLINT(ev->xclient.format); |
|
5250 __ArrayInstPtr(eventArr)->a_element[5] = t = __MKBYTEARRAY(ev->xclient.data, sizeof(ev->xclient.data)); __STORE(eventArr, t); |
|
5251 RETURN (true); |
|
5252 break; |
|
5253 |
|
5254 case MappingNotify: |
|
5255 switch(mape->request) { |
|
5256 case MappingModifier: |
|
5257 __ArrayInstPtr(eventArr)->a_element[2] = @symbol(mappingModifier:); |
|
5258 break; |
|
5259 case MappingKeyboard: |
|
5260 __ArrayInstPtr(eventArr)->a_element[2] = @symbol(mappingKeyboard:); |
|
5261 break; |
|
5262 case MappingPointer: |
|
5263 __ArrayInstPtr(eventArr)->a_element[2] = @symbol(mappingPointer:); |
|
5264 break; |
|
5265 default: |
|
5266 arg = nil; |
|
5267 break; |
|
5268 } |
|
5269 RETURN (true); |
|
5270 |
|
5271 case KeymapNotify: |
|
5272 __ArrayInstPtr(eventArr)->a_element[2] = @symbol(keymapNotify:); |
|
5273 RETURN (true); |
|
5274 break; |
|
5275 |
|
5276 case MapRequest: |
|
5277 __ArrayInstPtr(eventArr)->a_element[2] = @symbol(mapRequest:); |
|
5278 RETURN (true); |
|
5279 |
|
5280 case ReparentNotify: |
|
5281 __ArrayInstPtr(eventArr)->a_element[2] = @symbol(reparentedView:); |
|
5282 break; |
|
5283 |
|
5284 |
|
5285 } |
|
5286 #undef ae |
|
5287 #undef ee |
|
5288 #undef ke |
|
5289 #undef be |
|
5290 #undef ce |
|
5291 #undef cr |
|
5292 #undef cre |
|
5293 #undef cle |
|
5294 #undef gre |
|
5295 #undef me |
|
5296 #undef ewe |
|
5297 #undef ele |
|
5298 #undef lwe |
|
5299 #undef de |
|
5300 #undef mape |
|
5301 #undef ve |
|
5302 #undef fe |
|
5303 #undef rr |
|
5304 #undef pe |
|
5305 #undef sce |
|
5306 #undef cme |
|
5307 %}. |
|
5308 ^ true |
|
5309 ! |
|
5310 |
4689 defaultEventMask |
5311 defaultEventMask |
4690 "return a mask to enable some events by default." |
5312 "return a mask to enable some events by default." |
4691 |
5313 |
4692 %{ /* NOCONTEXT */ |
5314 %{ /* NOCONTEXT */ |
4693 RETURN (__MKSMALLINT( ExposureMask | StructureNotifyMask | |
5315 RETURN (__MKSMALLINT( ExposureMask | StructureNotifyMask | |