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_last_focused_per_desktop, INT); /**/
E_CONFIG_VAL(D, T, focus_revert_on_hide_or_close, 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, 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); e_config = e_config_domain_load("e", _e_config_edd);
if (e_config) if (e_config)
@ -405,6 +407,8 @@ e_config_init(void)
e_config->focus_last_focused_per_desktop = 1; e_config->focus_last_focused_per_desktop = 1;
e_config->focus_revert_on_hide_or_close = 1; e_config->focus_revert_on_hide_or_close = 1;
e_config->cursor_size = 32; e_config->cursor_size = 32;
e_config->menu_autoscroll_margin = 0;
e_config->menu_autoscroll_cursor_margin = 1;
{ {
E_Config_Module *em; 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_last_focused_per_desktop, 0, 1);
E_CONFIG_LIMIT(e_config->focus_revert_on_hide_or_close, 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->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 */ /* apply lang config - exception because config is loaded after intl setup */
if ((e_config->language) && (strlen(e_config->language) > 0)) 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 * defaults for e to work - started at 100 when we introduced this config
* versioning feature * versioning feature
*/ */
#define E_CONFIG_FILE_VERSION 122 #define E_CONFIG_FILE_VERSION 123
#define E_EVAS_ENGINE_DEFAULT 0 #define E_EVAS_ENGINE_DEFAULT 0
#define E_EVAS_ENGINE_SOFTWARE_X11 1 #define E_EVAS_ENGINE_SOFTWARE_X11 1
@ -143,6 +143,8 @@ struct _E_Config
int focus_last_focused_per_desktop; int focus_last_focused_per_desktop;
int focus_revert_on_hide_or_close; int focus_revert_on_hide_or_close;
int cursor_size; int cursor_size;
int menu_autoscroll_margin;
int menu_autoscroll_cursor_margin;
}; };
struct _E_Config_Module struct _E_Config_Module

View File

@ -636,14 +636,6 @@ break;
* E_LIB_IN * E_LIB_IN
* ... * ...
*/ */
#if 0
{
#endif
/****************************************************************************/ /****************************************************************************/
#define HDL E_IPC_OP_MODULE_LOAD #define HDL E_IPC_OP_MODULE_LOAD
@ -4632,8 +4624,82 @@ break;
#undef HDL #undef HDL
/****************************************************************************/ /****************************************************************************/
#define HDL E_IPC_OP_MENU_AUTOSCROLL_MARGIN_SET
#if (TYPE == E_REMOTE_OPTIONS)
#if 0 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 #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_SET 225
#define E_IPC_OP_CURSOR_SIZE_GET 226 #define E_IPC_OP_CURSOR_SIZE_GET 226
#define E_IPC_OP_CURSOR_SIZE_GET_REPLY 227 #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; E_Menu *m;
m = l->data; 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 (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 (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 (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; if (i > outb) outb = i;
} }
} }
@ -2029,11 +2029,11 @@ _e_menu_mouse_autoscroll_check(void)
int autoscroll_x = 0; int autoscroll_x = 0;
int autoscroll_y = 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_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; if (_e_menu_outside_bounds_get(0, -1)) autoscroll_y = -1;
} }
@ -2044,11 +2044,11 @@ _e_menu_mouse_autoscroll_check(void)
E_Menu *m; E_Menu *m;
m = _e_active_menus->data; 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_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; if (_e_menu_outside_bounds_get(0, 1)) autoscroll_y = 1;
} }