natGtkButtonPeer.cc   [plain text]


// Native Gtk AWT button code

#include <config.h>

#include <gcj/cni.h>

#include "gtkcommon.h"
#include <gnu/awt/gtk/GtkButtonPeer.h>
#include <java/awt/Button.h>

void
gnu::awt::gtk::GtkButtonPeer::setLabel (java::lang::String *label)
{
  _Jv_GdkThreadLock sync;
  jsize len = 0;
  if (label)
    len = JvGetStringUTFLength (label);
  char buf[len + 1];
  // FIXME: this can allocate an unbounded amount.  Should use heap
  // even though it is slower.
  if (label)
    JvGetStringUTFRegion (label, 0, len, buf);
  buf[len] = '\0';
  // The button child is a label.
  GtkBin *bin = GTK_BIN (ptr);
  gtk_label_set_text (GTK_LABEL (bin->child), buf);
}

void
gnu::awt::gtk::GtkButtonPeer::create ()
{
  if (! ptr)
    {
      _Jv_GdkThreadLock sync;
      // This is a little inefficient.
      ptr = (gnu::gcj::RawData *) gtk_button_new_with_label ("");

      using namespace ::java::awt;
      Button *button = reinterpret_cast<Button *> (awtComponent);
      setLabel (button->getLabel ());
    }

  gnu::awt::gtk::GtkComponentPeer::create ();
}

//  void
//  gnu::awt::gtk::GtkButtonPeer::clicked (::gnu::gcj::RawData *button_wrap,
//  				       ::gnu::gcj::RawData *peer_wrap)
//  {
//    GtkButtonPeer *button = reinterpret_cast<GtkButtonPeer *> (peer_wrap);
  
//  }