diff -Nur e~/src/bin/e_config.c e/src/bin/e_config.c --- e~/src/bin/e_config.c 2005-08-05 21:12:17.000000000 -0700 +++ e/src/bin/e_config.c 2005-08-16 13:55:06.000000000 -0700 @@ -298,6 +298,8 @@ E_CONFIG_VAL(D, T, resize_info_follows, INT); /**/ E_CONFIG_VAL(D, T, focus_last_focused_per_desktop, INT); /**/ E_CONFIG_VAL(D, T, focus_revert_on_hide_or_close, INT); /**/ + E_CONFIG_VAL(D, T, menu_autoscroll_margin, INT); /**/ + E_CONFIG_VAL(D, T, menu_autoscroll_cursor_margin, INT); /**/ e_config = e_config_domain_load("e", _e_config_edd); if (e_config) @@ -403,6 +405,8 @@ e_config->resize_info_follows = 1; e_config->focus_last_focused_per_desktop = 1; e_config->focus_revert_on_hide_or_close = 1; + e_config->menu_autoscroll_margin = 10; + e_config->menu_autoscroll_cursor_margin = 15; { E_Config_Module *em; @@ -959,6 +963,8 @@ E_CONFIG_LIMIT(e_config->resize_info_follows, 0, 1); E_CONFIG_LIMIT(e_config->focus_last_focused_per_desktop, 0, 1); E_CONFIG_LIMIT(e_config->focus_revert_on_hide_or_close, 0, 1); + E_CONFIG_LIMIT(e_config->menu_autoscroll_margin, 0, 50); + E_CONFIG_LIMIT(e_config->menu_autoscroll_cursor_margin, 0, 50); /* apply lang config - exception because config is loaded after intl setup */ diff -Nur e~/src/bin/e_config.h e/src/bin/e_config.h --- e~/src/bin/e_config.h 2005-08-05 21:12:18.000000000 -0700 +++ e/src/bin/e_config.h 2005-08-16 13:55:06.000000000 -0700 @@ -142,6 +142,8 @@ int resize_info_follows; int focus_last_focused_per_desktop; int focus_revert_on_hide_or_close; + int menu_autoscroll_margin; + int menu_autoscroll_cursor_margin; }; struct _E_Config_Module diff -Nur e~/src/bin/e_ipc_handlers.h e/src/bin/e_ipc_handlers.h --- e~/src/bin/e_ipc_handlers.h 2005-08-09 21:52:07.000000000 -0700 +++ e/src/bin/e_ipc_handlers.h 2005-08-16 14:01:38.000000000 -0700 @@ -4592,3 +4592,84 @@ #if 0 } #endif + +/****************************************************************************/ +#define HDL E_IPC_OP_MENU_AUTOSCROLL_MARGIN_SET +#if (TYPE == E_REMOTE_OPTIONS) + OP("-menu-autoscroll-margin-set", 1, "Set the distance from the edge of the screen the menu will autoscroll to", 0, HDL) +#elif (TYPE == E_REMOTE_OUT) + REQ_INT(atoi(params[0]), HDL); +#elif (TYPE == E_WM_IN) + START_INT(value, HDL); + e_config->menu_autoscroll_margin = value; + E_CONFIG_LIMIT(e_config->menu_autoscroll_margin, 0, 50); + SAVE; + END_INT; +#elif (TYPE == E_REMOTE_IN) +#endif +#undef HDL + +/****************************************************************************/ +#define HDL E_IPC_OP_MENU_AUTOSCROLL_MARGIN_GET +#if (TYPE == E_REMOTE_OPTIONS) + OP("-menu-autoscroll-margin-get", 0, "Get the distance from the edge of the screen the menu will autoscroll to", 1, HDL) +#elif (TYPE == E_REMOTE_OUT) + REQ_NULL(HDL) +#elif (TYPE == E_WM_IN) + SEND_INT(e_config->menu_autoscroll_margin, E_IPC_OP_MENU_AUTOSCROLL_MARGIN_GET_REPLY, HDL); +#elif (TYPE == E_REMOTE_IN) +#endif +#undef HDL + +/****************************************************************************/ +#define HDL E_IPC_OP_MENU_AUTOSCROLL_MARGIN_GET_REPLY +#if (TYPE == E_REMOTE_OPTIONS) +#elif (TYPE == E_REMOTE_OUT) +#elif (TYPE == E_WM_IN) +#elif (TYPE == E_REMOTE_IN) + START_INT(val, HDL) + printf("REPLY: %i\n", val); + END_INT; +#endif +#undef HDL + +/****************************************************************************/ +#define HDL E_IPC_OP_MENU_AUTOSCROLL_CURSOR_MARGIN_SET +#if (TYPE == E_REMOTE_OPTIONS) + OP("-menu-autoscroll-cursor-margin-set", 1, "Set the distance from the edge of the screen the cursor needs to be to start menu autoscrolling", 0, HDL) +#elif (TYPE == E_REMOTE_OUT) + REQ_INT(atoi(params[0]), HDL); +#elif (TYPE == E_WM_IN) + START_INT(value, HDL); + e_config->menu_autoscroll_cursor_margin = value; + E_CONFIG_LIMIT(e_config->menu_autoscroll_cursor_margin, 0, 50); + // e_zone_update_flip_all(); + SAVE; + END_INT; +#elif (TYPE == E_REMOTE_IN) +#endif +#undef HDL + +/****************************************************************************/ +#define HDL E_IPC_OP_MENU_AUTOSCROLL_CURSOR_MARGIN_GET +#if (TYPE == E_REMOTE_OPTIONS) + OP("-menu-autoscroll-cursor-margin-get", 0, "Get the distance from the edge of the screen the cursor needs to be to start menu autoscrolling", 1, HDL) +#elif (TYPE == E_REMOTE_OUT) + REQ_NULL(HDL) +#elif (TYPE == E_WM_IN) + SEND_INT(e_config->menu_autoscroll_cursor_margin, E_IPC_OP_MENU_AUTOSCROLL_CURSOR_MARGIN_GET_REPLY, HDL); +#elif (TYPE == E_REMOTE_IN) +#endif +#undef HDL + +/****************************************************************************/ +#define HDL E_IPC_OP_MENU_AUTOSCROLL_CURSOR_MARGIN_GET_REPLY +#if (TYPE == E_REMOTE_OPTIONS) +#elif (TYPE == E_REMOTE_OUT) +#elif (TYPE == E_WM_IN) +#elif (TYPE == E_REMOTE_IN) + START_INT(val, HDL) + printf("REPLY: %i\n", val); + END_INT; +#endif +#undef HDL diff -Nur e~/src/bin/e_ipc_handlers_list.h e/src/bin/e_ipc_handlers_list.h --- e~/src/bin/e_ipc_handlers_list.h 2005-08-05 21:00:03.000000000 -0700 +++ e/src/bin/e_ipc_handlers_list.h 2005-08-16 13:55:06.000000000 -0700 @@ -222,3 +222,9 @@ #define E_IPC_OP_DESKTOP_NAME_DEL 222 #define E_IPC_OP_DESKTOP_NAME_LIST 223 #define E_IPC_OP_DESKTOP_NAME_LIST_REPLY 224 +#define E_IPC_OP_MENU_AUTOSCROLL_MARGIN_SET 225 +#define E_IPC_OP_MENU_AUTOSCROLL_MARGIN_GET 226 +#define E_IPC_OP_MENU_AUTOSCROLL_MARGIN_GET_REPLY 227 +#define E_IPC_OP_MENU_AUTOSCROLL_CURSOR_MARGIN_SET 228 +#define E_IPC_OP_MENU_AUTOSCROLL_CURSOR_MARGIN_GET 229 +#define E_IPC_OP_MENU_AUTOSCROLL_CURSOR_MARGIN_GET_REPLY 230 diff -Nur e~/src/bin/e_menu.c e/src/bin/e_menu.c --- e~/src/bin/e_menu.c 2005-07-25 02:55:44.000000000 -0700 +++ e/src/bin/e_menu.c 2005-08-16 13:55:06.000000000 -0700 @@ -1968,24 +1968,24 @@ E_Menu *m; m = l->data; - if (m->cur.x < m->zone->x) + if (m->cur.x < m->zone->x + e_config->menu_autoscroll_margin) { - i = m->zone->x - m->cur.x; + i = m->zone->x - m->cur.x + e_config->menu_autoscroll_margin; if (i > outl) outl = i; } - if (m->cur.y < m->zone->y) + if (m->cur.y < m->zone->y + e_config->menu_autoscroll_margin) { - i = m->zone->y - m->cur.y; + i = m->zone->y - m->cur.y + e_config->menu_autoscroll_margin; if (i > outt) outt = i; } - if ((m->cur.x + m->cur.w) > (m->zone->w)) + if ((m->cur.x + m->cur.w) > (m->zone->w - e_config->menu_autoscroll_margin)) { - i = m->cur.x + m->cur.w - (m->zone->x + m->zone->w); + i = m->cur.x + m->cur.w - (m->zone->x + m->zone->w - e_config->menu_autoscroll_margin); if (i > outr) outr = i; } - if ((m->cur.y + m->cur.h) > (m->zone->h)) + if ((m->cur.y + m->cur.h) > (m->zone->h - e_config->menu_autoscroll_margin)) { - i = m->cur.y + m->cur.h - (m->zone->y + m->zone->h); + i = m->cur.y + m->cur.h - (m->zone->y + m->zone->h - e_config->menu_autoscroll_margin); if (i > outb) outb = i; } } @@ -2029,11 +2029,11 @@ int autoscroll_x = 0; int autoscroll_y = 0; - if (_e_menu_x == 0) + if (_e_menu_x - e_config->menu_autoscroll_cursor_margin <= 0) { if (_e_menu_outside_bounds_get(-1, 0)) autoscroll_x = -1; } - if (_e_menu_y == 0) + if (_e_menu_y - e_config->menu_autoscroll_cursor_margin <= 0) { if (_e_menu_outside_bounds_get(0, -1)) autoscroll_y = -1; } @@ -2044,11 +2044,11 @@ E_Menu *m; m = _e_active_menus->data; - if (_e_menu_x == (m->zone->w - 1)) + if (_e_menu_x + e_config->menu_autoscroll_cursor_margin >= (m->zone->w - 1)) { if (_e_menu_outside_bounds_get(1, 0)) autoscroll_x = 1; } - if (_e_menu_y == (m->zone->h - 1)) + if (_e_menu_y + e_config->menu_autoscroll_cursor_margin >= (m->zone->h - 1)) { if (_e_menu_outside_bounds_get(0, 1)) autoscroll_y = 1; }