On Tue, Mar 17, 2009 at 2:01 AM, Dominik Vogt <dominik.v...@gmx.de> wrote:
> On Mon, Mar 16, 2009 at 11:36:33PM -0700, Jason Weber wrote:
>> On Mon, Mar 16, 2009 at 3:34 PM, Dominik Vogt <dominik.v...@gmx.de> wrote:
>> > On Sun, Mar 15, 2009 at 06:08:19PM -0700, Jason Weber wrote:
>> > [snip]
>> >> > 1. Key polling
>> >> >
>> >> > I'm not completely sure what the current code does.  I assume the
>> >> > keyboard map is polled every time an event occurs.  However, there
>> >> > may be a possibility that the keyboard map changed but no event
>> >> > occurs.
>> >> >
>> >> > Earlier versions polled at a regular interval, which was
>> >> > inacceptable.
>> >> >
>> >> > We have to test this:
>> >> >
>> >> > * Invoke FvwmProxy by pressing a modifier key and configure it to
>> >> >    terminate when the key is released.
>> >> > * Don't touch the mouse from now and make sure that no events
>> >> >    occur that effect FvwmProxy.
>> >> > * Open a menu with the keyboard; fvwm grabs the keyboard.  Make
>> >> >    sure that the menu window does not overlap any FvwmProxy
>> >> >    windows.
>> >> > * Release the modifier key inside the menu.
>> >> > * Close the menu by pressing Escape.
>> >> >
>> >> > Now, does FvwmProxy close or not?  If so, the current polling of
>> >> > the keyboard map works acceptably.
>> >>
>> >> Yes, at the very end.
>> >>
>> >> (no touching the mouse)
>> >> Meta3-ESC: proxies up
>> >> Meta3-M: custom menu with some window ops pops up (proxies still up)
>> >
>> >> Release Meta3: nothing happens
>> >
>> > As expected while the keyboard is grabbed.
>> >
>> >> ESC: proxies and menu disappear
>> >>
>> >> It's the same results whether or not the menu and proxies window are
>> >> in contact.
>> >
>> > That's good, to make sure however, could you repeat that test but
>> > put an fprintf in Loop() that shows which events arrive after the
>> > menu is closed?
>>
>> FvwmProxy ProcessMessage M_STRING "Hide"
>
> Where did this come from?

*FvwmProxy: Action ModifierRelease S3 SendToModule FvwmProxy Hide

>> FvwmProxy ProcessMessage M_FOCUS_CHANGE
>
> Ah I see.  We need to repeat this test in a way that focus is and
> remains on some unrelated window.

Once the menu raises, the focus locks on whatever was focused
at the time.  It doesn't change until the menu drops.

> Can you print X events too?

I do.  I believe I only receive events to the proxy windows.
There are a bunch of Expose event when they raise.
The other events only happen when I play with the mouse
on the proxy window.

>> >> > 2. Moving keyboard handling into the core
>> >> >
>> >> > Regardless, I don't want to have this code in a module.  If it
>> >> > works, every module could benefit from it if we put it into the
>> >> > fvwm core.  We can't rely on KeyRelease events, but the approach
>> >> > in FvwmProxy might work.  SendCommand can be used to remote
>> >                              ^^^^^^^^^^^
>> > SendToModule
>> >
>> >> > control FvwmProxy or any other modules.
>> >> >
>> >> > We need a final solution before the next stable release.  If we
>> >> > don't find one, I'll either remove FvwmProxy or mark it as
>> >> > experimental and announce that its interface will be changed.
>> >>
>> >> So this means replacing XEvent ButtonPress/etc with an FvwmPacket,
>> >> say M_BUTTON or M_POINTER?
>> >
>> > No, it's already possible to reliable trigger actions in the core
>> > when mouse events occur.  We'd just need some notion of key
>> > release handling, e.g.
>> >
>> >  Mouse F1 A SC SendToModule FvwmProxy do_what_i_want
>> >
>> > Whenever Shift-Control-F1 is pressed, fvwm would send the string
>> > "do_what_i_want" over the module pipe to the module in an M_STRING
>> > packet.  Look at modules/FvwmButtons/FvwmButtons.c for an example.
>> >
>> >> If it's better for the core code, I'll be happy to adapt.
>> >
>> > Maybe something like
>> >
>> >  WaitForKeyReleased F1 Action
>> >
>> > Fvwm could keep a list of key and actions it's waiting to be
>> > released.  Whenever an event arrives while the list is not empty,
>> > fvwm would query the keyboard map and check if any of the keys is
>> > not pressed at the moment.  If so, it would remove the entry from
>> > the list and execute the action.
>>
>> It would also need to handle pure modifiers.  We currently have:
>>
>> *FvwmProxy: Action ModifierRelease S3 SendToModule FvwmProxy Hide
>>
>> I don't know if key bindings are exclusive, but if not, something like
>>
>> KeyRelease    *       A       3       SendToModule FvwmProxy Hide
>>
>> But you know what I'm looking for, so I should be happy with whatever
>> syntax is decided upon.
>
> Since we can't rely on noticing if a key is pressed and then
> released, I don't think we'll ever make KeyRelease bindings work
> reliably.  That's why is suggested different semantics that just
> watches specific keys when told so.
>
>> >> > 3. Problems in window placement code
>> >> >
>> >> > The "while (collision == true)" in AdjustWindows() may loop
>> >> > forever.  I haven't tried to generate this situation though.  It
>> >> > also may shift proxy windows to the void outside the screen.  We
>> >> > need a more reliable algorithm.
>> >>
>> >> I suppose a maxCollisions would be prudent.
>> >>
>> >> Off the screen issues, that I am aware of.  In really deep, but
>> >> vertically short,
>> >> stacks of virtual tabs, that does happen.  I've been just rearranging 
>> >> windows.
>> >> My #2 would help, but it could go a step further and actually push away 
>> >> from
>> >> the edges.  With such bounds, it is clearly possible that the collision 
>> >> check
>> >> could be unable to reach False if you simply cram a huge number of windows
>> >> on one desk.
>> >
>> > Well, yes.  Any ideas for a more robust algorithm?
>>
>> Ideal gas?  In any case, I would cap the procedure to stop at some point
>> even it it means not everything is visible and without contact.
>> I think that would be an extreme case even if I just did the #2 fix.
>>
>> >> > Hm, and how does FvwmProxy handle desks?  Should it be aware of
>> >> > the StickyAcrossDesks style?
>> >>
>> >> Sticky windows have proxies where ever the window would show up.
>> >> I have my Circulate calls set to skip over them, but that's preference.
>> >> FvwmProxy does honor WindowListSkip, meaning it presumes that you
>> >> don't want proxies where you don't want something on a window list.
>> >
>> >> I'm single page, multi desk (as I understand the terms), so I don't
>> >> have a good grip on issues with scrolling desktops but if regular
>> >> windows work, proxies should be fine.
>> >
>> > A desktop is a big area made of one or more pages e.g. 3x2.  A
>> > page is always the size of the screen.  The currently visible area
>> > of the screen is called the viewport and usually shows a complete
>> > page, but may be scrolled smoothly.
>>
>> Pages are probably good for somebody, but they're not for me.
>
> Ciao
>
> Dominik ^_^  ^_^
>
> --
>
> Dominik Vogt
>
>
>

Reply via email to