"""ButtonWidget class.  

Represents a button in the frontend using a widget.  Allows user to listen for
click events on the button and trigger backend code when the clicks are fired.
"""
#-----------------------------------------------------------------------------
# Copyright (c) 2013, the IPython Development Team.
#
# Distributed under the terms of the Modified BSD License.
#
# The full license is in the file COPYING.txt, distributed with this software.
#-----------------------------------------------------------------------------

#-----------------------------------------------------------------------------
# Imports
#-----------------------------------------------------------------------------
import base64

from .widget import DOMWidget
from IPython.utils.traitlets import Unicode, Bytes

#-----------------------------------------------------------------------------
# Classes
#-----------------------------------------------------------------------------
class ImageWidget(DOMWidget):
    view_name = Unicode('ImageView', sync=True)
    
    # Define the custom state properties to sync with the front-end
    format = Unicode('png', sync=True)
    width = Unicode(sync=True) # TODO: C unicode
    height = Unicode(sync=True)
    _b64value = Unicode(sync=True)
    
    value = Bytes()
    def _value_changed(self, name, old, new):
        self._b64value = base64.b64encode(new)
@@ -791,16 +791,26 @@
 Unicode,
+ CUnicode,
  Bytes%0A%0A
@@ -1179,16 +1179,17 @@
 width = 
+C
 Unicode(
@@ -1202,26 +1202,8 @@
 rue)
- # TODO: C unicode
 %0A   
@@ -1208,24 +1208,25 @@
    height = 
+C
 Unicode(sync

Use CUnicode for width and height in ImageWidget