+typedef struct {
+ RbEcoreEvas ee;
+ VALUE parent_window;
+ VALUE window;
+} RbEcoreEvasGlX11;
+
+static void c_mark (RbEcoreEvasGlX11 *ee)
+{
+ c_ecore_evas_mark (&ee->ee);
+
+ if (!NIL_P (ee->parent_window))
+ rb_gc_mark (ee->parent_window);
+
+ if (!NIL_P (ee->window))
+ rb_gc_mark (ee->window);
+}
+
+static void c_free (RbEcoreEvasGlX11 *ee)
+{
+ c_ecore_evas_free (&ee->ee, false);
+
+ free (ee);
+}
+
+static VALUE c_alloc (VALUE klass)
+{
+ RbEcoreEvasGlX11 *ee = NULL;
+
+ ecore_init ();
+ ecore_evas_init ();
+
+ return Data_Make_Struct (klass, RbEcoreEvasGlX11,
+ c_mark, c_free, ee);
+}