Type mismatch error for `ContextMenu.updateChild`
Heyho, on the current head commit I get the following error when compiling:

```txt
Error: type mismatch: got <ContextMenuState, WidgetState, Widget, proc (box: GtkWidget, oldMenu: GtkWidget, newMenu: GtkWidget){.closure, noSideEffect, gcsafe, locks: <unknown>.}>
but expected one of:
proc updateChild(state: Renderable; child: var BoxChild[WidgetState];
                 updater: BoxChild[Widget];
                 setChild: proc (widget, child: GtkWidget) {.cdecl, locks: 0.})
  first type mismatch at position: 2
  required type for child: var BoxChild[widgetdef.WidgetState]
  but expression 'state.menu' is of type: WidgetState
proc updateChild(state: Renderable; child: var WidgetState; updater: Widget;
                 addChild: proc (widget, child: GtkWidget) {.cdecl, locks: 0.};
    removeChild: proc (widget, child: GtkWidget) {.cdecl, locks: 0.})
  first type mismatch at position: 4
  required type for addChild: proc (widget: GtkWidget, child: GtkWidget){.cdecl, locks: 0.}
  but expression 'replace' is of type: proc (box: GtkWidget, oldMenu: GtkWidget, newMenu: GtkWidget){.closure, noSideEffect, gcsafe, locks: <unknown>.}
  Calling convention mismatch: got '{.closure.}', but expected '{.cdecl.}'.
  Pragma mismatch: got '{.locks: <unknown>.}', but expected '{.locks: 0.}'.
  The `.locks` requirements differ. Annotate the proc with {.locks: 0.} to get extended error information.
proc updateChild(state: Renderable; child: var WidgetState; updater: Widget;
                 setChild: proc (widget, child: GtkWidget) {.cdecl, locks: 0.})
  first type mismatch at position: 4
  required type for setChild: proc (widget: GtkWidget, child: GtkWidget){.cdecl, locks: 0.}
  but expression 'replace' is of type: proc (box: GtkWidget, oldMenu: GtkWidget, newMenu: GtkWidget){.closure, noSideEffect, gcsafe, locks: <unknown>.}
  Calling convention mismatch: got '{.closure.}', but expected '{.cdecl.}'.
  Pragma mismatch: got '{.locks: <unknown>.}', but expected '{.locks: 0.}'.
  The `.locks` requirements differ. Annotate the proc with {.locks: 0.} to get extended error information.
proc updateChild(state: Renderable; child: var WidgetState; updater: Widget;
    replaceChild: proc (widget, oldChild, newChild: GtkWidget) {.locks: 0.})
  first type mismatch at position: 4
  required type for replaceChild: proc (widget: GtkWidget, oldChild: GtkWidget, newChild: GtkWidget){.closure, locks: 0.}
  but expression 'replace' is of type: proc (box: GtkWidget, oldMenu: GtkWidget, newMenu: GtkWidget){.closure, noSideEffect, gcsafe, locks: <unknown>.}
  Pragma mismatch: got '{.locks: <unknown>.}', but expected '{.locks: 0.}'.
  The `.locks` requirements differ. Annotate the proc with {.locks: 0.} to get extended error information.

expression: updateChild(state, state.menu, widget.valMenu, replace)

 *  The terminal process "/usr/bin/zsh '-c', 'nim c --define:ssl --mm:refc --panics:on --run --styleCheck:usages --spellSuggest:50 src/nimblest.nim'" terminated with exit code: 1. 
 ```

This refers to `widgets.nim` line 2053, which makes use of a `replace` proc whose lock-level doesn't quite work.

The following change fixes the compilation issue (Line 2023):
From:
`      proc replace(box, oldMenu, newMenu: GtkWidget) `
To:
`      proc replace(box, oldMenu, newMenu: GtkWidget) {.locks: 0.}=`

This is with the compile command `nim c --define:ssl --mm:refc --panics:on --run --styleCheck:usages --spellSuggest:50 src/nimblest.nim` 

Nim version:

```nim
Nim Compiler Version 1.6.10 [Linux: amd64]
Compiled at 2022-11-21
Copyright (c) 2006-2021 by Andreas Rumpf

git hash: f1519259f85cbdf2d5ff617c6a5534fcd2ff6942
active boot switches: -d:release
```

Not quite sure what's going on there? Is this a refc issue?