Re: Standardizing _METACITY_UPDATE_COUNTER



Okay, let me try to specify this somewhat more formally. I understand, after 
Soeren Sandmann's last message, why it makes sense to let the client increment 
the counter by more than one for each resize step. I also think I understand 
Owen Taylor's concern about being able to keep track of the client's location 
in the update stream. Further, making the protocol two-way might make it easier 
to double-buffer, depending on how double-buffering is done.  
 
I tried to follow the formatting of the wm-spec, to make things easier to 
understand: 
  
_NET_SYNC_REQUEST (client message)  
    window = top-level window being resized 
    message_type = _NET_SYNC_REQUEST  
    format = 32  
    data.l[0] = low-bits of counter value  
    data.l[1] = high-bits of counter value  
  
_NET_SYNC_ACKNOWLEDGE (client message)  
    window = top-level window being resized 
    message_type = _NET_SYNC_ACKNOWLEDGE  
    format = 32  
    data.l[0] = low-bits of counter value  
    data.l[1] = high-bits of counter value  
      
_NET_WM_SYNC_SUPPORT (client window property)  
    Integer specifying level of support for synchronization.  
    - 0: No support  
    - 1: Synchronization during resize  
  
Client behavior:  
    At startup, set the _NET_WM_SYNC_SUPPORT property to indicate support for 
    synchronization. 
      
    On receiving _NET_SYNC_REQUEST, set internal flag specifying that the next 
    ConfigureNotify event should be acknowledged with a _NET_SYNC_ACKNOWLEDGE 
    client message.  
      
    On receiving ConfigureNotify, compress any number of ConfigureNotify and 
    Expose events in queue. Handle all drawing resulting from those events. 
    Send the window manager a _NET_SYNC_ACKNOWLEDGE client message with the 
    counter set to the value specified in the latest _NET_SYNC_REQUEST message.  
      
Window manager behavior:  
    During resize, send _NET_SYNC_REQUEST before calling XMoveResizeWindow.  
    The counter value specified in the message should be 1 + the number of 
    NET_SYNC_REQUEST messages the window manager has sent so far to the  
    client window. Do not send another _NET_SYNC_REQUEST, or call 
    XMoveResizeWindow until either a timeout expires, or a     
    _NET_SYNC_ACKNOWLEDGE is received.  
      
    If the resize timeout expires, send another _NET_SYNC_REQUEST followed by 
    calling XMoveResizeWindow.  
 
Sincerely, 
    Rayiner Hashem 




[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]