
// DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*-

#ifndef __java_awt_DefaultKeyboardFocusManager__
#define __java_awt_DefaultKeyboardFocusManager__

#pragma interface

#include <java/awt/KeyboardFocusManager.h>
extern "Java"
{
  namespace java
  {
    namespace awt
    {
        class AWTEvent;
        class AWTKeyStroke;
        class Component;
        class Container;
        class DefaultKeyboardFocusManager;
      namespace event
      {
          class FocusEvent;
          class KeyEvent;
      }
    }
  }
}

class java::awt::DefaultKeyboardFocusManager : public ::java::awt::KeyboardFocusManager
{

public:
  DefaultKeyboardFocusManager();
  virtual jboolean dispatchEvent(::java::awt::AWTEvent *);
private:
  jboolean handleFocusGained(::java::awt::event::FocusEvent *);
  jboolean handleFocusLost(::java::awt::event::FocusEvent *);
  jboolean enqueueKeyEvent(::java::awt::event::KeyEvent *);
public:
  virtual jboolean dispatchKeyEvent(::java::awt::event::KeyEvent *);
  virtual jboolean postProcessKeyEvent(::java::awt::event::KeyEvent *);
  virtual void processKeyEvent(::java::awt::Component *, ::java::awt::event::KeyEvent *);
public: // actually protected
  virtual void enqueueKeyEvents(jlong, ::java::awt::Component *);
  virtual void dequeueKeyEvents(jlong, ::java::awt::Component *);
  virtual void discardKeyEvents(::java::awt::Component *);
public:
  virtual void focusPreviousComponent(::java::awt::Component *);
  virtual void focusNextComponent(::java::awt::Component *);
  virtual void upFocusCycle(::java::awt::Component *);
  virtual void downFocusCycle(::java::awt::Container *);
private:
  ::java::awt::AWTKeyStroke * __attribute__((aligned(__alignof__( ::java::awt::KeyboardFocusManager)))) waitForKeyStroke;
  ::java::util::SortedSet * delayRequests;
public:
  static ::java::lang::Class class$;
};

#endif // __java_awt_DefaultKeyboardFocusManager__
