illogicit patches for:

>e_int_config_focus_missing_options.patch: adds refocus last focused window on
desktop switch and revert focus when hiding or closing a window options.
>e_menu_various.patch: (up-to-date) adds several things...
 - support KeyPad equivalent for keybindings (numbers as well as
 directions).
 - add [home] [end] support : will go to the first/last menu item
 - 0 will go to the last menu item instead of going to the 10th one.
 - corrected the bug when the first menu item was activated *twice* when
 creating a POP_DIRECTION_DOWN menu with keyboard <- passed a long time
 on this trying to figure why it was happening
 - do not activate an already active menu item
>e_int_border_menu_consistency.patch: do not show items that will ne be taken
into account anyway.


SVN revision: 20223
This commit is contained in:
Carsten Haitzler 2006-02-03 06:16:25 +00:00
parent a17594e55a
commit b30f189e6f
3 changed files with 140 additions and 29 deletions

View File

@ -78,7 +78,7 @@ e_int_border_menu_show(E_Border *bd, Evas_Coord x, Evas_Coord y, int key, Ecore_
e_menu_category_data_set("border/maximize",bd);
bd->border_maximize_menu = m;
/* Only allow to change layer for windows in "normal" layers */
if ((!bd->lock_user_maximize) &&
if ((!bd->lock_user_maximize) && (!bd->shaded) &&
((bd->layer == 50) || (bd->layer == 100) || (bd->layer == 150)))
{
int __fullmaximization = 0;
@ -187,7 +187,8 @@ e_int_border_menu_show(E_Border *bd, Evas_Coord x, Evas_Coord y, int key, Ecore_
"widgets/border/default/maximize");
}
if ((!bd->lock_user_shade) && (!(!strcmp("borderless", bd->client.border.name))))
if ((!bd->lock_user_shade) && (!bd->fullscreen) && (!bd->maximized) &&
(!(!strcmp("borderless", bd->client.border.name))))
{
mi = e_menu_item_new(m);
e_menu_item_label_set(mi, _("Shaded"));
@ -265,7 +266,7 @@ e_int_border_menu_show(E_Border *bd, Evas_Coord x, Evas_Coord y, int key, Ecore_
"widgets/border/default/borderless");
}
if (!bd->lock_user_fullscreen)
if ((!bd->lock_user_fullscreen) && (!bd->shaded))
{
mi = e_menu_item_new(m);
e_menu_item_label_set(mi, _("Fullscreen"));
@ -325,7 +326,7 @@ e_int_border_menu_show(E_Border *bd, Evas_Coord x, Evas_Coord y, int key, Ecore_
e_menu_item_separator_set(mi, 1);
}
if (!bd->lock_user_iconify)
if ((!bd->lock_user_iconify) && (!bd->fullscreen))
{
mi = e_menu_item_new(m);
e_menu_item_label_set(mi, _("Iconify"));

View File

@ -23,6 +23,8 @@ struct _E_Config_Dialog_Data
int pass_click_on;
int always_click_to_raise;
int always_click_to_focus;
int focus_last_focused_per_desktop;
int focus_revert_on_hide_or_close;
};
/* a nice easy setup function that does the dirty work */
@ -55,6 +57,8 @@ _fill_data(E_Config_Dialog_Data *cfdata)
cfdata->pass_click_on = e_config->pass_click_on;
cfdata->always_click_to_raise = e_config->always_click_to_raise;
cfdata->always_click_to_focus = e_config->always_click_to_focus;
cfdata->focus_last_focused_per_desktop = e_config->focus_last_focused_per_desktop;
cfdata->focus_revert_on_hide_or_close = e_config->focus_revert_on_hide_or_close;
cfdata->mode = cfdata->focus_policy;
}
@ -93,6 +97,8 @@ _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
e_config->pass_click_on = 1;
e_config->always_click_to_raise = 0;
e_config->always_click_to_focus = 0;
e_config->focus_last_focused_per_desktop = 0;
e_config->focus_revert_on_hide_or_close = 1;
}
else if (cfdata->mode == E_FOCUS_MOUSE)
{
@ -101,6 +107,8 @@ _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
e_config->pass_click_on = 1;
e_config->always_click_to_raise = 0;
e_config->always_click_to_focus = 0;
e_config->focus_last_focused_per_desktop = 0;
e_config->focus_revert_on_hide_or_close = 0;
}
else
{
@ -109,6 +117,8 @@ _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
e_config->pass_click_on = 1;
e_config->always_click_to_raise = 0;
e_config->always_click_to_focus = 0;
e_config->focus_last_focused_per_desktop = 1;
e_config->focus_revert_on_hide_or_close = 1;
}
e_border_button_bindings_grab_all();
e_config_save_queue();
@ -125,6 +135,8 @@ _advanced_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
e_config->pass_click_on = cfdata->pass_click_on;
e_config->always_click_to_raise = cfdata->always_click_to_raise;
e_config->always_click_to_focus = cfdata->always_click_to_focus;
e_config->focus_last_focused_per_desktop = cfdata->focus_last_focused_per_desktop;
e_config->focus_revert_on_hide_or_close = cfdata->focus_revert_on_hide_or_close;
e_border_button_bindings_grab_all();
e_config_save_queue();
return 1; /* Apply was OK */
@ -191,6 +203,10 @@ _advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data
e_widget_framelist_object_append(of, ob);
ob = e_widget_check_add(evas, _("A click in a window always focuses it"), &(cfdata->always_click_to_focus));
e_widget_framelist_object_append(of, ob);
ob = e_widget_check_add(evas, _("Refocus last focused window on desktop switch"), &(cfdata->focus_last_focused_per_desktop));
e_widget_framelist_object_append(of, ob);
ob = e_widget_check_add(evas, _("Revert focus when hiding or closing a window"), &(cfdata->focus_revert_on_hide_or_close));
e_widget_framelist_object_append(of, ob);
e_widget_list_object_append(o, of, 1, 1, 0.5);
return o;

View File

@ -49,6 +49,9 @@ static void _e_menu_reposition (E_Menu *m);
static int _e_menu_active_call (void);
static void _e_menu_item_activate_next (void);
static void _e_menu_item_activate_previous (void);
static void _e_menu_item_activate_first (void);
static void _e_menu_item_activate_last (void);
static void _e_menu_item_activate_nth (int n);
static void _e_menu_activate_next (void);
static void _e_menu_activate_previous (void);
static void _e_menu_activate_first (void);
@ -194,6 +197,7 @@ e_menu_activate_key(E_Menu *m, E_Zone *zone, int x, int y, int w, int h, int dir
_e_menu_activate_last();
break;
case E_MENU_POP_DIRECTION_DOWN:
_e_menu_realize(m);
m->cur.x = x + w;
m->cur.y = y + h;
_e_menu_activate_first();
@ -726,6 +730,7 @@ e_menu_item_active_set(E_Menu_Item *mi, int active)
E_Menu_Item *pmi;
pmi = _e_menu_item_active_get();
if (mi == pmi) return;
if (pmi) e_menu_item_active_set(pmi, 0);
mi->active = 1;
if (mi->bg_object)
@ -1927,6 +1932,84 @@ _e_menu_item_activate_previous(void)
_e_menu_activate_first();
}
static void
_e_menu_item_activate_first(void)
{
E_Menu *m;
Evas_List *ll;
E_Menu_Item *mi;
/* FIXME: inefficient. should track current menu and active item */
m = _e_menu_active_get();
if (m)
{
ll = m->items;
mi = ll->data;
while ((mi->separator) && (ll->next))
{
ll = ll->next;
mi = ll->data;
}
if (mi->separator) return;
e_menu_item_active_set(mi, 1);
_e_menu_item_ensure_onscreen(mi);
return;
}
_e_menu_activate_first();
}
static void
_e_menu_item_activate_last(void)
{
E_Menu *m;
Evas_List *ll;
E_Menu_Item *mi;
/* FIXME: inefficient. should track current menu and active item */
m = _e_menu_active_get();
if (m)
{
ll = evas_list_last(m->items);
mi = ll->data;
while ((mi->separator) && (ll->prev))
{
ll = ll->prev;
mi = ll->data;
}
if (mi->separator) return;
e_menu_item_active_set(mi, 1);
_e_menu_item_ensure_onscreen(mi);
return;
}
_e_menu_activate_first();
}
static void
_e_menu_item_activate_nth(int n)
{
E_Menu *m;
E_Menu_Item *mi;
Evas_List *ll;
int i;
mi = _e_menu_item_active_get();
if (!mi)
{
_e_menu_activate_first();
mi = _e_menu_item_active_get();
if (!mi) return;
}
m = mi->menu;
for (i = -1, ll = m->items; ll; ll = ll->next)
{
mi = ll->data;
if (!mi->separator) i++;
if (i == n) break;
}
e_menu_item_active_set(mi, 1);
_e_menu_item_ensure_onscreen(mi);
}
static void
_e_menu_activate_next(void)
{
@ -2346,45 +2429,56 @@ _e_menu_cb_key_down(void *data, int type, void *event)
ev = event;
if (ev->win != _e_menu_win) return 1;
if (!strcmp(ev->keysymbol, "Up"))
if ((!strcmp(ev->keysymbol, "Up")) ||
(!strcmp(ev->keysymbol, "KP_Up")))
_e_menu_item_activate_previous();
else if (!strcmp(ev->keysymbol, "Down"))
else if ((!strcmp(ev->keysymbol, "Down")) ||
(!strcmp(ev->keysymbol, "KP_Down")))
_e_menu_item_activate_next();
else if (!strcmp(ev->keysymbol, "Left"))
else if ((!strcmp(ev->keysymbol, "Left")) ||
(!strcmp(ev->keysymbol, "KP_Left")))
_e_menu_activate_previous();
else if (!strcmp(ev->keysymbol, "Right"))
else if ((!strcmp(ev->keysymbol, "Right")) ||
(!strcmp(ev->keysymbol, "KP_Right")))
_e_menu_activate_next();
else if ((!strcmp(ev->keysymbol, "Home")) ||
(!strcmp(ev->keysymbol, "KP_Home")))
_e_menu_item_activate_first();
else if ((!strcmp(ev->keysymbol, "End")) ||
(!strcmp(ev->keysymbol, "KP_End")))
_e_menu_item_activate_last();
else if (!strcmp(ev->keysymbol, "space"))
{
_e_menu_active_call();
}
else if (!strcmp(ev->keysymbol, "Return"))
else if ((!strcmp(ev->keysymbol, "Return")) ||
(!strcmp(ev->keysymbol, "KP_Enter")))
{
_e_menu_active_call();
_e_menu_deactivate_all();
}
else if (!strcmp(ev->keysymbol, "Escape"))
_e_menu_deactivate_all();
else if (!strcmp(ev->keysymbol, "1"))
_e_menu_activate_nth(0);
else if (!strcmp(ev->keysymbol, "2"))
_e_menu_activate_nth(1);
else if (!strcmp(ev->keysymbol, "3"))
_e_menu_activate_nth(2);
else if (!strcmp(ev->keysymbol, "4"))
_e_menu_activate_nth(3);
else if (!strcmp(ev->keysymbol, "5"))
_e_menu_activate_nth(4);
else if (!strcmp(ev->keysymbol, "6"))
_e_menu_activate_nth(5);
else if (!strcmp(ev->keysymbol, "7"))
_e_menu_activate_nth(6);
else if (!strcmp(ev->keysymbol, "8"))
_e_menu_activate_nth(7);
else if (!strcmp(ev->keysymbol, "9"))
_e_menu_activate_nth(8);
else if (!strcmp(ev->keysymbol, "0"))
_e_menu_activate_nth(9);
else if ((!strcmp(ev->keysymbol, "1")) || (!strcmp(ev->keysymbol, "KP_1")))
_e_menu_item_activate_first();
else if ((!strcmp(ev->keysymbol, "2")) || (!strcmp(ev->keysymbol, "KP_2")))
_e_menu_item_activate_nth(1);
else if ((!strcmp(ev->keysymbol, "3")) || (!strcmp(ev->keysymbol, "KP_3")))
_e_menu_item_activate_nth(2);
else if ((!strcmp(ev->keysymbol, "4")) || (!strcmp(ev->keysymbol, "KP_4")))
_e_menu_item_activate_nth(3);
else if ((!strcmp(ev->keysymbol, "5")) || (!strcmp(ev->keysymbol, "KP_5")))
_e_menu_item_activate_nth(4);
else if ((!strcmp(ev->keysymbol, "6")) || (!strcmp(ev->keysymbol, "KP_6")))
_e_menu_item_activate_nth(5);
else if ((!strcmp(ev->keysymbol, "7")) || (!strcmp(ev->keysymbol, "KP_7")))
_e_menu_item_activate_nth(6);
else if ((!strcmp(ev->keysymbol, "8")) || (!strcmp(ev->keysymbol, "KP_8")))
_e_menu_item_activate_nth(7);
else if ((!strcmp(ev->keysymbol, "9")) || (!strcmp(ev->keysymbol, "KP_9")))
_e_menu_item_activate_nth(8);
else if ((!strcmp(ev->keysymbol, "0")) || (!strcmp(ev->keysymbol, "KP_0")))
_e_menu_item_activate_last();
return 1;
}