[squeak-dev] EventSensor questions

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
22 messages Options
12
Reply | Threaded
Open this post in threaded view
|

[squeak-dev] Re: EventSensor questions

Andreas.Raab
Igor Stasenko wrote:
>> Yeah. I just don't like the whole subsystem all that much and having more
>> InputSensor subclasses looks to me as if it may be making things worse. BTW,
>> where is that code?
>
> AFAIK, it wasn't published anywhere, try searching Pharo list
> archives, it should be in attachments.

Can you put this up on Mantis? File an issue, set it to fixed in "3.11"
and the status to "testing". If I understand the mechanism correctly
this should allow us to pick this up automatically for 3.11.

Cheers,
   - Andreas

> The refactoring was targeted to support multiple event handlers
> instead of just single Sensor.
> Currently i developing a new model, based on this but a little different.
> - initially there will be a single event polling loop running,
> governed by a EventListener class.
> - an EventListener installs the polling loop and fetching events from VM
> - once received, event buffer is converted to an instance of
> corresponding KernelXXXEvent and then passed to event handler (kept as
> inst var).
>
> The EventListener is intentionally made as simple as possible, to
> minimise the probability of changing it unless something changed in
> VM. Its name speaks for itself, it listens for events from some
> source, and in our case source is VM.
>
> You are free to set a listener handle to anything you like, just make
> sure it responds to #handleEvent: message.
>
> Now, the most fun begins with implementation of handler.
> First, i want to implement a handler, which will behave similarily to
> what current Sensor does.
> Next, when multiple host windows machinery will be ready, i will
> replace it with dispatching handler, which will dispatch events based
> on window id.
> So, instead of chain:
> VM -> listener -> Sensor -> hand
> we will have something like:
> VM -> listener -> window -> Sensor -> hand
>
> of course, such replacement is not possible until we will get rid of
> Display/World/Sensor globals in most critical places to make at least
> most functionality work for multiple host windows.
>
>>>>> Now, if you will fix signaling the input semaphore, we need some way
>>>>> to determine what method of event polling is most appropriate -  to
>>>>> install a best event polling mechanism.
>>>>> Any ideas how this can be determined by image side?
>>>> Easy. Run the poller until the first event comes in. Check whether the
>>>> semaphore is signaled. Switch to non-polling if so. Alternatively, use
>>>> #waitTimeoutMSecs: - it means you're still occasionally polling but that
>>>> is
>>>> probably acceptable.
>>>>
>>> Sure it is easy. I'm just feel uncomfortable when we need to introduce
>>> more complex logic in places where its not necessary.
>>> That's why i made two subclasses by factoring out #waitForInput logic
>>> to avoid putting too much if's into a single method.
>>> Again, when in future we will no longer need to care about backward
>>> compatibility, you'll need a minimal change - simply stop using the
>>> subclass instead of analyzing the complex code to remove obsolete
>>> cruft.
>> Yes. Although it seems that you don't get to avoid whatever complexity is
>> required to decided which version to use. This is partly why I'm thinking it
>> may actually be simpler to have this in the same place, along the lines of:
>>
>> processEvents
>>  self waitForInputPolling.
>>  haveSema := inputSemaphore isSignaled.
>>  [true] whileTrue:[
>>    haveSema
>>        ifTrue:[inputSemaphore wait]
>>        ifFalse:[self waitForInputPolling].
>>    self processNextEvent.
>>  ].
>>
>> Really not much complexity here.
>
> I agree.. you convinced me to put everything into a single method :)
> lets stop wasting our breath on this subtle detail :)
>
>
>>>>> And any other value returned should mean, that image should keep using
>>>>> old manual event polling mechanism and do not rely on input semaphore.
>>>> How much backwards compatibility do you need? Wouldn't it be easier to
>>>> fix
>>>> it and then switch?
>>>>
>>> I want it to be backward compatible, but i prefer a clear ways to
>>> determine VM's behavior instead of impirically guessing it (as with
>>> checking if semaphore is signaled).
>> What could be clearer than actually checking? ;-) Seriously, I find this the
>> most straightforward way to figure out whether we can rely on the VM to
>> signal the semaphore or not if you really want to be have that level of
>> backwards compatibility. Alternatively, just require VMs that signal the
>> damn semaphore! ;-)
>>
>> Cheers,
>>  - Andreas
>>
>>
>
>
>


Reply | Threaded
Open this post in threaded view
|

Re: [squeak-dev] Re: EventSensor questions

Michael Rueger-6
Andreas Raab wrote:
> Actually, the change set dies for me on Sensor>>rawMacOptionKeyPressed
> when closing any windows. Any ideas?



it's called in SystemWindow>>closeBoxHit

Me thinks that part of code should be removed or rewritten.

For now you could set
Preferences dismissAllOnOptionClose
to false, which is the case in my test image.

Michael

>
> Cheers,
>   - Andreas
>
> PS. Please do not use my qwaq email address for Squeak issues.
>
> Michael Rueger wrote:
>> Igor Stasenko wrote:
>>
>>> Andreas, this is not my code, i don't think that its correct to
>>> publish it without approval from author - Michael Rueger.
>>>
>>> Here the link on .cs from mailing list archive:
>>> http://www.mail-archive.com/pharo-project@.../msg03413.html 
>>>
>>
>> As part of Pharo it's published under MIT, so everybody is free to use
>> it.
>>
>> Michael
>

12