defer netwm maximize hint apply to reduce canvas ops

improves maximize performance on apps like chromium which incrementally apply maximize states
This commit is contained in:
Mike Blumenkrantz 2014-03-10 00:26:06 -04:00
parent 5aa231f53e
commit 1a2f4087db
1 changed files with 33 additions and 40 deletions

View File

@ -780,49 +780,42 @@ e_hints_window_state_update(E_Client *ec,
break; break;
case ECORE_X_WINDOW_STATE_MAXIMIZED_VERT: case ECORE_X_WINDOW_STATE_MAXIMIZED_VERT:
if (ec->lock_client_maximize) return;
switch (action)
{
case ECORE_X_WINDOW_STATE_ACTION_REMOVE:
if (ec->maximized & E_MAXIMIZE_VERTICAL)
e_client_unmaximize(ec, E_MAXIMIZE_VERTICAL);
break;
case ECORE_X_WINDOW_STATE_ACTION_ADD:
if (!(ec->maximized & E_MAXIMIZE_VERTICAL))
e_client_maximize(ec, (e_config->maximize_policy & E_MAXIMIZE_TYPE) | E_MAXIMIZE_VERTICAL);
break;
case ECORE_X_WINDOW_STATE_ACTION_TOGGLE:
if (ec->maximized & E_MAXIMIZE_VERTICAL)
e_client_unmaximize(ec, E_MAXIMIZE_VERTICAL);
else
e_client_maximize(ec, (e_config->maximize_policy & E_MAXIMIZE_TYPE) | E_MAXIMIZE_VERTICAL);
break;
}
break;
case ECORE_X_WINDOW_STATE_MAXIMIZED_HORZ: case ECORE_X_WINDOW_STATE_MAXIMIZED_HORZ:
if (ec->lock_client_maximize) return; {
switch (action) E_Maximize max[] =
{ {
case ECORE_X_WINDOW_STATE_ACTION_REMOVE: [ECORE_X_WINDOW_STATE_MAXIMIZED_VERT] = E_MAXIMIZE_VERTICAL,
if (ec->maximized & E_MAXIMIZE_HORIZONTAL) [ECORE_X_WINDOW_STATE_MAXIMIZED_HORZ] = E_MAXIMIZE_HORIZONTAL,
e_client_unmaximize(ec, E_MAXIMIZE_HORIZONTAL); };
break; if (ec->lock_client_maximize) return;
switch (action)
{
case ECORE_X_WINDOW_STATE_ACTION_REMOVE:
if (ec->maximized & max[state])
e_client_unmaximize(ec, E_MAXIMIZE_VERTICAL);
break;
case ECORE_X_WINDOW_STATE_ACTION_ADD: case ECORE_X_WINDOW_STATE_ACTION_ADD:
if (!(ec->maximized & E_MAXIMIZE_HORIZONTAL)) if (ec->maximized & max[state]) break;
e_client_maximize(ec, (e_config->maximize_policy & E_MAXIMIZE_TYPE) | E_MAXIMIZE_HORIZONTAL); ec->changes.need_maximize = 1;
break; ec->maximized &= ~E_MAXIMIZE_TYPE;
ec->maximized |= (e_config->maximize_policy & E_MAXIMIZE_TYPE) | max[state];
EC_CHANGED(ec);
break;
case ECORE_X_WINDOW_STATE_ACTION_TOGGLE: case ECORE_X_WINDOW_STATE_ACTION_TOGGLE:
if (ec->maximized & E_MAXIMIZE_HORIZONTAL) if (ec->maximized & max[state])
e_client_unmaximize(ec, E_MAXIMIZE_HORIZONTAL); {
else e_client_unmaximize(ec, max[state]);
e_client_maximize(ec, (e_config->maximize_policy & E_MAXIMIZE_TYPE) | E_MAXIMIZE_HORIZONTAL); break;
break; }
} ec->changes.need_maximize = 1;
ec->maximized &= ~E_MAXIMIZE_TYPE;
ec->maximized |= (e_config->maximize_policy & E_MAXIMIZE_TYPE) | max[state];
EC_CHANGED(ec);
break;
}
}
break; break;
case ECORE_X_WINDOW_STATE_SHADED: case ECORE_X_WINDOW_STATE_SHADED: