This is the mail archive of the cygwin-xfree mailing list for the Cygwin XFree86 project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

redraw windows while resizing/moving windows in multiwindow mode


the following patch is a quick & dirty hack to enable redrawing of windows while the user moves or resizes the window.

This patch should be seen as experimental proof that this can be done with only small changes in the source code.

The main problem with window resizing/moving under Windows is, that in the function invocation stack dix/Dispatch -> os/WaitForSomething -> WakeupHandler -> hw/xwin/winWakeupHandler -> Windows/DispatchMessage -> hw/xwin/winTopLevelWindowProc the Windows function DispatchMessage does not return while the user resizes/moves a window. This function only returns after the user releases the mouse button. However the dix/Dispatch functions must be run to allow the clients to process the queued redraw/resizing events.

The enclosed hack simply moves the invocation of DispatchMessage in winWakeupHandler outside WaitForSomething into Dispatch and breaks up the Dispatch function into a loop and inner dispatch handling that can be called from the winTopLevelWindowProc while WM_SIZE/WM_MOVE events are processed. This could further be improved by setting a windows timer while resizing moving to process clients messages even if the mouse is not moved while resizing (and therefore WM_SIZE/WM_MOVE events are not send).

What do you think about this idea? One problem here is, that the dix package is also affected. Of course some work must be done to cleanly integrate this into the existing dix/hw architecture.

Best regards,

Attachment: patch05.txt
Description: Text document

Unsubscribe info:
Problem reports:

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]