e_comp_object: fix infinite loop during resizing a smart object. 18/46718/2
authorBoram Park <boram1288.park@samsung.com>
Tue, 25 Aug 2015 08:29:12 +0000 (17:29 +0900)
committerBoram Park <boram1288.park@samsung.com>
Tue, 25 Aug 2015 10:19:31 +0000 (19:19 +0900)
   If wl_surface han no wl_buffer, reszing a comp smart object occurs
   infinite loop. In wayland, when a wl_buffer is attached to a surface,
   e_client_util_move_resize_without_frame will be called in _e_comp_wl_
   surface_state_commit. And it makes sure that ec and ec->frame have
   correct size.

Change-Id: I9c3540c94baa0b1f22b0732650f8cee63c3c4d59

src/bin/e_comp_object.c

index 70b63d3..e17723d 100644 (file)
@@ -942,7 +942,7 @@ _e_comp_intercept_resize(void *data, Evas_Object *obj, int w, int h)
    if (cw->ec->new_client || (!cw->ec->visible) || (!cw->effect_obj))
      {
         /* do nothing until client idler loops */
-        if (!cw->ec->maximized)
+        if (!cw->ec->maximized && (cw->ec->w != w || cw->ec->h != h))
           {
              cw->ec->w = w, cw->ec->h = h;
              cw->ec->changes.size = 1;
@@ -969,11 +969,13 @@ _e_comp_intercept_resize(void *data, Evas_Object *obj, int w, int h)
      }
    if ((!cw->ec->input_only) && (!e_pixmap_size_get(cw->ec->pixmap, &pw, &ph)))
      {
+#ifndef HAVE_WAYLAND_ONLY
         /* client can't be resized if its pixmap isn't usable, try again */
         e_pixmap_dirty(cw->ec->pixmap);
         e_comp_object_render_update_add(obj);
         cw->ec->changes.size = 1;
         EC_CHANGED(cw->ec);
+#endif
         return;
      }
    prev_w = cw->w, prev_h = cw->h;