summaryrefslogtreecommitdiff
path: root/amiga
diff options
context:
space:
mode:
authorChris Young <chris@unsatisfactorysoftware.co.uk>2009-11-02 23:02:53 +0000
committerChris Young <chris@unsatisfactorysoftware.co.uk>2009-11-02 23:02:53 +0000
commite5b8264dd84b6450724475be195b92897a09fb91 (patch)
tree39c7fee4e0858c2ee1192e1dc41b502247b7867f /amiga
parent0efc756a7a1a511d5d0a95e96cdf55eec6df0cc7 (diff)
downloadnetsurf-e5b8264dd84b6450724475be195b92897a09fb91.tar.gz
netsurf-e5b8264dd84b6450724475be195b92897a09fb91.tar.bz2
New key handling code borrowed from the treeview branch.
svn path=/trunk/netsurf/; revision=9657
Diffstat (limited to 'amiga')
-rwxr-xr-xamiga/gui.c231
1 files changed, 117 insertions, 114 deletions
diff --git a/amiga/gui.c b/amiga/gui.c
index 3ad072100..16c50d871 100755
--- a/amiga/gui.c
+++ b/amiga/gui.c
@@ -731,6 +731,105 @@ void gui_init2(int argc, char** argv)
bw = browser_window_create(option_homepage_url, 0, 0, true,false);
}
+int ami_key_to_nskey(ULONG keycode, struct InputEvent *ie)
+{
+ int nskey = 0, chars;
+ UBYTE buffer[20];
+
+ if(keycode >= IECODE_UP_PREFIX) return 0;
+
+ switch(keycode)
+ {
+ case RAWKEY_CRSRUP:
+ if(ie->ie_Qualifier & IEQUALIFIER_RSHIFT)
+ {
+ nskey = KEY_PAGE_UP;
+ }
+ else if(ie->ie_Qualifier & IEQUALIFIER_RALT)
+ {
+ nskey = KEY_TEXT_START;
+ }
+ else nskey = KEY_UP;
+ break;
+ case RAWKEY_CRSRDOWN:
+ if(ie->ie_Qualifier & IEQUALIFIER_RSHIFT)
+ {
+ nskey = KEY_PAGE_DOWN;
+ }
+ else if(ie->ie_Qualifier & IEQUALIFIER_RALT)
+ {
+ nskey = KEY_TEXT_END;
+ }
+ else nskey = KEY_DOWN;
+ break;
+ case RAWKEY_CRSRLEFT:
+ if(ie->ie_Qualifier & IEQUALIFIER_RSHIFT)
+ {
+ nskey = KEY_LINE_START;
+ }
+ else if(ie->ie_Qualifier & IEQUALIFIER_RALT)
+ {
+ nskey = KEY_WORD_LEFT;
+ }
+ else nskey = KEY_LEFT;
+ break;
+ case RAWKEY_CRSRRIGHT:
+ if(ie->ie_Qualifier & IEQUALIFIER_RSHIFT)
+ {
+ nskey = KEY_LINE_END;
+ }
+ else if(ie->ie_Qualifier & IEQUALIFIER_RALT)
+ {
+ nskey = KEY_WORD_RIGHT;
+ }
+ else nskey = KEY_RIGHT;
+ break;
+ case RAWKEY_ESC:
+ nskey = KEY_ESCAPE;
+ break;
+ case RAWKEY_PAGEUP:
+ nskey = KEY_PAGE_UP;
+ break;
+ case RAWKEY_PAGEDOWN:
+ nskey = KEY_PAGE_DOWN;
+ break;
+ case RAWKEY_HOME:
+ nskey = KEY_TEXT_START;
+ break;
+ case RAWKEY_END:
+ nskey = KEY_TEXT_END;
+ break;
+ case RAWKEY_BACKSPACE:
+ if(ie->ie_Qualifier & IEQUALIFIER_RSHIFT)
+ {
+ nskey = KEY_DELETE_LINE_START;
+ }
+ else nskey = KEY_DELETE_LEFT;
+ break;
+ case RAWKEY_DEL:
+ if(ie->ie_Qualifier & IEQUALIFIER_RSHIFT)
+ {
+ nskey = KEY_DELETE_LINE_END;
+ }
+ else nskey = KEY_DELETE_RIGHT;
+ break;
+ case RAWKEY_TAB:
+ if(ie->ie_Qualifier & IEQUALIFIER_RSHIFT)
+ {
+ nskey = KEY_SHIFT_TAB;
+ }
+ else nskey = KEY_TAB;
+ break;
+ default:
+ if((chars = MapRawKey(ie,buffer,20,NULL)) > 0)
+ {
+ nskey = buffer[0];
+ }
+ break;
+ }
+ return nskey;
+}
+
void ami_update_quals(struct gui_window_2 *gwin)
{
uint32 quals = 0;
@@ -767,8 +866,7 @@ void ami_handle_msg(void)
struct MenuItem *item;
struct InputEvent *ie;
struct Node *tabnode;
- UBYTE buffer[20];
- int chars,i;
+ int i, nskey;
if(IsMinListEmpty(window_list))
{
@@ -1106,123 +1204,28 @@ void ami_handle_msg(void)
GetAttr(WINDOW_InputEvent,gwin->objects[OID_MAIN],(ULONG *)&ie);
- switch(storage)
+ nskey = ami_key_to_nskey(storage, ie);
+
+ if(ie->ie_Qualifier & IEQUALIFIER_RCOMMAND)
{
- case RAWKEY_CRSRUP:
- if(ie->ie_Qualifier & IEQUALIFIER_RSHIFT)
- {
- browser_window_key_press(gwin->bw,KEY_PAGE_UP);
- }
- else if(ie->ie_Qualifier & IEQUALIFIER_RALT)
- {
- browser_window_key_press(gwin->bw,KEY_TEXT_START);
- }
- else browser_window_key_press(gwin->bw,KEY_UP);
- break;
- case RAWKEY_CRSRDOWN:
- if(ie->ie_Qualifier & IEQUALIFIER_RSHIFT)
- {
- browser_window_key_press(gwin->bw,KEY_PAGE_DOWN);
- }
- else if(ie->ie_Qualifier & IEQUALIFIER_RALT)
- {
- browser_window_key_press(gwin->bw,KEY_TEXT_END);
- }
- else browser_window_key_press(gwin->bw,KEY_DOWN);
- break;
- case RAWKEY_CRSRLEFT:
- if(ie->ie_Qualifier & IEQUALIFIER_RSHIFT)
- {
- browser_window_key_press(gwin->bw,KEY_LINE_START);
- }
- else if(ie->ie_Qualifier & IEQUALIFIER_RALT)
- {
- browser_window_key_press(gwin->bw,KEY_WORD_LEFT);
- }
- else browser_window_key_press(gwin->bw,KEY_LEFT);
- break;
- case RAWKEY_CRSRRIGHT:
- if(ie->ie_Qualifier & IEQUALIFIER_RSHIFT)
- {
- browser_window_key_press(gwin->bw,KEY_LINE_END);
- }
- else if(ie->ie_Qualifier & IEQUALIFIER_RALT)
- {
- browser_window_key_press(gwin->bw,KEY_WORD_RIGHT);
- }
- else browser_window_key_press(gwin->bw,KEY_RIGHT);
- break;
- case RAWKEY_ESC:
- browser_window_key_press(gwin->bw,KEY_ESCAPE);
- break;
- case RAWKEY_PAGEUP:
- browser_window_key_press(gwin->bw,KEY_PAGE_UP);
- break;
- case RAWKEY_PAGEDOWN:
- browser_window_key_press(gwin->bw,KEY_PAGE_DOWN);
- break;
- case RAWKEY_HOME:
- browser_window_key_press(gwin->bw,KEY_TEXT_START);
- break;
- case RAWKEY_END:
- browser_window_key_press(gwin->bw,KEY_TEXT_END);
- break;
- case RAWKEY_BACKSPACE:
- if(ie->ie_Qualifier & IEQUALIFIER_RSHIFT)
- {
- browser_window_key_press(gwin->bw,KEY_DELETE_LINE_START);
- }
- else browser_window_key_press(gwin->bw,KEY_DELETE_LEFT);
- break;
- case RAWKEY_DEL:
- if(ie->ie_Qualifier & IEQUALIFIER_RSHIFT)
- {
- browser_window_key_press(gwin->bw,KEY_DELETE_LINE_END);
- }
- else browser_window_key_press(gwin->bw,KEY_DELETE_RIGHT);
- break;
- case RAWKEY_TAB:
- if(ie->ie_Qualifier & IEQUALIFIER_RSHIFT)
- {
- browser_window_key_press(gwin->bw,KEY_SHIFT_TAB);
- }
- else browser_window_key_press(gwin->bw,KEY_TAB);
- break;
- default:
- if((chars = MapRawKey(ie,buffer,20,NULL)) > 0)
- {
-/* this doesn't work - MapRawKey would take notice of capslock if it was in
-ie_qualifier anyway
- if(ie->ie_Qualifier & IEQUALIFIER_CAPSLOCK)
- {
- for(i=0;i<chars;i++)
- buffer[i] = ToUpper(buffer[i]);
- }
-*/
- if(ie->ie_Qualifier & IEQUALIFIER_RCOMMAND)
- {
/* We are duplicating the menu shortcuts here, as if RMBTRAP is active
* (ie. when context menus are enabled and the mouse is over the browser
* rendering area), Intuition also does not catch the menu shortcut
* key presses. Context menus need to be changed to use MENUVERIFY not RMBTRAP */
- switch(buffer[0])
- {
- case 'c':
- browser_window_key_press(gwin->bw, KEY_COPY_SELECTION);
- browser_window_key_press(gwin->bw, KEY_ESCAPE);
- break;
-
- case 'v':
- browser_window_key_press(gwin->bw, KEY_PASTE);
- break;
- }
- }
- else
- {
- browser_window_key_press(gwin->bw,buffer[0]);
- }
- }
- break;
+ switch(nskey)
+ {
+ case 'c':
+ browser_window_key_press(gwin->bw, KEY_COPY_SELECTION);
+ browser_window_key_press(gwin->bw, KEY_ESCAPE);
+ break;
+ case 'v':
+ browser_window_key_press(gwin->bw, KEY_PASTE);
+ break;
+ }
+ }
+ else
+ {
+ browser_window_key_press(gwin->bw, nskey);
}
break;