diff options
-rw-r--r-- | plugins/YAPP/src/popwin.cpp | 34 |
1 files changed, 25 insertions, 9 deletions
diff --git a/plugins/YAPP/src/popwin.cpp b/plugins/YAPP/src/popwin.cpp index cbc7eb8139..36cd3f6d30 100644 --- a/plugins/YAPP/src/popwin.cpp +++ b/plugins/YAPP/src/popwin.cpp @@ -35,28 +35,40 @@ int stack_size = 0; void RepositionWindows() {
HWNDStackNode *current;
- int x = pop_start_x, y = pop_start_y;
+ int x = pop_start_x, y;
int height;
if (options.animate == ANIMATE_HORZ)
{
- if (options.location == PL_BOTTOMRIGHT ||options.location == PL_TOPRIGHT)
+ if (options.location == PL_BOTTOMRIGHT || options.location == PL_TOPRIGHT)
x -= options.win_width + 1;
- if (options.location == PL_BOTTOMLEFT ||options.location == PL_TOPLEFT)
+ if (options.location == PL_BOTTOMLEFT || options.location == PL_TOPLEFT)
x += options.win_width + 1;
}
+ // Особый случай: выдвижение окна из-за верхнего края экрана.
+ if ((options.animate == ANIMATE_VERT) && (options.location == PL_TOPLEFT || options.location == PL_TOPRIGHT))
+ y = 0;
+ else
+ y = pop_start_y;
+
current = hwnd_stack_top;
- while(current) {
+ while (current)
+ {
SendMessage(current->hwnd, PUM_GETHEIGHT, (WPARAM)&height, 0);
- if (options.location == PL_BOTTOMRIGHT || options.location == PL_BOTTOMLEFT) y -= height + 1;
- if (options.animate == ANIMATE_VERT)
- if (options.location == PL_TOPRIGHT || options.location == PL_TOPLEFT) y += height + 1;
+ // Если окна размещать у нижнего края, то координата текущего окна меньше на его высоту.
+ if (options.location == PL_BOTTOMLEFT || options.location == PL_BOTTOMRIGHT)
+ y -= height + 1;
+
+ // Перемещаем окно.
SendMessage(current->hwnd, PUM_MOVE, (WPARAM)x, (LPARAM)y);
- if (options.animate != ANIMATE_VERT)
- if (options.location == PL_TOPRIGHT || options.location == PL_TOPLEFT) y += height + 1;
+ // Координата для следующего окна.
+ // Если окна размещать у верхнего края, то координата следующего окна больше на высоту текущего окна.
+ if (options.location == PL_TOPLEFT || options.location == PL_TOPRIGHT)
+ y += height + 1;
+ // Переходим к следующему окну.
current = current->next;
}
}
@@ -150,8 +162,12 @@ void RemoveWindowFromStack(HWND hwnd) current = current->next;
}
+ // Если после удаления в стеке остались окна, то нужно провести сжатие:
+ // сдвинуть все окна к верхнему/нижнему краю экрана.
if (hwnd_stack_top)
+ {
RepositionWindows();
+ }
}
void BroadcastMessage(UINT msg, WPARAM wParam, LPARAM lParam)
|