(mtext__init): Call M17N_OBJECT_ADD_ARRAY.
[m17n/m17n-lib.git] / src / m17n-gui.c
index acf65e3..6e58efe 100644 (file)
@@ -112,7 +112,6 @@ free_frame (void *object)
 
   (*frame->driver->close) (frame);
   M17N_OBJECT_UNREF (frame->face);
-  free (frame->font);
   M17N_OBJECT_UNREF (frame->font_driver_list);
   free (object);
 }
@@ -197,8 +196,8 @@ null_device_fini ()
     mface__free_realized ((MRealizedFace *) MPLIST_VAL (plist));
   M17N_OBJECT_UNREF (null_device.realized_face_list);
 
-  MPLIST_DO (plist, null_device.realized_font_list)
-    mfont__free_realized ((MRealizedFont *) MPLIST_VAL (plist));
+  if (MPLIST_VAL (null_device.realized_font_list))
+    mfont__free_realized (MPLIST_VAL (null_device.realized_font_list));
   M17N_OBJECT_UNREF (null_device.realized_font_list);
   return 0;
 }
@@ -237,6 +236,7 @@ m17n_init_win (void)
 {
   int mdebug_mask = MDEBUG_INIT;
 
+  merror_code = MERROR_NONE;
   if (m17n__gui_initialized++)
     return;
   m17n_init ();
@@ -313,6 +313,7 @@ m17n_fini_win (void)
          dlclose (interface->handle);
        }
       free (interface->library);
+      free (interface);
     }
 #ifdef HAVE_FREETYPE
   if (null_interface.handle)
@@ -647,9 +648,13 @@ mframe (MPlist *plist)
       if (! interface->handle)
        {
          if (! (interface->handle = dlopen (interface->library, RTLD_NOW))
-             || ! (interface->init = dlsym (interface->handle, "device_init"))
-             || ! (interface->open = dlsym (interface->handle, "device_open"))
-             || ! (interface->fini = dlsym (interface->handle, "device_fini"))
+             || ! (interface->init
+                   = (int (*) ()) dlsym (interface->handle, "device_init"))
+             || ! (interface->open
+                   = (int (*) (MFrame *, MPlist *)) dlsym (interface->handle,
+                                                           "device_open"))
+             || ! (interface->fini
+                   = (int (*) ()) dlsym (interface->handle, "device_fini"))
              || (*interface->init) () < 0)
            {
              fprintf (stderr, "%s\n", (char *) dlerror ());
@@ -675,6 +680,7 @@ mframe (MPlist *plist)
     if (MPLIST_KEY (pl) == Mface)
       mface_merge (frame->face, (MFace *) MPLIST_VAL (pl));
   mface__update_frame_face (frame);
+  frame->font = frame->rface->rfont ? frame->rface->rfont->font : NULL;
 
   if (plist_created)
     M17N_OBJECT_UNREF (plist);
@@ -769,7 +775,7 @@ mframe_get_prop (MFrame *frame, MSymbol key)
   if (key == Mface)
     return frame->face;
   if (key == Mfont)
-    return &frame->rface->rfont->font;
+    return (frame->rface->rfont ? frame->rface->rfont->font : NULL);
   if (key == Mfont_width)
     return (void *) (frame->space_width);
   if (key == Mfont_ascent)