Package: gtetrinet
Version: 0.7.11
Severity: wishlist
Tags: patch

I would like to be able to use an alternate method for changing rotation and
selecting the drop column for gtetrinet. This would have three actions per drop,
each requiring a single keypress:
1) rotate piece to desired rotation
2) move piece to desired column
3) drop piece

Such an input method reduces the number of keypresses required to put pieces
into the ideal location, making the game a bit faster (although this alternative
method needs a fair amount of training to get used to).

I have attached a patch that does this. There are now 13 new keys that can be
configured:

* Rotate piece 180 degrees
* Move piece 0-5 blocks away from left wall (i.e. 6 keys)
* Move piece 0-5 blocks away from right wall (i.e. 6 keys)

The 180 degrees rotation is implemented as two left rotations, the move away
from walls are implemented as a twelve step shift to the respective wall, then
the required number of movements in the opposite direction, i.e. leftwall4: move
left 12, then right 4. In other words, the new keys are merely macros for
particular key sequences. This means that if there is a tall barrier in the
middle and the piece is going down one side, it can't jump over the barrier
(which should be impossible).
diff -ur gtetrinet-0.7.11/src/config.c gtetrinet-0.7.11-new/src/config.c
--- gtetrinet-0.7.11/src/config.c       2006-11-04 01:49:49.000000000 +1300
+++ gtetrinet-0.7.11-new/src/config.c   2009-12-31 18:29:29.000000000 +1300
@@ -62,6 +62,7 @@
     GDK_Right,
     GDK_Left,
     GDK_Up,
+    GDK_x,
     GDK_Control_R,
     GDK_Down,
     GDK_space,
@@ -72,7 +73,19 @@
     GDK_3,
     GDK_4,
     GDK_5,
-    GDK_6
+    GDK_6,
+    GDK_y,
+    GDK_h,
+    GDK_n,
+    GDK_u,
+    GDK_j,
+    GDK_m,
+    GDK_i,
+    GDK_k,
+    GDK_comma,
+    GDK_o,
+    GDK_l,
+    GDK_period,
 };
 
 guint keys[K_NUM];
@@ -268,6 +281,15 @@
     else
       keys[K_ROTRIGHT] = defaultkeys[K_ROTRIGHT];
 
+    p = gconf_client_get_string (gconf_client, 
"/apps/gtetrinet/keys/rotate_up", NULL);
+    if (p)
+    {
+      keys[K_ROTUP] = gdk_keyval_to_lower (gdk_keyval_from_name (p));
+      g_free (p);
+    }
+    else
+      keys[K_ROTUP] = defaultkeys[K_ROTUP];
+
     p = gconf_client_get_string (gconf_client, 
"/apps/gtetrinet/keys/rotate_left", NULL);
     if (p)
     {
@@ -368,6 +390,114 @@
       keys[K_SPECIAL6] = defaultkeys[K_SPECIAL6];
 
 
+    p = gconf_client_get_string (gconf_client, 
"/apps/gtetrinet/keys/leftwall0", NULL);
+    if (p)
+    {
+      keys[K_L0] = gdk_keyval_to_lower (gdk_keyval_from_name (p));
+      g_free (p);
+    }
+    else
+      keys[K_L0] = defaultkeys[K_L0];
+
+    p = gconf_client_get_string (gconf_client, 
"/apps/gtetrinet/keys/leftwall1", NULL);
+    if (p)
+    {
+      keys[K_L1] = gdk_keyval_to_lower (gdk_keyval_from_name (p));
+      g_free (p);
+    }
+    else
+      keys[K_L1] = defaultkeys[K_L1];
+
+    p = gconf_client_get_string (gconf_client, 
"/apps/gtetrinet/keys/leftwall2", NULL);
+    if (p)
+    {
+      keys[K_L2] = gdk_keyval_to_lower (gdk_keyval_from_name (p));
+      g_free (p);
+    }
+    else
+      keys[K_L2] = defaultkeys[K_L2];
+
+    p = gconf_client_get_string (gconf_client, 
"/apps/gtetrinet/keys/leftwall3", NULL);
+    if (p)
+    {
+      keys[K_L3] = gdk_keyval_to_lower (gdk_keyval_from_name (p));
+      g_free (p);
+    }
+    else
+      keys[K_L3] = defaultkeys[K_L3];
+
+    p = gconf_client_get_string (gconf_client, 
"/apps/gtetrinet/keys/leftwall4", NULL);
+    if (p)
+    {
+      keys[K_L4] = gdk_keyval_to_lower (gdk_keyval_from_name (p));
+      g_free (p);
+    }
+    else
+      keys[K_L4] = defaultkeys[K_L4];
+
+    p = gconf_client_get_string (gconf_client, 
"/apps/gtetrinet/keys/leftwall5", NULL);
+    if (p)
+    {
+      keys[K_L5] = gdk_keyval_to_lower (gdk_keyval_from_name (p));
+      g_free (p);
+    }
+    else
+      keys[K_L5] = defaultkeys[K_L5];
+
+    p = gconf_client_get_string (gconf_client, 
"/apps/gtetrinet/keys/rightwall0", NULL);
+    if (p)
+    {
+      keys[K_R0] = gdk_keyval_to_lower (gdk_keyval_from_name (p));
+      g_free (p);
+    }
+    else
+      keys[K_R0] = defaultkeys[K_R0];
+
+    p = gconf_client_get_string (gconf_client, 
"/apps/gtetrinet/keys/rightwall1", NULL);
+    if (p)
+    {
+      keys[K_R1] = gdk_keyval_to_lower (gdk_keyval_from_name (p));
+      g_free (p);
+    }
+    else
+      keys[K_R1] = defaultkeys[K_R1];
+
+    p = gconf_client_get_string (gconf_client, 
"/apps/gtetrinet/keys/rightwall2", NULL);
+    if (p)
+    {
+      keys[K_R2] = gdk_keyval_to_lower (gdk_keyval_from_name (p));
+      g_free (p);
+    }
+    else
+      keys[K_R2] = defaultkeys[K_R2];
+
+    p = gconf_client_get_string (gconf_client, 
"/apps/gtetrinet/keys/rightwall3", NULL);
+    if (p)
+    {
+      keys[K_R3] = gdk_keyval_to_lower (gdk_keyval_from_name (p));
+      g_free (p);
+    }
+    else
+      keys[K_R3] = defaultkeys[K_R3];
+
+    p = gconf_client_get_string (gconf_client, 
"/apps/gtetrinet/keys/rightwall4", NULL);
+    if (p)
+    {
+      keys[K_R4] = gdk_keyval_to_lower (gdk_keyval_from_name (p));
+      g_free (p);
+    }
+    else
+      keys[K_R4] = defaultkeys[K_R4];
+
+    p = gconf_client_get_string (gconf_client, 
"/apps/gtetrinet/keys/rightwall5", NULL);
+    if (p)
+    {
+      keys[K_R5] = gdk_keyval_to_lower (gdk_keyval_from_name (p));
+      g_free (p);
+    }
+    else
+      keys[K_R5] = defaultkeys[K_R5];
+
     /* Get the timestamp option. */
     timestampsenable = gconf_client_get_bool (gconf_client, 
"/apps/gtetrinet/partyline/enable_timestamps", NULL);
 
@@ -517,6 +647,18 @@
 }
 
 void
+keys_rotate_up_changed (GConfClient *client,
+                        guint cnxn_id,
+                        GConfEntry *entry)
+{
+
+  client = client;     /* Suppress compile warnings */
+  cnxn_id = cnxn_id;   /* Suppress compile warnings */
+
+  keys[K_ROTUP] = gdk_keyval_to_lower (gdk_keyval_from_name 
(gconf_value_get_string (gconf_entry_get_value (entry))));
+}
+
+void
 keys_rotate_right_changed (GConfClient *client,
                            guint cnxn_id,
                            GConfEntry *entry)
@@ -625,6 +767,150 @@
 }
 
 void
+keys_leftwall0_changed (GConfClient *client,
+                       guint cnxn_id,
+                       GConfEntry *entry)
+{
+
+  client = client;
+  cnxn_id = cnxn_id;
+
+  keys[K_L0] = gdk_keyval_to_lower (gdk_keyval_from_name 
(gconf_value_get_string (gconf_entry_get_value (entry))));
+}
+
+void
+keys_leftwall1_changed (GConfClient *client,
+                       guint cnxn_id,
+                       GConfEntry *entry)
+{
+
+  client = client;
+  cnxn_id = cnxn_id;
+
+  keys[K_L1] = gdk_keyval_to_lower (gdk_keyval_from_name 
(gconf_value_get_string (gconf_entry_get_value (entry))));
+}
+
+void
+keys_leftwall2_changed (GConfClient *client,
+                       guint cnxn_id,
+                       GConfEntry *entry)
+{
+
+  client = client;
+  cnxn_id = cnxn_id;
+
+  keys[K_L2] = gdk_keyval_to_lower (gdk_keyval_from_name 
(gconf_value_get_string (gconf_entry_get_value (entry))));
+}
+
+void
+keys_leftwall3_changed (GConfClient *client,
+                       guint cnxn_id,
+                       GConfEntry *entry)
+{
+
+  client = client;
+  cnxn_id = cnxn_id;
+
+  keys[K_L3] = gdk_keyval_to_lower (gdk_keyval_from_name 
(gconf_value_get_string (gconf_entry_get_value (entry))));
+}
+
+void
+keys_leftwall4_changed (GConfClient *client,
+                       guint cnxn_id,
+                       GConfEntry *entry)
+{
+
+  client = client;
+  cnxn_id = cnxn_id;
+
+  keys[K_L4] = gdk_keyval_to_lower (gdk_keyval_from_name 
(gconf_value_get_string (gconf_entry_get_value (entry))));
+}
+
+void
+keys_leftwall5_changed (GConfClient *client,
+                       guint cnxn_id,
+                       GConfEntry *entry)
+{
+
+  client = client;
+  cnxn_id = cnxn_id;
+
+  keys[K_L5] = gdk_keyval_to_lower (gdk_keyval_from_name 
(gconf_value_get_string (gconf_entry_get_value (entry))));
+}
+
+void
+keys_rightwall0_changed (GConfClient *client,
+                       guint cnxn_id,
+                       GConfEntry *entry)
+{
+
+  client = client;
+  cnxn_id = cnxn_id;
+
+  keys[K_R0] = gdk_keyval_to_lower (gdk_keyval_from_name 
(gconf_value_get_string (gconf_entry_get_value (entry))));
+}
+
+void
+keys_rightwall1_changed (GConfClient *client,
+                       guint cnxn_id,
+                       GConfEntry *entry)
+{
+
+  client = client;
+  cnxn_id = cnxn_id;
+
+  keys[K_R1] = gdk_keyval_to_lower (gdk_keyval_from_name 
(gconf_value_get_string (gconf_entry_get_value (entry))));
+}
+
+void
+keys_rightwall2_changed (GConfClient *client,
+                       guint cnxn_id,
+                       GConfEntry *entry)
+{
+
+  client = client;
+  cnxn_id = cnxn_id;
+
+  keys[K_R2] = gdk_keyval_to_lower (gdk_keyval_from_name 
(gconf_value_get_string (gconf_entry_get_value (entry))));
+}
+
+void
+keys_rightwall3_changed (GConfClient *client,
+                       guint cnxn_id,
+                       GConfEntry *entry)
+{
+
+  client = client;
+  cnxn_id = cnxn_id;
+
+  keys[K_R3] = gdk_keyval_to_lower (gdk_keyval_from_name 
(gconf_value_get_string (gconf_entry_get_value (entry))));
+}
+
+void
+keys_rightwall4_changed (GConfClient *client,
+                       guint cnxn_id,
+                       GConfEntry *entry)
+{
+
+  client = client;
+  cnxn_id = cnxn_id;
+
+  keys[K_R4] = gdk_keyval_to_lower (gdk_keyval_from_name 
(gconf_value_get_string (gconf_entry_get_value (entry))));
+}
+
+void
+keys_rightwall5_changed (GConfClient *client,
+                       guint cnxn_id,
+                       GConfEntry *entry)
+{
+
+  client = client;
+  cnxn_id = cnxn_id;
+
+  keys[K_R5] = gdk_keyval_to_lower (gdk_keyval_from_name 
(gconf_value_get_string (gconf_entry_get_value (entry))));
+}
+
+void
 partyline_enable_timestamps_changed (GConfClient *client,
                                      guint cnxn_id,
                                      GConfEntry *entry)
diff -ur gtetrinet-0.7.11/src/config.h gtetrinet-0.7.11-new/src/config.h
--- gtetrinet-0.7.11/src/config.h       2005-03-19 10:19:17.000000000 +1300
+++ gtetrinet-0.7.11-new/src/config.h   2009-12-31 18:27:40.000000000 +1300
@@ -57,6 +57,11 @@
                           GConfEntry *entry);
 
 void
+keys_rotate_up_changed (GConfClient *client,
+                          guint cnxn_id,
+                          GConfEntry *entry);
+
+void
 keys_rotate_right_changed (GConfClient *client,
                            guint cnxn_id,
                            GConfEntry *entry);
@@ -102,6 +107,66 @@
                    GConfEntry *entry);
 
 void
+keys_leftwall0_changed (GConfClient *client,
+                   guint cnxn_id,
+                   GConfEntry *entry);
+
+void
+keys_leftwall1_changed (GConfClient *client,
+                   guint cnxn_id,
+                   GConfEntry *entry);
+
+void
+keys_leftwall2_changed (GConfClient *client,
+                   guint cnxn_id,
+                   GConfEntry *entry);
+
+void
+keys_leftwall3_changed (GConfClient *client,
+                   guint cnxn_id,
+                   GConfEntry *entry);
+
+void
+keys_leftwall4_changed (GConfClient *client,
+                   guint cnxn_id,
+                   GConfEntry *entry);
+
+void
+keys_leftwall5_changed (GConfClient *client,
+                   guint cnxn_id,
+                   GConfEntry *entry);
+
+void
+keys_rightwall0_changed (GConfClient *client,
+                   guint cnxn_id,
+                   GConfEntry *entry);
+
+void
+keys_rightwall1_changed (GConfClient *client,
+                   guint cnxn_id,
+                   GConfEntry *entry);
+
+void
+keys_rightwall2_changed (GConfClient *client,
+                   guint cnxn_id,
+                   GConfEntry *entry);
+
+void
+keys_rightwall3_changed (GConfClient *client,
+                   guint cnxn_id,
+                   GConfEntry *entry);
+
+void
+keys_rightwall4_changed (GConfClient *client,
+                   guint cnxn_id,
+                   GConfEntry *entry);
+
+void
+keys_rightwall5_changed (GConfClient *client,
+                   guint cnxn_id,
+                   GConfEntry *entry);
+
+void
 partyline_enable_timestamps_changed (GConfClient *client,
                                      guint cnxn_id,
                                      GConfEntry *entry);
@@ -118,8 +183,9 @@
 typedef enum
 {
   K_RIGHT, 
-  K_LEFT, 
+  K_LEFT,
   K_ROTRIGHT, 
+  K_ROTUP,
   K_ROTLEFT,
   K_DOWN,
   K_DROP,
@@ -131,6 +197,18 @@
   K_SPECIAL4,
   K_SPECIAL5,
   K_SPECIAL6,
+  K_L0,
+  K_L1,
+  K_L2,
+  K_L3,
+  K_L4,
+  K_L5,
+  K_R5,
+  K_R4,
+  K_R3,
+  K_R2,
+  K_R1,
+  K_R0,
 /* not a key but the number of configurable keys */
   K_NUM
 } GTetrinetKeys;
diff -ur gtetrinet-0.7.11/src/dialogs.c gtetrinet-0.7.11-new/src/dialogs.c
--- gtetrinet-0.7.11/src/dialogs.c      2006-11-04 01:49:49.000000000 +1300
+++ gtetrinet-0.7.11-new/src/dialogs.c  2009-12-31 18:02:02.000000000 +1300
@@ -538,6 +538,7 @@
     actions[K_LEFT]     = _("Move left");
     actions[K_DOWN]     = _("Move down");
     actions[K_ROTRIGHT] = _("Rotate right");
+    actions[K_ROTUP] = _("Rotate 180");
     actions[K_ROTLEFT]  = _("Rotate left");
     actions[K_DROP]     = _("Drop piece");
     actions[K_DISCARD]  = _("Discard special");
@@ -548,11 +549,24 @@
     actions[K_SPECIAL4] = _("Special to field 4");
     actions[K_SPECIAL5] = _("Special to field 5");
     actions[K_SPECIAL6] = _("Special to field 6");
+    actions[K_L0] = _("Move to left wall");
+    actions[K_L1] = _("Move 1 away from left wall");
+    actions[K_L2] = _("Move 2 away from left wall");
+    actions[K_L3] = _("Move 3 away from left wall");
+    actions[K_L4] = _("Move 4 away from left wall");
+    actions[K_L5] = _("Move 5 away from left wall");
+    actions[K_R0] = _("Move to right wall");
+    actions[K_R1] = _("Move 1 away from right wall");
+    actions[K_R2] = _("Move 2 away from right wall");
+    actions[K_R3] = _("Move 3 away from right wall");
+    actions[K_R4] = _("Move 4 away from right wall");
+    actions[K_R5] = _("Move 5 away from right wall");
   
     gconf_keys[K_RIGHT]    = g_strdup ("/apps/gtetrinet/keys/right");
     gconf_keys[K_LEFT]     = g_strdup ("/apps/gtetrinet/keys/left");
     gconf_keys[K_DOWN]     = g_strdup ("/apps/gtetrinet/keys/down");
     gconf_keys[K_ROTRIGHT] = g_strdup ("/apps/gtetrinet/keys/rotate_right");
+    gconf_keys[K_ROTUP] = g_strdup ("/apps/gtetrinet/keys/rotate_up");
     gconf_keys[K_ROTLEFT]  = g_strdup ("/apps/gtetrinet/keys/rotate_left");
     gconf_keys[K_DROP]     = g_strdup ("/apps/gtetrinet/keys/drop");
     gconf_keys[K_DISCARD]  = g_strdup ("/apps/gtetrinet/keys/discard");
@@ -563,6 +577,18 @@
     gconf_keys[K_SPECIAL4] = g_strdup ("/apps/gtetrinet/keys/special4");
     gconf_keys[K_SPECIAL5] = g_strdup ("/apps/gtetrinet/keys/special5");
     gconf_keys[K_SPECIAL6] = g_strdup ("/apps/gtetrinet/keys/special6");
+    gconf_keys[K_L0] = g_strdup ("/apps/gtetrinet/keys/leftwall0");
+    gconf_keys[K_L1] = g_strdup ("/apps/gtetrinet/keys/leftwall1");
+    gconf_keys[K_L2] = g_strdup ("/apps/gtetrinet/keys/leftwall2");
+    gconf_keys[K_L3] = g_strdup ("/apps/gtetrinet/keys/leftwall3");
+    gconf_keys[K_L4] = g_strdup ("/apps/gtetrinet/keys/leftwall4");
+    gconf_keys[K_L5] = g_strdup ("/apps/gtetrinet/keys/leftwall5");
+    gconf_keys[K_R0] = g_strdup ("/apps/gtetrinet/keys/rightwall0");
+    gconf_keys[K_R1] = g_strdup ("/apps/gtetrinet/keys/rightwall1");
+    gconf_keys[K_R2] = g_strdup ("/apps/gtetrinet/keys/rightwall2");
+    gconf_keys[K_R3] = g_strdup ("/apps/gtetrinet/keys/rightwall3");
+    gconf_keys[K_R4] = g_strdup ("/apps/gtetrinet/keys/rightwall4");
+    gconf_keys[K_R5] = g_strdup ("/apps/gtetrinet/keys/rightwall5");
 
     for (i = 0; i < K_NUM; i ++) {
         gtk_list_store_append (keys_store, &iter);
diff -ur gtetrinet-0.7.11/src/gtetrinet.c gtetrinet-0.7.11-new/src/gtetrinet.c
--- gtetrinet-0.7.11/src/gtetrinet.c    2005-03-19 10:19:18.000000000 +1300
+++ gtetrinet-0.7.11-new/src/gtetrinet.c        2009-12-31 18:14:27.000000000 
+1300
@@ -170,6 +170,10 @@
                              (GConfClientNotifyFunc) keys_rotate_left_changed,
                             NULL, NULL, NULL);
 
+    gconf_client_notify_add (gconf_client, "/apps/gtetrinet/keys/rotate_up",
+                             (GConfClientNotifyFunc) keys_rotate_up_changed,
+                            NULL, NULL, NULL);
+
     gconf_client_notify_add (gconf_client, "/apps/gtetrinet/keys/rotate_right",
                              (GConfClientNotifyFunc) keys_rotate_right_changed,
                             NULL, NULL, NULL);
@@ -210,6 +214,54 @@
                              (GConfClientNotifyFunc) keys_special6_changed,
                             NULL, NULL, NULL);
 
+    gconf_client_notify_add (gconf_client, "/apps/gtetrinet/keys/leftwall0",
+                             (GConfClientNotifyFunc) keys_leftwall0_changed,
+                            NULL, NULL, NULL);
+
+    gconf_client_notify_add (gconf_client, "/apps/gtetrinet/keys/leftwall1",
+                             (GConfClientNotifyFunc) keys_leftwall1_changed,
+                            NULL, NULL, NULL);
+
+    gconf_client_notify_add (gconf_client, "/apps/gtetrinet/keys/leftwall2",
+                             (GConfClientNotifyFunc) keys_leftwall2_changed,
+                            NULL, NULL, NULL);
+
+    gconf_client_notify_add (gconf_client, "/apps/gtetrinet/keys/leftwall3",
+                             (GConfClientNotifyFunc) keys_leftwall3_changed,
+                            NULL, NULL, NULL);
+
+    gconf_client_notify_add (gconf_client, "/apps/gtetrinet/keys/leftwall4",
+                             (GConfClientNotifyFunc) keys_leftwall4_changed,
+                            NULL, NULL, NULL);
+
+    gconf_client_notify_add (gconf_client, "/apps/gtetrinet/keys/leftwall5",
+                             (GConfClientNotifyFunc) keys_leftwall5_changed,
+                            NULL, NULL, NULL);
+
+    gconf_client_notify_add (gconf_client, "/apps/gtetrinet/keys/rightwall0",
+                             (GConfClientNotifyFunc) keys_rightwall0_changed,
+                            NULL, NULL, NULL);
+
+    gconf_client_notify_add (gconf_client, "/apps/gtetrinet/keys/rightwall1",
+                             (GConfClientNotifyFunc) keys_rightwall1_changed,
+                            NULL, NULL, NULL);
+
+    gconf_client_notify_add (gconf_client, "/apps/gtetrinet/keys/rightwall2",
+                             (GConfClientNotifyFunc) keys_rightwall2_changed,
+                            NULL, NULL, NULL);
+
+    gconf_client_notify_add (gconf_client, "/apps/gtetrinet/keys/rightwall3",
+                             (GConfClientNotifyFunc) keys_rightwall3_changed,
+                            NULL, NULL, NULL);
+
+    gconf_client_notify_add (gconf_client, "/apps/gtetrinet/keys/rightwall4",
+                             (GConfClientNotifyFunc) keys_rightwall4_changed,
+                            NULL, NULL, NULL);
+
+    gconf_client_notify_add (gconf_client, "/apps/gtetrinet/keys/rightwall5",
+                             (GConfClientNotifyFunc) keys_rightwall5_changed,
+                            NULL, NULL, NULL);
+
     gconf_client_notify_add (gconf_client, 
"/apps/gtetrinet/partyline/enable_timestamps",
                              (GConfClientNotifyFunc) 
partyline_enable_timestamps_changed,
                             NULL, NULL, NULL);
diff -ur gtetrinet-0.7.11/src/tetrinet.c gtetrinet-0.7.11-new/src/tetrinet.c
--- gtetrinet-0.7.11/src/tetrinet.c     2006-09-02 22:59:13.000000000 +1200
+++ gtetrinet-0.7.11-new/src/tetrinet.c 2009-12-31 19:01:07.000000000 +1300
@@ -1736,6 +1736,14 @@
         tetris_drawcurrentblock ();
         return TRUE;
     }
+    else if (gdk_keyval_to_lower (keyval) == keys[K_ROTUP]) {
+        if (!nextblocktimeout)
+            sound_playsound (S_ROTATE);
+        tetris_blockrotate (-1);
+        tetris_blockrotate (-1);
+        tetris_drawcurrentblock ();
+        return TRUE;
+    }
     else if (gdk_keyval_to_lower (keyval) == keys[K_ROTLEFT]) {
         if (!nextblocktimeout)
             sound_playsound (S_ROTATE);
@@ -1753,6 +1761,44 @@
         tetris_drawcurrentblock ();
         return TRUE;
     }
+    else if ((gdk_keyval_to_lower (keyval) >= keys[K_L0]) ||
+             (gdk_keyval_to_lower (keyval) >= keys[K_L1]) ||
+             (gdk_keyval_to_lower (keyval) >= keys[K_L2]) ||
+             (gdk_keyval_to_lower (keyval) >= keys[K_L3]) ||
+             (gdk_keyval_to_lower (keyval) >= keys[K_L4]) ||
+             (gdk_keyval_to_lower (keyval) >= keys[K_L5]) ||
+             (gdk_keyval_to_lower (keyval) >= keys[K_R5]) ||
+             (gdk_keyval_to_lower (keyval) >= keys[K_R4]) ||
+             (gdk_keyval_to_lower (keyval) >= keys[K_R3]) ||
+             (gdk_keyval_to_lower (keyval) >= keys[K_R2]) ||
+             (gdk_keyval_to_lower (keyval) >= keys[K_R1]) ||
+             (gdk_keyval_to_lower (keyval) >= keys[K_R0])){
+        int i, keypos, gkv;
+        gkv = gdk_keyval_to_lower (keyval);
+        for(i = K_L0; i <= K_R0; i++){
+            if(keys[i] == gkv){
+                keypos = i;
+            }
+        }
+        if(keypos <= K_L5){
+            for (i = 0; i < 12; i++){
+                tetris_blockmove (-1);
+            }
+            for (i = keypos; i > K_L0; i--){
+                tetris_blockmove (1);
+            }
+        }
+        else if(keypos > K_L5){
+            for (i = 0; i < 12; i++){
+                tetris_blockmove (1);
+            }
+            for (i = keypos; i < K_R0; i++){
+                tetris_blockmove (-1);
+            }
+        }
+        tetris_drawcurrentblock ();
+        return TRUE;
+    }
     else if (gdk_keyval_to_lower (keyval) == keys[K_DOWN]) {
         if (!downpressed) {
             tetrinet_timeout ();
  • Bug#563135: Alternate reduced-press input method fo... David Eccles (gringer)

Reply via email to