flag non-internal wl shm clients as dead and delete mirrors on hide
authorMike Blumenkrantz <zmike@osg.samsung.com>
Thu, 5 Mar 2015 17:18:27 +0000 (12:18 -0500)
committerMike Blumenkrantz <zmike@osg.samsung.com>
Thu, 5 Mar 2015 17:18:27 +0000 (12:18 -0500)
no more crashing?

src/bin/e_comp_object.c
src/bin/e_comp_wl.c

index bfada4f..0fdee9a 100644 (file)
@@ -1947,6 +1947,18 @@ _e_comp_smart_hide(Evas_Object *obj)
    if (cw->input_obj) evas_object_hide(cw->input_obj);
    evas_object_hide(cw->effect_obj);
    evas_object_hide(cw->obj);
+   if (cw->ec->dead && cw->obj_mirror)
+     {
+        Evas_Object *o;
+
+        EINA_LIST_FREE(cw->obj_mirror, o)
+          {
+             evas_object_image_data_set(o, NULL);
+             evas_object_freeze_events_set(o, 1);
+             evas_object_event_callback_del_full(o, EVAS_CALLBACK_DEL, _e_comp_object_cb_mirror_del, cw);
+             evas_object_del(o);
+          }
+     }
    if (stopping) return;
    /* ensure focus-out */
    if (cw->ec->focused)
index 6ec02a5..ad3a2ee 100644 (file)
@@ -1356,7 +1356,7 @@ _e_comp_wl_surface_destroy(struct wl_resource *resource)
      return;
 
    if ((!ec->internal) && (!e_comp_gl_get()))
-     ec->hidden = 1;
+     ec->dead = ec->hidden = 1;
    evas_object_hide(ec->frame);
    e_object_del(E_OBJECT(ec));
 }