ec->icccm.fetch.client_leader = 1;
else if (atoms[i] == ECORE_X_ATOM_WM_WINDOW_ROLE)
ec->icccm.fetch.window_role = 1;
- else if (atoms[i] == ECORE_X_ATOM_WM_STATE)
- ec->icccm.fetch.state = 1;
}
/* netwm, loop again, netwm will ignore some icccm, so we
* have to be sure that netwm is checked after */
evas_object_hide(ec->frame);
e_comp_object_damage(ec->frame, 0, 0, ec->w, ec->h);
}
- else
+ else if (ec->icccm.state != ECORE_X_WINDOW_STATE_HINT_WITHDRAWN)
evas_object_show(ec->frame);
_e_comp_x_client_data_get(ec)->first_map = 1;
if (ec->internal_elm_win)
{
hid = EINA_TRUE;
evas_object_hide(ec->frame);
+ e_hints_window_hidden_set(ec);
if (!ec->internal)
{
if (ec->exe_inst && ec->exe_inst->exe)
{
ec->icccm.fetch.hints = 1;
EC_CHANGED(ec);
+ if (ec->icccm.state == ECORE_X_WINDOW_STATE_HINT_WITHDRAWN)
+ ec->ignored = 0;
}
else if (ev->atom == ECORE_X_ATOM_WM_NORMAL_HINTS)
{
cd->set_win_type = 0;
}
}
- if (ec->re_manage || ec->visible)
- {
- ecore_x_window_show(win);
- ecore_x_window_show(pwin);
- }
+ ecore_x_window_show(win);
+ if (!ec->iconic)
+ ecore_x_window_show(pwin);
_e_comp_x_focus_init(ec);
e_bindings_mouse_grab(E_BINDING_CONTEXT_WINDOW, win);
_e_comp_x_client_evas_init(ec);
if (ec->netwm.ping && (!ec->ping_poller))
e_client_ping(ec);
- if (ec->visible) evas_object_show(ec->frame);
+ if (ec->visible && (ec->icccm.state != ECORE_X_WINDOW_STATE_HINT_WITHDRAWN))
+ evas_object_show(ec->frame);
cd->need_reparent = 0;
ec->redirected = 1;
if (cd->change_icon)
eina_stringshare_del(pclass);
ec->icccm.fetch.name_class = 0;
}
- if (ec->changes.prop || ec->icccm.fetch.state)
- {
- ec->icccm.state = ecore_x_icccm_state_get(win);
- ec->icccm.fetch.state = 0;
- rem_change = 1;
- }
if (ec->changes.prop || ec->e.fetch.state)
{
e_hints_window_e_state_get(ec);
if (ec->changes.prop || ec->icccm.fetch.hints)
{
Eina_Bool accepts_focus, is_urgent;
+ Ecore_X_Window_State_Hint state = ec->icccm.state;
accepts_focus = EINA_TRUE;
is_urgent = EINA_FALSE;
- ec->icccm.initial_state = ECORE_X_WINDOW_STATE_HINT_NORMAL;
+ ec->icccm.state = ECORE_X_WINDOW_STATE_HINT_NORMAL;
if (ecore_x_icccm_hints_get(win,
&accepts_focus,
- &ec->icccm.initial_state,
+ &ec->icccm.state,
&ec->icccm.icon_pixmap,
&ec->icccm.icon_mask,
(Ecore_X_Window*)&ec->icccm.icon_window,
(Ecore_X_Window*)&ec->icccm.window_group,
&is_urgent))
{
+ if (ec->new_client)
+ ec->icccm.initial_state = ec->icccm.state;
+ if (state != ec->icccm.state)
+ {
+ ecore_x_icccm_state_set(win, ec->icccm.state);
+ if (ec->icccm.state == ECORE_X_WINDOW_STATE_HINT_WITHDRAWN)
+ ec->ignored = 1, ec->visible = 0;
+ else
+ {
+ ec->ignored = ec->changes.visible = ec->visible = 1;
+ e_client_unignore(ec);
+ }
+ }
ec->icccm.accepts_focus = accepts_focus;
ec->icccm.urgent = is_urgent;
e_client_urgent_set(ec, is_urgent);
ec->changes.shape_input = 1;
ec->netwm.type = E_WINDOW_TYPE_UNKNOWN;
- ec->icccm.state = ECORE_X_WINDOW_STATE_HINT_NONE;
+ ec->icccm.state =ec->icccm.initial_state = ECORE_X_WINDOW_STATE_HINT_NONE;
if (!_e_comp_x_client_new_helper(ec)) return;
ec->ignored |= e_comp->comp_type == E_PIXMAP_TYPE_WL;
evas_object_geometry_set(ec->frame, ec->client.x, ec->client.y, ec->client.w, ec->client.h);
}
ec->ignore_first_unmap = 1;
- evas_object_show(ec->frame);
+ if (ec->override || (!ec->icccm.fetch.hints))
+ evas_object_show(ec->frame);
_e_comp_x_client_stack(ec);
}
}
if (ec->remember)
rem = ec->remember;
- if (ec->icccm.state == ECORE_X_WINDOW_STATE_HINT_NONE)
+ if (ec->icccm.initial_state == ECORE_X_WINDOW_STATE_HINT_NONE)
{
if (ec->netwm.state.hidden)
ec->icccm.state = ECORE_X_WINDOW_STATE_HINT_ICONIC;
else if (ec->desk == e_desk_current_get(ec->zone))
{
/* ...but only if it's supposed to be shown */
- if (ec->re_manage)
+ if (ec->re_manage && (ec->icccm.state != ECORE_X_WINDOW_STATE_HINT_WITHDRAWN))
{
ec->changes.visible = 1;
ec->visible = 1;
(void)ec;
#else
if (!e_client_has_xwindow(ec)) return;
- if (ec->icccm.state != ECORE_X_WINDOW_STATE_HINT_NORMAL)
- ec->icccm.state = ECORE_X_WINDOW_STATE_HINT_NORMAL;
- ecore_x_icccm_state_set(e_client_util_win_get(ec), ECORE_X_WINDOW_STATE_HINT_NORMAL);
+ if (ec->icccm.state != ECORE_X_WINDOW_STATE_HINT_WITHDRAWN)
+ {
+ ec->icccm.state = ECORE_X_WINDOW_STATE_HINT_NORMAL;
+ ecore_x_icccm_state_set(e_client_util_win_get(ec), ECORE_X_WINDOW_STATE_HINT_NORMAL);
+ }
if (ec->netwm.state.hidden)
{
ec->netwm.update.state = 1;
(void)ec;
#else
if (!e_client_has_xwindow(ec)) return;
- if (ec->icccm.state != ECORE_X_WINDOW_STATE_HINT_ICONIC)
- ec->icccm.state = ECORE_X_WINDOW_STATE_HINT_ICONIC;
- ecore_x_icccm_state_set(e_client_util_win_get(ec), ECORE_X_WINDOW_STATE_HINT_ICONIC);
+ if (ec->icccm.state != ECORE_X_WINDOW_STATE_HINT_WITHDRAWN)
+ {
+ ec->icccm.state = ECORE_X_WINDOW_STATE_HINT_ICONIC;
+ ecore_x_icccm_state_set(e_client_util_win_get(ec), ECORE_X_WINDOW_STATE_HINT_ICONIC);
+ }
if (!ec->netwm.state.hidden)
{
ec->netwm.update.state = 1;