_e_comp_x_focus_setup(E_Client *ec)
{
if (_e_comp_x_client_data_get(ec)->button_grabbed) return;
- if (!((e_client_focus_policy_click(ec)) ||
+ if ((!e_client_focus_policy_click(ec)) ||
(e_config->always_click_to_raise) ||
- (e_config->always_click_to_focus))) return;
+ (e_config->always_click_to_focus)) return;
ecore_x_window_button_grab(_e_comp_x_client_util_win_get(ec), 1,
ECORE_X_EVENT_MASK_MOUSE_DOWN |
ECORE_X_EVENT_MASK_MOUSE_UP |
Ecore_X_Window win;
if (e_pixmap_type_get(ec->pixmap) != E_PIXMAP_TYPE_X) continue;
- win = _e_comp_x_client_util_pwin_get(ec);
+ win = _e_comp_x_client_util_win_get(ec);
if ((!_e_comp_x_client_data_get(ec)->first_map) || (!_e_comp_x_client_data_get(ec)->reparented)) continue;
- _e_comp_x_focus_setdown(ec);
- e_bindings_mouse_ungrab(E_BINDING_CONTEXT_WINDOW, win);
- e_bindings_wheel_ungrab(E_BINDING_CONTEXT_WINDOW, win);
- e_bindings_mouse_grab(E_BINDING_CONTEXT_WINDOW, win);
- e_bindings_wheel_grab(E_BINDING_CONTEXT_WINDOW, win);
- _e_comp_x_focus_setup(ec);
+ if (ec->focused)
+ {
+ _e_comp_x_focus_setup(ec);
+ _e_comp_x_focus_setdown(ec);
+ }
+ else
+ {
+ _e_comp_x_focus_setdown(ec);
+ _e_comp_x_focus_setup(ec);
+ e_bindings_mouse_grab(E_BINDING_CONTEXT_WINDOW, win);
+ e_bindings_wheel_grab(E_BINDING_CONTEXT_WINDOW, win);
+ }
}
e_comp_canvas_keys_grab();
return ECORE_CALLBACK_PASS_ON;
ecore_x_window_show(pwin);
}
- _e_comp_x_focus_setup(ec);
- e_bindings_mouse_grab(E_BINDING_CONTEXT_WINDOW, pwin);
- e_bindings_wheel_grab(E_BINDING_CONTEXT_WINDOW, pwin);
+ if (ec->focused)
+ _e_comp_x_focus_setdown(ec);
+ else
+ {
+ _e_comp_x_focus_setup(ec);
+ e_bindings_mouse_grab(E_BINDING_CONTEXT_WINDOW, win);
+ e_bindings_wheel_grab(E_BINDING_CONTEXT_WINDOW, win);
+ }
_e_comp_x_client_evas_init(ec);
if (ec->netwm.ping && (!ec->ping_poller))
e_client_ping(ec);
else if (ec->netwm.type == E_WINDOW_TYPE_DESKTOP)
{
ec->focus_policy_override = E_FOCUS_CLICK;
+ _e_comp_x_focus_setdown(ec);
_e_comp_x_focus_setup(ec);
+ e_bindings_mouse_grab(E_BINDING_CONTEXT_WINDOW, win);
+ e_bindings_wheel_grab(E_BINDING_CONTEXT_WINDOW, win);
if (!ec->netwm.state.skip_pager)
{
ec->netwm.state.skip_pager = 1;
_e_comp_x_hook_client_focus_unset(void *d EINA_UNUSED, E_Client *ec)
{
E_COMP_X_PIXMAP_CHECK;
+ _e_comp_x_focus_setup(ec);
_e_comp_x_focus_check();
}
_e_comp_x_hook_client_focus_set(void *d EINA_UNUSED, E_Client *ec)
{
focus_time = ecore_x_current_time_get();
+ _e_comp_x_focus_setdown(ec);
if (!_e_comp_x_client_has_xwindow(ec))
{
e_grabinput_focus(e_comp->ee_win, E_FOCUS_METHOD_PASSIVE);
ecore_x_window_prop_card32_set(win, E_ATOM_MANAGED, &visible, 1);
if ((!ec->already_unparented) && cd && cd->reparented)
{
+ _e_comp_x_focus_setdown(ec);
e_bindings_mouse_ungrab(E_BINDING_CONTEXT_WINDOW, pwin);
e_bindings_wheel_ungrab(E_BINDING_CONTEXT_WINDOW, pwin);
- _e_comp_x_focus_setdown(ec);
if (!cd->deleted)
{
if (stopping)
EINA_LIST_FOREACH(e_comp->clients, l, ec)
{
if (e_client_util_ignored_get(ec)) continue;
- _e_comp_x_focus_setup(ec);
- e_bindings_mouse_grab(E_BINDING_CONTEXT_WINDOW, _e_comp_x_client_util_pwin_get(ec));
- e_bindings_wheel_grab(E_BINDING_CONTEXT_WINDOW, _e_comp_x_client_util_pwin_get(ec));
+ if (ec->focused)
+ _e_comp_x_focus_setdown(ec);
+ else
+ {
+ _e_comp_x_focus_setup(ec);
+ e_bindings_mouse_grab(E_BINDING_CONTEXT_WINDOW, _e_comp_x_client_util_win_get(ec));
+ e_bindings_wheel_grab(E_BINDING_CONTEXT_WINDOW, _e_comp_x_client_util_win_get(ec));
+ }
}
}
EINA_LIST_FOREACH(e_comp->clients, l, ec)
{
+ Ecore_X_Window win;
+
if (e_client_util_ignored_get(ec)) continue;
- _e_comp_x_focus_setdown(ec);
- e_bindings_mouse_ungrab(E_BINDING_CONTEXT_WINDOW, _e_comp_x_client_util_pwin_get(ec));
- e_bindings_wheel_ungrab(E_BINDING_CONTEXT_WINDOW, _e_comp_x_client_util_pwin_get(ec));
+ win = _e_comp_x_client_util_win_get(ec);
+ ecore_x_window_button_ungrab(win, 1, 0, 1);
+ ecore_x_window_button_ungrab(win, 2, 0, 1);
+ ecore_x_window_button_ungrab(win, 3, 0, 1);
+ e_bindings_mouse_ungrab(E_BINDING_CONTEXT_WINDOW, win);
+ e_bindings_wheel_ungrab(E_BINDING_CONTEXT_WINDOW, win);
+ _e_comp_x_client_data_get(ec)->button_grabbed = 0;
}
}
}
E_API void
-e_focus_event_focus_in(E_Client *ec)
+e_focus_event_focus_in(E_Client *ec EINA_UNUSED)
{
- if ((e_client_focus_policy_click(ec)) &&
- (!e_config->always_click_to_raise) &&
- (!e_config->always_click_to_focus))
- {
- if (!ec->button_grabbed) return;
- e_bindings_mouse_ungrab(E_BINDING_CONTEXT_WINDOW, e_client_util_pwin_get(ec));
- e_bindings_wheel_ungrab(E_BINDING_CONTEXT_WINDOW, e_client_util_pwin_get(ec));
-#ifndef HAVE_WAYLAND_ONLY
- ecore_x_window_button_ungrab(e_client_util_win_get(ec), 1, 0, 1);
- ecore_x_window_button_ungrab(e_client_util_win_get(ec), 2, 0, 1);
- ecore_x_window_button_ungrab(e_client_util_win_get(ec), 3, 0, 1);
-#endif
- e_bindings_mouse_grab(E_BINDING_CONTEXT_WINDOW, e_client_util_pwin_get(ec));
- e_bindings_wheel_grab(E_BINDING_CONTEXT_WINDOW, e_client_util_pwin_get(ec));
- ec->button_grabbed = 0;
- }
}
E_API void
-e_focus_event_focus_out(E_Client *ec)
+e_focus_event_focus_out(E_Client *ec EINA_UNUSED)
{
- if ((e_client_focus_policy_click(ec)) &&
- (!e_config->always_click_to_raise) &&
- (!e_config->always_click_to_focus))
- {
- if (ec->button_grabbed) return;
-#ifndef HAVE_WAYLAND_ONLY
- ecore_x_window_button_grab(e_client_util_win_get(ec), 1,
- ECORE_X_EVENT_MASK_MOUSE_DOWN |
- ECORE_X_EVENT_MASK_MOUSE_UP |
- ECORE_X_EVENT_MASK_MOUSE_MOVE, 0, 1);
- ecore_x_window_button_grab(e_client_util_win_get(ec), 2,
- ECORE_X_EVENT_MASK_MOUSE_DOWN |
- ECORE_X_EVENT_MASK_MOUSE_UP |
- ECORE_X_EVENT_MASK_MOUSE_MOVE, 0, 1);
- ecore_x_window_button_grab(e_client_util_win_get(ec), 3,
- ECORE_X_EVENT_MASK_MOUSE_DOWN |
- ECORE_X_EVENT_MASK_MOUSE_UP |
- ECORE_X_EVENT_MASK_MOUSE_MOVE, 0, 1);
-#endif
- ec->button_grabbed = 1;
- }
}
/* local subsystem functions */