implement most of the locks

SVN revision: 15638
This commit is contained in:
Carsten Haitzler 2005-07-04 10:24:22 +00:00
parent f18b13c902
commit b7e6e8b1f2
8 changed files with 769 additions and 614 deletions

6
TODO
View File

@ -8,6 +8,9 @@ Some of the things (in very short form) that need to be done to E17...
BUGS / FIXES BUGS / FIXES
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
* e_hints.c manually changes flags on a border isnetad of calling
e_border_stick() for exampe or the calls in e_border.c - add calls as needed
to e_border.c. before calling check the lock flags too.
* BUG: in general fullscreen needs work, cleaning and testing. dont allow * BUG: in general fullscreen needs work, cleaning and testing. dont allow
desktop switches for the desk a fullscreened window is on, nor allow windows desktop switches for the desk a fullscreened window is on, nor allow windows
to be raised above the fs win etc. ie the app must seem to be entirely fs for to be raised above the fs win etc. ie the app must seem to be entirely fs for
@ -40,8 +43,7 @@ Some of the things (in very short form) that need to be done to E17...
ESSENTIAL FEATURES ESSENTIAL FEATURES
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
* add window placement optiond like place at pointer * add window placement options like place at pointer
* add option like "focus all new windows" etc.
* shaded windows should not allow border changes by the user * shaded windows should not allow border changes by the user
* if a border is borderless it should not be allowed to be shaded (padl/r/t/b * if a border is borderless it should not be allowed to be shaded (padl/r/t/b
is 0) is 0)

View File

@ -58,14 +58,16 @@ ACT_FN_GO(window_move)
if (!obj) obj = E_OBJECT(e_border_focused_get()); if (!obj) obj = E_OBJECT(e_border_focused_get());
if (!obj) return; if (!obj) return;
if (obj->type != E_BORDER_TYPE) return; if (obj->type != E_BORDER_TYPE) return;
e_border_act_move_begin((E_Border *)obj, NULL); if (!((E_Border *)obj)->lock_user_location)
e_border_act_move_begin((E_Border *)obj, NULL);
} }
ACT_FN_GO_MOUSE(window_move) ACT_FN_GO_MOUSE(window_move)
{ {
if (!obj) obj = E_OBJECT(e_border_focused_get()); if (!obj) obj = E_OBJECT(e_border_focused_get());
if (!obj) return; if (!obj) return;
if (obj->type != E_BORDER_TYPE) return; if (obj->type != E_BORDER_TYPE) return;
e_border_act_move_begin((E_Border *)obj, ev); if (!((E_Border *)obj)->lock_user_location)
e_border_act_move_begin((E_Border *)obj, ev);
} }
ACT_FN_END(window_move) ACT_FN_END(window_move)
{ {
@ -88,14 +90,16 @@ ACT_FN_GO(window_resize)
if (!obj) obj = E_OBJECT(e_border_focused_get()); if (!obj) obj = E_OBJECT(e_border_focused_get());
if (!obj) return; if (!obj) return;
if (obj->type != E_BORDER_TYPE) return; if (obj->type != E_BORDER_TYPE) return;
e_border_act_resize_begin((E_Border *)obj, NULL); if (!((E_Border *)obj)->lock_user_size)
e_border_act_resize_begin((E_Border *)obj, NULL);
} }
ACT_FN_GO_MOUSE(window_resize) ACT_FN_GO_MOUSE(window_resize)
{ {
if (!obj) obj = E_OBJECT(e_border_focused_get()); if (!obj) obj = E_OBJECT(e_border_focused_get());
if (!obj) return; if (!obj) return;
if (obj->type != E_BORDER_TYPE) return; if (obj->type != E_BORDER_TYPE) return;
e_border_act_resize_begin((E_Border *)obj, ev); if (!((E_Border *)obj)->lock_user_size)
e_border_act_resize_begin((E_Border *)obj, ev);
} }
ACT_FN_END(window_resize) ACT_FN_END(window_resize)
{ {
@ -157,7 +161,8 @@ ACT_FN_GO(window_raise)
obj = E_OBJECT(e_border_focused_get()); obj = E_OBJECT(e_border_focused_get());
if (!obj) return; if (!obj) return;
} }
e_border_raise((E_Border *)obj); if (!((E_Border *)obj)->lock_user_stacking)
e_border_raise((E_Border *)obj);
} }
/***************************************************************************/ /***************************************************************************/
@ -170,7 +175,8 @@ ACT_FN_GO(window_lower)
obj = E_OBJECT(e_border_focused_get()); obj = E_OBJECT(e_border_focused_get());
if (!obj) return; if (!obj) return;
} }
e_border_lower((E_Border *)obj); if (!((E_Border *)obj)->lock_user_stacking)
e_border_lower((E_Border *)obj);
} }
/***************************************************************************/ /***************************************************************************/
@ -183,7 +189,8 @@ ACT_FN_GO(window_close)
obj = E_OBJECT(e_border_focused_get()); obj = E_OBJECT(e_border_focused_get());
if (!obj) return; if (!obj) return;
} }
e_border_act_close_begin((E_Border *)obj); if (!((E_Border *)obj)->lock_close)
e_border_act_close_begin((E_Border *)obj);
} }
/***************************************************************************/ /***************************************************************************/
@ -196,7 +203,8 @@ ACT_FN_GO(window_kill)
obj = E_OBJECT(e_border_focused_get()); obj = E_OBJECT(e_border_focused_get());
if (!obj) return; if (!obj) return;
} }
e_border_act_kill_begin((E_Border *)obj); if (!((E_Border *)obj)->lock_close)
e_border_act_kill_begin((E_Border *)obj);
} }
/***************************************************************************/ /***************************************************************************/
@ -209,6 +217,7 @@ ACT_FN_GO(window_sticky_toggle)
obj = E_OBJECT(e_border_focused_get()); obj = E_OBJECT(e_border_focused_get());
if (!obj) return; if (!obj) return;
} }
if (!((E_Border *)obj)->lock_user_sticky)
{ {
E_Border *bd; E_Border *bd;
@ -228,6 +237,7 @@ ACT_FN_GO(window_iconic_toggle)
obj = E_OBJECT(e_border_focused_get()); obj = E_OBJECT(e_border_focused_get());
if (!obj) return; if (!obj) return;
} }
if (!((E_Border *)obj)->lock_user_iconify)
{ {
E_Border *bd; E_Border *bd;
@ -247,6 +257,7 @@ ACT_FN_GO(window_maximized_toggle)
obj = E_OBJECT(e_border_focused_get()); obj = E_OBJECT(e_border_focused_get());
if (!obj) return; if (!obj) return;
} }
if (!((E_Border *)obj)->lock_user_maximize)
{ {
E_Border *bd; E_Border *bd;
@ -266,6 +277,7 @@ ACT_FN_GO(window_shaded_toggle)
obj = E_OBJECT(e_border_focused_get()); obj = E_OBJECT(e_border_focused_get());
if (!obj) return; if (!obj) return;
} }
if (!((E_Border *)obj)->lock_user_shade)
{ {
E_Border *bd; E_Border *bd;

View File

@ -1686,6 +1686,7 @@ e_border_act_menu_begin(E_Border *bd, Ecore_X_Event_Mouse_Button_Down *ev, int k
void void
e_border_act_close_begin(E_Border *bd) e_border_act_close_begin(E_Border *bd)
{ {
if (bd->lock_close) return;
if (bd->client.icccm.delete_request) if (bd->client.icccm.delete_request)
{ {
bd->delete_requested = 1; bd->delete_requested = 1;
@ -1700,6 +1701,7 @@ e_border_act_close_begin(E_Border *bd)
void void
e_border_act_kill_begin(E_Border *bd) e_border_act_kill_begin(E_Border *bd)
{ {
if (bd->lock_close) return;
if ((bd->client.netwm.pid > 1) && (e_config->kill_process)) if ((bd->client.netwm.pid > 1) && (e_config->kill_process))
{ {
kill(bd->client.netwm.pid, SIGINT); kill(bd->client.netwm.pid, SIGINT);
@ -2030,12 +2032,16 @@ _e_border_cb_window_show_request(void *data, int ev_type, void *ev)
bd = e_border_find_by_client_window(e->win); bd = e_border_find_by_client_window(e->win);
if (!bd) return 1; if (!bd) return 1;
if (bd->iconic) if (bd->iconic)
e_border_uniconify(bd); {
if (!bd->lock_client_iconify)
e_border_uniconify(bd);
}
else else
{ {
/* FIXME: make border "urgent" for a bit - it wants attention */ /* FIXME: make border "urgent" for a bit - it wants attention */
/* e_border_show(bd); */ /* e_border_show(bd); */
e_border_raise(bd); if (!bd->lock_client_stacking)
e_border_raise(bd);
} }
return 1; return 1;
} }
@ -2201,57 +2207,60 @@ _e_border_cb_window_configure_request(void *data, int ev_type, void *ev)
if (!bd->lock_client_size) if (!bd->lock_client_size)
e_border_resize(bd, w, h); e_border_resize(bd, w, h);
} }
if ((e->value_mask & ECORE_X_WINDOW_CONFIGURE_MASK_STACK_MODE) && if (!bd->lock_client_stacking)
(e->value_mask & ECORE_X_WINDOW_CONFIGURE_MASK_SIBLING))
{ {
E_Border *obd; if ((e->value_mask & ECORE_X_WINDOW_CONFIGURE_MASK_STACK_MODE) &&
(e->value_mask & ECORE_X_WINDOW_CONFIGURE_MASK_SIBLING))
{
E_Border *obd;
if (e->detail == ECORE_X_WINDOW_STACK_ABOVE) if (e->detail == ECORE_X_WINDOW_STACK_ABOVE)
{ {
obd = e_border_find_by_client_window(e->abovewin); obd = e_border_find_by_client_window(e->abovewin);
if (obd) if (obd)
e_border_stack_above(bd, obd); e_border_stack_above(bd, obd);
}
else if (e->detail == ECORE_X_WINDOW_STACK_BELOW)
{
obd = e_border_find_by_client_window(e->abovewin);
if (obd)
e_border_stack_below(bd, obd);
}
else if (e->detail == ECORE_X_WINDOW_STACK_TOP_IF)
{
/* FIXME: do */
}
else if (e->detail == ECORE_X_WINDOW_STACK_BOTTOM_IF)
{
/* FIXME: do */
}
else if (e->detail == ECORE_X_WINDOW_STACK_OPPOSITE)
{
/* FIXME: do */
}
} }
else if (e->detail == ECORE_X_WINDOW_STACK_BELOW) else if (e->value_mask & ECORE_X_WINDOW_CONFIGURE_MASK_STACK_MODE)
{ {
obd = e_border_find_by_client_window(e->abovewin); if (e->detail == ECORE_X_WINDOW_STACK_ABOVE)
if (obd) {
e_border_stack_below(bd, obd); e_border_raise(bd);
} }
else if (e->detail == ECORE_X_WINDOW_STACK_TOP_IF) else if (e->detail == ECORE_X_WINDOW_STACK_BELOW)
{ {
/* FIXME: do */ e_border_lower(bd);
} }
else if (e->detail == ECORE_X_WINDOW_STACK_BOTTOM_IF) else if (e->detail == ECORE_X_WINDOW_STACK_TOP_IF)
{ {
/* FIXME: do */ /* FIXME: do */
} }
else if (e->detail == ECORE_X_WINDOW_STACK_OPPOSITE) else if (e->detail == ECORE_X_WINDOW_STACK_BOTTOM_IF)
{ {
/* FIXME: do */ /* FIXME: do */
} }
} else if (e->detail == ECORE_X_WINDOW_STACK_OPPOSITE)
else if (e->value_mask & ECORE_X_WINDOW_CONFIGURE_MASK_STACK_MODE) {
{ /* FIXME: do */
if (e->detail == ECORE_X_WINDOW_STACK_ABOVE) }
{
e_border_raise(bd);
}
else if (e->detail == ECORE_X_WINDOW_STACK_BELOW)
{
e_border_lower(bd);
}
else if (e->detail == ECORE_X_WINDOW_STACK_TOP_IF)
{
/* FIXME: do */
}
else if (e->detail == ECORE_X_WINDOW_STACK_BOTTOM_IF)
{
/* FIXME: do */
}
else if (e->detail == ECORE_X_WINDOW_STACK_OPPOSITE)
{
/* FIXME: do */
} }
} }
return 1; return 1;
@ -2656,7 +2665,8 @@ _e_border_cb_window_move_resize_request(void *data, int ev_type, void *ev)
bd->moveinfo.down.my = e->y; bd->moveinfo.down.my = e->y;
grabbed = 1; grabbed = 1;
e_border_raise(bd); if (!bd->lock_user_stacking)
e_border_raise(bd);
if (e->direction == RESIZE_TL) if (e->direction == RESIZE_TL)
{ {
if (!_e_border_resize_begin(bd)) if (!_e_border_resize_begin(bd))
@ -3036,37 +3046,56 @@ _e_border_cb_signal_action(void *data, Evas_Object *obj, const char *emission, c
if (!strcmp(source, "close")) if (!strcmp(source, "close"))
{ {
e_border_act_close_begin(bd); if (!bd->lock_close)
e_border_act_close_begin(bd);
} }
else if (!strcmp(source, "shade_up") || !strcmp(source, "shade")) else if (!strcmp(source, "shade_up") || !strcmp(source, "shade"))
{ {
if (bd->shaded) e_border_unshade(bd, E_DIRECTION_UP); if (!bd->lock_user_shade)
else e_border_shade(bd, E_DIRECTION_UP); {
if (bd->shaded) e_border_unshade(bd, E_DIRECTION_UP);
else e_border_shade(bd, E_DIRECTION_UP);
}
} }
else if (!strcmp(source, "shade_down")) else if (!strcmp(source, "shade_down"))
{ {
if (bd->shaded) e_border_unshade(bd, E_DIRECTION_DOWN); if (!bd->lock_user_shade)
else e_border_shade(bd, E_DIRECTION_DOWN); {
if (bd->shaded) e_border_unshade(bd, E_DIRECTION_DOWN);
else e_border_shade(bd, E_DIRECTION_DOWN);
}
} }
else if (!strcmp(source, "shade_left")) else if (!strcmp(source, "shade_left"))
{ {
if (bd->shaded) e_border_unshade(bd, E_DIRECTION_LEFT); if (!bd->lock_user_shade)
else e_border_shade(bd, E_DIRECTION_LEFT); {
if (bd->shaded) e_border_unshade(bd, E_DIRECTION_LEFT);
else e_border_shade(bd, E_DIRECTION_LEFT);
}
} }
else if (!strcmp(source, "shade_right")) else if (!strcmp(source, "shade_right"))
{ {
if (bd->shaded) e_border_unshade(bd, E_DIRECTION_RIGHT); if (!bd->lock_user_shade)
else e_border_shade(bd, E_DIRECTION_RIGHT); {
if (bd->shaded) e_border_unshade(bd, E_DIRECTION_RIGHT);
else e_border_shade(bd, E_DIRECTION_RIGHT);
}
} }
else if (!strcmp(source, "maximize")) else if (!strcmp(source, "maximize"))
{ {
if (bd->maximized) e_border_unmaximize(bd); if (!bd->lock_user_maximize)
else e_border_maximize(bd, e_config->maximize_policy); {
if (bd->maximized) e_border_unmaximize(bd);
else e_border_maximize(bd, e_config->maximize_policy);
}
} }
else if (!strcmp(source, "iconify")) else if (!strcmp(source, "iconify"))
{ {
if (bd->iconic) e_border_uniconify(bd); if (!bd->lock_user_iconify)
else e_border_iconify(bd); {
if (bd->iconic) e_border_uniconify(bd);
else e_border_iconify(bd);
}
} }
else if (!strcmp(source, "menu")) else if (!strcmp(source, "menu"))
{ {
@ -3075,9 +3104,15 @@ _e_border_cb_signal_action(void *data, Evas_Object *obj, const char *emission, c
evas_pointer_canvas_xy_get(bd->bg_evas , &x, &y); evas_pointer_canvas_xy_get(bd->bg_evas , &x, &y);
_e_border_menu_show(bd, x + bd->x, y + bd->y, 0); _e_border_menu_show(bd, x + bd->x, y + bd->y, 0);
} }
else if (!strcmp(source, "raise"))
{
if (!bd->lock_user_stacking)
e_border_raise(bd);
}
else if (!strcmp(source, "lower")) else if (!strcmp(source, "lower"))
{ {
e_border_lower(bd); if (!bd->lock_user_stacking)
e_border_lower(bd);
} }
} }
@ -3666,27 +3701,30 @@ _e_border_eval(E_Border *bd)
if (bd->client.netwm.fetch.type) if (bd->client.netwm.fetch.type)
{ {
e_hints_window_type_get(bd); e_hints_window_type_get(bd);
if (bd->client.netwm.type == ECORE_X_WINDOW_TYPE_DESKTOP) if ((!bd->lock_border) || (!bd->client.border.name))
{ {
if (bd->client.border.name) free(bd->client.border.name); if (bd->client.netwm.type == ECORE_X_WINDOW_TYPE_DESKTOP)
bd->client.border.name = strdup("borderless");
bd->client.border.changed = 1;
}
if (bd->client.netwm.type == ECORE_X_WINDOW_TYPE_DOCK)
{
if (bd->client.border.name) free(bd->client.border.name);
bd->client.border.name = strdup("borderless");
bd->client.border.changed = 1;
if (!bd->client.netwm.state.skip_pager)
{ {
bd->client.netwm.state.skip_pager = 1; if (bd->client.border.name) free(bd->client.border.name);
bd->client.netwm.update.state = 1; bd->client.border.name = strdup("borderless");
bd->client.border.changed = 1;
} }
if (!bd->client.netwm.state.skip_taskbar) if (bd->client.netwm.type == ECORE_X_WINDOW_TYPE_DOCK)
{ {
bd->client.netwm.state.skip_taskbar = 1; if (bd->client.border.name) free(bd->client.border.name);
bd->client.netwm.update.state = 1; bd->client.border.name = strdup("borderless");
bd->client.border.changed = 1;
if (!bd->client.netwm.state.skip_pager)
{
bd->client.netwm.state.skip_pager = 1;
bd->client.netwm.update.state = 1;
}
if (!bd->client.netwm.state.skip_taskbar)
{
bd->client.netwm.state.skip_taskbar = 1;
bd->client.netwm.update.state = 1;
}
} }
} }
@ -3820,14 +3858,17 @@ _e_border_eval(E_Border *bd)
} }
if (bd->client.mwm.borderless != pb) if (bd->client.mwm.borderless != pb)
{ {
if (bd->client.border.name) free(bd->client.border.name); if ((!bd->lock_border) || (!bd->client.border.name))
if (bd->client.mwm.borderless) {
bd->client.border.name = strdup("borderless"); if (bd->client.border.name) free(bd->client.border.name);
else if (bd->client.mwm.borderless)
bd->client.border.name = strdup("default"); bd->client.border.name = strdup("borderless");
else
bd->client.border.name = strdup("default");
// if (bd->client.mwm.borderless) // if (bd->client.mwm.borderless)
// printf("client %s borderless\n", bd->client.icccm.title); // printf("client %s borderless\n", bd->client.icccm.title);
bd->client.border.changed = 1; bd->client.border.changed = 1;
}
} }
bd->client.mwm.fetch.hints = 0; bd->client.mwm.fetch.hints = 0;
} }
@ -4512,7 +4553,10 @@ _e_border_eval(E_Border *bd)
if (bd->take_focus) if (bd->take_focus)
{ {
if (e_config->focus_setting == E_FOCUS_NEW_WINDOW) if (e_config->focus_setting == E_FOCUS_NEW_WINDOW)
e_border_focus_set(bd, 1, 1); {
if (!bd->lock_focus_out)
e_border_focus_set(bd, 1, 1);
}
else else
{ {
if (bd->client.icccm.transient_for != 0) if (bd->client.icccm.transient_for != 0)
@ -4522,7 +4566,10 @@ _e_border_eval(E_Border *bd)
((e_config->focus_setting == E_FOCUS_NEW_DIALOG_IF_OWNER_FOCUSED) && ((e_config->focus_setting == E_FOCUS_NEW_DIALOG_IF_OWNER_FOCUSED) &&
(e_border_find_by_client_window(bd->client.icccm.transient_for) == (e_border_find_by_client_window(bd->client.icccm.transient_for) ==
e_border_focused_get()))) e_border_focused_get())))
e_border_focus_set(bd, 1, 1); {
if (!bd->lock_focus_out)
e_border_focus_set(bd, 1, 1);
}
} }
} }
bd->take_focus = 0; bd->take_focus = 0;
@ -4931,94 +4978,121 @@ _e_border_menu_show(E_Border *bd, Evas_Coord x, Evas_Coord y, int key)
bd->border_menu = m; bd->border_menu = m;
e_menu_post_deactivate_callback_set(m, _e_border_cb_border_menu_end, NULL); e_menu_post_deactivate_callback_set(m, _e_border_cb_border_menu_end, NULL);
mi = e_menu_item_new(m); if (!bd->lock_close)
e_menu_item_label_set(mi, _("Close")); {
e_menu_item_callback_set(mi, _e_border_menu_cb_close, bd); mi = e_menu_item_new(m);
e_menu_item_icon_edje_set(mi, e_menu_item_label_set(mi, _("Close"));
(char *)e_theme_edje_file_get("base/theme/borders", e_menu_item_callback_set(mi, _e_border_menu_cb_close, bd);
"widgets/border/default/close"), e_menu_item_icon_edje_set(mi,
"widgets/border/default/close"); (char *)e_theme_edje_file_get("base/theme/borders",
"widgets/border/default/close"),
"widgets/border/default/close");
}
mi = e_menu_item_new(m); if (!bd->lock_user_iconify)
e_menu_item_label_set(mi, _("Iconify")); {
e_menu_item_callback_set(mi, _e_border_menu_cb_iconify, bd); mi = e_menu_item_new(m);
e_menu_item_icon_edje_set(mi, e_menu_item_label_set(mi, _("Iconify"));
(char *)e_theme_edje_file_get("base/theme/borders", e_menu_item_callback_set(mi, _e_border_menu_cb_iconify, bd);
"widgets/border/default/minimize"), e_menu_item_icon_edje_set(mi,
"widgets/border/default/minimize"); (char *)e_theme_edje_file_get("base/theme/borders",
"widgets/border/default/minimize"),
"widgets/border/default/minimize");
}
mi = e_menu_item_new(m); mi = e_menu_item_new(m);
e_menu_item_separator_set(mi, 1); e_menu_item_separator_set(mi, 1);
mi = e_menu_item_new(m); if (!bd->lock_close)
e_menu_item_label_set(mi, _("Kill")); {
e_menu_item_callback_set(mi, _e_border_menu_cb_kill, bd); mi = e_menu_item_new(m);
e_menu_item_icon_edje_set(mi, e_menu_item_label_set(mi, _("Kill"));
(char *)e_theme_edje_file_get("base/theme/borders", e_menu_item_callback_set(mi, _e_border_menu_cb_kill, bd);
"widgets/border/default/kill"), e_menu_item_icon_edje_set(mi,
"widgets/border/default/kill"); (char *)e_theme_edje_file_get("base/theme/borders",
mi = e_menu_item_new(m); "widgets/border/default/kill"),
e_menu_item_separator_set(mi, 1); "widgets/border/default/kill");
mi = e_menu_item_new(m);
e_menu_item_separator_set(mi, 1);
}
mi = e_menu_item_new(m); if (!bd->lock_user_shade)
e_menu_item_label_set(mi, _("Shaded")); {
e_menu_item_check_set(mi, 1); mi = e_menu_item_new(m);
e_menu_item_toggle_set(mi, (bd->shaded ? 1 : 0)); e_menu_item_label_set(mi, _("Shaded"));
e_menu_item_callback_set(mi, _e_border_menu_cb_shade, bd); e_menu_item_check_set(mi, 1);
e_menu_item_icon_edje_set(mi, e_menu_item_toggle_set(mi, (bd->shaded ? 1 : 0));
(char *)e_theme_edje_file_get("base/theme/borders", e_menu_item_callback_set(mi, _e_border_menu_cb_shade, bd);
"widgets/border/default/shade"), e_menu_item_icon_edje_set(mi,
"widgets/border/default/shade"); (char *)e_theme_edje_file_get("base/theme/borders",
"widgets/border/default/shade"),
"widgets/border/default/shade");
}
mi = e_menu_item_new(m); if (!bd->lock_user_maximize)
e_menu_item_label_set(mi, _("Maximized")); {
e_menu_item_check_set(mi, 1); mi = e_menu_item_new(m);
e_menu_item_toggle_set(mi, (bd->maximized ? 1 : 0)); e_menu_item_label_set(mi, _("Maximized"));
e_menu_item_callback_set(mi, _e_border_menu_cb_maximize, bd); e_menu_item_check_set(mi, 1);
e_menu_item_icon_edje_set(mi, e_menu_item_toggle_set(mi, (bd->maximized ? 1 : 0));
(char *)e_theme_edje_file_get("base/theme/borders", e_menu_item_callback_set(mi, _e_border_menu_cb_maximize, bd);
"widgets/border/default/maximize"), e_menu_item_icon_edje_set(mi,
"widgets/border/default/maximize"); (char *)e_theme_edje_file_get("base/theme/borders",
"widgets/border/default/maximize"),
"widgets/border/default/maximize");
}
mi = e_menu_item_new(m); if (!bd->lock_user_sticky)
e_menu_item_label_set(mi, _("Sticky")); {
e_menu_item_check_set(mi, 1); mi = e_menu_item_new(m);
e_menu_item_toggle_set(mi, (bd->sticky ? 1 : 0)); e_menu_item_label_set(mi, _("Sticky"));
e_menu_item_callback_set(mi, _e_border_menu_cb_stick, bd); e_menu_item_check_set(mi, 1);
e_menu_item_icon_edje_set(mi, e_menu_item_toggle_set(mi, (bd->sticky ? 1 : 0));
(char *)e_theme_edje_file_get("base/theme/borders", e_menu_item_callback_set(mi, _e_border_menu_cb_stick, bd);
"widgets/border/default/stick"), e_menu_item_icon_edje_set(mi,
"widgets/border/default/stick"); (char *)e_theme_edje_file_get("base/theme/borders",
"widgets/border/default/stick"),
"widgets/border/default/stick");
}
mi = e_menu_item_new(m); if (!bd->lock_user_stacking)
e_menu_item_label_set(mi, _("Always On Top")); {
e_menu_item_check_set(mi, 1); mi = e_menu_item_new(m);
e_menu_item_toggle_set(mi, (bd->layer == 150 ? 1 : 0)); e_menu_item_label_set(mi, _("Always On Top"));
e_menu_item_callback_set(mi, _e_border_menu_cb_on_top, bd); e_menu_item_check_set(mi, 1);
e_menu_item_icon_edje_set(mi, e_menu_item_toggle_set(mi, (bd->layer == 150 ? 1 : 0));
(char *)e_theme_edje_file_get("base/theme/borders", e_menu_item_callback_set(mi, _e_border_menu_cb_on_top, bd);
"widgets/border/default/on_top"), e_menu_item_icon_edje_set(mi,
"widgets/border/default/on_top"); (char *)e_theme_edje_file_get("base/theme/borders",
"widgets/border/default/on_top"),
"widgets/border/default/on_top");
}
mi = e_menu_item_new(m); if (!bd->lock_border)
e_menu_item_label_set(mi, _("Borderless")); {
e_menu_item_check_set(mi, 1); mi = e_menu_item_new(m);
e_menu_item_toggle_set(mi, !strcmp("borderless", bd->client.border.name)); e_menu_item_label_set(mi, _("Borderless"));
e_menu_item_callback_set(mi, _e_border_menu_cb_borderless, bd); e_menu_item_check_set(mi, 1);
e_menu_item_icon_edje_set(mi, e_menu_item_toggle_set(mi, !strcmp("borderless", bd->client.border.name));
(char *)e_theme_edje_file_get("base/theme/borders", e_menu_item_callback_set(mi, _e_border_menu_cb_borderless, bd);
"widgets/border/default/borderless"), e_menu_item_icon_edje_set(mi,
"widgets/border/default/borderless"); (char *)e_theme_edje_file_get("base/theme/borders",
"widgets/border/default/borderless"),
"widgets/border/default/borderless");
}
mi = e_menu_item_new(m); if (!bd->lock_user_fullscreen)
e_menu_item_label_set(mi, _("Fullscreen")); {
e_menu_item_check_set(mi, 1); mi = e_menu_item_new(m);
e_menu_item_toggle_set(mi, bd->fullscreen); e_menu_item_label_set(mi, _("Fullscreen"));
e_menu_item_callback_set(mi, _e_border_menu_cb_fullscreen, bd); e_menu_item_check_set(mi, 1);
e_menu_item_icon_edje_set(mi, e_menu_item_toggle_set(mi, bd->fullscreen);
(char *)e_theme_edje_file_get("base/theme/borders", e_menu_item_callback_set(mi, _e_border_menu_cb_fullscreen, bd);
"widgets/border/default/fullscreen"), e_menu_item_icon_edje_set(mi,
"widgets/border/default/fullscreen"); (char *)e_theme_edje_file_get("base/theme/borders",
"widgets/border/default/fullscreen"),
"widgets/border/default/fullscreen");
}
mi = e_menu_item_new(m); mi = e_menu_item_new(m);
e_menu_item_separator_set(mi, 1); e_menu_item_separator_set(mi, 1);
@ -5101,7 +5175,8 @@ _e_border_menu_cb_close(void *data, E_Menu *m, E_Menu_Item *mi)
E_Border *bd; E_Border *bd;
bd = data; bd = data;
e_border_act_close_begin(bd); if (!bd->lock_close)
e_border_act_close_begin(bd);
} }
static void static void
@ -5110,8 +5185,11 @@ _e_border_menu_cb_iconify(void *data, E_Menu *m, E_Menu_Item *mi)
E_Border *bd; E_Border *bd;
bd = data; bd = data;
if (bd->iconic) e_border_uniconify(bd); if (!bd->lock_user_iconify)
else e_border_iconify(bd); {
if (bd->iconic) e_border_uniconify(bd);
else e_border_iconify(bd);
}
} }
static void static void
@ -5120,7 +5198,8 @@ _e_border_menu_cb_kill(void *data, E_Menu *m, E_Menu_Item *mi)
E_Border *bd; E_Border *bd;
bd = data; bd = data;
e_border_act_kill_begin(bd); if (!bd->lock_close)
e_border_act_kill_begin(bd);
} }
static void static void
@ -5129,8 +5208,11 @@ _e_border_menu_cb_maximize(void *data, E_Menu *m, E_Menu_Item *mi)
E_Border *bd; E_Border *bd;
bd = data; bd = data;
if (bd->maximized) e_border_unmaximize(bd); if (!bd->lock_user_maximize)
else e_border_maximize(bd, e_config->maximize_policy); {
if (bd->maximized) e_border_unmaximize(bd);
else e_border_maximize(bd, e_config->maximize_policy);
}
} }
static void static void
@ -5139,8 +5221,11 @@ _e_border_menu_cb_shade(void *data, E_Menu *m, E_Menu_Item *mi)
E_Border *bd; E_Border *bd;
bd = data; bd = data;
if (bd->shaded) e_border_unshade(bd, E_DIRECTION_UP); if (!bd->lock_user_shade)
else e_border_shade(bd, E_DIRECTION_UP); {
if (bd->shaded) e_border_unshade(bd, E_DIRECTION_UP);
else e_border_shade(bd, E_DIRECTION_UP);
}
} }
static void static void
@ -5171,8 +5256,11 @@ _e_border_menu_cb_stick(void *data, E_Menu *m, E_Menu_Item *mi)
E_Border *bd; E_Border *bd;
bd = data; bd = data;
if (bd->sticky) e_border_unstick(bd); if (!bd->lock_user_sticky)
else e_border_stick(bd); {
if (bd->sticky) e_border_unstick(bd);
else e_border_stick(bd);
}
} }
static void static void
@ -5226,11 +5314,14 @@ _e_border_menu_cb_fullscreen(void *data, E_Menu *m, E_Menu_Item *mi)
bd = data; bd = data;
if (!bd) return; if (!bd) return;
toggle = e_menu_item_toggle_get(mi); if (!bd->lock_user_fullscreen)
if (toggle) {
e_border_fullscreen(bd); toggle = e_menu_item_toggle_get(mi);
else if (toggle)
e_border_unfullscreen(bd); e_border_fullscreen(bd);
else
e_border_unfullscreen(bd);
}
} }
static void static void
@ -5481,7 +5572,8 @@ _e_border_resize_begin(E_Border *bd)
{ {
int w, h; int w, h;
e_border_raise(bd); if (!bd->lock_user_stacking)
e_border_raise(bd);
if ((bd->shaded) || (bd->shading) || (bd->maximized) || (bd->fullscreen) || if ((bd->shaded) || (bd->shading) || (bd->maximized) || (bd->fullscreen) ||
(bd->lock_user_size)) (bd->lock_user_size))
return 0; return 0;
@ -5554,7 +5646,8 @@ _e_border_resize_update(E_Border *bd)
static int static int
_e_border_move_begin(E_Border *bd) _e_border_move_begin(E_Border *bd)
{ {
e_border_raise(bd); if (!bd->lock_user_stacking)
e_border_raise(bd);
if ((bd->maximized) || (bd->fullscreen) || (bd->lock_user_location)) if ((bd->maximized) || (bd->fullscreen) || (bd->lock_user_location))
return 0; return 0;

View File

@ -286,28 +286,28 @@ struct _E_Border
unsigned int take_focus : 1; unsigned int take_focus : 1;
E_Maximize maximized; E_Maximize maximized;
unsigned int lock_user_location : 1; unsigned int lock_user_location : 1; /*DONE*/
unsigned int lock_client_location : 1; unsigned int lock_client_location : 1; /*DONE*/
unsigned int lock_user_size : 1; unsigned int lock_user_size : 1; /*DONE*/
unsigned int lock_client_size : 1; unsigned int lock_client_size : 1; /*DONE*/
unsigned int lock_user_stacking : 1; unsigned int lock_user_stacking : 1; /*DONE*/
unsigned int lock_client_stacking : 1; unsigned int lock_client_stacking : 1; /*DONE*/
unsigned int lock_user_iconify : 1; unsigned int lock_user_iconify : 1; /*DONE*/
unsigned int lock_client_iconify : 1; unsigned int lock_client_iconify : 1; /*DONE*/
unsigned int lock_user_desk : 1; unsigned int lock_user_desk : 1;
unsigned int lock_client_desk : 1; unsigned int lock_client_desk : 1;
unsigned int lock_user_sticky : 1; unsigned int lock_user_sticky : 1; /*DONE*/
unsigned int lock_client_sticky : 1; unsigned int lock_client_sticky : 1; /*DONE*/
unsigned int lock_user_shade : 1; unsigned int lock_user_shade : 1; /*DONE*/
unsigned int lock_client_shade : 1; unsigned int lock_client_shade : 1; /*DONE*/
unsigned int lock_user_maximize : 1; unsigned int lock_user_maximize : 1; /*DONE*/
unsigned int lock_client_mazimize : 1; unsigned int lock_client_mazimize : 1; /*DONE*/
unsigned int lock_user_fullscreen : 1; unsigned int lock_user_fullscreen : 1; /*DONE*/
unsigned int lock_client_fullscreen : 1; unsigned int lock_client_fullscreen : 1; /*DONE*/
unsigned int lock_border : 1; unsigned int lock_border : 1; /*DONE*/
unsigned int lock_close : 1; unsigned int lock_close : 1; /*DONE*/
unsigned int lock_focus_in : 1; unsigned int lock_focus_in : 1; /*DONE*/
unsigned int lock_focus_out : 1; unsigned int lock_focus_out : 1; /*DONE*/
unsigned int lock_life : 1; unsigned int lock_life : 1;
double ping; double ping;

View File

@ -32,13 +32,19 @@ e_focus_event_mouse_in(E_Border* bd)
{ {
if ((e_config->focus_policy == E_FOCUS_MOUSE) || if ((e_config->focus_policy == E_FOCUS_MOUSE) ||
(e_config->focus_policy == E_FOCUS_SLOPPY)) (e_config->focus_policy == E_FOCUS_SLOPPY))
e_border_focus_set(bd, 1, 1); {
if (!bd->lock_focus_out)
e_border_focus_set(bd, 1, 1);
}
bd->raise_timer = NULL; bd->raise_timer = NULL;
if (e_config->use_auto_raise) if (e_config->use_auto_raise)
{ {
if (e_config->auto_raise_delay == 0.0) if (e_config->auto_raise_delay == 0.0)
e_border_raise(bd); {
if (!bd->lock_user_stacking)
e_border_raise(bd);
}
else else
bd->raise_timer = ecore_timer_add(e_config->auto_raise_delay, _e_focus_raise_timer, bd); bd->raise_timer = ecore_timer_add(e_config->auto_raise_delay, _e_focus_raise_timer, bd);
} }
@ -48,7 +54,10 @@ void
e_focus_event_mouse_out(E_Border* bd) e_focus_event_mouse_out(E_Border* bd)
{ {
if (e_config->focus_policy == E_FOCUS_MOUSE) if (e_config->focus_policy == E_FOCUS_MOUSE)
e_border_focus_set(bd, 0, 1); {
if (!bd->lock_focus_in)
e_border_focus_set(bd, 0, 1);
}
if (bd->raise_timer) if (bd->raise_timer)
{ {
@ -62,12 +71,15 @@ e_focus_event_mouse_down(E_Border* bd)
{ {
if (e_config->focus_policy == E_FOCUS_CLICK) if (e_config->focus_policy == E_FOCUS_CLICK)
{ {
e_border_focus_set(bd, 1, 1); if (!bd->lock_focus_out)
e_border_raise(bd); e_border_focus_set(bd, 1, 1);
if (!bd->lock_user_stacking)
e_border_raise(bd);
} }
else if (e_config->always_click_to_raise) else if (e_config->always_click_to_raise)
{ {
e_border_raise(bd); if (!bd->lock_user_stacking)
e_border_raise(bd);
} }
} }
@ -156,7 +168,11 @@ e_focus_setdown(E_Border *bd)
static int static int
_e_focus_raise_timer(void* data) _e_focus_raise_timer(void* data)
{ {
e_border_raise((E_Border*)data); E_Border *bd;
((E_Border*)data)->raise_timer = NULL;
bd = data;
if (!bd->lock_user_stacking)
e_border_raise(bd);
bd->raise_timer = NULL;
return 0; return 0;
} }

View File

@ -475,363 +475,364 @@ e_hints_window_state_update(E_Border *bd, Ecore_X_Window_State state,
switch (state) switch (state)
{ {
case ECORE_X_WINDOW_STATE_ICONIFIED: case ECORE_X_WINDOW_STATE_ICONIFIED:
if (action != ECORE_X_WINDOW_STATE_ACTION_ADD) return; if (action != ECORE_X_WINDOW_STATE_ACTION_ADD) return;
if (bd->client.icccm.state == ECORE_X_WINDOW_STATE_HINT_ICONIC) return; if (bd->client.icccm.state == ECORE_X_WINDOW_STATE_HINT_ICONIC) return;
e_border_iconify(bd); if (!bd->lock_client_iconify)
break; e_border_iconify(bd);
break;
case ECORE_X_WINDOW_STATE_MODAL: case ECORE_X_WINDOW_STATE_MODAL:
changed = 0; changed = 0;
switch (action) switch (action)
{ {
case ECORE_X_WINDOW_STATE_ACTION_REMOVE: case ECORE_X_WINDOW_STATE_ACTION_REMOVE:
if (bd->client.netwm.state.modal) if (bd->client.netwm.state.modal)
{ {
bd->client.netwm.state.modal = 0; bd->client.netwm.state.modal = 0;
changed = 1; changed = 1;
} }
break; break;
case ECORE_X_WINDOW_STATE_ACTION_ADD: case ECORE_X_WINDOW_STATE_ACTION_ADD:
if (!bd->client.netwm.state.modal) if (!bd->client.netwm.state.modal)
{ {
bd->client.netwm.state.modal = 1; bd->client.netwm.state.modal = 1;
changed = 1; changed = 1;
} }
break; break;
case ECORE_X_WINDOW_STATE_ACTION_TOGGLE: case ECORE_X_WINDOW_STATE_ACTION_TOGGLE:
bd->client.netwm.state.modal = !bd->client.netwm.state.modal; bd->client.netwm.state.modal = !bd->client.netwm.state.modal;
changed = 1; changed = 1;
break; break;
} }
if (changed) if (changed)
{ {
bd->client.netwm.update.state = 1; bd->client.netwm.update.state = 1;
bd->changed = 1; bd->changed = 1;
} }
break; break;
case ECORE_X_WINDOW_STATE_STICKY: case ECORE_X_WINDOW_STATE_STICKY:
changed = 0; changed = 0;
switch (action) switch (action)
{ {
case ECORE_X_WINDOW_STATE_ACTION_REMOVE: case ECORE_X_WINDOW_STATE_ACTION_REMOVE:
if (bd->client.netwm.state.sticky) if (bd->client.netwm.state.sticky)
{ {
bd->client.netwm.state.sticky = 0; bd->client.netwm.state.sticky = 0;
changed = 1; changed = 1;
} }
break; break;
case ECORE_X_WINDOW_STATE_ACTION_ADD: case ECORE_X_WINDOW_STATE_ACTION_ADD:
if (!bd->client.netwm.state.sticky) if (!bd->client.netwm.state.sticky)
{ {
bd->client.netwm.state.sticky = 1; bd->client.netwm.state.sticky = 1;
changed = 1; changed = 1;
} }
break; break;
case ECORE_X_WINDOW_STATE_ACTION_TOGGLE: case ECORE_X_WINDOW_STATE_ACTION_TOGGLE:
bd->client.netwm.state.sticky = !bd->client.netwm.state.sticky; bd->client.netwm.state.sticky = !bd->client.netwm.state.sticky;
changed = 1; changed = 1;
break; break;
} }
if (changed) if (changed)
{ {
bd->client.netwm.update.state = 1; bd->client.netwm.update.state = 1;
bd->changed = 1; bd->changed = 1;
if (bd->client.netwm.state.sticky) if (bd->client.netwm.state.sticky)
e_border_stick(bd); e_border_stick(bd);
else else
e_border_unstick(bd); e_border_unstick(bd);
} }
break; break;
case ECORE_X_WINDOW_STATE_MAXIMIZED_VERT: case ECORE_X_WINDOW_STATE_MAXIMIZED_VERT:
changed = 0; changed = 0;
switch (action) switch (action)
{ {
case ECORE_X_WINDOW_STATE_ACTION_REMOVE: case ECORE_X_WINDOW_STATE_ACTION_REMOVE:
if (bd->client.netwm.state.maximized_v) if (bd->client.netwm.state.maximized_v)
{ {
bd->client.netwm.state.maximized_v = 0; bd->client.netwm.state.maximized_v = 0;
changed = 1; changed = 1;
} }
break; break;
case ECORE_X_WINDOW_STATE_ACTION_ADD: case ECORE_X_WINDOW_STATE_ACTION_ADD:
if (!bd->client.netwm.state.maximized_v) if (!bd->client.netwm.state.maximized_v)
{ {
bd->client.netwm.state.maximized_v = 1; bd->client.netwm.state.maximized_v = 1;
changed = 1; changed = 1;
} }
break; break;
case ECORE_X_WINDOW_STATE_ACTION_TOGGLE: case ECORE_X_WINDOW_STATE_ACTION_TOGGLE:
bd->client.netwm.state.maximized_v = !bd->client.netwm.state.maximized_v; bd->client.netwm.state.maximized_v = !bd->client.netwm.state.maximized_v;
changed = 1; changed = 1;
break; break;
} }
if (changed) if (changed)
{ {
bd->client.netwm.update.state = 1; bd->client.netwm.update.state = 1;
bd->changed = 1; bd->changed = 1;
if ((bd->client.netwm.state.maximized_v) if ((bd->client.netwm.state.maximized_v)
&& (bd->client.netwm.state.maximized_h)) && (bd->client.netwm.state.maximized_h))
e_border_maximize(bd, e_config->maximize_policy); e_border_maximize(bd, e_config->maximize_policy);
else if ((!bd->client.netwm.state.maximized_v) else if ((!bd->client.netwm.state.maximized_v)
&& (!bd->client.netwm.state.maximized_h)) && (!bd->client.netwm.state.maximized_h))
e_border_unmaximize(bd); e_border_unmaximize(bd);
} }
break; break;
case ECORE_X_WINDOW_STATE_MAXIMIZED_HORZ: case ECORE_X_WINDOW_STATE_MAXIMIZED_HORZ:
changed = 0; changed = 0;
switch (action) switch (action)
{ {
case ECORE_X_WINDOW_STATE_ACTION_REMOVE: case ECORE_X_WINDOW_STATE_ACTION_REMOVE:
if (bd->client.netwm.state.maximized_h) if (bd->client.netwm.state.maximized_h)
{ {
bd->client.netwm.state.maximized_h = 0; bd->client.netwm.state.maximized_h = 0;
changed = 1; changed = 1;
} }
break; break;
case ECORE_X_WINDOW_STATE_ACTION_ADD: case ECORE_X_WINDOW_STATE_ACTION_ADD:
if (!bd->client.netwm.state.maximized_h) if (!bd->client.netwm.state.maximized_h)
{ {
bd->client.netwm.state.maximized_h = 1; bd->client.netwm.state.maximized_h = 1;
changed = 1; changed = 1;
} }
break; break;
case ECORE_X_WINDOW_STATE_ACTION_TOGGLE: case ECORE_X_WINDOW_STATE_ACTION_TOGGLE:
bd->client.netwm.state.maximized_h = !bd->client.netwm.state.maximized_h; bd->client.netwm.state.maximized_h = !bd->client.netwm.state.maximized_h;
changed = 1; changed = 1;
break; break;
} }
if (changed) if (changed)
{ {
bd->client.netwm.update.state = 1; bd->client.netwm.update.state = 1;
bd->changed = 1; bd->changed = 1;
if ((bd->client.netwm.state.maximized_v) if ((bd->client.netwm.state.maximized_v)
&& (bd->client.netwm.state.maximized_h)) && (bd->client.netwm.state.maximized_h))
e_border_maximize(bd, e_config->maximize_policy); e_border_maximize(bd, e_config->maximize_policy);
else if ((!bd->client.netwm.state.maximized_v) else if ((!bd->client.netwm.state.maximized_v)
&& (!bd->client.netwm.state.maximized_h)) && (!bd->client.netwm.state.maximized_h))
e_border_unmaximize(bd); e_border_unmaximize(bd);
} }
break; break;
case ECORE_X_WINDOW_STATE_SHADED: case ECORE_X_WINDOW_STATE_SHADED:
changed = 0; changed = 0;
switch (action) switch (action)
{ {
case ECORE_X_WINDOW_STATE_ACTION_REMOVE: case ECORE_X_WINDOW_STATE_ACTION_REMOVE:
if (bd->client.netwm.state.shaded) if (bd->client.netwm.state.shaded)
{ {
bd->client.netwm.state.shaded = 0; bd->client.netwm.state.shaded = 0;
changed = 1; changed = 1;
} }
break; break;
case ECORE_X_WINDOW_STATE_ACTION_ADD: case ECORE_X_WINDOW_STATE_ACTION_ADD:
if (!bd->client.netwm.state.shaded) if (!bd->client.netwm.state.shaded)
{ {
bd->client.netwm.state.shaded = 1; bd->client.netwm.state.shaded = 1;
changed = 1; changed = 1;
} }
break; break;
case ECORE_X_WINDOW_STATE_ACTION_TOGGLE: case ECORE_X_WINDOW_STATE_ACTION_TOGGLE:
bd->client.netwm.state.shaded = !bd->client.netwm.state.shaded; bd->client.netwm.state.shaded = !bd->client.netwm.state.shaded;
changed = 1; changed = 1;
break; break;
} }
if (changed) if (changed)
{ {
bd->client.netwm.update.state = 1; bd->client.netwm.update.state = 1;
bd->changed = 1; bd->changed = 1;
if (bd->client.netwm.state.shaded) if (bd->client.netwm.state.shaded)
e_border_shade(bd, e_hints_window_shade_direction_get(bd)); e_border_shade(bd, e_hints_window_shade_direction_get(bd));
else else
e_border_unshade(bd, e_hints_window_shade_direction_get(bd)); e_border_unshade(bd, e_hints_window_shade_direction_get(bd));
} }
break; break;
case ECORE_X_WINDOW_STATE_SKIP_TASKBAR: case ECORE_X_WINDOW_STATE_SKIP_TASKBAR:
changed = 0; changed = 0;
switch (action) switch (action)
{ {
case ECORE_X_WINDOW_STATE_ACTION_REMOVE: case ECORE_X_WINDOW_STATE_ACTION_REMOVE:
if (bd->client.netwm.state.skip_taskbar) if (bd->client.netwm.state.skip_taskbar)
{ {
bd->client.netwm.state.skip_taskbar = 0; bd->client.netwm.state.skip_taskbar = 0;
changed = 1; changed = 1;
} }
break; break;
case ECORE_X_WINDOW_STATE_ACTION_ADD: case ECORE_X_WINDOW_STATE_ACTION_ADD:
if (!bd->client.netwm.state.skip_taskbar) if (!bd->client.netwm.state.skip_taskbar)
{ {
bd->client.netwm.state.skip_taskbar = 1; bd->client.netwm.state.skip_taskbar = 1;
changed = 1; changed = 1;
} }
break; break;
case ECORE_X_WINDOW_STATE_ACTION_TOGGLE: case ECORE_X_WINDOW_STATE_ACTION_TOGGLE:
bd->client.netwm.state.skip_taskbar = !bd->client.netwm.state.skip_taskbar; bd->client.netwm.state.skip_taskbar = !bd->client.netwm.state.skip_taskbar;
changed = 1; changed = 1;
break; break;
} }
if (changed) if (changed)
{ {
bd->client.netwm.update.state = 1; bd->client.netwm.update.state = 1;
bd->changed = 1; bd->changed = 1;
} }
break; break;
case ECORE_X_WINDOW_STATE_SKIP_PAGER: case ECORE_X_WINDOW_STATE_SKIP_PAGER:
changed = 0; changed = 0;
switch (action) switch (action)
{ {
case ECORE_X_WINDOW_STATE_ACTION_REMOVE: case ECORE_X_WINDOW_STATE_ACTION_REMOVE:
if (bd->client.netwm.state.skip_pager) if (bd->client.netwm.state.skip_pager)
{ {
bd->client.netwm.state.skip_pager = 0; bd->client.netwm.state.skip_pager = 0;
changed = 1; changed = 1;
} }
break; break;
case ECORE_X_WINDOW_STATE_ACTION_ADD: case ECORE_X_WINDOW_STATE_ACTION_ADD:
if (!bd->client.netwm.state.skip_pager) if (!bd->client.netwm.state.skip_pager)
{ {
bd->client.netwm.state.skip_pager = 1; bd->client.netwm.state.skip_pager = 1;
changed = 1; changed = 1;
} }
break; break;
case ECORE_X_WINDOW_STATE_ACTION_TOGGLE: case ECORE_X_WINDOW_STATE_ACTION_TOGGLE:
bd->client.netwm.state.skip_pager = !bd->client.netwm.state.skip_pager; bd->client.netwm.state.skip_pager = !bd->client.netwm.state.skip_pager;
changed = 1; changed = 1;
break; break;
} }
if (changed) if (changed)
{ {
bd->client.netwm.update.state = 1; bd->client.netwm.update.state = 1;
bd->changed = 1; bd->changed = 1;
} }
break; break;
case ECORE_X_WINDOW_STATE_HIDDEN: case ECORE_X_WINDOW_STATE_HIDDEN:
/* Ignore */ /* Ignore */
break; break;
case ECORE_X_WINDOW_STATE_FULLSCREEN: case ECORE_X_WINDOW_STATE_FULLSCREEN:
changed = 0; changed = 0;
switch (action) switch (action)
{ {
case ECORE_X_WINDOW_STATE_ACTION_REMOVE: case ECORE_X_WINDOW_STATE_ACTION_REMOVE:
if (bd->client.netwm.state.fullscreen) if (bd->client.netwm.state.fullscreen)
{ {
bd->client.netwm.state.fullscreen = 0; bd->client.netwm.state.fullscreen = 0;
changed = 1; changed = 1;
} }
break; break;
case ECORE_X_WINDOW_STATE_ACTION_ADD: case ECORE_X_WINDOW_STATE_ACTION_ADD:
if (!bd->client.netwm.state.fullscreen) if (!bd->client.netwm.state.fullscreen)
{ {
bd->client.netwm.state.fullscreen = 1; bd->client.netwm.state.fullscreen = 1;
changed = 1; changed = 1;
} }
break; break;
case ECORE_X_WINDOW_STATE_ACTION_TOGGLE: case ECORE_X_WINDOW_STATE_ACTION_TOGGLE:
bd->client.netwm.state.fullscreen = !bd->client.netwm.state.fullscreen; bd->client.netwm.state.fullscreen = !bd->client.netwm.state.fullscreen;
changed = 1; changed = 1;
break; break;
} }
if (changed) if (changed)
{ {
bd->client.netwm.update.state = 1; bd->client.netwm.update.state = 1;
bd->changed = 1; bd->changed = 1;
if (bd->client.netwm.state.fullscreen) if (bd->client.netwm.state.fullscreen)
e_border_fullscreen(bd); e_border_fullscreen(bd);
else else
e_border_unfullscreen(bd); e_border_unfullscreen(bd);
} }
break; break;
case ECORE_X_WINDOW_STATE_ABOVE: case ECORE_X_WINDOW_STATE_ABOVE:
/* FIXME: Should this require that BELOW is set to 0 first, or just /* FIXME: Should this require that BELOW is set to 0 first, or just
* do it? */ * do it? */
changed = 0; changed = 0;
switch (action) switch (action)
{ {
case ECORE_X_WINDOW_STATE_ACTION_REMOVE: case ECORE_X_WINDOW_STATE_ACTION_REMOVE:
if (bd->client.netwm.state.stacking == E_STACKING_ABOVE) if (bd->client.netwm.state.stacking == E_STACKING_ABOVE)
{ {
bd->client.netwm.state.stacking = E_STACKING_NONE; bd->client.netwm.state.stacking = E_STACKING_NONE;
changed = 1; changed = 1;
} }
break; break;
case ECORE_X_WINDOW_STATE_ACTION_ADD: case ECORE_X_WINDOW_STATE_ACTION_ADD:
if (bd->client.netwm.state.stacking == E_STACKING_NONE) if (bd->client.netwm.state.stacking == E_STACKING_NONE)
{ {
bd->client.netwm.state.stacking = E_STACKING_ABOVE; bd->client.netwm.state.stacking = E_STACKING_ABOVE;
changed = 1; changed = 1;
} }
break; break;
case ECORE_X_WINDOW_STATE_ACTION_TOGGLE: case ECORE_X_WINDOW_STATE_ACTION_TOGGLE:
if (bd->client.netwm.state.stacking == E_STACKING_ABOVE) if (bd->client.netwm.state.stacking == E_STACKING_ABOVE)
{ {
bd->client.netwm.state.stacking = E_STACKING_NONE; bd->client.netwm.state.stacking = E_STACKING_NONE;
changed = 1; changed = 1;
} }
else if (bd->client.netwm.state.stacking == E_STACKING_NONE) else if (bd->client.netwm.state.stacking == E_STACKING_NONE)
{ {
bd->client.netwm.state.stacking = E_STACKING_ABOVE; bd->client.netwm.state.stacking = E_STACKING_ABOVE;
changed = 1; changed = 1;
} }
break; break;
} }
if (changed) if (changed)
{ {
bd->client.netwm.update.state = 1; bd->client.netwm.update.state = 1;
bd->changed = 1; bd->changed = 1;
if (bd->client.netwm.state.stacking) if (bd->client.netwm.state.stacking)
bd->layer = 150; bd->layer = 150;
else else
bd->layer = 100; bd->layer = 100;
e_border_raise(bd); e_border_raise(bd);
} }
break; break;
case ECORE_X_WINDOW_STATE_BELOW: case ECORE_X_WINDOW_STATE_BELOW:
/* FIXME: Should this require that ABOVE is set to 0 first, or just /* FIXME: Should this require that ABOVE is set to 0 first, or just
* do it? */ * do it? */
changed = 0; changed = 0;
switch (action) switch (action)
{ {
case ECORE_X_WINDOW_STATE_ACTION_REMOVE: case ECORE_X_WINDOW_STATE_ACTION_REMOVE:
if (bd->client.netwm.state.stacking == E_STACKING_BELOW) if (bd->client.netwm.state.stacking == E_STACKING_BELOW)
{ {
bd->client.netwm.state.stacking = E_STACKING_NONE; bd->client.netwm.state.stacking = E_STACKING_NONE;
changed = 1; changed = 1;
} }
break; break;
case ECORE_X_WINDOW_STATE_ACTION_ADD: case ECORE_X_WINDOW_STATE_ACTION_ADD:
if (bd->client.netwm.state.stacking == E_STACKING_NONE) if (bd->client.netwm.state.stacking == E_STACKING_NONE)
{ {
bd->client.netwm.state.stacking = E_STACKING_BELOW; bd->client.netwm.state.stacking = E_STACKING_BELOW;
changed = 1; changed = 1;
} }
break; break;
case ECORE_X_WINDOW_STATE_ACTION_TOGGLE: case ECORE_X_WINDOW_STATE_ACTION_TOGGLE:
if (bd->client.netwm.state.stacking == E_STACKING_BELOW) if (bd->client.netwm.state.stacking == E_STACKING_BELOW)
{ {
bd->client.netwm.state.stacking = E_STACKING_NONE; bd->client.netwm.state.stacking = E_STACKING_NONE;
changed = 1; changed = 1;
} }
else if (bd->client.netwm.state.stacking == E_STACKING_NONE) else if (bd->client.netwm.state.stacking == E_STACKING_NONE)
{ {
bd->client.netwm.state.stacking = E_STACKING_BELOW; bd->client.netwm.state.stacking = E_STACKING_BELOW;
changed = 1; changed = 1;
} }
break; break;
} }
if (changed) if (changed)
{ {
bd->client.netwm.update.state = 1; bd->client.netwm.update.state = 1;
bd->changed = 1; bd->changed = 1;
if (bd->client.netwm.state.stacking) if (bd->client.netwm.state.stacking)
bd->layer = 50; bd->layer = 50;
else else
bd->layer = 100; bd->layer = 100;
e_border_raise(bd); e_border_raise(bd);
} }
break; break;
case ECORE_X_WINDOW_STATE_DEMANDS_ATTENTION: case ECORE_X_WINDOW_STATE_DEMANDS_ATTENTION:
/* FIXME */ /* FIXME */
break; break;
case ECORE_X_WINDOW_STATE_UNKNOWN: case ECORE_X_WINDOW_STATE_UNKNOWN:
/* Ignore */ /* Ignore */
break; break;
} }
} }
@ -860,47 +861,47 @@ e_hints_window_state_get(E_Border *bd)
switch (state[i]) switch (state[i])
{ {
case ECORE_X_WINDOW_STATE_ICONIFIED: case ECORE_X_WINDOW_STATE_ICONIFIED:
/* Ignore */ /* Ignore */
break; break;
case ECORE_X_WINDOW_STATE_MODAL: case ECORE_X_WINDOW_STATE_MODAL:
bd->client.netwm.state.modal = 1; bd->client.netwm.state.modal = 1;
break; break;
case ECORE_X_WINDOW_STATE_STICKY: case ECORE_X_WINDOW_STATE_STICKY:
bd->client.netwm.state.sticky = 1; bd->client.netwm.state.sticky = 1;
break; break;
case ECORE_X_WINDOW_STATE_MAXIMIZED_VERT: case ECORE_X_WINDOW_STATE_MAXIMIZED_VERT:
bd->client.netwm.state.maximized_v = 1; bd->client.netwm.state.maximized_v = 1;
break; break;
case ECORE_X_WINDOW_STATE_MAXIMIZED_HORZ: case ECORE_X_WINDOW_STATE_MAXIMIZED_HORZ:
bd->client.netwm.state.maximized_h = 1; bd->client.netwm.state.maximized_h = 1;
break; break;
case ECORE_X_WINDOW_STATE_SHADED: case ECORE_X_WINDOW_STATE_SHADED:
bd->client.netwm.state.shaded = 1; bd->client.netwm.state.shaded = 1;
break; break;
case ECORE_X_WINDOW_STATE_SKIP_TASKBAR: case ECORE_X_WINDOW_STATE_SKIP_TASKBAR:
bd->client.netwm.state.skip_taskbar = 1; bd->client.netwm.state.skip_taskbar = 1;
break; break;
case ECORE_X_WINDOW_STATE_SKIP_PAGER: case ECORE_X_WINDOW_STATE_SKIP_PAGER:
bd->client.netwm.state.skip_pager = 1; bd->client.netwm.state.skip_pager = 1;
break; break;
case ECORE_X_WINDOW_STATE_HIDDEN: case ECORE_X_WINDOW_STATE_HIDDEN:
bd->client.netwm.state.hidden = 1; bd->client.netwm.state.hidden = 1;
break; break;
case ECORE_X_WINDOW_STATE_FULLSCREEN: case ECORE_X_WINDOW_STATE_FULLSCREEN:
bd->client.netwm.state.fullscreen = 1; bd->client.netwm.state.fullscreen = 1;
break; break;
case ECORE_X_WINDOW_STATE_ABOVE: case ECORE_X_WINDOW_STATE_ABOVE:
bd->client.netwm.state.stacking = E_STACKING_ABOVE; bd->client.netwm.state.stacking = E_STACKING_ABOVE;
break; break;
case ECORE_X_WINDOW_STATE_BELOW: case ECORE_X_WINDOW_STATE_BELOW:
bd->client.netwm.state.stacking = E_STACKING_BELOW; bd->client.netwm.state.stacking = E_STACKING_BELOW;
break; break;
case ECORE_X_WINDOW_STATE_DEMANDS_ATTENTION: case ECORE_X_WINDOW_STATE_DEMANDS_ATTENTION:
/* FIXME */ /* FIXME */
break; break;
case ECORE_X_WINDOW_STATE_UNKNOWN: case ECORE_X_WINDOW_STATE_UNKNOWN:
/* Ignore */ /* Ignore */
break; break;
} }
} }
free(state); free(state);

View File

@ -623,10 +623,16 @@ _e_int_menus_clients_item_cb(void *data, E_Menu *m, E_Menu_Item *mi)
bd = data; bd = data;
E_OBJECT_CHECK(bd); E_OBJECT_CHECK(bd);
if (bd->iconic) e_border_uniconify(bd); if (bd->iconic)
{
if (!bd->lock_user_iconify)
e_border_uniconify(bd);
}
e_desk_show(bd->desk); e_desk_show(bd->desk);
e_border_raise(bd); if (!bd->lock_user_stacking)
e_border_focus_set(bd, 1, 1); e_border_raise(bd);
if (!bd->lock_focus_out)
e_border_focus_set(bd, 1, 1);
} }
static void static void

View File

@ -133,7 +133,11 @@ e_winlist_show(E_Zone *zone)
} }
bd = e_border_focused_get(); bd = e_border_focused_get();
if (bd) e_border_focus_set(bd, 0, 0); if (bd)
{
if (!bd->lock_focus_out)
e_border_focus_set(bd, 0, 0);
}
_e_winlist_activate_nth(1); _e_winlist_activate_nth(1);
evas_event_thaw(winlist->evas); evas_event_thaw(winlist->evas);
_e_winlist_size_adjust(); _e_winlist_size_adjust();
@ -232,14 +236,24 @@ e_winlist_hide(void)
} }
if (bd) if (bd)
{ {
if (bd->iconic) e_border_uniconify(bd); if (bd->iconic)
if (bd->shaded) e_border_unshade(bd, bd->shade.dir); {
if (!bd->lock_user_iconify)
e_border_uniconify(bd);
}
if (bd->shaded)
{
if (!bd->lock_user_shade)
e_border_unshade(bd, bd->shade.dir);
}
else if (bd->desk) else if (bd->desk)
{ {
if (!bd->sticky) e_desk_show(bd->desk); if (!bd->sticky) e_desk_show(bd->desk);
} }
e_border_raise(bd); if (!bd->lock_user_stacking)
e_border_focus_set(bd, 1, 1); e_border_raise(bd);
if (!bd->lock_focus_in)
e_border_focus_set(bd, 1, 1);
if ((e_config->focus_policy != E_FOCUS_CLICK) || if ((e_config->focus_policy != E_FOCUS_CLICK) ||
(e_config->winlist_warp_at_end) || (e_config->winlist_warp_at_end) ||
(e_config->winlist_warp_while_selecting)) (e_config->winlist_warp_while_selecting))
@ -474,7 +488,8 @@ _e_winlist_activate(void)
if ((ww->border->iconic) && if ((ww->border->iconic) &&
(e_config->winlist_list_uncover_while_selecting)) (e_config->winlist_list_uncover_while_selecting))
{ {
e_border_uniconify(ww->border); if (!ww->border->lock_user_iconify)
e_border_uniconify(ww->border);
ww->was_iconified = 1; ww->was_iconified = 1;
ok = 1; ok = 1;
} }
@ -492,7 +507,8 @@ _e_winlist_activate(void)
(ww->border->desk == e_desk_current_get(winlist->zone)) && (ww->border->desk == e_desk_current_get(winlist->zone)) &&
(e_config->winlist_list_uncover_while_selecting)) (e_config->winlist_list_uncover_while_selecting))
{ {
e_border_unshade(ww->border, ww->border->shade.dir); if (!ww->border->lock_user_shade)
e_border_unshade(ww->border, ww->border->shade.dir);
ww->was_shaded = 1; ww->was_shaded = 1;
ok = 1; ok = 1;
} }
@ -513,8 +529,10 @@ _e_winlist_activate(void)
if (!animator) if (!animator)
animator = ecore_animator_add(_e_winlist_animator, NULL); animator = ecore_animator_add(_e_winlist_animator, NULL);
} }
e_border_raise(ww->border); if (!ww->border->lock_user_stacking)
e_border_focus_set(ww->border, 1, 1); e_border_raise(ww->border);
if (!ww->border->lock_focus_out)
e_border_focus_set(ww->border, 1, 1);
} }
if (ww->border->client.netwm.name) if (ww->border->client.netwm.name)
edje_object_part_text_set(bg_object, "title_text", ww->border->client.netwm.name); edje_object_part_text_set(bg_object, "title_text", ww->border->client.netwm.name);
@ -544,9 +562,15 @@ _e_winlist_deactivate(void)
if (!win_selected) return; if (!win_selected) return;
ww = win_selected->data; ww = win_selected->data;
if (ww->was_shaded) if (ww->was_shaded)
e_border_shade(ww->border, ww->border->shade.dir); {
if (!ww->border->lock_user_shade)
e_border_shade(ww->border, ww->border->shade.dir);
}
if (ww->was_iconified) if (ww->was_iconified)
e_border_iconify(ww->border); {
if (!ww->border->lock_user_iconify)
e_border_iconify(ww->border);
}
ww->was_shaded = 0; ww->was_shaded = 0;
ww->was_iconified = 0; ww->was_iconified = 0;
if (icon_object) if (icon_object)
@ -556,7 +580,8 @@ _e_winlist_deactivate(void)
} }
edje_object_part_text_set(bg_object, "title_text", ""); edje_object_part_text_set(bg_object, "title_text", "");
edje_object_signal_emit(ww->bg_object, "passive", ""); edje_object_signal_emit(ww->bg_object, "passive", "");
e_border_focus_set(ww->border, 0, 0); if (!ww->border->lock_focus_in)
e_border_focus_set(ww->border, 0, 0);
} }
static void static void