James patches:
1. Default font set to 'Sans'
2. Never hide if not running as daemon (silly - how do ever re-show it again?)
3. Use decorations, this way it can be moved and more useful/flexible to use.
   Yes it also means it can be killed, but mb-systray can revive it.
4. Make it always on top since it is now moveable.

James 2015
diff -ur matchbox-keyboard-git/src/matchbox-keyboard.c matchbox-keyboard-git-new/src/matchbox-keyboard.c
--- matchbox-keyboard-git/src/matchbox-keyboard.c	2015-03-16 01:50:01.000000000 +0700
+++ matchbox-keyboard-git-new/src/matchbox-keyboard.c	2015-04-12 02:03:46.003483346 +0700
@@ -69,7 +69,7 @@
   kb->col_spacing = 2;
   kb->row_spacing = 2;
 
-  kb->font_family  = strdup("droidsans");
+  kb->font_family  = strdup("sans");
   kb->font_pt_size = 10;
   kb->font_variant = strdup("bold");
 
diff -ur matchbox-keyboard-git/src/matchbox-keyboard-ui.c matchbox-keyboard-git-new/src/matchbox-keyboard-ui.c
--- matchbox-keyboard-git/src/matchbox-keyboard-ui.c	2015-03-16 01:50:01.000000000 +0700
+++ matchbox-keyboard-git-new/src/matchbox-keyboard-ui.c	2015-04-12 02:35:05.070231295 +0700
@@ -381,6 +381,7 @@
      atom_NET_WM_STATE_SKIP_PAGER,
      atom_NET_WM_STATE_SKIP_TASKBAR,
      atom_NET_WM_STATE,
+     atom_NET_WM_STATE_ABOVE,
      atom_OB_WM_STATE_UNDECORATED; // Xlab: openbox support
 
   atom_NET_WM_STATE_SKIP_TASKBAR =
@@ -392,10 +393,13 @@
   atom_NET_WM_STATE_SKIP_PAGER = 
     XInternAtom(ui->xdpy, "_NET_WM_STATE_SKIP_PAGER", False);
 
+  atom_NET_WM_STATE_ABOVE = 
+    XInternAtom(ui->xdpy, "_NET_WM_STATE_ABOVE", False);
+    
   atom_NET_WM_STATE =
     XInternAtom(ui->xdpy, "_NET_WM_STATE", False);
 
-Atom states[] = { atom_NET_WM_STATE_SKIP_TASKBAR, atom_NET_WM_STATE_SKIP_PAGER, atom_OB_WM_STATE_UNDECORATED};
+Atom states[] = { atom_NET_WM_STATE_SKIP_TASKBAR, atom_NET_WM_STATE_SKIP_PAGER, atom_NET_WM_STATE_ABOVE };
 	  
 	  XChangeProperty(ui->xdpy, ui->xwin, 
 			  atom_NET_WM_STATE, XA_ATOM, 32, 
@@ -652,7 +656,7 @@
 void
 mb_kbd_ui_hide(MBKeyboardUI  *ui)
 {
-  if (!ui->visible)
+  if (!ui->visible || !ui->is_daemon) // james: never hide if not daemon
     return;
 
   XUnmapWindow(ui->xdpy, ui->xwin);
@@ -716,6 +720,7 @@
      atom_NET_WM_STATE_SKIP_TASKBAR,
      atom_NET_WM_STATE,
      atom_MOTIF_WM_HINTS,
+     atom_NET_WM_STATE_ABOVE,
      atom_OB_WM_STATE_UNDECORATED;
   
 
@@ -761,6 +766,9 @@
 
   atom_NET_WM_STATE_SKIP_PAGER = 
     XInternAtom(ui->xdpy, "_NET_WM_STATE_SKIP_PAGER", False);
+    
+  atom_NET_WM_STATE_ABOVE = 
+    XInternAtom(ui->xdpy, "_NET_WM_STATE_ABOVE", False);
 
   atom_NET_WM_STATE =
     XInternAtom(ui->xdpy, "_NET_WM_STATE", False);
@@ -899,7 +907,7 @@
 				   0, /* bottom_start_x */
 				   0}; /* bottom_end_x */
 	  
-	  Atom states[] = { atom_NET_WM_STATE_SKIP_TASKBAR, atom_NET_WM_STATE_SKIP_PAGER, atom_OB_WM_STATE_UNDECORATED};
+	  Atom states[] = { atom_NET_WM_STATE_SKIP_TASKBAR, atom_NET_WM_STATE_SKIP_PAGER, atom_NET_WM_STATE_ABOVE };
 	  int  desk_width = 0, desk_height = 0, desk_y = 0;
 	  
 	  XChangeProperty(ui->xdpy, ui->xwin, 
