backend: add default engine support for Windows and Mac OS X
[platform/upstream/elementary.git] / src / lib / elm_win.c
index e34fecf..7e3be34 100644 (file)
@@ -15,7 +15,7 @@
 #include "elm_interface_atspi_window.eo.h"
 #include "elm_interface_atspi_widget.eo.h"
 
-#define MY_CLASS ELM_OBJ_WIN_CLASS
+#define MY_CLASS ELM_WIN_CLASS
 
 #define MY_CLASS_NAME "Elm_Win"
 #define MY_CLASS_NAME_LEGACY "elm_win"
@@ -762,7 +762,7 @@ _elm_win_focus_highlight_anim_setup(Elm_Win_Data *sd,
    Evas_Object *target = sd->focus_highlight.cur.target;
 
    evas_object_geometry_get(obj, &px, &py, &pw, &ph);
-   elm_widget_focus_highlight_geometry_get(target, &tx, &ty, &tw, &th, EINA_TRUE);
+   elm_widget_focus_highlight_geometry_get(target, &tx, &ty, &tw, &th);
    evas_object_move(obj, tx, ty);
    evas_object_resize(obj, tw, th);
 
@@ -791,7 +791,7 @@ _elm_win_focus_highlight_simple_setup(Elm_Win_Data *sd,
    Evas_Object *clip, *target = sd->focus_highlight.cur.target;
    Evas_Coord x, y, w, h;
 
-   elm_widget_focus_highlight_geometry_get(target, &x, &y, &w, &h, EINA_TRUE);
+   elm_widget_focus_highlight_geometry_get(target, &x, &y, &w, &h);
 
    evas_object_move(obj, x, y);
    evas_object_resize(obj, w, h);
@@ -806,6 +806,16 @@ _elm_win_focus_highlight_simple_setup(Elm_Win_Data *sd,
 }
 
 static void
+_elm_win_focus_prev_target_del(void *data,
+                               Evas *e EINA_UNUSED,
+                               Evas_Object *obj EINA_UNUSED,
+                               void *event_info EINA_UNUSED)
+{
+   ELM_WIN_DATA_GET(data, sd);
+   sd->focus_highlight.prev.target = NULL;
+}
+
+static void
 _elm_win_focus_highlight_reconfigure_job(void *data)
 {
    ELM_WIN_DATA_GET(data, sd);
@@ -829,8 +839,12 @@ _elm_win_focus_highlight_reconfigure_job(void *data)
      return;
 
    if ((previous) && (sd->focus_highlight.prev.in_theme))
-     elm_widget_signal_emit
-       (previous, "elm,action,focus_highlight,hide", "elm");
+     {
+        evas_object_event_callback_del_full
+           (previous, EVAS_CALLBACK_DEL, _elm_win_focus_prev_target_del, data);
+        elm_widget_signal_emit
+           (previous, "elm,action,focus_highlight,hide", "elm");
+     }
 
    if (!target)
      common_visible = EINA_FALSE;
@@ -891,6 +905,9 @@ the_end:
    _elm_win_focus_highlight_visible_set(sd, common_visible);
    sd->focus_highlight.geometry_changed = EINA_FALSE;
    sd->focus_highlight.prev = sd->focus_highlight.cur;
+   evas_object_event_callback_add
+     (sd->focus_highlight.prev.target,
+      EVAS_CALLBACK_DEL, _elm_win_focus_prev_target_del, data);
 }
 
 static void
@@ -1284,7 +1301,7 @@ _deferred_ecore_evas_free(void *data)
 }
 
 EOLIAN static void
-_elm_win_evas_smart_show(Eo *obj, Elm_Win_Data *sd)
+_elm_win_evas_object_smart_show(Eo *obj, Elm_Win_Data *sd)
 {
    if (sd->modal_count) return;
    const Eina_List *l;
@@ -1305,7 +1322,7 @@ _elm_win_evas_smart_show(Eo *obj, Elm_Win_Data *sd)
 }
 
 EOLIAN static void
-_elm_win_evas_smart_hide(Eo *obj, Elm_Win_Data *sd)
+_elm_win_evas_object_smart_hide(Eo *obj, Elm_Win_Data *sd)
 {
    if (sd->modal_count) return;
    const Eina_List *l;
@@ -1565,7 +1582,7 @@ _elm_win_img_callbacks_del(Evas_Object *obj, Evas_Object *imgobj)
 }
 
 EOLIAN static void
-_elm_win_evas_smart_del(Eo *obj, Elm_Win_Data *sd)
+_elm_win_evas_object_smart_del(Eo *obj, Elm_Win_Data *sd)
 {
    const Eina_List *l;
    Evas_Object *current;
@@ -1694,7 +1711,7 @@ _elm_win_obj_intercept_show(void *data,
 }
 
 EOLIAN static void
-_elm_win_evas_smart_move(Eo *obj, Elm_Win_Data *sd, Evas_Coord x, Evas_Coord y)
+_elm_win_evas_object_smart_move(Eo *obj, Elm_Win_Data *sd, Evas_Coord x, Evas_Coord y)
 {
    if (sd->img_obj)
      {
@@ -1734,7 +1751,7 @@ _elm_win_evas_smart_move(Eo *obj, Elm_Win_Data *sd, Evas_Coord x, Evas_Coord y)
 }
 
 EOLIAN static void
-_elm_win_evas_smart_resize(Eo *obj, Elm_Win_Data *sd, Evas_Coord w, Evas_Coord h)
+_elm_win_evas_object_smart_resize(Eo *obj, Elm_Win_Data *sd, Evas_Coord w, Evas_Coord h)
 {
    eo_do_super(obj, MY_CLASS, evas_obj_smart_resize(w, h));
 
@@ -2762,7 +2779,7 @@ _elm_win_on_icon_del(void *data,
 }
 
 EOLIAN static void
-_elm_win_evas_smart_add(Eo *obj, Elm_Win_Data *_pd EINA_UNUSED)
+_elm_win_evas_object_smart_add(Eo *obj, Elm_Win_Data *_pd EINA_UNUSED)
 {
    eo_do_super(obj, MY_CLASS, evas_obj_smart_add());
 
@@ -3019,24 +3036,33 @@ _elm_win_constructor(Eo *obj, Elm_Win_Data *sd, const char *name, Elm_Win_Type t
           {
              if (_accel_is_gl())
                {
-                  enginelist[0] = ELM_OPENGL_X11;
-                  enginelist[1] = ELM_WAYLAND_EGL;
-                  enginelist[2] = ELM_DRM;
-                  enginelist[3] = ELM_SOFTWARE_FB;
-                  enginelist[4] = ELM_OPENGL_COCOA;
-                  enginelist[5] = ELM_OPENGL_SDL;
-                  enginelist[6] = NULL;
+                  enginelist[ 0] = ELM_OPENGL_X11;
+                  enginelist[ 1] = ELM_WAYLAND_EGL;
+                  enginelist[ 2] = ELM_DRM;
+                  enginelist[ 3] = ELM_SOFTWARE_FB;
+                  enginelist[ 4] = ELM_OPENGL_COCOA;
+                  enginelist[ 5] = ELM_OPENGL_SDL;
+                  enginelist[ 6] = ELM_SOFTWARE_X11;
+                  enginelist[ 7] = ELM_WAYLAND_SHM;
+                  enginelist[ 8] = ELM_SOFTWARE_SDL;
+                  enginelist[ 9] = ELM_SOFTWARE_PSL1GHT;
+                  enginelist[10] = NULL;
                }
              else
                {
-                  enginelist[0] = ENGINE_GET();
-                  enginelist[1] = ELM_SOFTWARE_X11;
-                  enginelist[2] = ELM_WAYLAND_SHM;
-                  enginelist[3] = ELM_DRM;
-                  enginelist[4] = ELM_SOFTWARE_FB;
-                  enginelist[5] = ELM_OPENGL_COCOA;
-                  enginelist[6] = ELM_SOFTWARE_SDL;
-                  enginelist[7] = NULL;
+                  enginelist[ 0] = ENGINE_GET();
+                  enginelist[ 1] = ELM_SOFTWARE_X11;
+                  enginelist[ 2] = ELM_WAYLAND_SHM;
+                  enginelist[ 3] = ELM_DRM;
+                  enginelist[ 4] = ELM_SOFTWARE_FB;
+                  enginelist[ 5] = ELM_OPENGL_COCOA;
+                  enginelist[ 6] = ELM_SOFTWARE_SDL;
+                  enginelist[ 7] = ELM_OPENGL_X11;
+                  enginelist[ 8] = ELM_WAYLAND_EGL;
+                  enginelist[ 9] = ELM_DRM;
+                  enginelist[10] = ELM_OPENGL_SDL;
+                  enginelist[11] = ELM_SOFTWARE_WIN32;
+                  enginelist[12] = NULL;
                }
           }
         for (i = 0; i < 30; i++)
@@ -3504,6 +3530,9 @@ _elm_win_borderless_set(Eo *obj EINA_UNUSED, Elm_Win_Data *sd, Eina_Bool borderl
                 ((!strcmp(engine_name, ELM_WAYLAND_SHM)) ||
                  (!strcmp(engine_name, ELM_WAYLAND_EGL)));
 
+   if (need_frame)
+     need_frame = !sd->fullscreen;
+
    if (borderless)
      {
         if (need_frame)
@@ -3610,7 +3639,6 @@ _elm_win_fullscreen_set(Eo *obj EINA_UNUSED, Elm_Win_Data *sd, Eina_Bool fullscr
 {
    // YYY: handle if sd->img_obj
    if (ENGINE_COMPARE(ELM_SOFTWARE_FB) ||
-       ENGINE_COMPARE(ELM_SOFTWARE_16_WINCE) || 
        ENGINE_COMPARE(ELM_DRM))
      {
         // these engines... can ONLY be fullscreen
@@ -3627,6 +3655,9 @@ _elm_win_fullscreen_set(Eo *obj EINA_UNUSED, Elm_Win_Data *sd, Eina_Bool fullscr
                      ((!strcmp(engine_name, ELM_WAYLAND_SHM)) ||
                       (!strcmp(engine_name, ELM_WAYLAND_EGL)));
 
+        if (need_frame)
+          need_frame = !ecore_evas_borderless_get(sd->ee);
+
         TRAP(sd, fullscreen_set, fullscreen);
 
         if (fullscreen)
@@ -3655,7 +3686,6 @@ _elm_win_fullscreen_get(Eo *obj EINA_UNUSED, Elm_Win_Data *sd)
 
    if (engine_name &&
        ((!strcmp(engine_name, ELM_SOFTWARE_FB)) ||
-        (!strcmp(engine_name, ELM_SOFTWARE_16_WINCE)) || 
         (!strcmp(engine_name, ELM_DRM))))
      {
         // these engines... can ONLY be fullscreen
@@ -4745,6 +4775,13 @@ _elm_win_window_id_get(Eo *obj EINA_UNUSED, Elm_Win_Data *sd)
 }
 
 void
+_elm_win_focus_highlight_in_theme_update(Evas_Object *obj, Eina_Bool in_theme)
+{
+   ELM_WIN_DATA_GET(obj, sd);
+   sd->focus_highlight.cur.in_theme = !!in_theme;
+}
+
+void
 _elm_win_focus_highlight_start(Evas_Object *obj)
 {
    ELM_WIN_DATA_GET(obj, sd);