void Window_KeyUp(object sender, KeyEventArgs e)
 {
     // cmd key tracking
     if (e.Key == Key.LeftCtrl)
         m_cmdKeysDown &= ~CmdKeys.LeftCtrl;
     else if (e.Key == Key.RightCtrl)
         m_cmdKeysDown &= ~CmdKeys.RightCtrl;
     else if (e.Key == Key.LeftAlt)
         m_cmdKeysDown &= ~CmdKeys.LeftAlt;
     else if (e.Key == Key.RightAlt)
         m_cmdKeysDown &= ~CmdKeys.RightAlt;
     else if (e.Key == Key.LeftShift)
         m_cmdKeysDown &= ~CmdKeys.LeftShift;
     else if (e.Key == Key.RightShift)
         m_cmdKeysDown &= ~CmdKeys.RightShift;
 }
        void Window_KeyDown(object sender, KeyEventArgs e)
        {
            // cmd key tracking
            if (e.Key == Key.LeftCtrl)
                m_cmdKeysDown |= CmdKeys.LeftCtrl;
            else if (e.Key == Key.RightCtrl)
                m_cmdKeysDown |= CmdKeys.RightCtrl;
            else if (e.Key == Key.LeftAlt)
                m_cmdKeysDown |= CmdKeys.LeftAlt;
            else if (e.Key == Key.RightAlt)
                m_cmdKeysDown |= CmdKeys.RightAlt;
            else if (e.Key == Key.LeftShift)
                m_cmdKeysDown |= CmdKeys.LeftShift;
            else if (e.Key == Key.RightShift)
                m_cmdKeysDown |= CmdKeys.RightShift;

            // common keyboard shortcuts
            if (e.Key == Key.S && (m_cmdKeysDown & CmdKeys.Ctrl) != CmdKeys.None)
                File_Save_Clicked(this, new RoutedEventArgs());
            else if (e.Key == Key.O && (m_cmdKeysDown & CmdKeys.Ctrl) != CmdKeys.None)
                File_Open_Clicked(this, new RoutedEventArgs());
        }