          self._queue = Queue()
          logger.debug("Initialized %s", self.__class__.__name__,)
  
      def run(self):
          """ Run the target in a thread """
          try:
              if self._target:
                  retval = self._target(*self._args, **self._kwargs)
                  self._queue.put(retval)
          except Exception:  # pylint: disable=broad-except
 
</s> remove         self._config.set_cursor_busy(widget=self.widget)
        self.complete = Event()
 </s> add         self._config.set_cursor_busy(widget=self._widget)
        self._complete = Event() </s> remove         self.widget = widget
 </s> add         self._widget = widget </s> remove         self.clear_image_cache()
 </s> add         self._clear_image_cache() </s> remove     def standard_actions(self):
        """ Standard menu actions """
        self.add_command(label="Cut", command=lambda: self.widget.event_generate("<<Cut>>"))
        self.add_command(label="Copy", command=lambda: self.widget.event_generate("<<Copy>>"))
        self.add_command(label="Paste", command=lambda: self.widget.event_generate("<<Paste>>"))
        self.add_separator()
        self.add_command(label="Select all", command=self.select_all)

    def cm_bind(self):
        """ Bind the menu to the widget's Right Click event """
        button = "<Button-2>" if platform.system() == "Darwin" else "<Button-3>"
        logger.debug("Binding '%s' to '%s'", button, self.widget.winfo_class())
        scaling_factor = get_config().scaling_factor if get_config() is not None else 1.0
        x_offset = int(34 * scaling_factor)
        self.widget.bind(button,
                         lambda event: self.tk_popup(event.x_root + x_offset, event.y_root, 0))

    def select_all(self):
        """ Select all for Text or Entry widgets """
        logger.debug("Selecting all for '%s'", self.widget.winfo_class())
        if self.widget.winfo_class() == "Text":
            self.widget.focus_force()
            self.widget.tag_add("sel", "1.0", "end")
        else:
            self.widget.focus_force()
            self.widget.select_range(0, tk.END)
 </s> add class LongRunningTask(Thread):
    """ Runs long running tasks in a background thread to prevent the GUI from becoming
    unresponsive.
        """ Commence the given task in a background thread. """
          self._queue = Queue()
          logger.debug("Initialized %s", self.__class__.__name__,)
  
      def run(self):
        """ Commence the given task in a background thread. """
          try:
              if self._target:
                  retval = self._target(*self._args, **self._kwargs)
                  self._queue.put(retval)
          except Exception:  # pylint: disable=broad-except
keep keep keep keep replace keep keep keep keep keep
 GUI Updates (#940)

* lib.gui: Update icons
* tools.cli: Add video filetype flag to mask input
* lib.gui.popup_configure: Refresh GUI on config save
* lib.gui._config: Add Icon size and load last session options
* lib.gui.control_helper - Add control modification tracking
* lib.gui - Add Projects and Last Session
- Main root title handled by projects
- Add Hotkeys
- Create projects module
- split fsw and fst filetypes
- Add last_session saving

* lib.project
- Documentation
- Ask confirm on closing unsaved project
-Fixups

* Track model folder changes
- Shuffle some globals
- Activate System Verbosity for GUI

* lib.gui.utils - Documentation and clean up
- lib.gui.custom_widgets - Create and document

* Add GUI config option to disable auto loading model stats 
lib/gui/utils.py