From 7802d000fec411a771305fa3cff03fc77ae50f65 Mon Sep 17 00:00:00 2001 From: Vincent Wei Date: Thu, 25 Mar 2021 15:45:39 +0800 Subject: [PATCH] fix bug in __mg_remove_all_znodes_of_client --- src/kernel/desktop-procs.c | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/src/kernel/desktop-procs.c b/src/kernel/desktop-procs.c index 72e03232..13b8bf71 100644 --- a/src/kernel/desktop-procs.c +++ b/src/kernel/desktop-procs.c @@ -1562,7 +1562,7 @@ int __mg_remove_all_znodes_of_client (int cli) if (nodes [slot].cli == cli) { DWORD flags = nodes [slot].flags; - if (!has_special && IS_TYPE_SPECIAL (flags & ZOF_TYPE_MASK)) { + if (!has_special && (flags & ZOF_IF_SPECIAL)) { has_special = TRUE; } @@ -1611,8 +1611,18 @@ int __mg_remove_all_znodes_of_client (int cli) #ifdef _MGSCHEMA_COMPOSITING if (flags & ZOF_VISIBLE) { - DO_COMPSOR_OP_ARGS (on_dirty_screen, layer, - flags & ZOF_TYPE_FLAG_MASK, &nodes [slot].rc); + if (flags & ZOF_IF_SPECIAL) { + MG_Layer* layer = mgLayers; + while (layer) { + DO_COMPSOR_OP_ARGS (on_dirty_screen, layer, + flags & ZOF_TYPE_FLAG_MASK, &nodes [slot].rc); + layer = layer->next; + } + } + else { + DO_COMPSOR_OP_ARGS (on_dirty_screen, layer, + flags & ZOF_TYPE_FLAG_MASK, &nodes [slot].rc); + } } #endif /* defined _MGSCHEMA_COMPOSITING */ } @@ -1626,8 +1636,15 @@ int __mg_remove_all_znodes_of_client (int cli) /* unlock zi for change */ unlock_zi_for_change (zi); - if (has_special && zi != __mg_def_zorder_info) { - __mg_sync_special_nodes (zi, __mg_def_zorder_info); + if (has_special) { + MG_Layer* layer = mgLayers; + while (layer) { + if (layer->zorder_info != zi) { + __mg_sync_special_nodes (zi, layer->zorder_info); + } + + layer = layer->next; + } } #ifndef _MGSCHEMA_COMPOSITING