Enlightenment CVS committal

Author  : doursse
Project : e17
Module  : proto/edvi

Dir     : e17/proto/edvi/src/lib


Modified Files:
        esmart_dvi.c esmart_dvi.h 


Log Message:
* src/bin/edvi_esmart_test.c: (main):
* src/lib/esmart_dvi.c: (esmart_dvi_file_set):
* src/lib/esmart_dvi.h:
esmart_dvi_file_set() returns a value hat indicates success
or failure. Fix a leak when this function is called several
times. Doc and test updated.

===================================================================
RCS file: /cvs/e/e17/proto/edvi/src/lib/esmart_dvi.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -3 -r1.6 -r1.7
--- esmart_dvi.c        13 Jul 2008 10:11:57 -0000      1.6
+++ esmart_dvi.c        14 Jul 2008 13:02:10 -0000      1.7
@@ -117,29 +117,47 @@
  * @param obj The Evas object
  * @param filename: The file name
  *
- * Set the file name of the smart dvi object @p obj
+ * Set the file name of the smart dvi object @p obj. If the current
+ * filename and @p filename are the same, nothing is done and 1 is
+ * returned. If @p filename is @c NULL or empty, 0 is returned. If
+ * @p filename is a valid PDF document, 1 is returned, otherwise 0
+ * is returned.
  */
-void
+int
 esmart_dvi_file_set (Evas_Object *obj, const char *filename)
 {
   Smart_Dvi *sp;
 
-  E_SMART_OBJ_GET (sp, obj, E_OBJ_NAME);
+  E_SMART_OBJ_GET_RETURN (sp, obj, E_OBJ_NAME, 0);
 
   if ((filename) &&
       (sp->filename) &&
-      (!strcmp (filename, sp->filename))) return;
+      (!strcmp (filename, sp->filename))) return 1;
 
   if ((filename) && (filename[0] != 0))
     {
+      if (sp->filename) free (sp->filename);
       sp->filename = strdup (filename);
 
+      if (sp->dvi_page)
+        edvi_page_delete (sp->dvi_page);
+      sp->dvi_page = NULL;
+
       if (sp->dvi_document)
         edvi_document_delete (sp->dvi_document);
 
-      sp->dvi_document = edvi_document_new (sp->filename, sp->dvi_device, 
sp->dvi_property);
+      sp->dvi_document = edvi_document_new (sp->filename,
+                                            sp->dvi_device,
+                                            sp->dvi_property);
+      if (!sp->dvi_document)
+        return 0;
+
       sp->dvi_page = edvi_page_new (sp->dvi_document);
+
+      return 1;
     }
+
+  return 0;
 }
 
 /**
===================================================================
RCS file: /cvs/e/e17/proto/edvi/src/lib/esmart_dvi.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -3 -r1.3 -r1.4
--- esmart_dvi.h        13 Jul 2008 10:11:57 -0000      1.3
+++ esmart_dvi.h        14 Jul 2008 13:02:10 -0000      1.4
@@ -72,7 +72,7 @@
 Evas_Object          *esmart_dvi_add (Evas *evas);
 Evas_Bool             esmart_dvi_init (Evas_Object *obj);
 
-void                  esmart_dvi_file_set (Evas_Object *obj, const char 
*filename);
+int                   esmart_dvi_file_set (Evas_Object *obj, const char 
*filename);
 const char           *esmart_dvi_file_get (Evas_Object *obj);
 
 void                  esmart_dvi_page_set (Evas_Object *obj, int page);



-------------------------------------------------------------------------
Sponsored by: SourceForge.net Community Choice Awards: VOTE NOW!
Studies have shown that voting for your favorite open source project,
along with a healthy diet, reduces your potential for chronic lameness
and boredom. Vote Now at http://www.sourceforge.net/community/cca08
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to