diff options
| author | Monsta <[email protected]> | 2015-11-08 00:00:39 +0300 | 
|---|---|---|
| committer | Monsta <[email protected]> | 2015-11-08 00:00:39 +0300 | 
| commit | 3ed3babc3ed31c7b03f7475205acc6c5e52bac81 (patch) | |
| tree | 30956de0085aa456dab9a00c1026cbee9b1f6d38 /src | |
| parent | 228390697c5b89aee45796677cf1c98a8b50ba97 (diff) | |
| download | marco-3ed3babc3ed31c7b03f7475205acc6c5e52bac81.tar.bz2 marco-3ed3babc3ed31c7b03f7475205acc6c5e52bac81.tar.xz | |
Revert "Merge pull request #115 from Samsagax/animation-fix-clean"
This reverts commit 567890a8a1884247de29e9f97cf9cd8110247c04, reversing
changes made to a65a66d49bd0d6ec6c94b8e3ecd551cb570cec95.
Diffstat (limited to 'src')
| -rw-r--r-- | src/core/effects.c | 43 | ||||
| -rw-r--r-- | src/core/effects.h | 1 | ||||
| -rw-r--r-- | src/core/window-private.h | 4 | ||||
| -rw-r--r-- | src/core/window.c | 183 | 
4 files changed, 83 insertions, 148 deletions
| diff --git a/src/core/effects.c b/src/core/effects.c index 163ec054..2866246f 100644 --- a/src/core/effects.c +++ b/src/core/effects.c @@ -67,7 +67,6 @@  #endif  #define META_MINIMIZE_ANIMATION_LENGTH 0.25 -#define META_UNMINIMIZE_ANIMATION_LENGTH 0.25  #define META_SHADE_ANIMATION_LENGTH 0.2  #include <string.h> @@ -99,9 +98,6 @@ typedef struct    MetaRectangle start_rect;    MetaRectangle end_rect; -  MetaEffectFinished finished; -  gpointer finished_data; -  } BoxAnimationContext;  /** @@ -153,9 +149,7 @@ static void  draw_box_animation (MetaScreen     *screen,                      MetaRectangle  *initial_rect,                      MetaRectangle  *destination_rect, -                    double          seconds_duration, -                    MetaEffectFinished finished, -                    gpointer        finished_data); +                    double          seconds_duration);  /**   * Creates an effect. @@ -179,13 +173,17 @@ create_effect (MetaEffectType      type,  }  /** - * Destroys an effect. + * Destroys an effect.  If the effect has a "finished" hook, it will be + * called before cleanup.   *   * \param effect  The effect.   */  static void  effect_free (MetaEffect *effect)  { +  if (effect->priv->finished) +    effect->priv->finished (effect->priv->finished_data); +    g_free (effect->priv);    g_free (effect);  } @@ -366,8 +364,6 @@ effects_draw_box_animation_timeout (BoxAnimationContext *context)                   context->gc);  #endif /* !HAVE_SHAPE */ -      context->finished(context->finished_data); -        g_free (context);        return FALSE;      } @@ -415,9 +411,7 @@ void  draw_box_animation (MetaScreen     *screen,                      MetaRectangle  *initial_rect,                      MetaRectangle  *destination_rect, -                    double          seconds_duration, -                    MetaEffectFinished finished, -                    gpointer        finished_data) +                    double          seconds_duration)  {    BoxAnimationContext *context; @@ -442,9 +436,6 @@ draw_box_animation (MetaScreen     *screen,    context->start_rect = *initial_rect;    context->end_rect = *destination_rect; -  context->finished = finished; -  context->finished_data = finished_data; -  #ifdef HAVE_SHAPE    attrs.override_redirect = True; @@ -707,17 +698,7 @@ run_default_effect_handler (MetaEffect *effect)         draw_box_animation (effect->window->screen,                       &(effect->u.minimize.window_rect),                       &(effect->u.minimize.icon_rect), -                     META_MINIMIZE_ANIMATION_LENGTH, -                     effect->priv->finished, -                     effect->priv->finished_data); -       break; -    case META_EFFECT_UNMINIMIZE: -       draw_box_animation (effect->window->screen, -                     &(effect->u.minimize.icon_rect), -                     &(effect->u.minimize.window_rect), -                     META_UNMINIMIZE_ANIMATION_LENGTH, -                     effect->priv->finished, -                     effect->priv->finished_data); +                     META_MINIMIZE_ANIMATION_LENGTH);         break;      default: @@ -728,16 +709,8 @@ run_default_effect_handler (MetaEffect *effect)  static void  run_handler (MetaEffect *effect)  { -  /* If effects are disabled just run the finished function */    if (meta_prefs_get_mate_animations ()) -  {      run_default_effect_handler (effect); -  } -  else -  { -    if (effect->priv->finished) -      effect->priv->finished(effect->priv->finished_data); -  }    effect_free (effect);  } diff --git a/src/core/effects.h b/src/core/effects.h index e0025ff6..ca25aa88 100644 --- a/src/core/effects.h +++ b/src/core/effects.h @@ -50,7 +50,6 @@  typedef enum  { -  META_EFFECT_NONE = 0,    META_EFFECT_MINIMIZE,    META_EFFECT_UNMINIMIZE,    META_EFFECT_FOCUS, diff --git a/src/core/window-private.h b/src/core/window-private.h index 0b3cf594..88713101 100644 --- a/src/core/window-private.h +++ b/src/core/window-private.h @@ -36,7 +36,6 @@  #include <config.h>  #include "window.h" -#include "effects.h"  #include "screen-private.h"  #include "util.h"  #include "stack.h" @@ -187,9 +186,6 @@ struct _MetaWindow    guint was_minimized : 1;    guint tab_unminimized : 1; -  /* Whether there is a pending effect */ -  MetaEffectType effect_pending; -    /* Whether the window is mapped; actual server-side state     * see also unmaps_pending     */ diff --git a/src/core/window.c b/src/core/window.c index 08bf58ac..461d38fb 100644 --- a/src/core/window.c +++ b/src/core/window.c @@ -483,7 +483,6 @@ meta_window_new_with_attrs (MetaDisplay       *display,    window->minimized = FALSE;    window->was_minimized = FALSE;    window->tab_unminimized = FALSE; -  window->effect_pending = META_EFFECT_NONE;    window->iconic = FALSE;    window->mapped = attrs->map_state != IsUnmapped;    /* if already mapped, no need to worry about focus-on-first-time-showing */ @@ -1460,119 +1459,80 @@ static void  finish_minimize (gpointer data)  {    MetaWindow *window = data; +  /* FIXME: It really sucks to put timestamp pinging here; it'd +   * probably make more sense in implement_showing() so that it's at +   * least not duplicated in meta_window_show; but since +   * finish_minimize is a callback making things just slightly icky, I +   * haven't done that yet. +   */ +  guint32 timestamp = meta_display_get_current_time_roundtrip (window->display); -  window->effect_pending = META_EFFECT_NONE; -} - -static void -finish_unminimize (gpointer data) -{ -  MetaWindow *window = data; - -  meta_window_show (window); -  window->was_minimized = FALSE; -  window->effect_pending = META_EFFECT_NONE; -} - -static void -meta_window_animate_minimize (MetaWindow *window) -{ -  MetaRectangle icon_rect, window_rect; -  gboolean result; - -  /* Check if the window has an icon geometry */ -  result = meta_window_get_icon_geometry (window, &icon_rect); - -  if (!result) +  meta_window_hide (window); +  if (window->has_focus)      { -      /* just animate into the corner somehow - maybe -       * not a good idea... -       */ -      icon_rect.x = window->screen->rect.width; -      icon_rect.y = window->screen->rect.height; -      icon_rect.width = 1; -      icon_rect.height = 1; +      meta_workspace_focus_default_window (window->screen->active_workspace, +                                           window, +                                           timestamp);      } - -  meta_window_get_outer_rect (window, &window_rect); - -  meta_effect_run_minimize (window, -                            &window_rect, -                            &icon_rect, -                            finish_minimize, -                            window);  }  static void -meta_window_animate_unminimize (MetaWindow *window) +implement_showing (MetaWindow *window, +                   gboolean    showing)  { -  MetaRectangle icon_rect, window_rect; -  gboolean result; - -  /* Check if the window has an icon geometry */ -  result = meta_window_get_icon_geometry (window, &icon_rect); +  /* Actually show/hide the window */ +  meta_verbose ("Implement showing = %d for window %s\n", +                showing, window->desc); -  if (!result) +  if (!showing)      { -      /* just animate into the corner somehow - maybe -       * not a good idea... +      gboolean on_workspace; + +      on_workspace = meta_window_located_on_workspace (window, +                                                       window->screen->active_workspace); + +      /* Really this effects code should probably +       * be in meta_window_hide so the window->mapped +       * test isn't duplicated here. Anyhow, we animate +       * if we are mapped now, we are supposed to +       * be minimized, and we are on the current workspace.         */ -      icon_rect.x = window->screen->rect.width; -      icon_rect.y = window->screen->rect.height; -      icon_rect.width = 1; -      icon_rect.height = 1; -    } +      if (on_workspace && window->minimized && window->mapped && +          !meta_prefs_get_reduced_resources ()) +        { +          MetaRectangle icon_rect, window_rect; +          gboolean result; -  meta_window_get_outer_rect (window, &window_rect); +          /* Check if the window has an icon geometry */ +          result = meta_window_get_icon_geometry (window, &icon_rect); -  meta_effect_run_unminimize (window, -                            &window_rect, -                            &icon_rect, -                            finish_unminimize, -                            window); -} +          if (!result) +            { +              /* just animate into the corner somehow - maybe +               * not a good idea... +               */ +              icon_rect.x = window->screen->rect.width; +              icon_rect.y = window->screen->rect.height; +              icon_rect.width = 1; +              icon_rect.height = 1; +            } -static void -implement_showing (MetaWindow *window, -                   gboolean    showing) -{ -  /* Actually show/hide the window */ -  meta_verbose ("Implement showing = %d for window %s with effect pending %i\n", -                showing, window->desc, window->effect_pending); +          meta_window_get_outer_rect (window, &window_rect); -  if (!showing) -    { -      /* Handle pending effects */ -      switch(window->effect_pending) -      { -      case META_EFFECT_MINIMIZE: -        /* First hide the window and then animate */ -        meta_window_hide(window); -        meta_window_animate_minimize (window); -        break; -      case META_EFFECT_UNMINIMIZE: -      case META_EFFECT_NONE: -      default: -        meta_window_hide(window); -        break; -      } +          meta_effect_run_minimize (window, +                                    &window_rect, +                                    &icon_rect, +                                    finish_minimize, +                                    window); +        } +      else +        { +          finish_minimize (window); +        }      }    else      { -      /* Handle pending effects */ -      switch(window->effect_pending) -      { -      case META_EFFECT_MINIMIZE: -        break; -      case META_EFFECT_UNMINIMIZE: -        /* First animate then show the window */ -        meta_window_animate_unminimize (window); -        break; -      case META_EFFECT_NONE: -      default: -        meta_window_show (window); -        break; -      } +      meta_window_show (window);      }  } @@ -2335,6 +2295,24 @@ meta_window_show (MetaWindow *window)            XMapWindow (window->display->xdisplay, window->xwindow);            meta_error_trap_pop (window->display, FALSE);            did_show = TRUE; + +          if (window->was_minimized) +            { +              MetaRectangle window_rect; +              MetaRectangle icon_rect; + +              window->was_minimized = FALSE; + +              if (meta_window_get_icon_geometry (window, &icon_rect)) +                { +                  meta_window_get_outer_rect (window, &window_rect); + +                  meta_effect_run_unminimize (window, +                                              &window_rect, +                                              &icon_rect, +                                              NULL, NULL); +                } +            }          }        if (window->iconic) @@ -2373,10 +2351,6 @@ meta_window_show (MetaWindow *window)            meta_display_increment_focus_sentinel (window->display);          }      } -  else if (window->was_minimized) -    { -      meta_window_focus(window, timestamp); -    }    set_net_wm_state (window); @@ -2463,8 +2437,6 @@ meta_window_minimize (MetaWindow  *window)    if (!window->minimized)      {        window->minimized = TRUE; -      /* Flag minimize effect pending */ -      window->effect_pending = META_EFFECT_MINIMIZE;        meta_window_queue(window, META_QUEUE_CALC_SHOWING);        meta_window_foreach_transient (window, @@ -2484,8 +2456,6 @@ meta_window_minimize (MetaWindow  *window)                        window->desc);          }      } - -  /* Should insert minimize effect here? */  }  void @@ -2495,15 +2465,12 @@ meta_window_unminimize (MetaWindow  *window)      {        window->minimized = FALSE;        window->was_minimized = TRUE; -      window->effect_pending = META_EFFECT_UNMINIMIZE;        meta_window_queue(window, META_QUEUE_CALC_SHOWING);        meta_window_foreach_transient (window,                                       queue_calc_showing_func,                                       NULL);      } - -  /* Should insert unminimize effect here? */  }  static void | 
