elm_win: manually create a wl2 window for FAKE wins under wayland
authorMike Blumenkrantz <zmike@osg.samsung.com>
Fri, 7 Jul 2017 20:26:50 +0000 (16:26 -0400)
committerMike Blumenkrantz <zmike@osg.samsung.com>
Fri, 7 Jul 2017 19:22:23 +0000 (15:22 -0400)
this enables elm_cnp to function using protocol

src/lib/elementary/efl_ui_win.c
src/lib/elementary/efl_ui_win.eo

index b763f21..56d9c0c 100644 (file)
@@ -5048,6 +5048,16 @@ _elm_win_finalize_internal(Eo *obj, Efl_Ui_Win_Data *sd, const char *name, Elm_W
           }
         ecore_wl2_window_type_set(sd->wl.win, wtype);
      }
+   else if (sd->type == ELM_WIN_FAKE)
+     {
+        const char *env = getenv("WAYLAND_DISPLAY");
+        if (env)
+          {
+             Ecore_Wl2_Display *d = ecore_wl2_display_connect(env);
+             sd->wl.win = ecore_wl2_window_new(d, NULL, 0, 0, 1, 1);
+             ecore_wl2_display_disconnect(d);
+          }
+     }
 #endif
 
 #ifdef HAVE_ELEMENTARY_COCOA
@@ -5328,6 +5338,16 @@ _efl_ui_win_elm_widget_focus_manager_factory(Eo *obj EINA_UNUSED, Efl_Ui_Win_Dat
    return manager;
 }
 
+EOLIAN static void
+_efl_ui_win_efl_object_destructor(Eo *obj EINA_UNUSED, Efl_Ui_Win_Data *pd)
+{
+#ifdef HAVE_ELEMENTARY_WL2
+   if (pd->type == ELM_WIN_FAKE)
+     ecore_wl2_window_free(pd->wl.win);
+#endif
+   efl_destructor(efl_super(obj, MY_CLASS));
+}
+
 EOLIAN static Eo *
 _efl_ui_win_efl_object_constructor(Eo *obj, Efl_Ui_Win_Data *pd)
 {
index f98e0a5..21de1d4 100644 (file)
@@ -926,6 +926,7 @@ class Efl.Ui.Win (Elm.Widget, Efl.Canvas, Elm.Interface.Atspi.Window,
    implements {
       class.constructor;
       Efl.Object.constructor;
+      Efl.Object.destructor;
       Efl.Object.finalize;
       Efl.Gfx.visible { set; }
       Efl.Gfx.position { set; }