Code

Resolves the year 1 problem on the calendar render extension.
[inkscape.git] / src / sp-namedview.cpp
index 47720c5d64f12fb9409e1f74aa7a537b457d0fe8..f7fdef94b9f6c290a9f3f9556d96cac1338e349d 100644 (file)
@@ -218,6 +218,7 @@ static void sp_namedview_build(SPObject *object, SPDocument *document, Inkscape:
     }
 
     sp_object_read_attr(object, "inkscape:document-units");
+    sp_object_read_attr(object, "units");
     sp_object_read_attr(object, "viewonly");
     sp_object_read_attr(object, "showguides");
     sp_object_read_attr(object, "showgrid");
@@ -304,6 +305,7 @@ static void sp_namedview_release(SPObject *object)
 static void sp_namedview_set(SPObject *object, unsigned int key, const gchar *value)
 {
     SPNamedView *nv = SP_NAMEDVIEW(object);
+    // TODO investigate why we grab this and then never use it
     SPUnit const &px = sp_unit_get_by_id(SP_UNIT_PX);
 
     switch (key) {
@@ -571,6 +573,30 @@ static void sp_namedview_set(SPObject *object, unsigned int key, const gchar *va
             object->requestModified(SP_OBJECT_MODIFIED_FLAG);
             break;
     }
+    case SP_ATTR_UNITS: {
+            SPUnit const *new_unit = NULL;
+
+            if (value) {
+                SPUnit const *const req_unit = sp_unit_get_by_abbreviation(value);
+                if ( req_unit == NULL ) {
+                    g_warning("Unrecognized unit `%s'", value);
+                    /* fixme: Document errors should be reported in the status bar or
+                     * the like (e.g. as per
+                     * http://www.w3.org/TR/SVG11/implnote.html#ErrorProcessing); g_log
+                     * should be only for programmer errors. */
+                } else if ( req_unit->base == SP_UNIT_ABSOLUTE ||
+                            req_unit->base == SP_UNIT_DEVICE     ) {
+                    new_unit = req_unit;
+                } else {
+                    g_warning("Document units must be absolute like `mm', `pt' or `px', but found `%s'",
+                              value);
+                    /* fixme: Don't use g_log (see above). */
+                }
+            }
+            nv->units = new_unit;
+            object->requestModified(SP_OBJECT_MODIFIED_FLAG);
+            break;
+    }
     default:
             if (((SPObjectClass *) (parent_class))->set) {
                 ((SPObjectClass *) (parent_class))->set(object, key, value);
@@ -828,7 +854,7 @@ void sp_namedview_document_from_window(SPDesktop *desktop)
         sp_repr_set_int(view, "inkscape:window-maximized", desktop->is_maximized());
     }
 
-    view->setAttribute("inkscape:current-layer", SP_OBJECT_ID(desktop->currentLayer()));
+    view->setAttribute("inkscape:current-layer", desktop->currentLayer()->getId());
 
     // restore undoability
     sp_document_set_undo_sensitive(sp_desktop_document(desktop), saved);
@@ -977,7 +1003,7 @@ SPNamedView *sp_document_namedview(SPDocument *document, const gchar *id)
         return (SPNamedView *) nv;
     }
 
-    while (nv && strcmp(nv->id, id)) {
+    while (nv && strcmp(nv->getId(), id)) {
         nv = sp_item_group_get_child_by_name((SPGroup *) document->root, nv, "sodipodi:namedview");
     }