• event generate send arg

    From Shaun Kulesa@21:1/5 to All on Wed Jan 1 23:59:41 2025
    I'm trying to block any user interaction that is not done via `event generate`. To do this I want to break the bindings when $user is not 1.
    I want to pass the $user arg to the procedure `block` but I do not know how to. I thought this is done by -data but I get an error saying I can not use that with the event <ButtonPress>.

    ```
    package require Tk

    button .b -text "Hello, World!"
    pack .b -padx 20 -pady 20

    proc block {{user 0}} {
    if {$user ne 1} {
    return -code break
    }
    return
    }

    bind .b <ButtonPress> {block}
    bind .b <ButtonRelease> {block}

    after 1000 [list event generate .b <ButtonPress> -data 1]
    ```

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Rich@21:1/5 to Shaun Kulesa on Thu Jan 2 04:13:10 2025
    Shaun Kulesa <user1405@newsgrouper.org.uk.invalid> wrote:
    I'm trying to block any user interaction that is not done via `event generate`.

    First question is: why? What are you really trying to accomplish?

    Next suggestion, have you looked into using 'tk busy' (man n busy). It
    might work better than having to remap every single default event
    binding within Tk.

    To do this I want to break the bindings when $user is not 1.

    I want to pass the $user arg to the procedure `block` but I do not
    know how to.

    Note the documentation for -data in the event manpage:

    -data string
    String may be any value; it specifies the user_data field for
    the event. Only valid for virtual events. Corresponds to the
    %d substitution for virtual events in binding scripts.

    It tells you how to retreive the '-data' field value, you use the %d substitution.

    But -data is also "only valid for virtual events" which is why you
    can't use it with <ButtonPress> (because <ButtonPress> is not a virtual
    event).

    I thought this is done by -data but I get an error saying I can not
    use that with the event <ButtonPress>.


    ```
    package require Tk

    button .b -text "Hello, World!"
    pack .b -padx 20 -pady 20

    proc block {{user 0}} {
    if {$user ne 1} {
    return -code break
    }
    return
    }

    bind .b <ButtonPress> {block}
    bind .b <ButtonRelease> {block}

    after 1000 [list event generate .b <ButtonPress> -data 1]
    ```

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Shaun Kulesa@21:1/5 to All on Thu Jan 2 10:25:18 2025
    First question is: why? What are you really trying to accomplish?

    I am running live clones of a Tk GUI over a server.

    These clones are just a clone of the host GUI which I do by collecting all the widget data from the host and then rebuild in the clients.

    I use a library that tells me all events that have happened, it tells me if it was done by manual interaction or by `event generate`.

    I want the clients manual interactions to be sent to the server to dispute whether they are up to date with the other clients.

    Therefore I want the client to be able to gather their input but not act on it unless the server agrees.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Shaun Kulesa@21:1/5 to All on Thu Jan 2 12:57:38 2025
    I just realised since the package I'm using already decides what is synthetic and what is real I can just copy it.

    According the co-pilot it checks the time %t and if it is equal to 0 then it is a synthetic `event generate`.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)