summaryrefslogtreecommitdiff
path: root/recipes/matchbox-keyboard/files
diff options
context:
space:
mode:
authorDenys Dmytriyenko <denis@denix.org>2009-03-17 14:32:59 -0400
committerDenys Dmytriyenko <denis@denix.org>2009-03-17 14:32:59 -0400
commit709c4d66e0b107ca606941b988bad717c0b45d9b (patch)
tree37ee08b1eb308f3b2b6426d5793545c38396b838 /recipes/matchbox-keyboard/files
parentfa6cd5a3b993f16c27de4ff82b42684516d433ba (diff)
rename packages/ to recipes/ per earlier agreement
See links below for more details: http://thread.gmane.org/gmane.comp.handhelds.openembedded/21326 http://thread.gmane.org/gmane.comp.handhelds.openembedded/21816 Signed-off-by: Denys Dmytriyenko <denis@denix.org> Acked-by: Mike Westerhof <mwester@dls.net> Acked-by: Philip Balister <philip@balister.org> Acked-by: Khem Raj <raj.khem@gmail.com> Acked-by: Marcin Juszkiewicz <hrw@openembedded.org> Acked-by: Koen Kooi <koen@openembedded.org> Acked-by: Frans Meulenbroeks <fransmeulenbroeks@gmail.com>
Diffstat (limited to 'recipes/matchbox-keyboard/files')
-rw-r--r--recipes/matchbox-keyboard/files/2-Add-new-modifier--layout--Used-to-cycle-thru-all-available-layouts.patch91
-rw-r--r--recipes/matchbox-keyboard/files/3-Changes-to-improve-layout-rendering--especially-after-adding-support-for.patch93
-rw-r--r--recipes/matchbox-keyboard/files/4-Add-rendering-debug-logging.patch65
-rw-r--r--recipes/matchbox-keyboard/files/5-Add-support-for-loading-multiple-independent-layouts.patch197
-rw-r--r--recipes/matchbox-keyboard/files/6-Add-layout-switch-key-to-all-layouts.patch111
-rw-r--r--recipes/matchbox-keyboard/files/80matchboxkeyboard20
-rw-r--r--recipes/matchbox-keyboard/files/fic-gta01-font-size.patch13
-rw-r--r--recipes/matchbox-keyboard/files/matchbox-keyboard-applet.patch92
-rw-r--r--recipes/matchbox-keyboard/files/matchbox-keyboard-hide-delay.patch99
-rw-r--r--recipes/matchbox-keyboard/files/smallscreen-fontsize.patch22
10 files changed, 803 insertions, 0 deletions
diff --git a/recipes/matchbox-keyboard/files/2-Add-new-modifier--layout--Used-to-cycle-thru-all-available-layouts.patch b/recipes/matchbox-keyboard/files/2-Add-new-modifier--layout--Used-to-cycle-thru-all-available-layouts.patch
new file mode 100644
index 0000000000..8aae3a0203
--- /dev/null
+++ b/recipes/matchbox-keyboard/files/2-Add-new-modifier--layout--Used-to-cycle-thru-all-available-layouts.patch
@@ -0,0 +1,91 @@
+# HG changeset patch
+# User pfalcon@localhost
+# Date 1176076569 0
+# Node ID ff9cf1fd8177dded04b9fc81ba630203848fc3ca
+# Parent 96305d94eb31f06f5618c99310192c47c68a1f21
+Add new modifier: layout. Used to cycle thru all available layouts.
+
+diff -r 96305d94eb31 -r ff9cf1fd8177 src/config-parser.c
+--- a/src/config-parser.c Sun Apr 08 23:28:43 2007 +0000
++++ b/src/config-parser.c Sun Apr 08 23:56:09 2007 +0000
+@@ -113,7 +113,8 @@ ModLookup[] =
+ { "mod1", MBKeyboardKeyModMod1 },
+ { "mod2", MBKeyboardKeyModMod2 },
+ { "mod3", MBKeyboardKeyModMod3 },
+- { "caps", MBKeyboardKeyModCaps }
++ { "caps", MBKeyboardKeyModCaps },
++ { "layout", MBKeyboardKeyModLayout },
+ };
+
+ typedef struct MBKeyboardConfigState
+diff -r 96305d94eb31 -r ff9cf1fd8177 src/matchbox-keyboard-key.c
+--- a/src/matchbox-keyboard-key.c Sun Apr 08 23:28:43 2007 +0000
++++ b/src/matchbox-keyboard-key.c Sun Apr 08 23:56:09 2007 +0000
+@@ -493,6 +493,16 @@ mb_kbd_key_press(MBKeyboardKey *key)
+ case MBKeyboardKeyModAlt:
+ mb_kbd_toggle_state(key->kbd, MBKeyboardStateAlt);
+ break;
++ case MBKeyboardKeyModLayout:
++ key->kbd->selected_layout_no++;
++ if (key->kbd->selected_layout_no >= util_list_length(key->kbd->layouts))
++ key->kbd->selected_layout_no = 0;
++ key->kbd->selected_layout =
++ (MBKeyboardLayout *)util_list_get_nth_data(key->kbd->layouts,
++ key->kbd->selected_layout_no);
++ mb_kbd_ui_recalc_ui_layout(key->kbd->ui);
++ queue_full_kbd_redraw = True;
++ break;
+ default:
+ DBG("unknown modifier action");
+ break;
+diff -r 96305d94eb31 -r ff9cf1fd8177 src/matchbox-keyboard-ui.c
+--- a/src/matchbox-keyboard-ui.c Sun Apr 08 23:28:43 2007 +0000
++++ b/src/matchbox-keyboard-ui.c Sun Apr 08 23:56:09 2007 +0000
+@@ -505,6 +505,15 @@ mb_kbd_ui_allocate_ui_layout(MBKeyboardU
+ }
+
+ *width = max_row_width;
++}
++
++void
++mb_kbd_ui_recalc_ui_layout(MBKeyboardUI *ui)
++{
++ mb_kbd_ui_allocate_ui_layout(ui,
++ &ui->base_alloc_width, &ui->base_alloc_height);
++
++ mb_kbd_ui_resize(ui, ui->xwin_width, ui->xwin_height);
+ }
+
+ void
+diff -r 96305d94eb31 -r ff9cf1fd8177 src/matchbox-keyboard.c
+--- a/src/matchbox-keyboard.c Sun Apr 08 23:28:43 2007 +0000
++++ b/src/matchbox-keyboard.c Sun Apr 08 23:56:09 2007 +0000
+@@ -85,6 +85,7 @@ mb_kbd_new (int argc, char **argv)
+
+ kb->selected_layout
+ = (MBKeyboardLayout *)util_list_get_nth_data(kb->layouts, 0);
++ kb->selected_layout_no = 0;
+
+ if (want_embedding)
+ mb_kbd_ui_set_embeded( kb->ui, True );
+diff -r 96305d94eb31 -r ff9cf1fd8177 src/matchbox-keyboard.h
+--- a/src/matchbox-keyboard.h Sun Apr 08 23:28:43 2007 +0000
++++ b/src/matchbox-keyboard.h Sun Apr 08 23:56:09 2007 +0000
+@@ -153,6 +153,7 @@
+ char *config_file;
+ List *layouts;
+ MBKeyboardLayout *selected_layout;
++ int selected_layout_no;
+ int key_border, key_pad, key_margin;
+ int row_spacing, col_spacing;
+ boolean extended; /* are we showing extended keys ? */
+@@ -179,6 +180,9 @@
+ int
+ mb_kbd_ui_init(MBKeyboard *kbd);
+
++void
++mb_kbd_ui_recalc_ui_layout(MBKeyboardUI *ui);
++
+ int
+ mb_kbd_ui_realize(MBKeyboardUI *ui);
+
diff --git a/recipes/matchbox-keyboard/files/3-Changes-to-improve-layout-rendering--especially-after-adding-support-for.patch b/recipes/matchbox-keyboard/files/3-Changes-to-improve-layout-rendering--especially-after-adding-support-for.patch
new file mode 100644
index 0000000000..0a319e759e
--- /dev/null
+++ b/recipes/matchbox-keyboard/files/3-Changes-to-improve-layout-rendering--especially-after-adding-support-for.patch
@@ -0,0 +1,93 @@
+# HG changeset patch
+# User pfalcon@localhost
+# Date 1176077194 0
+# Node ID b010d54a6c5020a68855e60e5a423ee3c18ed700
+# Parent ff9cf1fd8177dded04b9fc81ba630203848fc3ca
+Changes to improve layout rendering, especially after adding support for
+multiple layouts:
+1. Add --hfactor option which presets keyboard to the specified percentage
+of screen height. This is required for multiple layouts, as otherwise
+height is calculated on specific layout, but in such a way that it is
+affected by previous layout, which leads to rendering artifacts.
+2. Also st default font height to 6, after all.
+
+diff -r ff9cf1fd8177 -r b010d54a6c50 src/matchbox-keyboard-ui.c
+--- a/src/matchbox-keyboard-ui.c Sun Apr 08 23:56:09 2007 +0000
++++ b/src/matchbox-keyboard-ui.c Mon Apr 09 00:06:34 2007 +0000
+@@ -744,9 +744,15 @@ mb_kbd_ui_resources_create(MBKeyboardUI
+ */
+ if (desk_width > ui->xwin_width)
+ {
++ int win_height;
++ if (ui->kbd->hfactor != 0)
++ win_height = desk_height * ui->kbd->hfactor / 100;
++ else
++ win_height = ( desk_width * ui->xwin_height ) / ui->xwin_width;
++
+ mb_kbd_ui_resize(ui,
+ desk_width,
+- ( desk_width * ui->xwin_height ) / ui->xwin_width);
++ win_height);
+ }
+
+ wm_struct_vals[2] = desk_y + desk_height - ui->xwin_height;
+@@ -818,8 +824,11 @@ mb_kbd_ui_resize(MBKeyboardUI *ui, int w
+ width_diff = width - ui->base_alloc_width;
+ height_diff = height - ui->base_alloc_height;
+
++/* It's better to have some "clipped" keys, than busted layout. */
++#if 0
+ if (width_diff < 0 || height_diff < 0)
+ return; /* dont go smaller than our int request - get clipped */
++#endif
+
+ layout = mb_kbd_get_selected_layout(ui->kbd);
+ row_item = mb_kbd_layout_rows(layout);
+--- a/src/matchbox-keyboard.c 2007-08-17 17:09:05.240878162 +0300
++++ b/src/matchbox-keyboard.c 2007-08-17 17:11:36.749512174 +0300
+@@ -27,7 +27,9 @@
+ " -xid,--xid Print window ID to stdout ( for embedding )\n"
+ " -d,--daemon Run in 'daemon' mode (for remote control)\n"
+ " -o,--orientation <portrait|landscape>\n"
+- " Use to limit visibility with screen orientation \n");
++ " Use to limit visibility with screen orientation \n"
++ " -h,--hfactor <percent>\n"
++ " Fix keyboard window size in percentage of desktop height\n");
+ fprintf(stderr, "\nmatchbox-keyboard %s \nCopyright (C) 2007 OpenedHand Ltd.\n", VERSION);
+
+ exit(-1);
+@@ -52,7 +53,7 @@
+ kb->row_spacing = 5;
+
+ kb->font_family = strdup("sans");
+- kb->font_pt_size = 5;
++ kb->font_pt_size = 6;
+ kb->font_variant = strdup("bold");
+
+ for (i = 1; i < argc; i++)
+@@ -63,6 +64,14 @@
+ continue;
+ }
+
++ if (streq ("-h", argv[i]) || streq ("--hfactor", argv[i]))
++ {
++ if (i + 1 < argc) {
++ kb->hfactor = atoi(argv[i + 1]);
++ }
++ continue;
++ }
++
+ if (streq ("-d", argv[i]) || streq ("--daemon", argv[i]))
+ {
+ want_daemon = True;
+diff -r ff9cf1fd8177 -r b010d54a6c50 src/matchbox-keyboard.h
+--- a/src/matchbox-keyboard.h Sun Apr 08 23:56:09 2007 +0000
++++ b/src/matchbox-keyboard.h Mon Apr 09 00:06:34 2007 +0000
+@@ -150,6 +150,7 @@
+ char *font_family;
+ int font_pt_size;
+ char *font_variant;
++ int hfactor;
+ char *config_file;
+ List *layouts;
+ MBKeyboardLayout *selected_layout;
diff --git a/recipes/matchbox-keyboard/files/4-Add-rendering-debug-logging.patch b/recipes/matchbox-keyboard/files/4-Add-rendering-debug-logging.patch
new file mode 100644
index 0000000000..509cd09404
--- /dev/null
+++ b/recipes/matchbox-keyboard/files/4-Add-rendering-debug-logging.patch
@@ -0,0 +1,65 @@
+# HG changeset patch
+# User pfalcon@localhost
+# Date 1176077287 0
+# Node ID 38c3459f2e1a1c8dc7aacb486f201bdda638c7f2
+# Parent b010d54a6c5020a68855e60e5a423ee3c18ed700
+Add rendering debug logging.
+
+diff -r b010d54a6c50 -r 38c3459f2e1a src/matchbox-keyboard-ui.c
+--- a/src/matchbox-keyboard-ui.c Mon Apr 09 00:06:34 2007 +0000
++++ b/src/matchbox-keyboard-ui.c Mon Apr 09 00:08:07 2007 +0000
+@@ -357,6 +357,8 @@ mb_kbd_ui_allocate_ui_layout(MBKeyboardU
+ /* Do an initial run to figure out a 'base' size for single glyph keys */
+ mb_kdb_ui_unit_key_size(ui, &ui->key_uwidth, &ui->key_uheight);
+
++ DBG("unit_key_size: %dx%d", ui->key_uwidth, ui->key_uheight);
++
+ row_item = mb_kbd_layout_rows(layout);
+
+ row_y = mb_kbd_row_spacing(ui->kbd);
+@@ -415,6 +417,8 @@ mb_kbd_ui_allocate_ui_layout(MBKeyboardU
+
+ if (key_x > max_row_width) /* key_x now represents row width */
+ max_row_width = key_x;
++
++ DBG("Row width: %d", key_x);
+
+ mb_kbd_row_set_y(row, row_y);
+
+@@ -617,6 +621,8 @@ mb_kbd_ui_resources_create(MBKeyboardUI
+ boolean have_matchbox_wm = False;
+ boolean have_ewmh_wm = False;
+
++ DBG("mb_kbd_ui_resources_create: %dx%d", ui->xwin_width, ui->xwin_height);
++
+ /*
+ atom_wm_protocols = {
+ XInternAtom(ui->xdpy, "WM_DELETE_WINDOW",False),
+@@ -821,6 +827,8 @@ mb_kbd_ui_resize(MBKeyboardUI *ui, int w
+
+ MARK();
+
++ DBG("mb_kbd_ui_resize: resize to %dx%d, base %dx%d", width, height, ui->base_alloc_width, ui->base_alloc_height);
++
+ width_diff = width - ui->base_alloc_width;
+ height_diff = height - ui->base_alloc_height;
+
+@@ -1178,6 +1178,7 @@
+ }
+ break;
+ case ConfigureNotify:
++ DBG("ConfigureNotify %i,%i", xev.xconfigure.width, xev.xconfigure.height);
+ if (xev.xconfigure.window == ui->xwin
+ && (xev.xconfigure.width != ui->xwin_width
+ || xev.xconfigure.height != ui->xwin_height))
+diff -r b010d54a6c50 -r 38c3459f2e1a src/matchbox-keyboard.h
+--- a/src/matchbox-keyboard.h Mon Apr 09 00:06:34 2007 +0000
++++ b/src/matchbox-keyboard.h Mon Apr 09 00:08:07 2007 +0000
+@@ -48,6 +48,7 @@
+ #include "config.h"
+ #endif
+
++#define WANT_DEBUG 1
+ #if (WANT_DEBUG)
+ #define DBG(x, a...) \
+ fprintf (stderr, __FILE__ ":%d,%s() " x "\n", __LINE__, __func__, ##a)
diff --git a/recipes/matchbox-keyboard/files/5-Add-support-for-loading-multiple-independent-layouts.patch b/recipes/matchbox-keyboard/files/5-Add-support-for-loading-multiple-independent-layouts.patch
new file mode 100644
index 0000000000..1480591930
--- /dev/null
+++ b/recipes/matchbox-keyboard/files/5-Add-support-for-loading-multiple-independent-layouts.patch
@@ -0,0 +1,197 @@
+# HG changeset patch
+# User pfalcon@localhost
+# Date 1181567228 0
+# Node ID 869314ae90f46a8c2d34080005d4079cb0d0fcf4
+# Parent 38c3459f2e1a1c8dc7aacb486f201bdda638c7f2
+Add support for loading multiple independent layouts.
+All layouts found in ~/.matchbox/keyboard.d/ are loaded, realistically
+these will be symlinks to system-wide store. This directory has the highest
+priority of all other layout selection mechanism (except for
+$MB_KBD_CONFIG).
+
+diff -r 38c3459f2e1a -r 869314ae90f4 src/config-parser.c
+--- a/src/config-parser.c Mon Apr 09 00:08:07 2007 +0000
++++ b/src/config-parser.c Mon Jun 11 13:07:08 2007 +0000
+@@ -17,6 +17,7 @@
+ *
+ */
+
++#include <dirent.h>
+ #include "matchbox-keyboard.h"
+
+ /*
+@@ -57,6 +58,9 @@
+
+ </keyboard>
+ */
++
++int mb_kbd_config_parse_file(MBKeyboard *kbd, char *path);
++static int mb_kbd_config_parse_data(MBKeyboard *kbd, char *data);
+
+ struct _keysymlookup
+ {
+@@ -170,12 +174,9 @@ config_str_to_modtype(const char* str)
+ }
+
+
+-static char*
+-config_load_file(MBKeyboard *kbd, char *variant_in)
+-{
+- struct stat stat_info;
+- FILE* fp;
+- char *result;
++int
++mb_kbd_config_load(MBKeyboard *kbd, char *variant_in)
++{
+ char *country = NULL;
+ char *variant = NULL;
+ char *lang = NULL;
+@@ -195,7 +196,44 @@ config_load_file(MBKeyboard *kbd, char *
+ if (util_file_readable(path))
+ goto load;
+
+- return NULL;
++ return 0;
++ }
++
++ if (getenv("HOME"))
++ {
++ snprintf(path, 1024, "%s/.matchbox/keyboard.d", getenv("HOME"));
++
++ DBG("checking %s\n", path);
++
++ if (util_file_readable(path))
++ {
++ DIR *dir = opendir(path);
++ struct dirent *dirent;
++ if (!dir)
++ {
++ perror("matchbox-keyboard");
++ util_fatal_error("Cannot read keyboard.d.\n");
++ }
++ errno = 0;
++ while ((dirent = readdir(dir)))
++ {
++ if (dirent->d_name[0] == '.')
++ continue;
++ snprintf(path, 1024, "%s/.matchbox/keyboard.d/%s", getenv("HOME"), dirent->d_name);
++ if (!mb_kbd_config_parse_file(kbd, path))
++ {
++ util_fatal_error("Cannot read file in keyboard.d.\n");
++ }
++
++ }
++ if (errno)
++ {
++ perror("matchbox-keyboard");
++ util_fatal_error("Error reading keyboard.d.\n");
++ }
++ closedir(dir);
++ return 1;
++ }
+ }
+
+ lang = getenv("MB_KBD_LANG");
+@@ -268,29 +306,11 @@ config_load_file(MBKeyboard *kbd, char *
+ DBG("checking %s\n", path);
+
+ if (!util_file_readable(path))
+- return NULL;
++ return 0;
+
+ load:
+
+- if (stat(path, &stat_info))
+- return NULL;
+-
+- if ((fp = fopen(path, "rb")) == NULL)
+- return NULL;
+-
+- DBG("loading %s\n", path);
+-
+- kbd->config_file = strdup(path);
+-
+- result = malloc(stat_info.st_size + 1);
+-
+- n = fread(result, 1, stat_info.st_size, fp);
+-
+- if (n >= 0) result[n] = '\0';
+-
+- fclose(fp);
+-
+- return result;
++ return mb_kbd_config_parse_file(kbd, path);
+ }
+
+ static const char *
+@@ -567,25 +587,48 @@ config_xml_start_cb(void *data, const ch
+
+
+ int
+-mb_kbd_config_load(MBKeyboard *kbd, char *variant)
+-{
+- char *data;
++mb_kbd_config_parse_file(MBKeyboard *kbd, char *path)
++{
++ char *buffer;
++ struct stat stat_info;
++ FILE* fp;
++ int n;
++
++ if (stat(path, &stat_info))
++ return 0;
++
++ if ((fp = fopen(path, "rb")) == NULL)
++ return 0;
++
++ DBG("loading %s\n", path);
++
++ kbd->config_file = strdup(path);
++
++ buffer = malloc(stat_info.st_size + 1);
++
++ n = fread(buffer, 1, stat_info.st_size, fp);
++
++ if (n >= 0) buffer[n] = '\0';
++
++ fclose(fp);
++
++ mb_kbd_config_parse_data(kbd, buffer);
++
++ free(buffer);
++
++ return 1;
++}
++
++static int
++mb_kbd_config_parse_data(MBKeyboard *kbd, char *data)
++{
+ XML_Parser p;
+ MBKeyboardConfigState *state;
+
+- if ((data = config_load_file(kbd, variant)) == NULL)
+- util_fatal_error("Couldn't find a keyboard config file\n");
+-
+ p = XML_ParserCreate(NULL);
+
+ if (!p)
+ util_fatal_error("Couldn't allocate memory for XML parser\n");
+-
+- if (variant && !strstr(kbd->config_file, variant))
+- fprintf(stderr,
+- "matchbox-keyboard: *Warning* Unable to locate variant: %s\n"
+- " falling back to %s\n",
+- variant, kbd->config_file);
+
+ state = util_malloc0(sizeof(MBKeyboardConfigState));
+
+@@ -607,6 +650,9 @@ mb_kbd_config_load(MBKeyboard *kbd, char
+ util_fatal_error("XML Parse failed.\n");
+ }
+
++ free(state);
++ XML_ParserFree(p);
++
+ return 1;
+ }
+
diff --git a/recipes/matchbox-keyboard/files/6-Add-layout-switch-key-to-all-layouts.patch b/recipes/matchbox-keyboard/files/6-Add-layout-switch-key-to-all-layouts.patch
new file mode 100644
index 0000000000..c2cf4d62dd
--- /dev/null
+++ b/recipes/matchbox-keyboard/files/6-Add-layout-switch-key-to-all-layouts.patch
@@ -0,0 +1,111 @@
+# HG changeset patch
+# User pfalcon@localhost
+# Date 1181568553 0
+# Node ID edc3fd8303a394bccadde2f427ab25ebda4fcbc8
+# Parent 869314ae90f46a8c2d34080005d4079cb0d0fcf4
+Add layout switch key to all layouts.
+
+diff -r 869314ae90f4 -r edc3fd8303a3 layouts/keyboard-dvorak.xml
+--- a/layouts/keyboard-dvorak.xml Mon Jun 11 13:07:08 2007 +0000
++++ b/layouts/keyboard-dvorak.xml Mon Jun 11 13:29:13 2007 +0000
+@@ -271,6 +271,10 @@ Contributed by Leon Matthews http://www.
+ <!-- Bottom Row -->
+ <row>
+ <space width="500" extended="true"/>
++ <key>
++ <default display="[->]" action="modifier:layout"/>
++ </key>
++
+ <key>
+ <default display="äëö" action="modifier:mod1"/>
+ </key>
+diff -r 869314ae90f4 -r edc3fd8303a3 layouts/keyboard-extended.xml
+--- a/layouts/keyboard-extended.xml Mon Jun 11 13:07:08 2007 +0000
++++ b/layouts/keyboard-extended.xml Mon Jun 11 13:29:13 2007 +0000
+@@ -304,6 +304,10 @@
+ </row>
+ <row>
+ <key>
++ <default display="[->]" action="modifier:layout"/>
++ </key>
++
++ <key>
+ <default display="aeo" action="modifier:mod1"/>
+ </key>
+
+diff -r 869314ae90f4 -r edc3fd8303a3 layouts/keyboard-fi.xml
+--- a/layouts/keyboard-fi.xml Mon Jun 11 13:07:08 2007 +0000
++++ b/layouts/keyboard-fi.xml Mon Jun 11 13:29:13 2007 +0000
+@@ -329,6 +329,10 @@
+ <space width="500" extended="true"/>
+
+
++ <key>
++ <default display="[->]" action="modifier:layout"/>
++ </key>
++
+ <key fill="true">
+ <default display="Ctrl" action="modifier:ctrl"/>
+ </key>
+diff -r 869314ae90f4 -r edc3fd8303a3 layouts/keyboard-numpad.xml
+--- a/layouts/keyboard-numpad.xml Mon Jun 11 13:07:08 2007 +0000
++++ b/layouts/keyboard-numpad.xml Mon Jun 11 13:29:13 2007 +0000
+@@ -54,6 +54,13 @@
+ </key>
+ </row>
+
++ <row>
++ <key>
++ <default display="[->]" action="modifier:layout"/>
++ </key>
++ </row>
++
++
+ </layout>
+
+
+diff -r 869314ae90f4 -r edc3fd8303a3 layouts/keyboard-ru.xml
+--- a/layouts/keyboard-ru.xml Mon Jun 11 13:07:08 2007 +0000
++++ b/layouts/keyboard-ru.xml Mon Jun 11 13:29:13 2007 +0000
+@@ -302,10 +302,10 @@
+ <space width="500" extended="true"/>
+
+ <key>
++ <default display="[->]" action="modifier:layout"/>
++ </key>
++ <key>
+ <default display="äëö" action="modifier:mod1"/>
+- </key>
+- <key>
+- <default display="EN" action="modifier:mod2"/>
+ </key>
+
+ <key fill="true">
+diff -r 869314ae90f4 -r edc3fd8303a3 layouts/keyboard-us.xml
+--- a/layouts/keyboard-us.xml Mon Jun 11 13:07:08 2007 +0000
++++ b/layouts/keyboard-us.xml Mon Jun 11 13:29:13 2007 +0000
+@@ -326,6 +326,10 @@
+ <space width="500" extended="true"/>
+
+ <key>
++ <default display="[->]" action="modifier:layout"/>
++ </key>
++
++ <key>
+ <default display="äëö" action="modifier:mod1"/>
+ </key>
+
+diff -r 869314ae90f4 -r edc3fd8303a3 layouts/keyboard.xml
+--- a/layouts/keyboard.xml Mon Jun 11 13:07:08 2007 +0000
++++ b/layouts/keyboard.xml Mon Jun 11 13:29:13 2007 +0000
+@@ -324,6 +324,10 @@
+ <space width="500" extended="true"/>
+
+ <key>
++ <default display="[->]" action="modifier:layout"/>
++ </key>
++
++ <key>
+ <default display="äëö" action="modifier:mod1"/>
+ </key>
+
diff --git a/recipes/matchbox-keyboard/files/80matchboxkeyboard b/recipes/matchbox-keyboard/files/80matchboxkeyboard
new file mode 100644
index 0000000000..a30ddb01ad
--- /dev/null
+++ b/recipes/matchbox-keyboard/files/80matchboxkeyboard
@@ -0,0 +1,20 @@
+#!/bin/sh
+
+CMD=""
+
+if [ "$DISPLAY_CAN_ROTATE" = "1" ]; then
+ if [ "$HAVE_KEYBOARD_PORTRAIT" = "1" -a "$HAVE_KEYBOARD_LANDSCAPE" = "0" ]; then
+ CMD="matchbox-keyboard -d -o landscape"
+ elif [ "$HAVE_KEYBOARD_LANDSCAPE" = "1" -a "$HAVE_KEYBOARD_PORTRAIT" = "0" ]; then
+ CMD="matchbox-keyboard -d -o portrait"
+ fi
+else
+ CMD="matchbox-keyboard -d"
+fi
+
+
+# Delay to make sure the window manager is active
+
+if [ "$CMD" ]; then
+ (sleep 2 && $CMD) &
+fi
diff --git a/recipes/matchbox-keyboard/files/fic-gta01-font-size.patch b/recipes/matchbox-keyboard/files/fic-gta01-font-size.patch
new file mode 100644
index 0000000000..c25aa74ca4
--- /dev/null
+++ b/recipes/matchbox-keyboard/files/fic-gta01-font-size.patch
@@ -0,0 +1,13 @@
+Index: matchbox-keyboard/src/matchbox-keyboard.c
+===================================================================
+--- matchbox-keyboard.orig/src/matchbox-keyboard.c
++++ matchbox-keyboard/src/matchbox-keyboard.c
+@@ -54,7 +54,7 @@
+ kb->row_spacing = 5;
+
+ kb->font_family = strdup("sans");
+- kb->font_pt_size = 6;
++ kb->font_pt_size = 3;
+ kb->font_variant = strdup("bold");
+
+ for (i = 1; i < argc; i++)
diff --git a/recipes/matchbox-keyboard/files/matchbox-keyboard-applet.patch b/recipes/matchbox-keyboard/files/matchbox-keyboard-applet.patch
new file mode 100644
index 0000000000..29dc9c0ab6
--- /dev/null
+++ b/recipes/matchbox-keyboard/files/matchbox-keyboard-applet.patch
@@ -0,0 +1,92 @@
+Index: applet/applet.c
+===================================================================
+--- applet/applet.c (revision 1633)
++++ applet/applet.c (working copy)
+@@ -1,30 +1,76 @@
++/*
++ * keyboard - Tray applet to toggle matchbox-keyboard's gtk-im
++ *
++ * Copyright 2007, Openedhand Ltd.
++ * Author Stefan Schmidt <stefan@openmoko.org>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; version 2 of the license.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ */
++
+ #include <gtk/gtk.h>
++#include <gtk/gtkeventbox.h>
+ #include <matchbox-panel/mb-panel.h>
+ #include <matchbox-panel/mb-panel-scaling-image.h>
+ #include <gtk-im/im-protocol.h>
+
++typedef struct {
++ GtkWidget *event_box;
++ gboolean show;
++} KeyboardApplet;
++
+ static void
+-on_toggled (GtkToggleButton *button)
++on_toggled (GtkWidget *event_box, GdkEventButton *event, KeyboardApplet *applet)
+ {
+- protocol_send_event (gtk_toggle_button_get_active (button) ?
+- INVOKE_KBD_SHOW : INVOKE_KBD_HIDE);
++
++ protocol_send_event (applet->show ? INVOKE_KBD_SHOW : INVOKE_KBD_HIDE);
++
++ if (applet->show)
++ applet->show = FALSE;
++ else
++ applet->show = TRUE;
+ }
+
++static void
++keyboard_applet_free (KeyboardApplet *applet)
++{
++ g_slice_free (KeyboardApplet, applet);
++}
++
+ G_MODULE_EXPORT GtkWidget *
+ mb_panel_applet_create (const char *id, GtkOrientation orientation)
+ {
+- GtkWidget *button, *image;
++ KeyboardApplet *applet;
++ MBPanelScalingImage *image;
++ //GtkImage *image;
+
+- button = gtk_toggle_button_new ();
+- gtk_widget_set_name (button, "MatchboxPanelKeyboard");
+- gtk_button_set_relief (GTK_BUTTON (button), GTK_RELIEF_NONE);
++ /* Create applet data structure */
++ applet = g_slice_new (KeyboardApplet);
+
++ applet->event_box = gtk_event_box_new ();
++ gtk_event_box_set_visible_window (applet->event_box, FALSE);
++
++ gtk_widget_set_name (applet->event_box, "MatchboxPanelKeyboard");
++
+ image = mb_panel_scaling_image_new (orientation, "matchbox-keyboard");
+- gtk_container_add (GTK_CONTAINER (button), image);
+
+- g_signal_connect (button, "toggled", G_CALLBACK (on_toggled), NULL);
++ gtk_container_add (GTK_CONTAINER (applet->event_box), image);
+
+- gtk_widget_show_all (button);
++ g_object_weak_ref (G_OBJECT (applet->event_box),
++ (GWeakNotify) keyboard_applet_free, applet);
+
+- return button;
++ /* Toggle the on release event */
++ g_signal_connect (applet->event_box, "button-release-event",
++ G_CALLBACK (on_toggled), applet);
++
++ gtk_widget_show_all (applet->event_box);
++
++ return applet->event_box;
+ }
diff --git a/recipes/matchbox-keyboard/files/matchbox-keyboard-hide-delay.patch b/recipes/matchbox-keyboard/files/matchbox-keyboard-hide-delay.patch
new file mode 100644
index 0000000000..c8cb76d99e
--- /dev/null
+++ b/recipes/matchbox-keyboard/files/matchbox-keyboard-hide-delay.patch
@@ -0,0 +1,99 @@
+Index: matchbox-keyboard/src/matchbox-keyboard.h
+===================================================================
+--- matchbox-keyboard/src/matchbox-keyboard.h (revision 1669)
++++ matchbox-keyboard/src/matchbox-keyboard.h (working copy)
+@@ -285,7 +285,7 @@
+ void
+ mb_kbd_remote_init (MBKeyboardUI *ui);
+
+-void
++int
+ mb_kbd_remote_process_xevents (MBKeyboardUI *ui, XEvent *xevent);
+
+ /**** Keyboard ****/
+Index: matchbox-keyboard/src/matchbox-keyboard-ui.c
+===================================================================
+--- matchbox-keyboard/src/matchbox-keyboard-ui.c (revision 1669)
++++ matchbox-keyboard/src/matchbox-keyboard-ui.c (working copy)
+@@ -1096,6 +1096,8 @@
+ /* Key repeat - values for standard xorg install ( xset q) */
+ int repeat_delay = 100 * 10000;
+ int repeat_rate = 30 * 1000;
++ int hide_delay = 100 * 1000;
++ int to_hide = 0;
+
+ int press_x = 0, press_y = 0;
+
+@@ -1182,11 +1184,42 @@
+ mb_kbd_xembed_process_xevents (ui, &xev);
+
+ if (ui->is_daemon)
+- mb_kbd_remote_process_xevents (ui, &xev);
+-
++ {
++ switch (mb_kbd_remote_process_xevents (ui, &xev))
++ {
++ case 0:
++ if (to_hide == 1) {
++ mb_kbd_ui_hide(ui);
++ }
++ tvt.tv_usec = hide_delay;
++ to_hide = 1;
++ break;
++ case 1:
++ mb_kbd_ui_show(ui);
++ tvt.tv_usec = repeat_delay;
++ to_hide = 0;
++ break;
++ default:
++ if (to_hide == 1) {
++ mb_kbd_ui_hide(ui);
++ tvt.tv_usec = repeat_delay;
++ to_hide = 0;
++ }
++ break;
++ }
++ }
+ }
+ else
+ {
++ /* Hide timed out */
++ if (to_hide == 1)
++ {
++ DBG("Hide timed out, calling mb_kbd_ui_hide");
++ mb_kbd_ui_hide(ui);
++ tvt.tv_usec = repeat_delay;
++ to_hide = 0;
++ }
++
+ /* Keyrepeat */
+ if (mb_kbd_get_held_key(ui->kbd) != NULL)
+ {
+Index: matchbox-keyboard/src/matchbox-keyboard-remote.c
+===================================================================
+--- matchbox-keyboard/src/matchbox-keyboard-remote.c (revision 1669)
++++ matchbox-keyboard/src/matchbox-keyboard-remote.c (working copy)
+@@ -28,7 +28,7 @@
+ "_MB_IM_INVOKER_COMMAND", False);
+ }
+
+-void
++int
+ mb_kbd_remote_process_xevents (MBKeyboardUI *ui, XEvent *xevent)
+ {
+ DBG("got a message\n");
+@@ -42,9 +42,12 @@
+ DBG("got a message of type _MB_IM_INVOKER_COMMAND, val %i\n",
+ xevent->xclient.data.l[0]);
+ if (xevent->xclient.data.l[0] == 1)
+- mb_kbd_ui_show (ui);
++ {
++ return 1;
++ }
+ else
+- mb_kbd_ui_hide (ui);
++ return 0;
+ }
+ }
++ return -1;
+ }
diff --git a/recipes/matchbox-keyboard/files/smallscreen-fontsize.patch b/recipes/matchbox-keyboard/files/smallscreen-fontsize.patch
new file mode 100644
index 0000000000..9a5f7a32a1
--- /dev/null
+++ b/recipes/matchbox-keyboard/files/smallscreen-fontsize.patch
@@ -0,0 +1,22 @@
+--- matchbox-keyboard-0.1/src/matchbox-keyboard.c.orig 2006-11-04 00:41:52.000000000 +0100
++++ matchbox-keyboard-0.1/src/matchbox-keyboard.c 2006-11-04 00:29:25.000000000 +0100
+@@ -77,7 +77,7 @@
+ kb->key_pad = 0;
+ kb->col_spacing = 0;
+ kb->row_spacing = 0;
+- kb->font_pt_size = 8;
++ kb->font_pt_size = 5;
+ }
+
+ if (!mb_kbd_config_load(kb, variant))
+--- matchbox-keyboard-0.1/src/matchbox-keyboard-ui.c.org 2006-07-14 00:50:25.000000000 +0000
++++ matchbox-keyboard-0.1/src/matchbox-keyboard-ui.c 2007-02-09 17:38:19.000000000 +0000
+@@ -291,7 +291,7 @@
+ /* FIXME: hack for small displays */
+ if (mb_kbd_ui_display_height(ui) <= 320)
+ {
+- *height += 4;
++ *height += 1;
+ }
+
+ }