From 2ea40ff2c538523ed60d04ad351b3b8ae23f7603 Mon Sep 17 00:00:00 2001 From: dan Date: Sun, 8 May 2005 00:51:56 +0000 Subject: [PATCH] Improved hide/unhide animation for applications with multiple windows (only animate the active window hiding/unhiding, which makes Window Maker faster and more responsive for such applications). --- ChangeLog | 5 ++++- src/actions.c | 19 ++++++++++++++----- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index fae78d5d..688763e7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -8,7 +8,7 @@ Changes since version 0.91.0: - fixed issues with compiling on Solaris with openwin - reduced minimum required version number for the Xft library to 2.1.0 - fixed some compilation issues with gcc-2.9x -- Removed --with-appsdir option and replaced it with --with-gnustepdir. Also, +- removed --with-appsdir option and replaced it with --with-gnustepdir. Also, default installation path (for non GNUstep users) is now $(prefix)/bin - fixed bug with infinite loop in some circumstances in fitText() in WINGs - fixed to allow parallel builds on SMP systems using make -j @@ -19,6 +19,9 @@ Changes since version 0.91.0: Window Maker starts to make transition transparent for users. - fixed issue with window being moved by 1 pixel up and left when the window move was initiated by the client +- improved hide/unhide animation for applications with multiple windows + (only animate the active window hiding/unhiding, which makes Window Maker + faster and more responsive for such applications). Changes since version 0.90.0: diff --git a/src/actions.c b/src/actions.c index eb453ab3..6a42247a 100644 --- a/src/actions.c +++ b/src/actions.c @@ -771,6 +771,7 @@ animateResize(WScreen *scr, int x, int y, int w, int h, } k = (hiding ? 2 : 3); + switch(style) { case WIS_TWIST: steps = (MINIATURIZE_ANIMATION_STEPS_T * k)/3; @@ -1343,6 +1344,7 @@ wHideApplication(WApplication *wapp) WScreen *scr; WWindow *wlist; int hadfocus; + int animate; if (!wapp) { wwarning("trying to hide a non grouped window"); @@ -1362,15 +1364,19 @@ wHideApplication(WApplication *wapp) wapp->last_focused = wlist; else wapp->last_focused = NULL; + + animate = !wapp->flags.skip_next_animation; + while (wlist) { if (wlist->main_window == wapp->main_window) { if (wlist->flags.focused) { hadfocus = 1; } - if (wapp->app_icon) + if (wapp->app_icon) { hideWindow(wapp->app_icon->icon, wapp->app_icon->x_pos, - wapp->app_icon->y_pos, wlist, - !wapp->flags.skip_next_animation); + wapp->app_icon->y_pos, wlist, animate); + animate = False; + } } wlist = wlist->prev; } @@ -1449,6 +1455,7 @@ wUnhideApplication(WApplication *wapp, Bool miniwindows, Bool bringToCurrentWS) WWindow *wlist, *next; WWindow *focused=NULL; Bool shouldArrangeIcons = False; + int animate; if (!wapp) return; @@ -1462,6 +1469,8 @@ wUnhideApplication(WApplication *wapp, Bool miniwindows, Bool bringToCurrentWS) while (wlist->prev) wlist = wlist->prev; + animate = !wapp->flags.skip_next_animation; + while (wlist) { next = wlist->next; @@ -1502,9 +1511,9 @@ wUnhideApplication(WApplication *wapp, Bool miniwindows, Bool bringToCurrentWS) WMPostNotificationName(WMNChangedState, wlist, "hide"); } else if (wlist->flags.hidden) { unhideWindow(wapp->app_icon->icon, wapp->app_icon->x_pos, - wapp->app_icon->y_pos, wlist, - !wapp->flags.skip_next_animation, + wapp->app_icon->y_pos, wlist, animate, bringToCurrentWS); + animate = False; } else { if (bringToCurrentWS && wlist->frame->workspace != scr->current_workspace) {