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

#ifndef __gnu_java_awt_dnd_GtkMouseDragGestureRecognizer__
#define __gnu_java_awt_dnd_GtkMouseDragGestureRecognizer__

#pragma interface

#include <java/awt/dnd/MouseDragGestureRecognizer.h>
extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace awt
      {
        namespace dnd
        {
            class GtkMouseDragGestureRecognizer;
        }
      }
    }
  }
  namespace java
  {
    namespace awt
    {
        class Component;
      namespace dnd
      {
          class DragGestureListener;
          class DragSource;
      }
      namespace event
      {
          class MouseEvent;
      }
    }
  }
}

class gnu::java::awt::dnd::GtkMouseDragGestureRecognizer : public ::java::awt::dnd::MouseDragGestureRecognizer
{

public:
  GtkMouseDragGestureRecognizer(::java::awt::dnd::DragSource *);
  GtkMouseDragGestureRecognizer(::java::awt::dnd::DragSource *, ::java::awt::Component *);
  GtkMouseDragGestureRecognizer(::java::awt::dnd::DragSource *, ::java::awt::Component *, jint);
  GtkMouseDragGestureRecognizer(::java::awt::dnd::DragSource *, ::java::awt::Component *, jint, ::java::awt::dnd::DragGestureListener *);
  virtual void registerListeners();
  virtual void unregisterListeners();
  virtual void mouseClicked(::java::awt::event::MouseEvent *);
  virtual void mousePressed(::java::awt::event::MouseEvent *);
  virtual void mouseReleased(::java::awt::event::MouseEvent *);
  virtual void mouseEntered(::java::awt::event::MouseEvent *);
  virtual void mouseExited(::java::awt::event::MouseEvent *);
  virtual void mouseDragged(::java::awt::event::MouseEvent *);
  virtual void mouseMoved(::java::awt::event::MouseEvent *);
private:
  jint getDropActionFromEvent(::java::awt::event::MouseEvent *);
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_awt_dnd_GtkMouseDragGestureRecognizer__
