From 9bd84e73f47f19c306b98585c0174139e849a8a2 Mon Sep 17 00:00:00 2001
From: Joe Groff <arcata@gmail.com>
Date: Thu, 15 Sep 2011 11:27:16 -0700
Subject: [PATCH] ui.backend: refactor the UI `main-vocab-hook` to use a
 backend-specific `ui-backend-available?` word, so that loading other backends
 doesn't change the `main-vocab-hook` out of sync with the backend; fixes #131

---
 basis/ui/backend/backend.factor         | 9 ++++++++-
 basis/ui/backend/cocoa/cocoa.factor     | 4 +++-
 basis/ui/backend/gtk/gtk.factor         | 4 +++-
 basis/ui/backend/windows/windows.factor | 4 +++-
 basis/ui/backend/x11/x11.factor         | 4 ++--
 5 files changed, 19 insertions(+), 6 deletions(-)

diff --git a/basis/ui/backend/backend.factor b/basis/ui/backend/backend.factor
index 62636fdcdf..2cea326826 100644
--- a/basis/ui/backend/backend.factor
+++ b/basis/ui/backend/backend.factor
@@ -1,6 +1,6 @@
 ! Copyright (C) 2006, 2009 Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: kernel namespaces opengl opengl.gl fry ;
+USING: command-line kernel namespaces opengl opengl.gl fry ;
 IN: ui.backend
 
 SYMBOL: ui-backend
@@ -32,3 +32,10 @@ HOOK: (with-ui) ui-backend ( quot -- )
 HOOK: (grab-input) ui-backend ( handle -- )
 
 HOOK: (ungrab-input) ui-backend ( handle -- )
+
+HOOK: ui-backend-available? ui-backend ( -- ? )
+
+M: object ui-backend-available?
+    f ;
+
+[ ui-backend-available? "ui.tools" "listener" ? ] main-vocab-hook set-global
diff --git a/basis/ui/backend/cocoa/cocoa.factor b/basis/ui/backend/cocoa/cocoa.factor
index e211e31374..aed4741949 100644
--- a/basis/ui/backend/cocoa/cocoa.factor
+++ b/basis/ui/backend/cocoa/cocoa.factor
@@ -256,4 +256,6 @@ M: cocoa-ui-backend (with-ui)
 
 cocoa-ui-backend ui-backend set-global
 
-[ running.app? "ui.tools" "listener" ? ] main-vocab-hook set-global
+M: cocoa-ui-backend ui-backend-available?
+    running.app? ;
+
diff --git a/basis/ui/backend/gtk/gtk.factor b/basis/ui/backend/gtk/gtk.factor
index 9afba9e21e..3bba14b7b4 100644
--- a/basis/ui/backend/gtk/gtk.factor
+++ b/basis/ui/backend/gtk/gtk.factor
@@ -539,4 +539,6 @@ os unix? os macosx? not and [
 { "ui.backend.gtk" "ui.gadgets.editors" }
 "ui.backend.gtk.input-methods.editors" require-when
 
-[ "DISPLAY" os-env "ui.tools" "listener" ? ] main-vocab-hook set-global
+M: gtk-ui-backend ui-backend-available?
+    "DISPLAY" os-env >boolean ;
+
diff --git a/basis/ui/backend/windows/windows.factor b/basis/ui/backend/windows/windows.factor
index 072924fa57..9e49a1b044 100755
--- a/basis/ui/backend/windows/windows.factor
+++ b/basis/ui/backend/windows/windows.factor
@@ -861,6 +861,8 @@ M: windows-ui-backend (fullscreen?) ( world -- ? )
     [ hwnd>RECT ] [ fullscreen-RECT ] bi
     [ get-RECT-dimensions 2array 2nip ] bi@ = ;
 
+M: windows-ui-backend ui-backend-available?
+    t ;
+
 windows-ui-backend ui-backend set-global
 
-[ "ui.tools" ] main-vocab-hook set-global
diff --git a/basis/ui/backend/x11/x11.factor b/basis/ui/backend/x11/x11.factor
index e2ba7ab4e5..3984ad9699 100644
--- a/basis/ui/backend/x11/x11.factor
+++ b/basis/ui/backend/x11/x11.factor
@@ -414,5 +414,5 @@ M: x11-ui-backend (ungrab-input)
 
 x11-ui-backend ui-backend set-global
 
-[ "DISPLAY" os-env "ui.tools" "listener" ? ]
-main-vocab-hook set-global
+M: x11-ui-backend ui-backend-available?
+    "DISPLAY" os-env >boolean ;