,/* -*- mode: c++ -*-
 * AppSwitcher -- A Kaleidoscope Example
 * Copyright (C) 2016-2018  Keyboardio, Inc.
 * This program is free software: you can redistribute it and/or modify it under
 * the terms of the GNU General Public License as published by the Free Software
 * Foundation, version 3.
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
 * details.
 * You should have received a copy of the GNU General Public License along with
 * this program. If not, see <http://www.gnu.org/licenses/>.


#include <Kaleidoscope-HostOS.h>

#include "Macros.h"

namespace H = kaleidoscope::hostos;

static bool appSwitchActive = false;

const macro_t *macroAppSwitch(uint8_t keyState) {
  appSwitchActive = true;

  // Key was just pressed, or is being held
  if (keyIsPressed(keyState)) {
    if (HostOS.os() == H::OSX)
      return MACRO(Dr(Key_LeftGui), D(Tab));
      return MACRO(Dr(Key_LeftAlt), D(Tab));
  // Key was just released
  if (keyToggledOff(keyState)) {
    if (HostOS.os() == H::OSX)
      return MACRO(U(Tab), Dr(Key_LeftGui));
      return MACRO(U(Tab), Dr(Key_LeftAlt));
  // otherwise we do nothing
  return MACRO_NONE;

const macro_t *macroAppCancel(uint8_t keyState) {
  if (keyToggledOn(keyState))
    appSwitchActive = false;
  return MACRO_NONE;

void macroAppSwitchLoop() {
  Key mod = Key_LeftAlt;

  if (HostOS.os() == H::OSX)
    mod = Key_LeftGui;

  // if appSwitchActive is true, we continue holding Alt.
  if (appSwitchActive) {
    handleKeyswitchEvent(mod, UnknownKeyswitchLocation, IS_PRESSED);