diff --git a/Setup.hs b/Setup.hs
--- a/Setup.hs
+++ b/Setup.hs
@@ -11,6 +11,8 @@
 
 main = defaultMainWithHooks $ simpleUserHooks
   { postInst = postInstHook (postInst simpleUserHooks)
+  -- Copy for Cabal 1.20, which does not work with postInst
+  , postCopy = postInstHook (postCopy simpleUserHooks)
   , postConf = postConfHook (postConf simpleUserHooks)
   }
 
diff --git a/ghc-vis.cabal b/ghc-vis.cabal
--- a/ghc-vis.cabal
+++ b/ghc-vis.cabal
@@ -1,5 +1,5 @@
 name:               ghc-vis
-version:            0.7.2.3
+version:            0.7.2.4
 license:            BSD3
 license-file:       LICENSE
 category:           GHC, Debug, Development
@@ -20,7 +20,7 @@
                     how it can be used with GHCi's debugger:
                     <http://felsin9.de/nnis/ghc-vis/#combined-debugger>
 
-tested-with: GHC == 7.4.1, GHC == 7.4.2, GHC == 7.6.1, GHC == 7.6.2, GHC == 7.6.3
+tested-with: GHC == 7.4.1, GHC == 7.4.2, GHC == 7.6.1, GHC == 7.6.2, GHC == 7.6.3, GHC == 7.8.3
 data-files: ghci data/main.ui data/welcome.svg data/legend_graph.svg data/legend_list.svg data/icon_collapse.svg data/icon_evaluate.svg data/hover_collapse.svg data/hover_evaluate.svg
 Extra-source-files: nonghci-test.hs
 
@@ -44,12 +44,12 @@
                  mtl >= 2.0 && < 2.3,
                  fgl >= 5.4 && < 5.6,
                  deepseq == 1.3.*,
-                 text >= 0.11 && < 1.2,
+                 text >= 0.11 && < 1.3,
                  transformers >= 0.3 && < 0.5,
                  containers >= 0.4 && < 0.6,
-                 gtk == 0.12.*,
-                 svgcairo == 0.12.*,
-                 cairo == 0.12.*,
+                 gtk >= 0.12 && < 0.13,
+                 svgcairo >= 0.12 && < 0.13,
+                 cairo >= 0.12 && < 0.13,
                  ghc-heap-view == 0.5.*
   Hs-source-dirs: src/
   Ghc-options: -Wall -fno-warn-unused-do-bind
diff --git a/src/GHC/Vis.hs b/src/GHC/Vis.hs
--- a/src/GHC/Vis.hs
+++ b/src/GHC/Vis.hs
@@ -70,6 +70,7 @@
 import Data.IORef
 import Data.Version
 
+import qualified Data.Text as Text
 import qualified Data.IntMap as M
 
 import System.Timeout
@@ -357,92 +358,96 @@
     return True
 
   onKeyPress window $ \e -> do
-    --putStrLn $ E.eventKeyName e
-
     state <- readIORef visState
 
-    when (E.eventKeyName e `elem` ["plus", "Page_Up", "KP_Add"]) $ do
+#if MIN_VERSION_gtk(0,13,0)
+    let eventKeyName = Text.unpack . E.eventKeyName
+#else
+    let eventKeyName = E.eventKeyName
+#endif
+
+    when (eventKeyName e `elem` ["plus", "Page_Up", "KP_Add"]) $ do
       let newZoomRatio = zoomRatio state * zoomIncrement
           (oldX, oldY) = position state
           newPos = (oldX*zoomIncrement, oldY*zoomIncrement)
       modifyIORef visState (\s -> s {zoomRatio = newZoomRatio, position = newPos})
 
-    when (E.eventKeyName e `elem` ["minus", "Page_Down", "KP_Subtract"]) $ do
+    when (eventKeyName e `elem` ["minus", "Page_Down", "KP_Subtract"]) $ do
       let newZoomRatio = zoomRatio state / zoomIncrement
           (oldX, oldY) = position state
           newPos = (oldX/zoomIncrement, oldY/zoomIncrement)
       modifyIORef visState (\s -> s {zoomRatio = newZoomRatio, position = newPos})
 
-    when (E.eventKeyName e `elem` ["0", "equal"]) $
+    when (eventKeyName e `elem` ["0", "equal"]) $
       modifyIORef visState (\s -> s {zoomRatio = 1, position = (0, 0)})
 
-    when (E.eventKeyName e `elem` ["Left", "h", "a"]) $
+    when (eventKeyName e `elem` ["Left", "h", "a"]) $
       modifyIORef visState (\s ->
         let (x,y) = position s
             newX  = x + positionIncrement
         in s {position = (newX, y)})
 
-    when (E.eventKeyName e `elem` ["Right", "l", "d"]) $
+    when (eventKeyName e `elem` ["Right", "l", "d"]) $
       modifyIORef visState (\s ->
         let (x,y) = position s
             newX  = x - positionIncrement
         in s {position = (newX, y)})
 
-    when (E.eventKeyName e `elem` ["Up", "k", "w"]) $
+    when (eventKeyName e `elem` ["Up", "k", "w"]) $
       modifyIORef visState (\s ->
         let (x,y) = position s
             newY  = y + positionIncrement
         in s {position = (x, newY)})
 
-    when (E.eventKeyName e `elem` ["Down", "j", "s"]) $
+    when (eventKeyName e `elem` ["Down", "j", "s"]) $
       modifyIORef visState (\s ->
         let (x,y) = position s
             newY  = y - positionIncrement
         in s {position = (x, newY)})
 
-    when (E.eventKeyName e `elem` ["H", "A"]) $
+    when (eventKeyName e `elem` ["H", "A"]) $
       modifyIORef visState (\s ->
         let (x,y) = position s
             newX  = x + bigPositionIncrement
         in s {position = (newX, y)})
 
-    when (E.eventKeyName e `elem` ["L", "D"]) $
+    when (eventKeyName e `elem` ["L", "D"]) $
       modifyIORef visState (\s ->
         let (x,y) = position s
             newX  = x - bigPositionIncrement
         in s {position = (newX, y)})
 
-    when (E.eventKeyName e `elem` ["K", "W"]) $
+    when (eventKeyName e `elem` ["K", "W"]) $
       modifyIORef visState (\s ->
         let (x,y) = position s
             newY  = y + bigPositionIncrement
         in s {position = (x, newY)})
 
-    when (E.eventKeyName e `elem` ["J", "S"]) $
+    when (eventKeyName e `elem` ["J", "S"]) $
       modifyIORef visState (\s ->
         let (x,y) = position s
             newY  = y - bigPositionIncrement
         in s {position = (x, newY)})
 
-    when (E.eventKeyName e `elem` ["space", "Return", "KP_Enter"]) $
+    when (eventKeyName e `elem` ["space", "Return", "KP_Enter"]) $
       join $ runCorrect click
 
-    when (E.eventKeyName e `elem` ["v"]) $
+    when (eventKeyName e `elem` ["v"]) $
       put SwitchSignal
 
-    when (E.eventKeyName e `elem` ["c"]) $
+    when (eventKeyName e `elem` ["c"]) $
       put ClearSignal
 
-    when (E.eventKeyName e `elem` ["C"]) $
+    when (eventKeyName e `elem` ["C"]) $
       put RestoreSignal
 
-    when (E.eventKeyName e `elem` ["u"]) $
+    when (eventKeyName e `elem` ["u"]) $
       put UpdateSignal
 
-    when (E.eventKeyName e `elem` ["comma", "bracketleft"]) $
+    when (eventKeyName e `elem` ["comma", "bracketleft"]) $
       put $ HistorySignal (+1)
 
-    when (E.eventKeyName e `elem` ["period", "bracketright"]) $
+    when (eventKeyName e `elem` ["period", "bracketright"]) $
       put $ HistorySignal (\x -> x - 1)
 
     widgetQueueDraw canvas
