finally fix bug with "don't composite fullscreen windows" option

ticket #1558


SVN revision: 83076
This commit is contained in:
Mike Blumenkrantz 2013-01-22 11:34:45 +00:00
parent b93d7aeb23
commit 6d4ccf159c
3 changed files with 6 additions and 43 deletions

View File

@ -2,6 +2,7 @@
* No longer build illume edj files
* fixed gadget dragging on desktop near screen edges
* fixed bug where "don't composite fullscreen windows" option would cause some windows to stop appearing
2013-01-15 Mike Blumenkrantz

1
NEWS
View File

@ -109,3 +109,4 @@ Fixes:
* fixed bug where backlight settings would try to update dummy backlight devices
* Reuse notifications for mixer and battery modules.
* fixed gadget dragging on desktop near screen edges
* fixed bug where "don't composite fullscreen windows" option would cause some windows to stop appearing

View File

@ -126,7 +126,6 @@ struct _E_Comp_Win
Eina_Bool hidden_override : 1; // hidden override
Eina_Bool animating : 1; // it's busy animating - defer hides/dels
Eina_Bool force : 1; // force del/hide even if animating
Eina_Bool defer_show : 1; // stupid gtk apps hide windows twice, ticket #1558
Eina_Bool defer_hide : 1; // flag to get hide to work on deferred hide
Eina_Bool delete_me : 1; // delete me!
Eina_Bool visible : 1; // is visible
@ -1063,7 +1062,7 @@ _e_comp_win_release(E_Comp_Win *cw)
cw->pw = 0;
cw->ph = 0;
ecore_x_e_comp_pixmap_set(cw->win, cw->pixmap);
//cw->show_ready = 0; // hmm maybe not needed?
cw->show_ready = 0; // hmm maybe not needed?
}
if (cw->redirected)
{
@ -1192,7 +1191,7 @@ _e_comp_cb_nocomp_end(E_Comp *c)
{
if (!cw->nocomp)
{
if ((cw->input_only) || (cw->invalid) || (cw->real_hid)) continue;
if ((cw->input_only) || (cw->invalid)) continue;
if (cw->nocomp_need_update)
{
@ -2352,7 +2351,7 @@ _e_comp_win_show(E_Comp_Win *cw)
}
ecore_x_e_comp_pixmap_set(cw->win, cw->pixmap);
}
if (((cw->dmg_updates >= 1) || (cw->defer_show)) && (cw->show_ready))
if ((cw->dmg_updates >= 1) && (cw->show_ready))
{
cw->defer_hide = 0;
if (!cw->hidden_override) _e_comp_child_show(cw);
@ -2741,43 +2740,6 @@ _e_comp_show(void *data __UNUSED__,
Ecore_X_Event_Window_Show *ev = event;
E_Comp_Win *cw = _e_comp_win_find(ev->win);
if (!cw) return ECORE_CALLBACK_PASS_ON;
/*
Vincent Torri via lists.sourceforge.net
2:31 PM (8 minutes ago)
to enlightenment-devel.
would it be possible to add a note in the code, about the reason of
that change ?
Vincent
On Thu, Jun 21, 2012 at 3:29 PM, Enlightenment SVN
<no-reply@enlightenment.org> wrote:
> Log:
> gtk developers with IQs over 180 enjoy hiding and showing their windows constantly,
> especially when resizing. this broke e's comp since we are not nearly that clever
> and try to defer hide animations in most cases. undoing the defer whenever
> this happens allows us to keep up with their towering genius.
> fixes ticket #765 and probably some others.
> affected apps: claws-mail, firefox
*/
if (cw->defer_hide)
{
/*
* this flag was added to further increase compatibility with such magnificent
* gui programming specialists as described in the above comment. another corner
* case of the previously-mentioned genius involves the menus of this incredible toolkit:
* when activating and deactivating menus quickly, gtk sends two separate hide events for
* the same window back-to-back. this means we end up with HIDE-SHOW-HIDE because
* the next activation comes between the hides. to prevent this, we set the defer_show
* flag, which tells comp to ignore the next hide event and to ignore the window's DAMAGE
* event counter when evaluating whether to show it in _e_comp_win_show() below. in this
* way, we ensure that such menus will always be shown.
* ticket #1558
*/
cw->defer_show = 1;
}
cw->defer_hide = 0;
if (cw->visible) return ECORE_CALLBACK_PASS_ON;
_e_comp_win_show(cw);
@ -2793,8 +2755,7 @@ _e_comp_hide(void *data __UNUSED__,
E_Comp_Win *cw = _e_comp_win_find(ev->win);
if (!cw) return ECORE_CALLBACK_PASS_ON;
if (!cw->visible) return ECORE_CALLBACK_PASS_ON;
if (cw->defer_show) cw->defer_show = 0;
else _e_comp_win_real_hide(cw);
_e_comp_win_real_hide(cw);
return ECORE_CALLBACK_PASS_ON;
}