Hi,

I'm completely unsure of this patch and haven't had the change of testing it.

The desired behavior is to have a shit key that will alternate between shift, capslock and then normal state.

This would allow a caps lock in the Default.kbd without adding another virtual key.

I'm thinking of adding other special kinds of keys which will do things like "change layout to keyboard type fubar" (rather than just sliding up on the keyboard).

Specially to dh, am I going in the right direction with this patch?

Rui
Index: e_kbd_int.c
===================================================================
--- e_kbd_int.c (revision 57681)
+++ e_kbd_int.c (working copy)
@@ -174,6 +174,8 @@
        if ((ki->layout.state & CTRL) && (ky->is_ctrl)) selected = 1;
        if ((ki->layout.state & ALT) && (ky->is_alt)) selected = 1;
        if ((ki->layout.state & CAPSLOCK) && (ky->is_capslock)) selected = 1;
+       if ((ki->layout.state & SHIFT) && (ky->tern_shift)) selected = 1;
+       if ((ki->layout.state & CAPSLOCK) && (ky->tern_capslock)) selected = 1;
        if (selected)
          {
             if (!ky->selected)
@@ -351,6 +353,20 @@
        _e_kbd_int_layout_state_update(ki);
        return;
      }
+   if (ky->tern_shift)
+     {
+       if (ki->layout.state & SHIFT)
+          {
+             ki->layout.state &= (~(SHIFT));
+             ki->layout.state &= CAPSLOCK;
+          }
+       else if (ki->layout.state & CAPSLOCK)
+                ki->layout.state &= (~(CAPSLOCK));
+             else
+                ki->layout.state |= SHIFT;
+       _e_kbd_int_layout_state_update(ki);
+       return;
+     }
    if (ky->is_ctrl)
      {
        if (ki->layout.state & CTRL) ki->layout.state &= (~(CTRL));
@@ -574,6 +590,8 @@
        if ((ki->layout.state & CTRL) && (ky->is_ctrl)) selected = 1;
        if ((ki->layout.state & ALT) && (ky->is_alt)) selected = 1;
        if ((ki->layout.state & CAPSLOCK) && (ky->is_capslock)) selected = 1;
+       if ((ki->layout.state & SHIFT) && (ky->tern_shift)) selected = 1;
+       if ((ki->layout.state & CAPSLOCK) && (ky->tern_capslock)) selected = 1;
        if (selected)
          edje_object_signal_emit(o, "e,state,selected", "e");
        if (!selected)
@@ -997,6 +1015,7 @@
             st->out = eina_stringshare_add(str);
          }
        if (!strcmp(str, "is_shift")) ky->is_shift = 1;
+       if (!strcmp(str, "tern_shift")) ky->tern_shift = 1;
        if (!strcmp(str, "is_ctrl")) ky->is_ctrl = 1;
        if (!strcmp(str, "is_alt")) ky->is_alt = 1;
        if (!strcmp(str, "is_capslock")) ky->is_capslock = 1;
Index: e_kbd_int.h
===================================================================
--- e_kbd_int.h (revision 57681)
+++ e_kbd_int.h (working copy)
@@ -96,6 +96,7 @@
    unsigned char selected : 1;
    
    unsigned char is_shift : 1;
+   unsigned char tern_shift : 1;
    unsigned char is_ctrl : 1;
    unsigned char is_alt : 1;
    unsigned char is_capslock : 1;
------------------------------------------------------------------------------
Colocation vs. Managed Hosting
A question and answer guide to determining the best fit
for your organization - today and in the future.
http://p.sf.net/sfu/internap-sfd2d
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to