auto scroll menu controls

SVN revision: 16266
This commit is contained in:
Carsten Haitzler 2005-08-22 05:50:49 +00:00
parent 92051d163c
commit b7caf97fd3
5 changed files with 106 additions and 26 deletions

View File

@ -299,6 +299,8 @@ e_config_init(void)
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, cursor_size, 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)
@ -405,6 +407,8 @@ e_config_init(void)
e_config->focus_last_focused_per_desktop = 1;
e_config->focus_revert_on_hide_or_close = 1;
e_config->cursor_size = 32;
e_config->menu_autoscroll_margin = 0;
e_config->menu_autoscroll_cursor_margin = 1;
{
E_Config_Module *em;
@ -962,7 +966,9 @@ e_config_init(void)
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->cursor_size, 0, 1024);
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 */
if ((e_config->language) && (strlen(e_config->language) > 0))

View File

@ -48,7 +48,7 @@ typedef Eet_Data_Descriptor E_Config_DD;
* defaults for e to work - started at 100 when we introduced this config
* versioning feature
*/
#define E_CONFIG_FILE_VERSION 122
#define E_CONFIG_FILE_VERSION 123
#define E_EVAS_ENGINE_DEFAULT 0
#define E_EVAS_ENGINE_SOFTWARE_X11 1
@ -143,6 +143,8 @@ struct _E_Config
int focus_last_focused_per_desktop;
int focus_revert_on_hide_or_close;
int cursor_size;
int menu_autoscroll_margin;
int menu_autoscroll_cursor_margin;
};
struct _E_Config_Module

View File

@ -636,14 +636,6 @@ break;
* E_LIB_IN
* ...
*/
#if 0
{
#endif
/****************************************************************************/
#define HDL E_IPC_OP_MODULE_LOAD
@ -4632,8 +4624,82 @@ break;
#undef HDL
/****************************************************************************/
#if 0
}
#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

View File

@ -225,3 +225,9 @@
#define E_IPC_OP_CURSOR_SIZE_SET 225
#define E_IPC_OP_CURSOR_SIZE_GET 226
#define E_IPC_OP_CURSOR_SIZE_GET_REPLY 227
#define E_IPC_OP_MENU_AUTOSCROLL_MARGIN_SET 228
#define E_IPC_OP_MENU_AUTOSCROLL_MARGIN_GET 229
#define E_IPC_OP_MENU_AUTOSCROLL_MARGIN_GET_REPLY 230
#define E_IPC_OP_MENU_AUTOSCROLL_CURSOR_MARGIN_SET 231
#define E_IPC_OP_MENU_AUTOSCROLL_CURSOR_MARGIN_GET 232
#define E_IPC_OP_MENU_AUTOSCROLL_CURSOR_MARGIN_GET_REPLY 233

View File

@ -1968,24 +1968,24 @@ _e_menu_outside_bounds_get(int xdir, int ydir)
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 @@ _e_menu_mouse_autoscroll_check(void)
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_mouse_autoscroll_check(void)
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;
}