+ return evas_object_focus_get (e->real) ? Qtrue : Qfalse;
+}
+
+/*
+ * call-seq:
+ * e.focused(true or false)
+ *
+ * (Un)focuses <i>e</i>.
+ */
+static VALUE c_focused_set (VALUE self, VALUE val)
+{
+ GET_OBJ (self, RbEvasObject, e);
+
+ CHECK_BOOL (val);
+
+ evas_object_focus_set (e->real, val == Qtrue);
+
+ return Qnil;
+}
+
+/*
+ * call-seq:
+ * e.evas => evas
+ *
+ * Returns the <code>Evas::Evas</code> for <i>e</i>.
+ */
+static VALUE c_evas_get (VALUE self)
+{
+ GET_OBJ (self, RbEvasObject, e);
+
+ return e->parent;
+}
+
+/*
+ * call-seq:
+ * e.name => string
+ *
+ * Returns the name of <i>e</i>.
+ */
+static VALUE c_name_get (VALUE self)
+{
+ const char *name;
+
+ GET_OBJ (self, RbEvasObject, e);
+
+ if (!(name = evas_object_name_get (e->real)))
+ return Qnil;
+ else
+ return rb_str_new2 (name);
+}
+
+/*
+ * call-seq:
+ * e.name(string)
+ *
+ * Sets the name of <i>e</i>.
+ */
+static VALUE c_name_set (VALUE self, VALUE val)
+{
+ GET_OBJ (self, RbEvasObject, e);
+
+ Check_Type (val, T_STRING);
+
+ evas_object_name_set (e->real, StringValuePtr (val));
+
+ return Qnil;
+}
+
+/*
+ * call-seq:
+ * e.layer => fixnum
+ *
+ * Returns the layer <i>e</i> is in.
+ */
+static VALUE c_layer_get (VALUE self)
+{
+ GET_OBJ (self, RbEvasObject, e);
+
+ return INT2FIX (evas_object_layer_get (e->real));
+}
+
+/*
+ * call-seq:
+ * e.layer(fixnum)
+ *
+ * Sets the layer <i>e</i> is in.
+ */
+static VALUE c_layer_set (VALUE self, VALUE val)
+{
+ GET_OBJ (self, RbEvasObject, e);
+
+ Check_Type (val, T_FIXNUM);
+
+ evas_object_layer_set (e->real, NUM2INT (val));
+
+ return Qnil;
+}
+
+/*
+ * call-seq:
+ * e.get_color => array
+ *
+ * Returns the color of <i>e</i>.
+ *
+ * e.set_color(128, 128, 128, 0) #=> nil
+ * e.get_color #=> [128, 128, 128, 0]
+ */
+static VALUE c_get_color (VALUE self)
+{
+ int r = 0, g = 0, b = 0, a = 0;
+
+ GET_OBJ (self, RbEvasObject, e);
+
+ evas_object_color_get (e->real, &r, &g, &b, &a);
+
+ return rb_ary_new3 (4, INT2FIX (r), INT2FIX (g), INT2FIX (b),
+ INT2FIX (a));
+}
+
+/*
+ * call-seq:
+ * e.set_color(r, g, b, a) => nil
+ *
+ * Sets the color of <i>e</i>.
+ *
+ * e.set_color(128, 128, 128, 0) #=> nil
+ */
+static VALUE c_set_color (VALUE self, VALUE r, VALUE g, VALUE b,
+ VALUE a)
+{
+ GET_OBJ (self, RbEvasObject, e);
+
+ Check_Type (r, T_FIXNUM);
+ Check_Type (g, T_FIXNUM);
+ Check_Type (b, T_FIXNUM);
+ Check_Type (a, T_FIXNUM);
+
+ evas_object_color_set (e->real, FIX2INT (r), FIX2INT (g),
+ FIX2INT (b), FIX2INT (a));
+
+ return Qnil;
+}
+
+/*
+ * call-seq:
+ * e.pass_events? => true or false
+ *
+ * Returns true if <i>e</i> passes events on to EvasObjects that are
+ * below itself, else returns false.
+ */
+static VALUE c_pass_events_get (VALUE self)
+{
+ GET_OBJ (self, RbEvasObject, e);
+
+ return evas_object_pass_events_get (e->real) ? Qtrue : Qfalse;
+}
+
+/*
+ * call-seq:
+ * e.pass_events(true or false)
+ *
+ * Sets whether <i>e</i> passes events on to EvasObjects that are
+ * below itself.
+ */
+static VALUE c_pass_events_set (VALUE self, VALUE val)
+{
+ GET_OBJ (self, RbEvasObject, e);
+
+ CHECK_BOOL (val);
+
+ evas_object_pass_events_set (e->real, val == Qtrue);
+
+ return Qnil;
+}
+
+/*
+ * call-seq:
+ * e.repeat_events? => true or false
+ *
+ * Returns true if <i>e</i> repeats events to EvasObjects that are
+ * below itself, else returns false.
+ */
+static VALUE c_repeat_events_get (VALUE self)
+{
+ GET_OBJ (self, RbEvasObject, e);
+
+ return evas_object_repeat_events_get (e->real) ? Qtrue : Qfalse;
+}
+
+/*
+ * call-seq:
+ * e.repeat_events(true or false)
+ *
+ * Sets whether <i>e</i> repeats events to EvasObjects that are
+ * below itself.
+ */
+static VALUE c_repeat_events_set (VALUE self, VALUE val)
+{
+ GET_OBJ (self, RbEvasObject, e);
+
+ CHECK_BOOL (val);
+
+ evas_object_repeat_events_set (e->real, val == Qtrue);
+
+ return Qnil;
+}
+
+/*
+ * call-seq:
+ * e.raise => nil
+ *
+ * Raises <i>e</i>.
+ */
+static VALUE c_raise (VALUE self)
+{
+ GET_OBJ (self, RbEvasObject, e);
+
+ evas_object_raise (e->real);
+
+ return Qnil;
+}
+
+/*
+ * call-seq:
+ * e.lower => nil
+ *
+ * Lowers <i>e</i>.
+ */
+static VALUE c_lower (VALUE self)
+{
+ GET_OBJ (self, RbEvasObject, e);
+
+ evas_object_lower (e->real);
+
+ return Qnil;
+}
+
+/*
+ * call-seq:
+ * e.stack_above(evasobject) => nil
+ *
+ * Positions <i>e</i> above <i>evasobject</i>.
+ */
+static VALUE c_stack_above (VALUE self, VALUE target)
+{
+ GET_OBJ (self, RbEvasObject, e);
+
+ CHECK_CLASS (target, cEvasObject);
+ GET_OBJ (target, RbEvasObject, t);
+
+ evas_object_stack_above (e->real, t->real);
+
+ return Qnil;
+}
+
+/*
+ * call-seq:
+ * e.stack_below(evasobject) => nil
+ *
+ * Positions <i>e</i> below <i>evasobject</i>.
+ */
+static VALUE c_stack_below (VALUE self, VALUE target)
+{
+ GET_OBJ (self, RbEvasObject, e);
+
+ CHECK_CLASS (target, cEvasObject);
+ GET_OBJ (target, RbEvasObject, t);
+
+ evas_object_stack_below (e->real, t->real);
+
+ return Qnil;
+}
+
+/*
+ * call-seq:
+ * e.above => evasobject
+ *
+ * Returns the <code>Evas::EvasObject</code> that's positioned above
+ * <i>e</i>.
+ */
+static VALUE c_above_get (VALUE self)
+{
+ GET_OBJ (self, RbEvasObject, e);
+
+ return TO_EVAS_OBJECT (evas_object_above_get (e->real));
+}
+
+/*
+ * call-seq:
+ * e.below => evasobject
+ *
+ * Returns the <code>Evas::EvasObject</code> that's positioned below
+ * <i>e</i>.
+ */
+static VALUE c_below_get (VALUE self)
+{
+ GET_OBJ (self, RbEvasObject, e);
+
+ return TO_EVAS_OBJECT (evas_object_below_get (e->real));
+}
+
+static VALUE c_userdata_get (VALUE self)
+{
+ GET_OBJ (self, RbEvasObject, e);
+
+ if (NIL_P (e->userdata))
+ e->userdata = rb_hash_new ();
+
+ return e->userdata;