docs: def qteKillWindow(self, windowObj: QtmacsWindow=None):
          """
          Kill the specified window (applets inside the window are not
          deleted).
  
          .. note:: The method does nothing if ``windowObj`` is the only
             window left.
  
          |Args|
  
          * *windowObj* (**QtmacsWindow**): window object to delete.
  
          |Returns|
  
          * **None**
  
          |Raises|
  
          * **QtmacsArgumentError** if at least one argument has an invalid type.
          """
          # Use the currently active window if none was specified.
          if windowObj is None:
              windowObj = self.qteActiveWindow()
              if windowObj is None:
                  msg = ('Cannot kill the currently active window because'
                         ' it does not exist')
                  self.qteLogger.error(msg, stack_info=True)
                  return
  
          # If Qtmacs shows only one window then do nothing, because
          # deleting this window is akin to quitting Qtmacs without
          # going through the proper shutdown process.
          if len(self._qteWindowList) <= 1:
              msg = 'The last available window cannot be deleted.'
              self.qteLogger.error(msg, stack_info=True)
              return
  
          # Remove the window from the list.
          try:
              self._qteWindowList.remove(windowObj)
          except ValueError:
              msg = 'Cannot delete window with ID <b>{}</b> because it'
              msg += ' does not exist.'.format(windowObj._qteWindowID)
              self.qteLogger.error(msg, stack_info=True)
              return
  
          # Shorthand
          activeWindow = self.qteActiveWindow()
  
          # If the window to delete is currently active then switch the
          # focus to the first window in the list (not particularly
          # smart, but will do for now).
          if windowObj is activeWindow:
              activeWindow = self._qteWindowList[0]
              self.activeWindow.activateWindow()
  
              # Since the window with the active applet is deleted,
              # try to find a new applet to activate instead. It is
              # ok if there is no such applet.
              self._qteActiveApplet = self.qteNextApplet(
                  windowObj=self._qteWindowList[0])
  
          # Move the mini applet if it is currently in the doomed window.
          if self._qteMiniApplet is not None:
              if self._qteMiniApplet.qteParentWindow() is windowObj:
                  # Re-parent the mini applet to the splitter in the new
                  # window.
                  activeWindow.qteLayoutSplitter.addWidget(self._qteMiniApplet)
                  self._qteMiniApplet.show(True)
  
                  # Give the focus to the first focusable widget (if any).
                  wid = self._qteMiniApplet.qteNextWidget(numSkip=0)
                  self._qteMiniApplet.qteMakeWidgetActive(wid)
                  self.qteMakeAppletActive(self._qteMiniApplet)
  
          # Compile the list of visible applets in the doomed window
          # (use ``qteParentWindow`` to find all applets that have the
          # doomed window as parent).
          app_list = [_ for _ in self._qteAppletList
                      if _.qteParentWindow() == windowObj]
  
          # Hide all visible applets in the doomed window. Do not use
          # ``qteRemoveFromLayout`` for this since that method attempts
          # to replace the removed applet with another one, ie. the
          # doomed window would once again contain an applet.
          for app_obj in app_list:
              if not self.qteIsMiniApplet(app_obj):
                  app_obj.hide(True)
  
          # Ensure the focus manager is triggered and the window deleted
          # once the event loop has regained control.
          windowObj.deleteLater()