Index: menu.c
===================================================================
RCS file: /cvsroot/rockbox/apps/menu.c,v
retrieving revision 1.101
diff -u -r1.101 menu.c
--- menu.c	5 Dec 2005 22:44:41 -0000	1.101
+++ menu.c	21 Jun 2006 06:32:47 -0000
@@ -40,6 +40,7 @@
 #include "talk.h"
 #include "lang.h"
 #include "misc.h"
+#include "lcd-remote.h"
 
 #ifdef HAVE_LCD_BITMAP
 #include "icons.h"
@@ -173,6 +174,24 @@
                 break;
 
             default:
+#if defined(IRIVER_H100_SERIES) || defined(IRIVER_H300_SERIES)
+                if ((remote_type() == REMOTETYPE_H100_LCD && key == MENU_RC_ENTER_H100) ||
+                    (remote_type() == REMOTETYPE_H100_LCD && key == MENU_RC_ENTER2_H100) ||
+                    (remote_type() == REMOTETYPE_H300_LCD && key == MENU_RC_ENTER_H300) ||
+                    (remote_type() == REMOTETYPE_H300_LCD && key == MENU_RC_ENTER2_H300))
+                {
+                    return gui_synclist_get_sel_pos(&(menus[m].synclist));
+                }
+                if ((remote_type() == REMOTETYPE_H100_LCD && key == MENU_RC_EXIT_H100) ||
+                    (remote_type() == REMOTETYPE_H100_LCD && key == MENU_RC_EXIT2_H100) ||
+                    (remote_type() == REMOTETYPE_H300_LCD && key == MENU_RC_EXIT_H300) ||
+                    (remote_type() == REMOTETYPE_H300_LCD && key == MENU_RC_EXIT2_H300))
+                {
+                    exit = true;
+                    break;
+                }
+#endif
+
                 if(default_event_handler(key) == SYS_USB_CONNECTED)
                     return MENU_ATTACHED_USB;
                 break;
Index: menu.h
===================================================================
RCS file: /cvsroot/rockbox/apps/menu.h,v
retrieving revision 1.43
diff -u -r1.43 menu.h
--- menu.h	17 May 2006 06:41:26 -0000	1.43
+++ menu.h	21 Jun 2006 06:32:47 -0000
@@ -31,10 +31,15 @@
 #define MENU_ENTER      BUTTON_RIGHT
 #define MENU_ENTER2     BUTTON_SELECT
 
-#define MENU_RC_EXIT        BUTTON_RC_STOP
 #define MENU_RC_EXIT_MENU   BUTTON_RC_MODE
-#define MENU_RC_ENTER       BUTTON_RC_ON
-#define MENU_RC_ENTER2      BUTTON_RC_MENU
+#define MENU_RC_EXIT_H100   BUTTON_RC_STOP
+#define MENU_RC_EXIT2_H100  BUTTON_RC_VOL_DOWN
+#define MENU_RC_EXIT_H300   BUTTON_RC_REW
+#define MENU_RC_EXIT2_H300  BUTTON_RC_STOP
+#define MENU_RC_ENTER_H100  BUTTON_RC_ON
+#define MENU_RC_ENTER2_H100 BUTTON_RC_VOL_UP
+#define MENU_RC_ENTER_H300  BUTTON_RC_FF
+#define MENU_RC_ENTER2_H300 BUTTON_RC_MENU
 
 
 #elif CONFIG_KEYPAD == RECORDER_PAD
Index: tree.c
===================================================================
RCS file: /cvsroot/rockbox/apps/tree.c,v
retrieving revision 1.408
diff -u -r1.408 tree.c
--- tree.c	7 Jun 2006 20:42:42 -0000	1.408
+++ tree.c	21 Jun 2006 06:32:55 -0000
@@ -861,6 +861,105 @@
 #endif
 
             default:
+#if defined(IRIVER_H100_SERIES) || defined(IRIVER_H300_SERIES)
+                if ((remote_type() == REMOTETYPE_H100_LCD && button == TREE_RC_EXIT_H100) ||
+                    (remote_type() == REMOTETYPE_H100_LCD && button == TREE_RC_EXIT2_H100) ||
+                    (remote_type() == REMOTETYPE_H300_LCD && button == TREE_RC_EXIT_H300))
+                {
+                    if (*tc.dirfilter > NUM_FILTER_MODES && tc.dirlevel < 1) {
+                        exit_func = true;
+                        break;
+                    }
+                    /* if we are in /, nothing to do */
+                    if (tc.dirlevel == 0)
+                        break;
+
+                    if (id3db)
+                        tagtree_exit(&tc);
+                    else
+                        if (ft_exit(&tc) == 3)
+                            exit_func = true;
+
+                    restore = true;
+                    break;
+                }
+                if ((remote_type() == REMOTETYPE_H300_LCD && button == TREE_RC_ENTER_H300) ||
+                    (remote_type() == REMOTETYPE_H100_LCD && button == TREE_RC_ENTER_H100))
+                {
+                    /* nothing to do if no files to display */
+                    if ( numentries == 0 )
+                        break;
+
+                    switch (id3db?tagtree_enter(&tc):ft_enter(&tc))
+                    {
+                        case 1: reload_dir = true; break;
+                        case 2: start_wps = true; break;
+                        case 3: exit_func = true; break;
+                        default: break;
+                    }
+                    restore = true;
+                    break;
+                }
+                if ((remote_type() == REMOTETYPE_H100_LCD && button == TREE_RC_CONTEXT_H100) ||
+                    (remote_type() == REMOTETYPE_H300_LCD && button == TREE_RC_CONTEXT_H300))
+                {
+                    int onplay_result;
+                    int attr = 0;
+
+                    if(!numentries)
+                        onplay_result = onplay(NULL, 0, curr_context);
+                    else {
+                        if (id3db)
+                        {
+                            if (tagtree_get_attr(&tc) == TREE_ATTR_MPA)
+                            {
+                                attr = TREE_ATTR_MPA;
+                                tagtree_get_filename(&tc, buf, sizeof(buf));
+                            }
+                        }
+                        else
+                        {
+                            attr = dircache[tc.selected_item].attr;
+
+                            if (currdir[1]) /* Not in / */
+                                snprintf(buf, sizeof buf, "%s/%s",
+                                         currdir,
+                                         dircache[tc.selected_item].name);
+                            else /* In / */
+                                snprintf(buf, sizeof buf, "/%s",
+                                         dircache[tc.selected_item].name);
+                        }
+                        onplay_result = onplay(buf, attr, curr_context);
+                    }
+                    switch (onplay_result)
+                    {
+                        case ONPLAY_OK:
+                            restore = true;
+                            break;
+
+                        case ONPLAY_RELOAD_DIR:
+                            reload_dir = true;
+                            break;
+
+                        case ONPLAY_START_PLAY:
+                            start_wps = true;
+                            break;
+                    }
+                    break;
+                }
+                if (remote_type() == REMOTETYPE_H300_LCD && button == TREE_RC_STOP_H300)
+                {
+                    if (*tc.dirfilter < NUM_FILTER_MODES)
+                    {
+                        /* Stop the music if it is playing */
+                        if(audio_status()) {
+                            if (!global_settings.party_mode)
+                                audio_stop();
+                        }
+                    }
+                    break;
+                }
+#endif
                 if (default_event_handler(button) == SYS_USB_CONNECTED)
                 {
                     if(*tc.dirfilter > NUM_FILTER_MODES)
Index: tree.h
===================================================================
RCS file: /cvsroot/rockbox/apps/tree.h,v
retrieving revision 1.73
diff -u -r1.73 tree.h
--- tree.h	10 Apr 2006 03:51:17 -0000	1.73
+++ tree.h	21 Jun 2006 06:32:55 -0000
@@ -40,19 +40,23 @@
 #define TREE_QUICK     (BUTTON_MODE | BUTTON_REPEAT)
 
 /* Remote keys */
-#define TREE_RC_NEXT       BUTTON_RC_FF
-#define TREE_RC_PREV       BUTTON_RC_REW
-#define TREE_RC_PGUP       BUTTON_RC_SOURCE
-#define TREE_RC_PGDN       BUTTON_RC_BITRATE
-#define TREE_RC_EXIT       BUTTON_RC_STOP
-#define TREE_RC_RUN        (BUTTON_RC_MENU | BUTTON_REL)
-#define TREE_RC_RUN_PRE    BUTTON_RC_MENU
-#define TREE_RC_MENU       (BUTTON_RC_MODE | BUTTON_REL)
-#define TREE_RC_MENU_PRE   BUTTON_RC_MODE
-#define TREE_RC_WPS        (BUTTON_RC_ON | BUTTON_REL)
-#define TREE_RC_WPS_PRE    BUTTON_RC_ON
-#define TREE_RC_CONTEXT    (BUTTON_RC_ON | BUTTON_REPEAT)
-#define TREE_RC_QUICK      (BUTTON_RC_MODE | BUTTON_REPEAT)
+#define TREE_RC_PGUP           BUTTON_RC_SOURCE
+#define TREE_RC_PGDN           BUTTON_RC_BITRATE
+#define TREE_RC_EXIT_H100      BUTTON_RC_STOP
+#define TREE_RC_EXIT2_H100     BUTTON_RC_VOL_DOWN
+#define TREE_RC_EXIT_H300      BUTTON_RC_REW
+#define TREE_RC_ENTER_H100     BUTTON_RC_VOL_UP
+#define TREE_RC_ENTER_H300     BUTTON_RC_FF
+#define TREE_RC_RUN            (BUTTON_RC_MENU | BUTTON_REL)
+#define TREE_RC_RUN_PRE        BUTTON_RC_MENU
+#define TREE_RC_MENU           (BUTTON_RC_MODE | BUTTON_REL)
+#define TREE_RC_MENU_PRE       BUTTON_RC_MODE
+#define TREE_RC_CONTEXT_H100   (BUTTON_RC_ON | BUTTON_REPEAT)
+#define TREE_RC_CONTEXT_H300   (BUTTON_RC_MENU | BUTTON_REPEAT)
+#define TREE_RC_QUICK          (BUTTON_RC_MODE | BUTTON_REPEAT)
+#define TREE_RC_WPS            (BUTTON_RC_ON | BUTTON_REL)
+#define TREE_RC_WPS_PRE        BUTTON_RC_ON
+#define TREE_RC_STOP_H300      BUTTON_RC_STOP
 
 #elif CONFIG_KEYPAD == RECORDER_PAD
 #define TREE_EXIT      BUTTON_LEFT
Index: gui/list.c
===================================================================
RCS file: /cvsroot/rockbox/apps/gui/list.c,v
retrieving revision 1.21
diff -u -r1.21 list.c
--- gui/list.c	4 Jun 2006 17:14:17 -0000	1.21
+++ gui/list.c	21 Jun 2006 06:34:03 -0000
@@ -21,6 +21,7 @@
 #include "lcd.h"
 #include "font.h"
 #include "button.h"
+#include "lcd-remote.h"
 #include "sprintf.h"
 #include "settings.h"
 #include "kernel.h"
@@ -700,6 +701,58 @@
             yield();
             return LIST_PREV;
 #endif
+
+#if defined(IRIVER_H100_SERIES) || defined(IRIVER_H300_SERIES)
+        default:
+            if ((remote_type() == REMOTETYPE_H100_LCD && button & LIST_RC_NEXT_H100) ||
+                (remote_type() == REMOTETYPE_H300_LCD && button & LIST_RC_NEXT_H300))
+            {
+                if (button & BUTTON_REL)
+                    return 0;
+
+                if (!(button & BUTTON_REPEAT))
+                    gui_synclist_limit_scroll(lists, false);
+
+                gui_synclist_select_next(lists);
+                gui_synclist_draw(lists);
+                yield();
+                return LIST_NEXT;
+            }
+            if ((remote_type() == REMOTETYPE_H100_LCD && button & LIST_RC_PREV_H100) ||
+                (remote_type() == REMOTETYPE_H300_LCD && button & LIST_RC_PREV_H300))
+            {
+                if (button & BUTTON_REL)
+                    return 0;
+
+                if (!(button & BUTTON_REPEAT))
+                    gui_synclist_limit_scroll(lists, false);
+
+                gui_synclist_select_previous(lists);
+                gui_synclist_draw(lists);
+                yield();
+                return LIST_PREV;
+            }
+            if ((remote_type() == REMOTETYPE_H100_LCD && button & LIST_RC_PGRIGHT_H100) ||
+                (remote_type() == REMOTETYPE_H300_LCD && button & LIST_RC_PGRIGHT_H300))
+            {
+                if (button & BUTTON_REL)
+                    return 0;
+
+                gui_synclist_scroll_right(lists);
+                gui_synclist_draw(lists);
+                return true;
+            }
+            if ((remote_type() == REMOTETYPE_H100_LCD && (button & LIST_RC_PGLEFT_H100)) ||
+                (remote_type() == REMOTETYPE_H300_LCD && (button & LIST_RC_PGLEFT_H300)))
+            {
+                if (button & BUTTON_REL)
+                    return 0;
+
+                gui_synclist_scroll_left(lists);
+                gui_synclist_draw(lists);
+                return true;
+            }
+#endif
     }
     return 0;
 }
Index: gui/list.h
===================================================================
RCS file: /cvsroot/rockbox/apps/gui/list.h,v
retrieving revision 1.18
diff -u -r1.18 list.h
--- gui/list.h	3 Apr 2006 08:51:08 -0000	1.18
+++ gui/list.h	21 Jun 2006 06:34:03 -0000
@@ -37,12 +37,16 @@
 #define LIST_PGLEFT    (BUTTON_ON | BUTTON_LEFT)
 
 #ifdef CONFIG_REMOTE_KEYPAD
-#define LIST_RC_NEXT   BUTTON_RC_FF
-#define LIST_RC_PREV   BUTTON_RC_REW
-#define LIST_RC_PGUP   BUTTON_RC_SOURCE
-#define LIST_RC_PGDN   BUTTON_RC_BITRATE
-#define LIST_RC_PGRIGHT (BUTTON_RC_VOL_UP)
-#define LIST_RC_PGLEFT (BUTTON_RC_VOL_DOWN)
+#define LIST_RC_NEXT_H100    BUTTON_RC_FF
+#define LIST_RC_NEXT_H300    BUTTON_RC_VOL_DOWN
+#define LIST_RC_PREV_H100    BUTTON_RC_REW
+#define LIST_RC_PREV_H300    BUTTON_RC_VOL_UP
+#define LIST_RC_PGUP         BUTTON_RC_SOURCE
+#define LIST_RC_PGDN         BUTTON_RC_BITRATE
+#define LIST_RC_PGRIGHT_H100 BUTTON_RC_VOL_UP
+#define LIST_RC_PGRIGHT_H300 BUTTON_RC_FF
+#define LIST_RC_PGLEFT_H100  BUTTON_RC_VOL_DOWN
+#define LIST_RC_PGLEFT_H300  BUTTON_RC_REW
 #endif /* CONFIG_REMOTE_KEYPAD */
 
 #elif CONFIG_KEYPAD == RECORDER_PAD
Index: gui/select.c
===================================================================
RCS file: /cvsroot/rockbox/apps/gui/select.c,v
retrieving revision 1.10
diff -u -r1.10 select.c
--- gui/select.c	7 Dec 2005 15:37:21 -0000	1.10
+++ gui/select.c	21 Jun 2006 06:34:03 -0000
@@ -23,6 +23,7 @@
 #include "textarea.h"
 #include "screen_access.h"
 #include "kernel.h"
+#include "lcd-remote.h"
 
 
 void gui_select_init_numeric(struct gui_select * select,
@@ -130,6 +131,48 @@
             gui_syncselect_draw(select);
             sleep(HZ/2);
             return(false);
+#if defined(IRIVER_H100_SERIES) || defined(IRIVER_H300_SERIES)
+        default:
+            if ((remote_type() == REMOTETYPE_H100_LCD && button == SELECT_RC_INC_H100) ||
+                (remote_type() == REMOTETYPE_H300_LCD && button == SELECT_RC_INC_H300))
+            {
+                if (button & BUTTON_REL)
+                    return false;
+
+                if (button & BUTTON_REPEAT)
+                    select->options.limit_loop = true;
+
+                option_select_next(&select->options);
+                return(true);
+            }
+            if ((remote_type() == REMOTETYPE_H100_LCD && button == SELECT_RC_DEC_H100) ||
+                (remote_type() == REMOTETYPE_H300_LCD && button == SELECT_RC_DEC_H300))
+            {
+                if (button & BUTTON_REL)
+                    return false;
+
+                if (button & BUTTON_REPEAT)
+                    select->options.limit_loop = true;
+
+                option_select_prev(&select->options);
+                return(true);
+            }
+            if ((remote_type() == REMOTETYPE_H100_LCD && button == SELECT_RC_OK_H100) ||
+                (remote_type() == REMOTETYPE_H100_LCD && button == SELECT_RC_OK2_H100) ||
+                (remote_type() == REMOTETYPE_H300_LCD && button == SELECT_RC_OK_H300))
+            {
+                select->validated=true;
+                return(false);
+            }
+            if ((remote_type() == REMOTETYPE_H100_LCD && button == SELECT_RC_CANCEL_H100) ||
+                (remote_type() == REMOTETYPE_H300_LCD && button == SELECT_RC_CANCEL_H300))
+            {
+                select->canceled = true;
+                gui_syncselect_draw(select);
+                sleep(HZ/2);
+                return(false);
+            }
+#endif
     }
     return(false);
 }
Index: gui/select.h
===================================================================
RCS file: /cvsroot/rockbox/apps/gui/select.h,v
retrieving revision 1.16
diff -u -r1.16 select.h
--- gui/select.h	21 Mar 2006 02:23:27 -0000	1.16
+++ gui/select.h	21 Jun 2006 06:34:04 -0000
@@ -32,12 +32,17 @@
 #define SELECT_CANCEL  BUTTON_OFF
 #define SELECT_CANCEL2 BUTTON_MODE
 
-#define SELECT_RC_INC      BUTTON_RC_FF
-#define SELECT_RC_DEC      BUTTON_RC_REW
-#define SELECT_RC_OK       BUTTON_RC_ON
-#define SELECT_RC_OK2      BUTTON_RC_MENU
-#define SELECT_RC_CANCEL   BUTTON_RC_STOP
-#define SELECT_RC_CANCEL2  BUTTON_RC_MODE
+#define SELECT_RC_INC_H100    BUTTON_RC_FF
+#define SELECT_RC_INC_H300    BUTTON_RC_VOL_UP
+#define SELECT_RC_DEC_H100    BUTTON_RC_REW
+#define SELECT_RC_DEC_H300    BUTTON_RC_VOL_DOWN
+#define SELECT_RC_OK_H100     BUTTON_RC_ON
+#define SELECT_RC_OK2_H100    BUTTON_RC_VOL_DOWN
+#define SELECT_RC_OK_H300     BUTTON_RC_REW
+#define SELECT_RC_OK2         BUTTON_RC_MENU
+#define SELECT_RC_CANCEL_H100 BUTTON_RC_STOP
+#define SELECT_RC_CANCEL_H300 BUTTON_RC_STOP
+#define SELECT_RC_CANCEL2     BUTTON_RC_MODE
 
 #elif CONFIG_KEYPAD == RECORDER_PAD
 #define SELECT_INC     BUTTON_UP
