#!/usr/bin/env bash
winezgui-kill-all()
{
  dbug "I: $(basename ${0}): Launched ${FUNCNAME[0]}"
  dbug "I: $(basename ${0}): Kill all: exiting ${APPNAME}!"
    
  SOURCE "script-check-variables-loaded-or-not"
  script-check-variables-loaded-or-not

  # Check if --talk-name=org.freedesktop.Flatpak is allowed
  if [ ${INSTALL_TYPE} = "flatpak" ] && [ $(which flatpak-spawn) ]; then
       unset TEXT
       TEXT+="In a terminal or Press ALT+F2, run:\n"
       TEXT+="<tt><b>flatpak kill ${FLATPAK_NAME}</b></tt>\n\n"
       TEXT+="To allow this feature to work.\n"
       TEXT+="<tt><b>flatpak override --user --talk-name=org.freedesktop.Flatpak ${FLATPAK_NAME}</b></tt>\n\n"
       TEXT+="To remove the above permission, run:\n"
       TEXT+="<tt>flatpak override --reset ${FLATPAK_NAME}</tt>"
       flatpak-spawn --host pwd 1>/dev/null 2>/dev/null || \
       (echo "E: $(basename ${0}): Kill all: needs to access system to run flatpak kill ${FLATPAK_NAME} via flatpak-spawn";\
        ${ZENITY_CMD} --error --title="${APP_WITH_VER}: No System Access!" --text="${TEXT}" )
       unset TEXT

  fi

  # for killing all wine instance from flaptak sandbox
  if [ $(flatpak-spawn echo 0 2>/dev/null) ] ; then
       # flatpak wine and winezgui will be killed
       dbug "I: WineZGUI: Kill All: Flatpak script, running from sandbox"
       flatpak-spawn --host flatpak kill ${FLATPAK_NAME}
  else
       # Find all process which ends with .exe and kill them
       dbug "I: WineZGUI: Kill All: System script, running from host"
       WINE_PROCESSES=$( ps -aux     | \
                 grep -i "\.exe"     | \
                 sed "s/\( \)*/\1/g" | \
                 cut -f2 -d " "      )
       for PROCESS in ${WINE_PROCESSES}; do
            kill -9 ${PROCESS} 2>/dev/null
       done
       # also kill wineserver to kill explorer, etc.
       wineserver -k
       # exit winezgui also for consistent behavior with flatpak
       # else host will not exit, but flatpak version will exit
       # on using Kill all process
       exit 0
  fi
  unset TEXT
}
