get_next_visible_mainwin -> get_next_activable_mainwin; get next activable window znode before freeing the current znode

This commit is contained in:
Vincent Wei
2020-02-06 16:04:09 +08:00
parent 888c8089cd
commit 5064a14de6
3 changed files with 12 additions and 11 deletions
+1 -1
View File
@@ -849,7 +849,7 @@ static LRESULT KeyMessageHandler (UINT message, int scancode, DWORD status)
dskForceCloseMenu ();
#endif
next_node =
get_next_visible_mainwin (__mg_zorder_info,
get_next_activable_mainwin (__mg_zorder_info,
__mg_zorder_info->active_win);
if (next_node) {
+2 -2
View File
@@ -1679,7 +1679,7 @@ int __mg_remove_all_znodes_of_client (int cli)
/* if active_win belongs to the client, change it */
if (nodes [old_active].cli == cli) {
int next_active = get_next_visible_mainwin (zi, 0);
int next_active = get_next_activable_mainwin (zi, 0);
srvSetActiveWindow (nodes [next_active].cli, next_active);
}
@@ -2900,7 +2900,7 @@ static int srvKeyMessageHandler (int message, int scancode, DWORD status)
#ifdef _MGHAVE_MENU
srvForceCloseMenu (0);
#endif
next_node = get_next_visible_mainwin (__mg_zorder_info,
next_node = get_next_activable_mainwin (__mg_zorder_info,
__mg_zorder_info->active_win);
if (next_node) {
srvMove2Top (0, next_node);
+9 -8
View File
@@ -1240,7 +1240,7 @@ int __kernel_get_prev_znode (const ZORDERINFO* zi, int from)
return prev;
}
static int get_next_visible_mainwin (const ZORDERINFO* zi, int from)
static int get_next_activable_mainwin (const ZORDERINFO* zi, int from)
{
int next;
ZORDERNODE* nodes = GET_ZORDERNODE(zi);
@@ -2422,26 +2422,28 @@ static int FreeZOrderNodeEx (ZORDERINFO* zi, int idx_znode, HDC* memdc)
}
#endif /* defined _MGSCHEMA_COMPOSITING */
/* XXX: get next activable window znode before freeing the current znode */
next_active = get_next_activable_mainwin (zi, idx_znode);
old_active = zi->active_win;
if (idx_znode == zi->active_win)
zi->active_win = 0;
if (first == &fixed_idx) {
/* Since 4.2.0: handle fixed znodes */
nodes [idx_znode].hwnd = 0;
nodes [idx_znode].hwnd = HWND_NULL;
nodes [idx_znode].cli = -1;
nodes [idx_znode].flags &= ~ZOF_VISIBLE;
}
else if (*first == idx_znode) {
/* unchain it */
unchain_znode ((unsigned char*)(zi+1), nodes, idx_znode);
nodes [idx_znode].hwnd = 0;
nodes [idx_znode].hwnd = HWND_NULL;
nodes [idx_znode].cli = -1;
*first = nodes [idx_znode].next;
*nr_nodes -= 1;
}
old_active = zi->active_win;
if (idx_znode == zi->active_win)
zi->active_win = 0;
/* unlock zi for change */
unlock_zi_for_change (zi);
@@ -2463,7 +2465,6 @@ static int FreeZOrderNodeEx (ZORDERINFO* zi, int idx_znode, HDC* memdc)
/* if active_win is this window, change it */
if (idx_znode == old_active) {
next_active = get_next_visible_mainwin (zi, idx_znode);
dskSetActiveZOrderNode (nodes [next_active].cli, next_active);
}