+(defmacro with-gvalue ((gvalue type &optional (value nil value-p)) &body body)
+ `(let ((,gvalue ,(if value-p
+ `(gvalue-new ,type ,value)
+ `(gvalue-new))))
+ (unwind-protect
+ (progn
+ ,@body
+ ,(unless value-p `(gvalue-get ,gvalue)))
+ (gvalue-free ,gvalue))))