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,