From a23ee5f526056c0b5f2216f286cb1598146e7d26 Mon Sep 17 00:00:00 2001 From: baldurk Date: Thu, 12 Feb 2026 14:20:20 +0000 Subject: [PATCH] Change documentation for callbacks to use Callable[] --- qrenderdoc/Code/Interface/Extensions.h | 41 ++++++++++------- qrenderdoc/Code/Interface/QRDInterface.h | 57 +++++++++++++----------- qrenderdoc/Code/MiniQtHelper.cpp | 2 +- qrenderdoc/Code/MiniQtHelper.h | 2 +- qrenderdoc/Code/ReplayManager.cpp | 6 +-- qrenderdoc/Code/ReplayManager.h | 10 ++--- qrenderdoc/Code/pyrenderdoc/qrenderdoc.i | 2 +- renderdoc/api/replay/renderdoc_replay.h | 22 ++++----- 8 files changed, 77 insertions(+), 65 deletions(-) diff --git a/qrenderdoc/Code/Interface/Extensions.h b/qrenderdoc/Code/Interface/Extensions.h index 7c9f4c446..fa813ebcd 100644 --- a/qrenderdoc/Code/Interface/Extensions.h +++ b/qrenderdoc/Code/Interface/Extensions.h @@ -387,9 +387,9 @@ This manager is retrieved by calling :meth:`ExtensionManager.GetMiniQtHelper`. :param QWidget widget: The widget sending the callback. :param str text: Additional data for the call, such as the current or selected text. -.. function:: InvokeCallback(context, widget, text) +.. function:: UIInvokeCallback() - Not a member function - the signature for any ``InvokeCallback`` callbacks. + Not a member function - the signature for any ``UIInvokeCallback`` callbacks. Callback for invoking onto the UI thread from another thread (in particular the replay thread). Takes no parameters as the callback is expected to store its own state. @@ -397,7 +397,7 @@ This manager is retrieved by calling :meth:`ExtensionManager.GetMiniQtHelper`. struct IMiniQtHelper { typedef std::function WidgetCallback; - typedef std::function InvokeCallback; + typedef std::function UIInvokeCallback; DOCUMENT(R"(Invoke a callback on the UI thread. All widget accesses must come from the UI thread, so if work has been done on the render thread then this function can be used to asynchronously and @@ -410,10 +410,10 @@ immediately before returning. No parameters are provided to the callback, it is assumed that the callback will maintain its own context as needed. -:param InvokeCallback callback: The callback to invoke on the UI thread. - Callback function signature must match :func:`InvokeCallback`. +:param Callable[[], None] callback: The callback to invoke on the UI thread. + Callback function signature must match :func:`UIInvokeCallback`. )"); - virtual void InvokeOntoUIThread(InvokeCallback callback) = 0; + virtual void InvokeOntoUIThread(UIInvokeCallback callback) = 0; // top level widgets @@ -427,7 +427,8 @@ is a layout type widget, to allow customising how children are added. By default added in a vertical layout. :param str windowTitle: The title of any window with this widget as its root. -:param WidgetCallback closed: A callback that will be called when the widget is closed by the user. +:param Callable[[CaptureContext, QWidget, str], None] closed: A callback that will be called when + the widget is closed by the user. This implicitly deletes the widget and all its children, which will no longer be valid even if a handle to them exists. Callback function signature must match :func:`WidgetCallback`. @@ -742,7 +743,8 @@ The widget needs to be added to a parent to become part of a panel or window. DOCUMENT(R"(Create a normal button widget. -:param WidgetCallback pressed: Callback to be called when the button is pressed. +:param Callable[[CaptureContext, QWidget, str], None] pressed: Callback to be called when the button + is pressed. Callback function signature must match :func:`WidgetCallback`. :return: The handle to the newly created widget. :rtype: QWidget @@ -839,7 +841,8 @@ checkerboard to be rendered instead. This is the default behaviour when a widget DOCUMENT(R"(Create a checkbox widget which can be toggled between unchecked and checked. When created the checkbox is unchecked. -:param WidgetCallback changed: Callback to be called when the widget is toggled. +:param Callable[[CaptureContext, QWidget, str], None] changed: Callback to be called when the widget + is toggled. Callback function signature must match :func:`WidgetCallback`. :return: The handle to the newly created widget. :rtype: QWidget @@ -852,7 +855,8 @@ at most one radio box in any group of sibling radio boxes being checked. Upon creation the radio box is unchecked, even in a group of other radio boxes that are unchecked. If you want a default radio box to be checked, you should use :meth:`SetWidgetChecked`. -:param WidgetCallback changed: Callback to be called when the widget is toggled. +:param Callable[[CaptureContext, QWidget, str], None] changed: Callback to be called when the widget + is toggled. Callback function signature must match :func:`WidgetCallback`. :return: The handle to the newly created widget. :rtype: QWidget @@ -923,7 +927,8 @@ happen. :param bool singleLine: ``True`` if the widget should be a single-line entry, otherwise it is a multi-line text box. -:param WidgetCallback changed: Callback to be called when the text in the textbox is changed. +:param Callable[[CaptureContext, QWidget, str], None] changed: Callback to be called when the text + in the textbox is changed. Callback function signature must match :func:`WidgetCallback`. :return: The handle to the newly created widget. :rtype: QWidget @@ -937,7 +942,8 @@ When created there are no pre-defined entries in the drop-down section. This can :param bool editable: ``True`` if the widget should allow the user to enter any text they wish as well as being able to select a pre-defined entry. -:param WidgetCallback changed: Callback to be called when the text in the combobox is changed. This +:param Callable[[CaptureContext, QWidget, str], None] changed: Callback to be called when the text + in the combobox is changed. This will be called both when a new option is selected or when the user edits the text. Callback function signature must match :func:`WidgetCallback`. :return: The handle to the newly created widget. @@ -1066,7 +1072,7 @@ This manager is retrieved by calling :meth:`CaptureContext.Extensions`. was registered. :param CaptureContext context: The current capture context. - :param dict data: Additional data for the call, as a dictionary with string keys. + :param Dict[str, Any] data: Additional data for the call, as a dictionary with string keys. Context-dependent based on what generated the callback )"); struct IExtensionManager @@ -1115,7 +1121,8 @@ struct IExtensionManager :param List[str] submenus: A list of strings containing the submenus to add before the item. The last string will be the name of the menu item itself. Must contain at least one entry, or two entries if ``base`` is :data:`WindowMenu.NewMenu`. -:param ExtensionCallback callback: The function to callback when the menu item is selected. +:param Callable[[CaptureContext, Dict[str, Any]], None] callback: The function to callback when + the menu item is selected. Callback function signature must match :func:`ExtensionCallback`. )"); virtual void RegisterWindowMenu(WindowMenu base, const rdcarray &submenus, @@ -1131,7 +1138,8 @@ struct IExtensionManager :param PanelMenu base: The panel to add the item to. :param List[str] submenus: A list of strings containing the submenus to add before the item. The last string will be the name of the menu item itself. Must contain at least one entry. -:param ExtensionCallback callback: The function to callback when the menu item is selected. +:param Callable[[CaptureContext, Dict[str, Any]], None] callback: The function to callback when + the menu item is selected. Callback function signature must match :func:`ExtensionCallback`. )"); virtual void RegisterPanelMenu(PanelMenu base, const rdcarray &submenus, @@ -1147,7 +1155,8 @@ struct IExtensionManager :param ContextMenu base: The panel to add the item to. :param List[str] submenus: A list of strings containing the submenus to add before the item. The last string will be the name of the menu item itself. Must contain at least one entry. -:param ExtensionCallback callback: The function to callback when the menu item is selected. +:param Callable[[CaptureContext, Dict[str, Any]], None] callback: The function to callback when + the menu item is selected. Callback function signature must match :func:`ExtensionCallback`. )"); virtual void RegisterContextMenu(ContextMenu base, const rdcarray &submenus, diff --git a/qrenderdoc/Code/Interface/QRDInterface.h b/qrenderdoc/Code/Interface/QRDInterface.h index ffb5f0333..6b6bd625f 100644 --- a/qrenderdoc/Code/Interface/QRDInterface.h +++ b/qrenderdoc/Code/Interface/QRDInterface.h @@ -190,7 +190,7 @@ will be invoked, if it exists. :param QWidget widget: A handle to the widget to use as the context for this shortcut, or ``None`` for a global shortcut. Note that if an existing global shortcut exists the new one will not be registered. -:param ShortcutCallback callback: The function to callback when the shortcut is hit. +:param Callable[[QWidget], None] callback: The function to callback when the shortcut is hit. Callback function signature must match :func:`ShortcutCallback`. )"); virtual void RegisterShortcut(const rdcstr &shortcut, QWidget *widget, @@ -365,14 +365,14 @@ expression. :param str description: The description of the filter function. This should explain the available parameters (if applicable) and what the filter does. It will be used for documenting to users what each filter means. -:param EventFilterCallback filter: The callback to call for each candidate event to perform - filtering. +:param Callable[[CaptureContext,str,str,int,renderdoc.SDChunk,renderdoc.ActionDescription,str], bool] filter: The + callback to call for each candidate event to perform filtering. Callback function signature must match :func:`EventFilterCallback`. -:param FilterParseCallback parser: The callback to call when the parsing the parameters and checking - for any errors. This can be ``None`` if no pre-parsing is required. +:param Callable[[CaptureContext,str,str], str] parser: The callback to call when the parsing the + parameters and checking for any errors. This can be ``None`` if no pre-parsing is required. Callback function signature must match :func:`FilterParseCallback`. -:param AutoCompleteCallback completer: The callback to call when trying to provide autocomplete - suggestions. This can be ``None`` if no completion is desired/applicable. +:param Callable[[CaptureContext,str,str], List[str]] completer: The callback to call when trying + to provide autocomplete suggestions. This can be ``None`` if no completion is desired/applicable. Callback function signature must match :func:`AutoCompleteCallback`. :return: Whether or not the registration was successful. :rtype: bool @@ -1504,9 +1504,9 @@ in UI side structures. This manager controls and serialises access to the underl This manager is retrieved by calling :meth:`CaptureContext.Replay`. -.. function:: InvokeCallback(controller) +.. function:: ReplayInvokeCallback(controller) - Not a member function - the signature for any ``InvokeCallback`` callbacks. + Not a member function - the signature for any ``ReplayInvokeCallback`` callbacks. :param renderdoc.ReplayController controller: The controller to access. Must not be cached or used after the callback returns. @@ -1520,7 +1520,7 @@ This manager is retrieved by calling :meth:`CaptureContext.Replay`. )"); struct IReplayManager { - typedef std::function InvokeCallback; + typedef std::function ReplayInvokeCallback; typedef std::function &)> DirectoryBrowseCallback; DOCUMENT(R"(Delete a capture file, whether local or remote. @@ -1612,7 +1612,8 @@ blocking fashion on the current thread. :param bool synchronous: If a capture is open, then ``True`` will use :meth:`BlockInvoke` to call the callback. Otherwise if ``False`` then :meth:`AsyncInvoke` will be used. -:param DirectoryBrowseCallback callback: The function to callback on the replay thread. +:param Callable[[str, List[renderdoc.PathEntry]], None] callback: The function to callback on the + replay thread. Callback function signature must match :func:`DirectoryBrowseCallback`. )"); virtual void GetHomeFolder(bool synchronous, DirectoryBrowseCallback callback) = 0; @@ -1625,7 +1626,8 @@ blocking fashion on the current thread. :param str path: The path to query the contents of. :param bool synchronous: If a capture is open, then ``True`` will use :meth:`BlockInvoke` to call the callback. Otherwise if ``False`` then :meth:`AsyncInvoke` will be used. -:param DirectoryBrowseCallback callback: The function to callback on the replay thread. +:param Callable[[str, List[renderdoc.PathEntry]], None] callback: The function to callback on the + replay thread. Callback function signature must match :func:`DirectoryBrowseCallback`. )"); virtual void ListFolder(const rdcstr &path, bool synchronous, DirectoryBrowseCallback callback) = 0; @@ -1670,27 +1672,27 @@ The manager processes only the request on the top of the queue, so when a new ta comes in, we remove any other requests in the queue before it that have the same tag. :param str tag: The tag to identify this callback. -:param InvokeCallback method: The function to callback on the replay thread. - Callback function signature must match :func:`InvokeCallback`. +:param Callable[[renderdoc.ReplayController], None] method: The function to callback on the replay thread. + Callback function signature must match :func:`ReplayInvokeCallback`. )"); - virtual void AsyncInvoke(const rdcstr &tag, InvokeCallback method) = 0; + virtual void AsyncInvoke(const rdcstr &tag, ReplayInvokeCallback method) = 0; DOCUMENT(R"(Make a non-blocking invoke call onto the replay thread. -:param InvokeCallback method: The function to callback on the replay thread. - Callback function signature must match :func:`InvokeCallback`. +:param Callable[[renderdoc.ReplayController], None] method: The function to callback on the replay thread. + Callback function signature must match :func:`ReplayInvokeCallback`. )"); - virtual void AsyncInvoke(InvokeCallback method) = 0; + virtual void AsyncInvoke(ReplayInvokeCallback method) = 0; // This is an ugly hack, but we leave BlockInvoke as the last method, so that when the class is // extended and the wrapper around BlockInvoke to release the python GIL happens, it picks up the // same docstring. DOCUMENT(R"(Make a blocking invoke call onto the replay thread. -:param InvokeCallback method: The function to callback on the replay thread. - Callback function signature must match :func:`InvokeCallback`. +:param Callable[[renderdoc.ReplayController], None] method: The function to callback on the replay thread. + Callback function signature must match :func:`ReplayInvokeCallback`. )"); - virtual void BlockInvoke(InvokeCallback method) = 0; + virtual void BlockInvoke(ReplayInvokeCallback method) = 0; protected: IReplayManager() = default; @@ -2783,12 +2785,13 @@ place if needed. :param renderdoc.KnownShaderTool knownTool: The preferred tool to use to compile, if known. :param renderdoc.ShaderEncoding shaderEncoding: The encoding of the input files. :param renderdoc.ShaderCompileFlags flags: The flags originally used to compile the shader. -:param ShaderViewer.SaveCallback saveCallback: The callback function to call when a save/update is - triggered. - Callback function signature must match :func:`ShaderViewer.SaveCallback`. -:param ShaderViewer.RevertCallback revertCallback: The callback function to call when the shader - is to be reverted - either by user request or because the shader viewer was closed. - Callback function signature must match :func:`ShaderViewer.RevertCallback`. +:param Callable[[CaptureContext,ShaderViewer,renderdoc.ResourceId,renderdoc.ShaderStage,renderdoc.ShaderEncoding,renderdoc.ShaderCompileFlags, str, bytes], None] saveCallback: The + callback function to call when a save/update is triggered. + Callback function signature must match :func:`SaveCallback`. +:param Callable[[CaptureContext, ShaderViewer, renderdoc.ResourceId], None] revertCallback: The + callback function to call when the shader is to be reverted - either by user request or because + the shader viewer was closed. + Callback function signature must match :func:`RevertCallback`. :return: The new :class:`ShaderViewer` window opened but not shown for editing. :rtype: ShaderViewer )"); diff --git a/qrenderdoc/Code/MiniQtHelper.cpp b/qrenderdoc/Code/MiniQtHelper.cpp index 5c4e60f5f..017b916a8 100644 --- a/qrenderdoc/Code/MiniQtHelper.cpp +++ b/qrenderdoc/Code/MiniQtHelper.cpp @@ -60,7 +60,7 @@ MiniQtHelper::~MiniQtHelper() }); } -void MiniQtHelper::InvokeOntoUIThread(std::function callback) +void MiniQtHelper::InvokeOntoUIThread(UIInvokeCallback callback) { GUIInvoke::call(m_Ctx.GetMainWindow()->Widget(), callback); } diff --git a/qrenderdoc/Code/MiniQtHelper.h b/qrenderdoc/Code/MiniQtHelper.h index 7b0313c59..f76fbfa4e 100644 --- a/qrenderdoc/Code/MiniQtHelper.h +++ b/qrenderdoc/Code/MiniQtHelper.h @@ -35,7 +35,7 @@ public: MiniQtHelper(ICaptureContext &ctx); virtual ~MiniQtHelper(); - void InvokeOntoUIThread(std::function callback) override; + void InvokeOntoUIThread(UIInvokeCallback callback) override; QWidget *CreateToplevelWidget(const rdcstr &windowTitle, WidgetCallback closed) override; void CloseToplevelWidget(QWidget *widget) override; diff --git a/qrenderdoc/Code/ReplayManager.cpp b/qrenderdoc/Code/ReplayManager.cpp index 23e1d8ee9..07b5a2880 100644 --- a/qrenderdoc/Code/ReplayManager.cpp +++ b/qrenderdoc/Code/ReplayManager.cpp @@ -247,7 +247,7 @@ QString ReplayManager::GetCurrentProcessingTag() return m_CommandTag; } -void ReplayManager::AsyncInvoke(const rdcstr &tag, ReplayManager::InvokeCallback m) +void ReplayManager::AsyncInvoke(const rdcstr &tag, ReplayManager::ReplayInvokeCallback m) { QString qtag; @@ -277,7 +277,7 @@ void ReplayManager::AsyncInvoke(const rdcstr &tag, ReplayManager::InvokeCallback PushInvoke(cmd); } -void ReplayManager::AsyncInvoke(ReplayManager::InvokeCallback m) +void ReplayManager::AsyncInvoke(ReplayManager::ReplayInvokeCallback m) { InvokeHandle *cmd = new InvokeHandle(m); cmd->selfdelete = true; @@ -285,7 +285,7 @@ void ReplayManager::AsyncInvoke(ReplayManager::InvokeCallback m) PushInvoke(cmd); } -void ReplayManager::BlockInvoke(ReplayManager::InvokeCallback m) +void ReplayManager::BlockInvoke(ReplayManager::ReplayInvokeCallback m) { InvokeHandle *cmd = new InvokeHandle(m); diff --git a/qrenderdoc/Code/ReplayManager.h b/qrenderdoc/Code/ReplayManager.h index b60b5fd36..316932e9e 100644 --- a/qrenderdoc/Code/ReplayManager.h +++ b/qrenderdoc/Code/ReplayManager.h @@ -64,9 +64,9 @@ public: // processed. // the manager processes only the request on the top of the queue, so when a new tagged invoke // comes in, we remove any other requests in the queue before it that have the same tag - void AsyncInvoke(const rdcstr &tag, InvokeCallback m); - void AsyncInvoke(InvokeCallback m); - void BlockInvoke(InvokeCallback m); + void AsyncInvoke(const rdcstr &tag, ReplayInvokeCallback m); + void AsyncInvoke(ReplayInvokeCallback m); + void BlockInvoke(ReplayInvokeCallback m); void CancelReplayLoop(); @@ -104,7 +104,7 @@ public: private: struct InvokeHandle { - InvokeHandle(InvokeCallback m, const QString &t = QString()) + InvokeHandle(ReplayInvokeCallback m, const QString &t = QString()) { tag = t; method = m; @@ -112,7 +112,7 @@ private: } QString tag; - InvokeCallback method; + ReplayInvokeCallback method; QSemaphore processed; bool selfdelete; }; diff --git a/qrenderdoc/Code/pyrenderdoc/qrenderdoc.i b/qrenderdoc/Code/pyrenderdoc/qrenderdoc.i index 5726bd469..e27494414 100644 --- a/qrenderdoc/Code/pyrenderdoc/qrenderdoc.i +++ b/qrenderdoc/Code/pyrenderdoc/qrenderdoc.i @@ -187,7 +187,7 @@ TEMPLATE_ARRAY_INSTANTIATE_PTR(rdcarray, ICaptureViewer) %rename("%s") IReplayManager::BlockInvoke; %extend IReplayManager { - void BlockInvoke(InvokeCallback m) { + void BlockInvoke(ReplayInvokeCallback m) { PyObject *global_internal_handle = NULL; PyObject *globals = PyEval_GetGlobals(); diff --git a/renderdoc/api/replay/renderdoc_replay.h b/renderdoc/api/replay/renderdoc_replay.h index 19d3e8ddf..10214031a 100644 --- a/renderdoc/api/replay/renderdoc_replay.h +++ b/renderdoc/api/replay/renderdoc_replay.h @@ -1220,7 +1220,7 @@ The details of the types of messages that can be received are listed under This function will block but only to a limited degree. If no message is waiting after a small time it will return with a No-op message to allow further processing. -:param ProgressCallback progress: A callback that will be repeatedly called with an updated progress +:param Callable[[float], None] progress: A callback that will be repeatedly called with an updated progress value when a long blocking message is coming through, e.g. a capture copy. Can be ``None`` if no progress is desired. Callback function signature must match :func:`ProgressCallback`. @@ -1322,7 +1322,7 @@ separate thread. If this is ``False``, the function will not interact or block forever on user interaction and will always assume the input is effectively 'cancel' or empty. This may cause the symbol resolution to fail. -:param ProgressCallback progress: A callback that will be repeatedly called with an updated progress +:param Callable[[float], None] progress: A callback that will be repeatedly called with an updated progress value for the resolver process. Can be ``None`` if no progress is desired. Callback function signature must match :func:`ProgressCallback`. :return: The result of the operation. @@ -1511,7 +1511,7 @@ This is primarily useful for when a capture is only stored locally and must be r the capture must be available on the machine where the replay happens. :param str filename: The path to the file on the local system. -:param ProgressCallback progress: A callback that will be repeatedly called with an updated progress +:param Callable[[float], None] progress: A callback that will be repeatedly called with an updated progress value for the copy. Can be ``None`` if no progress is desired. Callback function signature must match :func:`ProgressCallback`. :return: The path on the remote system where the capture was saved temporarily. @@ -1525,7 +1525,7 @@ This function will block until the copy is fully complete, or an error has occur :param str remotepath: The remote path where the file should be copied from. :param str localpath: The local path where the file should be saved. -:param ProgressCallback progress: A callback that will be repeatedly called with an updated progress +:param Callable[[float], None] progress: A callback that will be repeatedly called with an updated progress value for the copy. Can be ``None`` if no progress is desired. Callback function signature must match :func:`ProgressCallback`. )"); @@ -1548,7 +1548,7 @@ or an error has occurred. :param str logfile: The path on the remote system where the file is. If the file is only available locally you can use :meth:`CopyCaptureToRemote` to transfer it over the remote connection. :param ReplayOptions opts: The options controlling how the capture should be replayed. -:param ProgressCallback progress: A callback that will be repeatedly called with an updated progress +:param Callable[[float], None] progress: A callback that will be repeatedly called with an updated progress value for the opening. Can be ``None`` if no progress is desired. Callback function signature must match :func:`ProgressCallback`. :return: A tuple containing the status of opening the capture, whether success or failure, and the @@ -1591,7 +1591,7 @@ empty or unrecognised. :param str filename: The filename of the file to open. :param str filetype: The format of the given file. -:param ProgressCallback progress: A callback that will be repeatedly called with an updated progress +:param Callable[[float], None] progress: A callback that will be repeatedly called with an updated progress value if an import step occurs. Can be ``None`` if no progress is desired. Callback function signature must match :func:`ProgressCallback`. :return: The result of the operation. @@ -1608,7 +1608,7 @@ For the :paramref:`OpenBuffer.filetype` parameter, see :meth:`OpenFile`. :param bytes buffer: The buffer containing the data to process. :param str filetype: The format of the given file. -:param ProgressCallback progress: A callback that will be repeatedly called with an updated progress +:param Callable[[float], None] progress: A callback that will be repeatedly called with an updated progress value if an import step occurs. Can be ``None`` if no progress is desired. Callback function signature must match :func:`ProgressCallback`. :return: The result of the operation. @@ -1642,7 +1642,7 @@ representation back to native RDC. useful in case the format specifies that it doesn't need buffers, and you already have a :class:`ReplayController` open with the structured data. This saves the need to load the file again. If ``None`` then structured data will be fetched if not already present and used. -:param ProgressCallback progress: A callback that will be repeatedly called with an updated progress +:param Callable[[float], None] progress: A callback that will be repeatedly called with an updated progress value for the conversion. Can be ``None`` if no progress is desired. Callback function signature must match :func:`ProgressCallback`. :return: The result of the operation. @@ -1730,7 +1730,7 @@ Once the replay is created, this :class:`CaptureFile` can be shut down, there is by the :class:`ReplayController`. :param ReplayOptions opts: The options controlling how the capture should be replayed. -:param ProgressCallback progress: A callback that will be repeatedly called with an updated progress +:param Callable[[float], None] progress: A callback that will be repeatedly called with an updated progress value for the opening. Can be ``None`` if no progress is desired. Callback function signature must match :func:`ProgressCallback`. :return: A tuple containing the status of opening the capture, whether success or failure, and the @@ -2019,10 +2019,10 @@ This function will block until a remote connection tells the server to shut down :param str listenhost: The name of the interface to listen on. :param int port: The port to listen on, or ``0`` to listen on the default port. -:param KillCallback killReplay: A callback that returns a ``bool`` indicating if the server should +:param Callable[[], bool] killReplay: A callback that returns a ``bool`` indicating if the server should be shut down or not. Callback function signature must match :func:`KillCallback`. -:param PreviewWindowCallback previewWindow: A callback that returns information for a preview window +:param Callable[[bool], WindowingData] previewWindow: A callback that returns information for a preview window when the server wants to display some preview of the ongoing replay. Callback function signature must match :func:`PreviewWindowCallback`. )");