Merge remote-tracking branch 'opensource/elementary-1.16' into tizen
authorJaehwan Kim <jae.hwan.kim@samsung.com>
Wed, 11 Nov 2015 11:45:36 +0000 (20:45 +0900)
committerJaehwan Kim <jae.hwan.kim@samsung.com>
Wed, 11 Nov 2015 11:45:36 +0000 (20:45 +0900)
Conflicts:
AUTHORS
NEWS
config/default/base.src.in
config/mobile/base.src.in
config/standard/base.src.in
configure.ac
data/themes/edc/comp.edc
data/themes/edc/elm/button.edc
data/themes/edc/elm/scroller.edc
data/themes/edc/elm/spinner.edc
src/bin/test_focus_policy.c
src/bin/test_gengrid.c
src/bin/test_popup.c
src/bin/test_scroller.c
src/bin/test_win_keygrab.c
src/lib/Elementary.h.in
src/lib/Makefile.am
src/lib/elc_popup.c
src/lib/elm_atspi_bridge.c
src/lib/elm_cnp.c
src/lib/elm_conform.c
src/lib/elm_datetime.c
src/lib/elm_entry.c
src/lib/elm_entry.eo
src/lib/elm_focus.h
src/lib/elm_gen_common.h
src/lib/elm_gengrid.c
src/lib/elm_gengrid.eo
src/lib/elm_gengrid_item.eo
src/lib/elm_genlist.c
src/lib/elm_genlist.eo
src/lib/elm_genlist_item.eo
src/lib/elm_interface_atspi_accessible.c
src/lib/elm_interface_atspi_accessible.eo
src/lib/elm_interface_atspi_accessible.h
src/lib/elm_interface_scrollable.c
src/lib/elm_interface_scrollable.eo
src/lib/elm_interfaces.h
src/lib/elm_layout.c
src/lib/elm_list.c
src/lib/elm_list.eo
src/lib/elm_list_item.eo
src/lib/elm_macros.h
src/lib/elm_main.c
src/lib/elm_photocam.c
src/lib/elm_photocam.eo
src/lib/elm_radio.c
src/lib/elm_radio.eo
src/lib/elm_scroller.c
src/lib/elm_scroller.eo
src/lib/elm_scroller_legacy.h
src/lib/elm_segment_control_item.eo
src/lib/elm_spinner.c
src/lib/elm_spinner.eo
src/lib/elm_toolbar.c
src/lib/elm_toolbar.eo
src/lib/elm_toolbar_item.eo
src/lib/elm_transit.c
src/lib/elm_transit.h
src/lib/elm_widget.c
src/lib/elm_widget.eo
src/lib/elm_widget.h
src/lib/elm_widget_item.eo
src/lib/elm_win.c
src/lib/elm_win.eo
src/lib/elm_win_common.h
src/tests/elm_test_genlist.c

Change-Id: I6aca9bd1addceb8da0a18a62d66abfff71f452a4

23 files changed:
1  2 
configure.ac
data/themes/edc/elm/border.edc
packaging/elementary.spec
src/examples/Makefile.am
src/lib/Makefile.am
src/lib/elm_button.c
src/lib/elm_check.c
src/lib/elm_config.c
src/lib/elm_config.h
src/lib/elm_conform.c
src/lib/elm_entry.c
src/lib/elm_genlist.c
src/lib/elm_photocam.c
src/lib/elm_priv.h
src/lib/elm_progressbar.c
src/lib/elm_radio.c
src/lib/elm_slider.c
src/lib/elm_widget.c
src/lib/elm_widget.h
src/lib/elm_widget_entry.h
src/lib/elm_win.c
src/lib/elm_win.eo
src/lib/elm_win.h

diff --cc configure.ac
Simple merge
Simple merge
index 4cb13291584e8c64f21b4b2e22b3d508842b9d10,0000000000000000000000000000000000000000..5a804e24a5193fd4209f3cf6eada02d636b13e3f
mode 100644,000000..100644
--- /dev/null
@@@ -1,158 -1,0 +1,158 @@@
 +%define dbus_unavailable 1
 +
 +%bcond_with wayland
 +%bcond_with x
 +Name:           elementary
 +Version:        1.13.1
 +Release:        0
 +License:        LGPL-2.1+
 +Summary:        EFL toolkit for small touchscreens
 +Url:            http://trac.enlightenment.org/e/wiki/Elementary
 +Group:          Graphics & UI Framework/Development
 +Source0:        elementary-%{version}.tar.bz2
 +Source100:      elementary.conf
 +Source1001:     elementary.manifest
 +BuildRequires:  doxygen
 +BuildRequires:  gettext-devel
 +BuildRequires:  pkgconfig(ecore)
 +BuildRequires:  pkgconfig(ecore-evas)
 +BuildRequires:  pkgconfig(ecore-file)
 +BuildRequires:  pkgconfig(ecore-imf)
 +
 +%if %{with wayland}
 +BuildRequires:  pkgconfig(ecore-wayland)
 +%endif
 +
 +%if %{with x}
 +BuildRequires:  pkgconfig(ecore-x)
 +BuildRequires:  pkgconfig(x11)
 +%endif
 +
 +%if !%{with x}
 +%if !%{with wayland}
 +BuildRequires:  pkgconfig(ecore-fb)
 +%endif
 +%endif
 +
 +BuildRequires:  pkgconfig(edbus)
 +BuildRequires:  pkgconfig(edje)
 +BuildRequires:  pkgconfig(eet)
 +BuildRequires:  pkgconfig(efreet)
 +BuildRequires:  pkgconfig(eina)
 +BuildRequires:  pkgconfig(evas)
 +BuildRequires:  pkgconfig(ethumb)
 +BuildRequires:  pkgconfig(emotion)
 +BuildRequires:  eet-tools
 +BuildRequires:  eolian-devel
 +BuildRequires:  python-devel
 +Recommends:     %{name}-locale = %{version}
 +
 +%description
 +Elementary is a widget set. It is a new-style of widget set much more canvas
 +object based than anything else. Why not ETK? Why not EWL? Well they both
 +tend to veer away from the core of Evas, Ecore and Edje a lot to build their
 +own worlds. Also I wanted something focused on embedded devices -
 +specifically small touchscreens. Unlike GTK+ and Qt, 75% of the "widget set"
 +is already embodied in a common core - Ecore, Edje, Evas etc. So this
 +fine-grained library splitting means all of this is shared, just a new
 +widget "personality" is on top. And that is... Elementary, my dear watson.
 +Elementary.
 +
 +%package examples
 +Summary:   EFL elementary examples
 +
 +%description examples
 +EFL elementary examples
 +
 +%package tools
 +Summary:   EFL elementary configuration and test apps
 +
 +%description tools
 +EFL elementary configuration and test apps package
 +
 +%package devel
 +Summary:        Development files for elementary
 +Group:          Development/Libraries
 +Requires:       %{name} = %{version}
 +
 +%description devel
 +Development components for the elementary package
 +
 +
 +%prep
 +%setup -q
 +cp %{SOURCE1001} .
 +
 +%build
 +
 +%autogen --disable-static \
 +%if %{with wayland}
 +         --enable-ecore-wayland \
 +%endif
 +%if !%{with x}
 +         --disable-ecore-x \
 +%endif
 +         --with-elementary-base-dir="share/.elementary" \
 +%if %dbus_unavailable
 +         --disable-build-examples
 +%else
 +         --enable-build-examples
 +%endif
 +
 +%__make %{?_smp_mflags}
 +
 +%install
 +%make_install
 +
 +mkdir -p %{buildroot}%{_tmpfilesdir}
 +install -m 0644 %SOURCE100 %{buildroot}%{_tmpfilesdir}/elementary.conf
 +
 +%find_lang %{name}
 +
 +%post -p /sbin/ldconfig
 +
 +%postun -p /sbin/ldconfig
 +
 +%lang_package
 +
 +%files
 +%manifest %{name}.manifest
 +%defattr(-,root,root,-)
 +%license COPYING
 +%{_bindir}/elementary_quicklaunch
 +%{_bindir}/elementary_run
 +%{_libdir}/edje/*
 +%{_libdir}/elementary/modules/*
 +%{_libdir}/*.so.*
 +%{_datadir}/elementary/*
 +%{_datadir}/icons/elementary.png
 +%{_tmpfilesdir}/elementary.conf
 +
 +%exclude %{_datadir}/elementary/config/
 +
 +%if ! %dbus_unavailable
 +%files examples
 +%manifest %{name}.manifest
 +%defattr(-,root,root,-)
 +%{_libdir}/elementary/examples/*
 +%endif
 +
 +%files tools
 +%manifest %{name}.manifest
 +%defattr(-,root,root,-)
 +%{_datadir}/applications/*
 +%{_bindir}/elementary_config
 +%{_bindir}/elementary_test*
 +%{_bindir}/elementary_codegen
 +%{_bindir}/elm_prefs_cc
 +
 +%files devel
 +%manifest %{name}.manifest
 +%defattr(-,root,root,-)
 +%{_includedir}/%{name}-1/*.h*
 +%{_datadir}/eolian/include/%{name}-1/*.eo
 +%{_libdir}/*.so
 +%{_libdir}/pkgconfig/*.pc
 +%{_libdir}/cmake/Elementary/ElementaryConfig.cmake
 +%{_libdir}/cmake/Elementary/ElementaryConfigVersion.cmake
++/usr/share/eolian/include/elementary-*1/*.eot
Simple merge
Simple merge
Simple merge
Simple merge
index bd674a2eaff0cef190b929232d1dabff0a9976e0,29ef12de69b3b7f5a7701243d9b26e3a799d3477..80964f723647173cd6de6b344c4f18a3fb1a2fdc
@@@ -346,13 -343,12 +343,13 @@@ _desc_init(void
     ELM_CONFIG_VAL(D, T, zoom_friction, T_DOUBLE);
     ELM_CONFIG_VAL(D, T, thumbscroll_bounce_enable, T_UCHAR);
     ELM_CONFIG_VAL(D, T, scroll_smooth_start_enable, T_UCHAR);
-    ELM_CONFIG_VAL(D, T, scroll_smooth_time_interval, T_DOUBLE);
+ //   ELM_CONFIG_VAL(D, T, scroll_smooth_time_interval, T_DOUBLE); // not used anymore
     ELM_CONFIG_VAL(D, T, scroll_smooth_amount, T_DOUBLE);
-    ELM_CONFIG_VAL(D, T, scroll_smooth_history_weight, T_DOUBLE);
-    ELM_CONFIG_VAL(D, T, scroll_smooth_future_time, T_DOUBLE);
+ //   ELM_CONFIG_VAL(D, T, scroll_smooth_history_weight, T_DOUBLE); // not used anymore
+ //   ELM_CONFIG_VAL(D, T, scroll_smooth_future_time, T_DOUBLE); // not used anymore
     ELM_CONFIG_VAL(D, T, scroll_smooth_time_window, T_DOUBLE);
     ELM_CONFIG_VAL(D, T, scale, T_DOUBLE);
 +   ELM_CONFIG_VAL(D, T, win_no_border, T_INT);
     ELM_CONFIG_VAL(D, T, bgpixmap, T_INT);
     ELM_CONFIG_VAL(D, T, compositing, T_INT);
     /* EET_DATA_DESCRIPTOR_ADD_LIST(D, T, "font_dirs", font_dirs, sub_edd); */
@@@ -1373,14 -1373,13 +1374,14 @@@ _config_load(void
     _elm_config->zoom_friction = 0.5;
     _elm_config->thumbscroll_border_friction = 0.5;
     _elm_config->thumbscroll_sensitivity_friction = 0.25; // magic number! just trial and error shows this makes it behave "nicer" and not run off at high speed all the time
-    _elm_config->scroll_smooth_start_enable = EINA_FALSE;
-    _elm_config->scroll_smooth_time_interval = 0.008;
+    _elm_config->scroll_smooth_start_enable = EINA_TRUE;
+ //   _elm_config->scroll_smooth_time_interval = 0.008; // not used anymore
     _elm_config->scroll_smooth_amount = 1.0;
-    _elm_config->scroll_smooth_history_weight = 0.3;
-    _elm_config->scroll_smooth_future_time = 0.0;
-    _elm_config->scroll_smooth_time_window = 0.2;
+ //   _elm_config->scroll_smooth_history_weight = 0.3; // not used anymore
+ //   _elm_config->scroll_smooth_future_time = 0.0; // not used anymore
+    _elm_config->scroll_smooth_time_window = 0.15;
     _elm_config->scale = 1.0;
 +   _elm_config->win_no_border = 0;
     _elm_config->bgpixmap = 0;
     _elm_config->compositing = 1;
     _elm_config->font_hinting = 2;
@@@ -3473,13 -3652,5 +3662,34 @@@ _elm_config_shutdown(void
  
     _desc_shutdown();
  
-    if (_elm_key_bindings)
-      eina_hash_free(_elm_key_bindings);
+    ELM_SAFE_FREE(_elm_key_bindings, eina_hash_free);
+ }
++
++/*
++ * Add backwards compatability implementation for elm_scale_get/set and elm_finger_size_get/set
++ * to allow running unmodified Tizen applications on a new drop of elementary
++ */
++
++EAPI double
++elm_scale_get(void) 
++{ 
++   return elm_config_scale_get(); 
++}
++
++EAPI void
++elm_scale_set(double scale) 
++{ 
++   elm_config_scale_set(scale);
 +}
 +
 +EAPI Evas_Coord
 +elm_finger_size_get(void)
 +{
 +   return elm_config_finger_size_get();
 +}
 +
++EAPI void
++elm_finger_size_set(Evas_Coord size)
++{
++   elm_config_finger_size_set(size);
++}
index ad91710ac856409e46435855ccecca15afa1f409,350fdd376e8cb90d7b34d34f24016cbb6bd99680..fe37966a6ee564f762b0e4983efbc074189ac429
@@@ -1778,5 -1952,3 +1952,11 @@@ EAPI double elm_config_transition_durat
   * @}
   */
  
++/*
++ * Add backwards compatability implementation for elm_scale_get and elm_scale_set
++ * to allow running unmodified Tizen applications on a new drop of elementary
++ */
++EAPI double elm_scale_get(void);
++EAPI void   elm_scale_set(double scale);
 +EAPI Evas_Coord elm_finger_size_get(void);
 +EAPI void       elm_finger_size_set(Evas_Coord size);
index 32d311792a6e730596bbd535ee8c4c35987badd8,12d34777d972b9a6af37e95ea1f08f0fa9bc01ad..761571ba55f396266c70819b91ccf2ca8d89442e
@@@ -910,21 -881,6 +900,26 @@@ _on_prop_change(void *data
  
  #endif
  
 +// TIZEN_ONLY(20150707): implemented elm_win_conformant_set/get for wayland
 +static void
 +_on_conformant_changed(void *data,
 +                     Evas_Object *obj,
 +                     void *event_info EINA_UNUSED)
 +{
 +   Conformant_Part_Type part_type;
 +
 +   part_type = (ELM_CONFORMANT_INDICATOR_PART |
 +                ELM_CONFORMANT_VIRTUAL_KEYPAD_PART);
 +
++   ELM_CONFORMANT_DATA_GET(data, sd);
++
++   /* object is already freed */
++   if (!sd) return;
++
 +   _conformant_part_sizing_eval(data, part_type);
 +}
 +//
 +
  EOLIAN static void
  _elm_conformant_evas_object_smart_add(Eo *obj, Elm_Conformant_Data *_pd EINA_UNUSED)
  {
@@@ -961,14 -917,11 +956,15 @@@ _elm_conformant_evas_object_smart_del(E
  
     evas_object_data_set(sd->win, "\377 elm,conformant", NULL);
  
-    evas_object_smart_callback_del_full
-      (sd->win, "indicator,prop,changed", _on_indicator_mode_changed, obj);
-    evas_object_smart_callback_del_full
-      (sd->win, "rotation,changed", _on_rotation_changed, obj);
+    eo_do(sd->win,
+          eo_event_callback_del(ELM_WIN_EVENT_INDICATOR_PROP_CHANGED,
+             _on_indicator_mode_changed, obj),
+          eo_event_callback_del(ELM_WIN_EVENT_ROTATION_CHANGED,
+             _on_rotation_changed, obj));
 +   // TIZEN_ONLY(20150707): implemented elm_win_conformant_set/get for wayland
 +   evas_object_smart_callback_del_full
 +     (sd->win, "conformant,changed", _on_conformant_changed, obj);
 +   //
  
     eo_do_super(obj, MY_CLASS, evas_obj_smart_del());
  }
@@@ -1024,14 -977,13 +1020,17 @@@ _elm_conformant_eo_base_constructor(Eo 
     sd->rot = elm_win_rotation_get(sd->win);
     evas_object_data_set(sd->win, "\377 elm,conformant", obj);
  
-    evas_object_smart_callback_add
-      (sd->win, "indicator,prop,changed", _on_indicator_mode_changed, obj);
-    evas_object_smart_callback_add
-      (sd->win, "rotation,changed", _on_rotation_changed, obj);
+    eo_do(sd->win,
+          eo_event_callback_add(ELM_WIN_EVENT_INDICATOR_PROP_CHANGED,
+             _on_indicator_mode_changed, obj),
+          eo_event_callback_add(ELM_WIN_EVENT_ROTATION_CHANGED,
+             _on_rotation_changed, obj));
 +   // TIZEN_ONLY(20150707): implemented elm_win_conformant_set/get for wayland
 +   evas_object_smart_callback_add
 +     (sd->win, "conformant,changed", _on_conformant_changed, obj);
 +   //
+    return obj;
  }
  
  static void
Simple merge
Simple merge
index 83d030a117a9ab256a4eba4f56b8b46842681414,d5a27c226bca451b35bb11023135a5a6e964f1c6..90f9effff88b1e6a2e94c58b322e694f377b7278
@@@ -300,9 -187,7 +307,9 @@@ _image_place(Evas_Object *obj
          if (oh > gh) ay = (oh - gh) / 2;
       }
     evas_object_move(sd->img, ox + 0 - px + ax, oy + 0 - py + ay);
 -   evas_object_resize(sd->img, gw, gh);
 +
-    if (rw != 0 && rh != 0) // TIZEN_ONLY(20150813): resize image only viewport has a size
++   if (rw != 0 && rh != 0) // TIZEN_ONLY(20150813): resize image only when viewport has a size
 +     evas_object_resize(sd->img, gw, gh);
  
     if (sd->show.show)
       {
@@@ -626,7 -513,6 +635,7 @@@ _grid_zoom_calc(double zoom
     int z = zoom;
  
     if (z < 1) z = 1;
-    if (z > 8) z = 8;
++   if (z > 8) z = 8; // TIZEN_ONLY(20150813): need to create 1x1 grid when zoom >= 8 to load high res img
     return _nearest_pow2_get(z);
  }
  
@@@ -648,8 -534,13 +657,9 @@@ _grid_create(Evas_Object *obj
  
     g->w = g->iw / g->zoom;
     g->h = g->ih / g->zoom;
 -   if (g->zoom >= 8)
 -     {
 -        free(g);
  
 -        return NULL;
 -     }
 -   if (sd->do_region)
++   // TIZEN_ONLY(20150813): need to create 1x1 grid when zoom >= 8 to load high res img
 +   if ((sd->do_region) && (g->zoom < 8))
       {
          g->gw = (g->w + g->tsize - 1) / g->tsize;
          g->gh = (g->h + g->tsize - 1) / g->tsize;
@@@ -822,14 -768,13 +887,14 @@@ _zoom_do(Evas_Object *obj
  static Eina_Bool
  _zoom_anim_cb(void *data)
  {
- //   double t;
 -   double t;
++   //double t; // TIZEN_ONLY(20150501): temporarily disable zoom effect
     Eina_Bool go;
     Evas_Object *obj = data;
  
     ELM_PHOTOCAM_DATA_GET(obj, sd);
  
- /** TIZEN_ONLY(20150501): temporarily disable zoom effect
--   t = ecore_loop_time_get();
++   // TIZEN_ONLY(20150501): temporarily disable zoom effect
++   /*t = ecore_loop_time_get();
     if (t >= sd->t_end)
       t = 1.0;
     else if (sd->t_end > sd->t_start)
       t = 1.0;
     t = 1.0 - t;
     t = 1.0 - (t * t);
 -   go = _zoom_do(obj, t);
 +   go = _zoom_do(obj, t);*/
 +
 +   go = _zoom_do(obj, 1.0);
++   //
     if (!go)
       {
 -        sd->no_smooth--;
 -        if (!sd->no_smooth) _smooth_update(data);
          sd->zoom_animator = NULL;
-         evas_object_smart_callback_call(obj, SIG_ZOOM_STOP, NULL);
+         eo_do(obj, eo_event_callback_call(EVAS_ZOOMABLE_INTERFACE_EVENT_ZOOM_STOP, NULL));
       }
  
     return go;
@@@ -1564,20 -1535,24 +1652,28 @@@ _internal_file_set(Eo *obj, Elm_Photoca
          if (ret) *ret = err;
          return;
       }
-    // get image size
-    evas_object_image_load_scale_down_set(sd->img, 0);
 +
++   evas_object_image_load_scale_down_set(sd->img, 0); // TIZEN_ONLY(20150430): get scaled down image size
     evas_object_image_size_get(sd->img, &w, &h);
     sd->do_region = evas_object_image_region_support_get(sd->img);
     sd->size.imw = w;
     sd->size.imh = h;
     sd->size.w = sd->size.imw / sd->zoom;
     sd->size.h = sd->size.imh / sd->zoom;
+    evas_object_image_file_set(sd->img, NULL, NULL);
+    _photocam_image_file_set(sd->img, sd);
+    err = evas_object_image_load_error_get(sd->img);
+    if (err != EVAS_LOAD_ERROR_NONE)
+      {
+         ERR("Things are going bad for '%s' (%p)", file, sd->img);
+         if (ret) *ret = err;
+         return;
+      }
  
-    // load low resolution image
-    evas_object_image_load_scale_down_set(sd->img, 8);
++   evas_object_image_load_scale_down_set(sd->img, 8); // TIZEN_ONLY(20150430): load low resolution image
     evas_object_image_preload(sd->img, 0);
-    evas_object_smart_callback_call(obj, SIG_LOAD, NULL);
++   evas_object_smart_callback_call(obj, SIG_LOAD, NULL); // TIZEN_ONLY(20150430): call load callback
     sd->main_load_pending = EINA_TRUE;
  
     sd->calc_job = ecore_job_add(_calc_job_cb, obj);
@@@ -1657,24 -1644,23 +1765,26 @@@ _elm_photocam_file_set_internal(Eo *obj
     Evas_Load_Error ret = EVAS_LOAD_ERROR_NONE;
     unsigned int i;
  
++   // TIZEN_ONLY(20150430): use macro
 +   // return if the file name is the same as the previous one
 +   if ((sd->file) && (file) && !strcmp(sd->file, file)) return EVAS_LOAD_ERROR_NONE;
 +
 +   // clear things 
     _grid_clear_all(obj);
 +   evas_object_hide(sd->img);
 +   if (sd->main_load_pending) evas_object_image_preload(sd->img, 1);
     ELM_SAFE_FREE(sd->g_layer_zoom.bounce.animator, ecore_animator_del);
 -   if (sd->zoom_animator)
 +   ELM_SAFE_FREE(sd->zoom_animator, ecore_animator_del);
 +   ELM_SAFE_FREE(sd->calc_job, ecore_job_del);
 +   ELM_SAFE_FREE(sd->f, eina_file_close);
 +   ELM_SAFE_FREE(sd->remote_data, free);
 +   if (sd->remote)
       {
 -        sd->no_smooth--;
 -        if (sd->no_smooth == 0) _smooth_update(obj);
 -        ecore_animator_del(sd->zoom_animator);
 -        sd->zoom_animator = NULL;
 +        _elm_url_cancel(sd->remote);
 +        sd->remote = NULL;
       }
 -   ecore_job_del(sd->calc_job);
 -   evas_object_hide(sd->img);
 -   if (sd->f) eina_file_close(sd->f);
 -   sd->f = NULL;
++   //
  
 -   free(sd->remote_data);
 -   if (sd->remote) _elm_url_cancel(sd->remote);
 -   sd->remote = NULL;
     sd->preload_num = 0;
  
     for (i = 0; i < sizeof (remote_uri) / sizeof (remote_uri[0]); ++i)
@@@ -1712,8 -1746,8 +1870,8 @@@ _elm_photocam_zoom_set(Eo *obj, Elm_Pho
     Eina_List *l;
     Ecore_Animator *an;
     Elm_Phocam_Grid *g, *g_zoom = NULL;
-    Evas_Coord rx, ry, rw, rh;
-    int started = 0;
 -   Evas_Coord pw, ph, rx, ry, rw, rh;
++   Evas_Coord rx, ry, rw, rh; // TIZEN_ONLY(20150813): make as a function for reusability
+    int zoom_changed = 0, started = 0;
  
     if (zoom <= (1.0 / 256.0)) zoom = (1.0 / 256.0);
     if (zoom == sd->zoom) return;
           (NULL, NULL, &rw, &rh));
     if ((rw <= 0) || (rh <= 0)) return;
  
 -   if (sd->mode == ELM_PHOTOCAM_ZOOM_MODE_MANUAL)
 -     {
 -        sd->size.nw = (double)sd->size.imw / sd->zoom;
 -        sd->size.nh = (double)sd->size.imh / sd->zoom;
 -     }
 -   else if (sd->mode == ELM_PHOTOCAM_ZOOM_MODE_AUTO_FIT)
 -     {
 -        if ((sd->size.imw < 1) || (sd->size.imh < 1))
 -          {
 -             sd->size.nw = 0;
 -             sd->size.nh = 0;
 -          }
 -        else
 -          {
 -             ph = (sd->size.imh * rw) / sd->size.imw;
 -             if (ph > rh)
 -               {
 -                  pw = (sd->size.imw * rh) / sd->size.imh;
 -                  ph = rh;
 -               }
 -             else
 -               {
 -                  pw = rw;
 -               }
 -             if (sd->size.imw > sd->size.imh)
 -               z = (double)sd->size.imw / pw;
 -             else
 -               z = (double)sd->size.imh / ph;
 -             if (z != sd->zoom)
 -               zoom_changed = 1;
 -             sd->zoom = z;
 -             sd->size.nw = pw;
 -             sd->size.nh = ph;
 -          }
 -     }
 -   else if (sd->mode == ELM_PHOTOCAM_ZOOM_MODE_AUTO_FILL)
 -     {
 -        if ((sd->size.imw < 1) || (sd->size.imh < 1))
 -          {
 -             sd->size.nw = 0;
 -             sd->size.nw = 0;
 -          }
 -        else
 -          {
 -             ph = (sd->size.imh * rw) / sd->size.imw;
 -             if (ph < rh)
 -               {
 -                  pw = (sd->size.imw * rh) / sd->size.imh;
 -                  ph = rh;
 -               }
 -             else
 -               {
 -                  pw = rw;
 -               }
 -             if (sd->size.imw > sd->size.imh)
 -               z = (double)sd->size.imw / pw;
 -             else
 -               z = (double)sd->size.imh / ph;
 -             if (z != sd->zoom)
 -               zoom_changed = 1;
 -             sd->zoom = z;
 -             sd->size.nw = pw;
 -             sd->size.nh = ph;
 -          }
 -     }
 -   else if (sd->mode == ELM_PHOTOCAM_ZOOM_MODE_AUTO_FIT_IN)
 -     {
 -        if ((sd->size.imw < 1) || (sd->size.imh < 1))
 -          {
 -             sd->size.nw = 0;
 -             sd->size.nh = 0;
 -          }
 -        else if ((sd->size.imw < rw) && (sd->size.imh < rh))
 -          {
 -             if (1 != sd->zoom) zoom_changed = 1;
 -             sd->zoom = 1;
 -             sd->size.nw = sd->size.imw;
 -             sd->size.nh = sd->size.imh;
 -          }
 -        else
 -          {
 -             ph = (sd->size.imh * rw) / sd->size.imw;
 -             if (ph > rh)
 -               {
 -                  pw = (sd->size.imw * rh) / sd->size.imh;
 -                  ph = rh;
 -               }
 -             else
 -               pw = rw;
 -             if (sd->size.imw > sd->size.imh)
 -               z = (double)sd->size.imw / pw;
 -             else
 -               z = (double)sd->size.imh / ph;
 -             if (z != sd->zoom)
 -               zoom_changed = 1;
 -             sd->zoom = z;
 -             sd->size.nw = pw;
 -             sd->size.nh = ph;
 -          }
 -     }
++   // TIZEN_ONLY(20150813): make as a function for reusability
 +   z = sd->zoom;
 +   _image_size_calc(obj, sd);
  
 -   if (sd->main_load_pending)
 -     {
 -        sd->size.w = sd->size.nw;
 -        sd->size.h = sd->size.nh;
 +   sd->size.w = sd->size.nw;
 +   sd->size.h = sd->size.nh;
  
 -        goto done;
 -     }
 +   if (sd->main_load_pending) goto done;
++   //
  
     EINA_LIST_FOREACH(sd->grids, l, g)
       {
index dcc162c0f0ffb9de7538858dc5f1ae69863634a0,be92f1513d703de854e245b6eeae584cab44edfe..18f334aa3ff9cbca63afc584c66bdf458c93b6dc
@@@ -200,13 -204,12 +204,13 @@@ struct _Elm_Confi
     double        thumbscroll_border_friction;
     double        thumbscroll_sensitivity_friction;
     unsigned char scroll_smooth_start_enable;
-    double        scroll_smooth_time_interval;
+ //   double        scroll_smooth_time_interval;; // not used anymore
     double        scroll_smooth_amount;
-    double        scroll_smooth_history_weight;
-    double        scroll_smooth_future_time;
+ //   double        scroll_smooth_history_weight;; // not used anymore
+ //   double        scroll_smooth_future_time;; // not used anymore
     double        scroll_smooth_time_window;
     double        scale;
 +   int           win_no_border;
     int           bgpixmap;
     int           compositing;
     Eina_List    *font_dirs;
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
index 73d259131c59d264b540e72bb1a56e6d06fecdf3,a1d38cc91dbf54632fe54bff0d1519774d4ad142..fa29012a7459553e74b07f83c3cf837db56e6c22
@@@ -174,7 -176,7 +178,8 @@@ struct _Elm_Win_Dat
     const char  *title;
     const char  *icon_name;
     const char  *role;
 +   const char  *frame_style;
+    Eina_Stringshare *name;
  
     Evas_Object *main_menu;
  
@@@ -236,9 -245,6 +248,8 @@@ static const char SIG_INDICATOR_PROP_CH
  static const char SIG_ROTATION_CHANGED[] = "rotation,changed";
  static const char SIG_PROFILE_CHANGED[] = "profile,changed";
  static const char SIG_WM_ROTATION_CHANGED[] = "wm,rotation,changed";
- static const char SIG_THEME_CHANGED[] = "theme,changed";
 +static const char SIG_CONFORMANT_CHANGED[] = "conformant,changed";
 +static const char SIG_AUX_HINT_ALLOWED[] = "aux,hint,allowed";
  
  static const Evas_Smart_Cb_Description _smart_callbacks[] = {
     {SIG_DELETE_REQUEST, ""},
@@@ -1322,23 -1422,11 +1479,25 @@@ _elm_win_state_change(Ecore_Evas *ee
          _elm_win_xwin_update(sd);
  #endif
          elm_widget_orientation_set(obj, sd->rot);
-         evas_object_smart_callback_call(obj, SIG_ROTATION_CHANGED, NULL);
-         evas_object_smart_callback_call(obj, SIG_WM_ROTATION_CHANGED, NULL);
+         eo_do(obj, eo_event_callback_call
+           (ELM_WIN_EVENT_ROTATION_CHANGED, NULL));
+         eo_do(obj, eo_event_callback_call
+           (ELM_WIN_EVENT_WM_ROTATION_CHANGED, NULL));
       }
 +   if (ch_conformant)
 +     {
 +        evas_object_smart_callback_call(obj, SIG_CONFORMANT_CHANGED, NULL);
 +     }
 +   if (ch_aux_hint)
 +     {
 +        void *id;
 +        Eina_List *l;
 +        EINA_LIST_FOREACH(aux_hints, l, id)
 +          {
 +             evas_object_smart_callback_call(obj, SIG_AUX_HINT_ALLOWED, id);
 +          }
 +        eina_list_free(aux_hints);
 +     }
  }
  
  EOLIAN static Eina_Bool
@@@ -1831,7 -1945,7 +2016,8 @@@ _elm_win_evas_object_smart_del(Eo *obj
     eina_stringshare_del(sd->title);
     eina_stringshare_del(sd->icon_name);
     eina_stringshare_del(sd->role);
 +   eina_stringshare_del(sd->frame_style);
+    eina_stringshare_del(sd->name);
     evas_object_del(sd->icon);
     evas_object_del(sd->main_menu);
  
@@@ -1880,15 -1991,11 +2063,17 @@@ _elm_win_obj_intercept_show(void *data
       }
     if (sd->pointer.obj)
       {
+ #if 0
          ecore_evas_show(sd->pointer.ee);
+ #endif
          evas_object_show(sd->pointer.obj);
       }
 +#ifdef HAVE_ELEMENTARY_WAYLAND
 +   int x, y, w, h;
 +
 +   evas_object_geometry_get(obj, &x, &y, &w, &h);
 +   ecore_wl_window_opaque_region_set(sd->wl.win, x, y, w, h);
 +#endif
     evas_object_show(obj);
  #ifdef ELEMENTARY_X
     if (sd->type == ELM_WIN_TOOLTIP)
@@@ -3622,30 -3803,41 +3897,46 @@@ _elm_win_finalize_internal(Eo *obj, Elm
  #ifdef HAVE_ELEMENTARY_X
     _elm_win_xwin_update(sd);
  #endif
 +#ifdef HAVE_ELEMENTARY_WAYLAND
 +   _elm_win_wlwin_update(sd);
 +#endif
  
     /* do not append to list; all windows render as black rects */
-    if (type == ELM_WIN_FAKE) return;
-    _elm_win_list = eina_list_append(_elm_win_list, obj);
-    _elm_win_count++;
 +
 +   sd->frame_style = eina_stringshare_add("default");
-    if ((engine) && ((!strcmp(engine, ELM_SOFTWARE_FB)) || (!strcmp(engine, ELM_DRM))))
+    if (type != ELM_WIN_FAKE)
       {
-         TRAP(sd, fullscreen_set, 1);
+         _elm_win_list = eina_list_append(_elm_win_list, obj);
+         _elm_win_count++;
+         if ((engine) && ((!strcmp(engine, ELM_SOFTWARE_FB)) || (!strcmp(engine, ELM_DRM))))
+           {
+              TRAP(sd, fullscreen_set, 1);
+           }
+         else if ((type != ELM_WIN_INLINED_IMAGE) &&
+                  ((engine) &&
+                   ((!strcmp(engine, ELM_WAYLAND_SHM) ||
+                    (!strcmp(engine, ELM_WAYLAND_EGL))))))
 -          _elm_win_frame_add(sd, "default");
++          _elm_win_frame_add(sd, sd->frame_style);
+         if (_elm_config->focus_highlight_enable)
+           elm_win_focus_highlight_enabled_set(obj, EINA_TRUE);
+         if (_elm_config->focus_highlight_animate)
+           elm_win_focus_highlight_animate_set(obj, EINA_TRUE);
       }
-    else if ((type != ELM_WIN_INLINED_IMAGE) &&
-             ((engine) &&
-              ((!strcmp(engine, ELM_WAYLAND_SHM) ||
-               (!strcmp(engine, ELM_WAYLAND_EGL))))))
-      _elm_win_frame_add(sd, sd->frame_style);
  
-    if (_elm_config->focus_highlight_enable)
-      elm_win_focus_highlight_enabled_set(obj, EINA_TRUE);
-    if (_elm_config->focus_highlight_animate)
-      elm_win_focus_highlight_animate_set(obj, EINA_TRUE);
+    //Prohibiting auto-rendering, until elm_win is shown.
+    if (_elm_config->auto_norender_withdrawn)
+      {
+         if (elm_win_withdrawn_get(obj))
+           {
+              if (!evas_object_data_get(obj, "__win_auto_norender"))
+                {
+                   elm_win_norender_push(obj);
+                   evas_object_data_set(obj, "__win_auto_norender", obj);
+                }
+           }
+      }
  
  #ifdef ELM_DEBUG
     Evas_Modifier_Mask mask = evas_key_modifier_mask_get(sd->evas, "Control");
     edje_object_part_swallow(sd->edje, "elm.swallow.contents", sd->box);
     evas_object_move(sd->edje, 0, 0);
     evas_object_resize(sd->edje, 1, 1);
-    edje_object_update_hints_set(sd->edje, EINA_TRUE);
-    evas_object_event_callback_add(sd->edje, EVAS_CALLBACK_CHANGED_SIZE_HINTS,
-                                   _elm_win_on_resize_obj_changed_size_hints, obj);
-    eo_do(obj, elm_interface_atspi_accessible_role_set(ELM_ATSPI_ROLE_WINDOW));
-    if (_elm_config->atspi_mode == ELM_ATSPI_MODE_ON)
+    if (type != ELM_WIN_FAKE)
       {
-         elm_interface_atspi_accessible_children_changed_added_signal_emit(_elm_atspi_bridge_root_get(), obj);
-         eo_do(obj, eo_event_callback_call(ELM_INTERFACE_ATSPI_WINDOW_EVENT_WINDOW_CREATED, NULL));
+         edje_object_update_hints_set(sd->edje, EINA_TRUE);
+         evas_object_event_callback_add(sd->edje, EVAS_CALLBACK_CHANGED_SIZE_HINTS,
+                                        _elm_win_on_resize_obj_changed_size_hints, obj);
       }
  
+    eo_do(obj, elm_interface_atspi_accessible_role_set(ELM_ATSPI_ROLE_WINDOW));
+    if (_elm_config->atspi_mode)
+      elm_interface_atspi_window_created_signal_emit(obj);
  
 +   if(_elm_config->win_no_border)
 +     _elm_win_borderless_set(obj, sd, EINA_TRUE);
 +
     evas_object_show(sd->edje);
+    eo_do(obj, eo_event_callback_add(EO_EV_CALLBACK_ADD, _cb_added, sd),
+          eo_event_callback_add(EO_EV_CALLBACK_DEL, _cb_deled, sd));
+    if (type == ELM_WIN_FAKE)
+      {
+         _elm_win_resize_job(obj);
+         _elm_win_move(sd->ee);
+      }
+    return obj;
  }
  
- EOLIAN static void
- _elm_win_eo_base_constructor(Eo *obj EINA_UNUSED, Elm_Win_Data *_pd EINA_UNUSED)
+ EOLIAN static Eo *
+ _elm_win_eo_base_finalize(Eo *obj, Elm_Win_Data *_pd)
+ {
+    obj = _elm_win_finalize_internal(obj, _pd, _pd->name, _pd->type);
+    if (obj)
+      {
+         eo_do_super(obj, MY_CLASS, obj = eo_finalize());
+      }
+    return obj;
+ }
+ EOLIAN static Eo *
+ _elm_win_eo_base_constructor(Eo *obj, Elm_Win_Data *_pd EINA_UNUSED)
  {
     /* Do nothing. */
+    /* XXX: We are calling the constructor chain from the finalizer. It's
+     * really bad and hacky. Needs fixing. */
+    return obj;
  }
  
  EOLIAN static void
@@@ -4747,20 -4956,9 +5098,21 @@@ _elm_win_indicator_mode_set(Eo *obj EIN
            ecore_x_e_illume_indicator_state_set
              (sd->x.xwin, ECORE_X_ILLUME_INDICATOR_STATE_OFF);
       }
- #if HAVE_ELEMENTARY_WAYLAND
 +#endif
++#ifdef HAVE_ELEMENTARY_WAYLAND
 +   _elm_win_wlwindow_get(sd);
 +   if (sd->wl.win)
 +     {
 +        if (sd->indmode == ELM_WIN_INDICATOR_SHOW)
 +          ecore_wl_window_indicator_state_set
 +            (sd->wl.win, ECORE_WL_INDICATOR_STATE_ON);
 +        else if (sd->indmode == ELM_WIN_INDICATOR_HIDE)
 +          ecore_wl_window_indicator_state_set
 +            (sd->wl.win, ECORE_WL_INDICATOR_STATE_OFF);
 +     }
  #endif
-    evas_object_smart_callback_call(obj, SIG_INDICATOR_PROP_CHANGED, NULL);
+    eo_do(obj, eo_event_callback_call
+      (ELM_WIN_EVENT_INDICATOR_PROP_CHANGED, NULL));
  }
  
  EOLIAN static Elm_Win_Indicator_Mode
@@@ -4788,23 -4986,9 +5140,24 @@@ _elm_win_indicator_opacity_set(Eo *obj 
            ecore_x_e_illume_indicator_opacity_set
              (sd->x.xwin, ECORE_X_ILLUME_INDICATOR_TRANSPARENT);
       }
- #if HAVE_ELEMENTARY_WAYLAND
 +#endif
++#ifdef HAVE_ELEMENTARY_WAYLAND
 +   _elm_win_wlwindow_get(sd);
 +   if (sd->wl.win)
 +     {
 +        if (sd->ind_o_mode == ELM_WIN_INDICATOR_OPAQUE)
 +          ecore_wl_window_indicator_opacity_set
 +            (sd->wl.win, ECORE_WL_INDICATOR_OPAQUE);
 +        else if (sd->ind_o_mode == ELM_WIN_INDICATOR_TRANSLUCENT)
 +          ecore_wl_window_indicator_opacity_set
 +            (sd->wl.win, ECORE_WL_INDICATOR_TRANSLUCENT);
 +        else if (sd->ind_o_mode == ELM_WIN_INDICATOR_TRANSPARENT)
 +          ecore_wl_window_indicator_opacity_set
 +            (sd->wl.win, ECORE_WL_INDICATOR_TRANSPARENT);
 +     }
  #endif
-    evas_object_smart_callback_call(obj, SIG_INDICATOR_PROP_CHANGED, NULL);
+    eo_do(obj, eo_event_callback_call
+      (ELM_WIN_EVENT_INDICATOR_PROP_CHANGED, NULL));
  }
  
  EOLIAN static Elm_Win_Indicator_Opacity_Mode
@@@ -4857,13 -5041,8 +5210,12 @@@ _elm_win_conformant_set(Eo *obj EINA_UN
     _internal_elm_win_xwindow_get(sd);
     if (sd->x.xwin)
       ecore_x_e_illume_conformant_set(sd->x.xwin, conformant);
 +#elif HAVE_ELEMENTARY_WAYLAND
 +   _elm_win_wlwindow_get(sd);
 +   if (sd->wl.win)
 +     ecore_wl_window_conformant_set(sd->wl.win, conformant);
  #else
     (void)conformant;
  #endif
  }
  
@@@ -5451,56 -5632,23 +5844,75 @@@ _elm_win_elm_interface_atspi_widget_act
     return &atspi_actions[0];
  }
  
+ EOLIAN static Elm_Atspi_State_Set
+ _elm_win_elm_interface_atspi_accessible_state_set_get(Eo *obj, Elm_Win_Data *sd EINA_UNUSED)
+ {
+    Elm_Atspi_State_Set ret;
+    eo_do_super(obj, MY_CLASS, ret = elm_interface_atspi_accessible_state_set_get());
+    if (elm_win_focus_get(obj))
+      STATE_TYPE_SET(ret, ELM_ATSPI_STATE_ACTIVE);
+    return ret;
+ }
+ EOLIAN static char*
+ _elm_win_elm_interface_atspi_accessible_name_get(Eo *obj, Elm_Win_Data *sd EINA_UNUSED)
+ {
+    const char *ret = elm_win_title_get(obj);
+    return ret ? strdup(ret) : strdup("");
+ }
  #include "elm_win.eo.c"
 +
 +//////////////////////////////////////////////////////////////////
 +
 +EAPI const Eina_List *
 +elm_win_aux_hints_supported_get(const Evas_Object *obj)
 +{
 +   ELM_WIN_CHECK(obj) NULL;
 +   ELM_WIN_DATA_GET_OR_RETURN_VAL(obj, sd, NULL);
 +   return ecore_evas_aux_hints_supported_get(sd->ee);
 +}
 +
 +EAPI int
 +elm_win_aux_hint_add(Evas_Object *obj, const char *hint, const char *val)
 +{
 +   ELM_WIN_CHECK(obj) -1;
 +   ELM_WIN_DATA_GET_OR_RETURN_VAL(obj, sd, -1);
 +   return ecore_evas_aux_hint_add(sd->ee, hint, val);
 +}
 +
 +EAPI Eina_Bool
 +elm_win_aux_hint_del(Evas_Object *obj,
 +                     const int    id)
 +{
 +   ELM_WIN_CHECK(obj) EINA_FALSE;
 +   ELM_WIN_DATA_GET_OR_RETURN_VAL(obj, sd, EINA_FALSE);
 +   return ecore_evas_aux_hint_del(sd->ee, id);
 +}
 +
 +EAPI Eina_Bool
 +elm_win_aux_hint_val_set(Evas_Object *obj, const int id, const char *val)
 +{
 +   ELM_WIN_CHECK(obj) EINA_FALSE;
 +   ELM_WIN_DATA_GET_OR_RETURN_VAL(obj, sd, EINA_FALSE);
 +   return ecore_evas_aux_hint_val_set(sd->ee, id, val);
 +}
 +
 +EAPI const char *
 +elm_win_aux_hint_val_get(Evas_Object *obj, int id)
 +{
 +   ELM_WIN_CHECK(obj) EINA_FALSE;
 +   ELM_WIN_DATA_GET_OR_RETURN_VAL(obj, sd, EINA_FALSE);
 +   return ecore_evas_aux_hint_val_get(sd->ee, id);
 +}
 +
 +EAPI int
 +elm_win_aux_hint_id_get(Evas_Object *obj, const char *hint)
 +{
 +   ELM_WIN_CHECK(obj) EINA_FALSE;
 +   ELM_WIN_DATA_GET_OR_RETURN_VAL(obj, sd, EINA_FALSE);
 +   return ecore_evas_aux_hint_id_get(sd->ee, hint);
 +}
 +//////////////////////////////////////////////////////////////////
index 3a9c78258538e7de1fec97191a46b2a09bc1eae1,45410bb1aa51753ff9075b52d2af00640fa1a3ab..6d0a0f8005259d6f0e09e1483779a8a3da2abe23
@@@ -2,541 -158,409 +158,423 @@@ class Elm.Win (Elm.Widget, Elm_Interfac
                 Elm_Interface_Atspi_Widget_Action)
  {
     eo_prefix: elm_obj_win;
-    properties {
-       keyboard_win {
+    methods {
+       @property keyboard_win {
           set {
-             /*@
-             Sets whether the window is a keyboard.
-             @ingroup Win */
+             [[Sets whether the window is a keyboard.]]
           }
           get {
-             /*@
-             Get whether the window is a keyboard.
-             @return If the window is a virtual keyboard
-             @ingroup Win */
+             [[Get whether the window is a keyboard.]]
           }
           values {
-             bool is_keyboard; /*@ If true, the window is a virtual keyboard */
+             is_keyboard: bool; [[If true, the window is a virtual keyboard.]]
           }
        }
-       autodel {
+       @property autodel {
           set {
-             /*@
-             Set the window's autodel state.
-             When closing the window in any way outside of the program control, like
-             pressing the X button in the titlebar or using a command from the
-             Window Manager, a "delete,request" signal is emitted to indicate that
-             this event occurred and the developer can take any action, which may
-             include, or not, destroying the window object.
-             When the @p autodel parameter is set, the window will be automatically
-             destroyed when this event occurs, after the signal is emitted.
-             If @p autodel is @c EINA_FALSE, then the window will not be destroyed
-             and is up to the program to do so when it's required.
-             @ingroup Win */
+             [[Set the window's autodel state.
+               When closing the window in any way outside of the program
+               control, like pressing the X button in the titlebar or using
+               a command from the Window Manager, a "delete,request" signal
+               is emitted to indicate that this event occurred and the
+               developer can take any action, which may include, or not,
+               destroying the window object.
+               When the $autodel parameter is set, the window will be
+               automatically destroyed when this event occurs, after the
+               signal is emitted. If $autodel is $false, then the window
+               will not be destroyed and is up to the program to do so
+               when it's required.
+             ]]
           }
           get {
-             /*@
-             Get the window's autodel state.
+             [[Get the window's autodel state.]]
+          }
+          values {
+             autodel: bool; [[If true, the window will automatically delete
+                              itself when closed.]]
+          }
+       }
+       @property autohide {
+          [[Window's autohide state.
  
-             @return If the window will automatically delete itself when closed
+            This property works similarly to @.autodel, automatically handling
+            "delete,request" signals when set to $trze, with the difference
+            that it will hide the window, instead of destroying it.
  
-             @see elm_win_autodel_set()
+            It is specially designed to work together with $ELM_POLICY_QUIT_LAST_WINDOW_HIDDEN
+            which allows exiting Elementary's main loop when all the windows
+            are hidden.
  
-             @ingroup Win */
+            Note: @.autodel and $autohide are not mutually exclusive. The window
+            will be deleted if both are set to $true.
+          ]]
+          set {
+          }
+          get {
           }
           values {
-             bool autodel; /*@ If true, the window will automatically delete itself when
-             closed */
+             autohide: bool; [[If true, the window will automatically hide
+                               itself when closed.]]
           }
        }
-       override {
+       @property override {
           set {
-             /*@
-             Set the override state of a window.
+             [[Set the override state of a window.
  
-             A window with @p override set to EINA_TRUE will not be managed by the
-             Window Manager. This means that no decorations of any kind will be shown
-             for it, moving and resizing must be handled by the application, as well
-             as the window visibility.
+               A window with $override set to true will not be managed by the
+               Window Manager. This means that no decorations of any kind
+               will be shown for it, moving and resizing must be handled
+               by the application, as well as the window visibility.
  
-             This should not be used for normal windows, and even for not so normal
-             ones, it should only be used when there's a good reason and with a lot
-             of care. Mishandling override windows may result situations that
-             disrupt the normal workflow of the end user.
-             @ingroup Win */
+               This should not be used for normal windows, and even for not
+               so normal ones, it should only be used when there's a good
+               reason and with a lot of care. Mishandling override windows
+               may result situations that disrupt the normal workflow of
+               the end user.
+             ]]
           }
           get {
-             /*@
-             Get the override state of a window.
-             @return If true, the window is overridden
-             @see elm_win_override_set()
-             @ingroup Win */
+             [[Get the override state of a window.]]
           }
           values {
-             bool override; /*@ If true, the window is overridden */
+             override: bool; [[If true, the window is overridden.]]
           }
        }
-       iconified {
+       @property iconified {
           set {
-             /*@
-             Set the iconified state of a window.
-             @ingroup Win */
+             [[Set the iconified state of a window.]]
           }
           get {
-             /*@
-             Get the iconified state of a window.
-             @return If true, the window is iconified
-             @ingroup Win */
+             [[Get the iconified state of a window.]]
           }
           values {
-             bool iconified; /*@ If true, the window is iconified */
+             iconified: bool; [[If true, the window is iconified.]]
           }
        }
-       wm_available_rotations {
+       @property wm_available_rotations {
           set {
-             /*@
-             Set the array of available window rotations.
+             [[Set the array of available window rotations.
  
-             This function is used to set the available rotations to give the hints to WM.
-             WM will refer this hints and set the orientation window properly.
+               This function is used to set the available rotations to give
+               the hints to WM. WM will refer this hints and set the
+               orientation window properly.
  
-             @see elm_win_wm_rotation_available_rotations_get()
-             ingroup Win
-             @since 1.9 */
+               @since 1.9
+             ]]
              legacy: elm_win_wm_rotation_available_rotations_set;
+             values {
+                rotations: const(int)*; [[The array of rotation value.]]
+                count: uint; [[The size of the rotations array.]]
+             }
           }
           get {
-             /*@
-             Get the array of available window rotations.
-             This function is used to get the available rotations.
+             [[Get the array of available window rotations.
  
-             @see elm_win_wm_rotation_available_rotations_set()
+               This function is used to get the available rotations.
  
-             ingroup Win
-             @since 1.9 */
+               @since 1.9
+             ]]
              legacy: elm_win_wm_rotation_available_rotations_get;
+             values {
+                rotations: int*; [[The array of rotation value.]]
+                count: uint; [[The size of the rotations array.]]
+             }
              return: bool;
           }
-          values {
-             int *rotations @const_set; /*@ The array of rotation value. */
-             uint count; /*@ The size of the @param rotations array. */
-          }
        }
-       quickpanel_zone {
+       @property quickpanel_zone {
           set {
-             /*@
-             Set which zone this quickpanel should appear in
-             @ingroup Win */
+             [[Set which zone this quickpanel should appear in.]]
           }
           get {
-             /*@
-             Get which zone this quickpanel should appear in
-             @return The requested zone for this quickpanel
-             @ingroup Win */
+             [[Get which zone this quickpanel should appear in.]]
           }
           values {
-             int zone; /*@ The requested zone for this quickpanel */
+             zone: int; [[The requested zone for this quickpanel.]]
           }
        }
-       maximized {
+       @property maximized {
           set {
-             /*@
-             Set the maximized state of a window.
-             @ingroup Win */
+             [[Set the maximized state of a window.]]
           }
           get {
-             /*@
-             Get the maximized state of a window.
-             @return If true, the window is maximized
-             @ingroup Win */
+             [[Get the maximized state of a window.]]
           }
           values {
-             bool maximized; /*@ If true, the window is maximized */
+             maximized: bool; [[If true, the window is maximized.]]
           }
        }
-       modal {
+       @property modal {
           set {
-             /*@
-             Set the modal state of a window.
-             @ingroup Win */
+             [[Set the modal state of a window.]]
           }
           get {
-             /*@
-             Get the modal state of a window.
-             @return If true, the window is modal
-             @ingroup Win */
+             [[Get the modal state of a window.]]
           }
           values {
-             bool modal; /*@ If true, the window is modal */
+             modal: bool; [[If true, the window is modal.]]
           }
        }
-       icon_name {
+       @property icon_name {
           set {
-             /*@
-             Set the icon name of the window
-             @ingroup Win */
+             [[Set the icon name of the window.]]
           }
           get {
-             /*@
-             Get the icon name of the window
-             The returned string is an internal one and should not be freed or
-             modified. It will also be invalid if a new icon name is set or if
-             the window is destroyed.
-             @return The icon name
+             [[Get the icon name of the window.
  
-             @ingroup Win */
+               The returned string is an internal one and should not be
+               freed or modified. It will also be invalid if a new icon
+               name is set or if the window is destroyed.
+             ]]
           }
           values {
-             const(char)* icon_name; /*@ The icon name to set */
+             icon_name: const(char)*; [[The icon name to set.]]
           }
        }
-       withdrawn {
+       @property withdrawn {
           set {
-             /*@
-             Set the withdrawn state of a window.
-             @ingroup Win */
+             [[Set the withdrawn state of a window.]]
           }
           get {
-             /*@
-             Get the withdrawn state of a window.
-             @return If true, the window is withdrawn
-             @ingroup Win */
+             [[Get the withdrawn state of a window.]]
           }
           values {
-             bool withdrawn; /*@ If true, the window is withdrawn */
+             withdrawn: bool; [[If true, the window is withdrawn.]]
           }
        }
-       role {
+       @property role {
           set {
-             /*@
-             Set the role of the window
-             @ingroup Win */
+             [[Set the role of the window.]]
           }
           get {
-             /*@
-             Get the role of the window
+             [[Get the role of the window.
  
-             The returned string is an internal one and should not be freed or
-             modified. It will also be invalid if a new role is set or if
-             the window is destroyed.
-             @return The role
-             @ingroup Win */
+               The returned string is an internal one and should not be
+               freed or modified. It will also be invalid if a new role
+               is set or if the window is destroyed.
+             ]]
           }
           values {
-             const(char)* role; /*@ The role to set */
+             role: const(char)*; [[The role to set.]]
           }
        }
-       size_step {
+       @property size_step {
           set {
-             /*@
-             Set the window stepping used with sizing calculation
+             [[Set the window stepping used with sizing calculation.
  
-             Base size + stepping is what is calculated for window sizing restrictions.
+               Base size + stepping is what is calculated for window sizing
+               restrictions.
  
-             @ingroup Win
-             @see elm_win_size_step_get
-             @see elm_win_size_base_set
-             @since 1.7 */
+               @since 1.7
+             ]]
           }
           get {
-             /*@
-             Get the stepping of a window.
+             [[Get the stepping of a window.
  
-             @ingroup Win
-             @see elm_win_size_base_set
-             @see elm_win_size_step_set
-             @since 1.7 */
+               @since 1.7
+             ]]
           }
           values {
-             int w; /*@ The stepping width (0 disables) */
-             int h; /*@ The stepping height (0 disables) */
+             w: int; [[The stepping width (0 disables).]]
+             h: int; [[The stepping height (0 disables).]]
           }
        }
-       focus_highlight_style {
+       @property focus_highlight_style {
           set {
-             /*@
-             Set the style for the focus highlight on this window
-             Sets the style to use for theming the highlight of focused objects on
-             the given window. If @p style is NULL, the default will be used.
+             [[Set the style for the focus highlight on this window.
  
-             @ingroup Win */
+               Sets the style to use for theming the highlight of focused
+               objects on the given window. If $style is NULL, the default
+               will be used.
+             ]]
           }
           get {
-             /*@
-             Get the style set for the focus highlight object
-             Get the style set for this windows highlight object, or NULL if none
-             is set.
-             @return The style set or NULL if none was. Default is used in that case.
-             @ingroup Win */
+             [[Get the style set for the focus highlight object.]]
           }
           values {
-             const(char)* style; /*@ The style to set */
+             style: const(char)* @nullable; [[The style or $null if none.]]
           }
        }
-       borderless {
+       @property borderless {
           set {
-             /*@
-             Set the borderless state of a window.
-             This function requests the Window Manager to not draw any decoration
-             around the window.
+             [[Set the borderless state of a window.
  
-             @ingroup Win */
+               This function requests the Window Manager to not draw any
+               decoration around the window.
+             ]]
           }
           get {
-             /*@
-             Get the borderless state of a window.
-             @return If true, the window is borderless
-             @ingroup Win */
+             [[Get the borderless state of a window.]]
           }
           values {
-             bool borderless; /*@ If true, the window is borderless */
+             borderless: bool; [[If true, the window is borderless.]]
           }
        }
-       border_style {
++      @property border_style {
 +         set {
-             /*@
-             Set the border style of a window.
-             Sets the specific style of border to decorate window.
++            [[Set the border style of a window.
 +
-             @ingroup Win */
++              Sets the specific style of border to decorate window.
++            ]]
 +         }
 +         get {
-             /*@
-             Get the border style of a window.
-             @return The style set
-             @ingroup Win */
++            [[Get the border style of a window.]]
 +         }
 +         values {
-             const(char)* style; /*@ The style to set */
++            style: const(char)* @nullable; [[The style or $null if none.]]
 +         }
 +      }
-       screen_constrain {
+       @property screen_constrain {
           set {
-             /*@
-             Constrain the maximum width and height of a window to the width and height of its screen
+             [[Constrain the maximum width and height of a window to the
+               width and height of its screen.
  
-             When @p constrain is true, @p obj will never resize larger than the screen.
-             @ingroup Win */
+               When $constrain is $true, $obj will never resize larger than
+               the screen.
+             ]]
           }
           get {
-             /*@
-             Get the constraints on the maximum width and height of a window relative to the width and height of its screen
+             [[Get the constraints on the maximum width and height of a
+               window relative to the width and height of its screen.
  
-             When this function returns true, @p obj will never resize larger than the screen.
-             @return EINA_TRUE to restrict the window's maximum size, EINA_FALSE to disable restriction
-             @ingroup Win */
+               When this function returns $true, $obj will never resize
+               larger than the screen.
+             ]]
           }
           values {
-             bool constrain; /*@ EINA_TRUE to restrict the window's maximum size, EINA_FALSE to disable restriction */
+             constrain: bool; [[$true to restrict the window's maximum size.]]
           }
        }
-       available_profiles {
+       @property available_profiles {
           set {
-             /*@
-             Set the array of available profiles to a window.
+             [[Set the array of available profiles to a window.
  
-             @ingroup Win
-             @since 1.8 */
+               @since 1.8
+             ]]
+             values {
+                profiles: const(char)**; [[The string array of available profiles.]]
+                count: uint; [[The number of members in profiles.]]
+             }
           }
           get {
-             /*@
-             Get the array of available profiles of a window.
-             @return EINA_TRUE if available profiles exist, EINA_FALSE otherwise
-             @ingroup Win
-             @since 1.8 */
+             [[Get the array of available profiles of a window.
+               @since 1.8
+             ]]
+             values {
+                profiles: char**; [[The string array of available profiles.]]
+                count: uint; [[The number of members in profiles.]]
+             }
              return: bool;
           }
-          values {
-             char **profiles @const_set; /*@ The string array of available profiles */
-             uint count; /*@ The number of members in profiles */
-          }
        }
-       focus_highlight_enabled {
+       @property focus_highlight_enabled {
           set {
-             /*@
-             Set the enabled status for the focus highlight in a window
+             [[Set the enabled status for the focus highlight in a window.
  
-             This function will enable or disable the focus highlight only for the
-             given window, regardless of the global setting for it
-             @ingroup Win */
+               This function will enable or disable the focus highlight only
+               for the given window, regardless of the global setting for it.
+             ]]
           }
           get {
-             /*@
-             Get the enabled value of the focus highlight for this window
-             @return EINA_TRUE if enabled, EINA_FALSE otherwise
-             @ingroup Win */
+             [[Get the enabled value of the focus highlight for this window.]]
           }
           values {
-             bool enabled; /*@ The enabled value for the highlight */
+             enabled: bool; [[The enabled value for the highlight.]]
           }
        }
-       title {
+       @property title {
           set {
-             /*@
-             Set the title of the window
-             @ingroup Win */
+             [[Set the title of the window.]]
           }
           get {
-             /*@
-             Get the title of the window
+             [[Get the title of the window.
  
-             The returned string is an internal one and should not be freed or
-             modified. It will also be invalid if a new title is set or if
-             the window is destroyed.
-             @return The title
-             @ingroup Win */
+               The returned string is an internal one and should not be
+               freed or modified. It will also be invalid if a new title
+               is set or if the window is destroyed.
+             ]]
           }
           values {
-             const(char)* title; /*@ The title to set */
+             title: const(char)*; [[The title.]]
           }
        }
-       alpha {
+       @property alpha {
           set {
-             /*@
-             Set the alpha channel state of a window.
-             If @p alpha is EINA_TRUE, the alpha channel of the canvas will be enabled
-             possibly making parts of the window completely or partially transparent.
-             This is also subject to the underlying system supporting it, like for
-             example, running under a compositing manager. If no compositing is
-             available, enabling this option will instead fallback to using shaped
-             windows, with elm_win_shaped_set().
-             @note Alpha window can be enabled automatically by window theme style's property.
-             If "alpha" data.item is "1" or "true" in window style(eg. elm/win/base/default),
-             the window is switched to alpha automatically without the explicit api call.
-             @see elm_win_alpha_set()
-             @ingroup Win */
+             [[Set the alpha channel state of a window.
+               If $alpha is true, the alpha channel of the canvas will be
+               enabled possibly making parts of the window completely or
+               partially transparent. This is also subject to the underlying
+               system supporting it, like for example, running under a
+               compositing manager. If no compositing is available, enabling
+               this option will instead fallback to using shaped windows,
+               with @.shaped.set.
+               Note: Alpha window can be enabled automatically by window
+               theme style's property. If "alpha" data.item is "1" or
+               "true" in window style(eg. elm/win/base/default), the window
+               is switched to alpha automatically without the explicit api
+               call.
+             ]]
           }
           get {
-             /*@
-             Get the alpha channel state of a window.
-             @return EINA_TRUE if the window alpha channel is enabled, EINA_FALSE
-             otherwise
-             @ingroup Win */
+             [[Get the alpha channel state of a window.]]
           }
           values {
-             bool alpha; /*@ EINA_TRUE if the window alpha channel is enabled, EINA_FALSE otherwise */
+             alpha: bool; [[$true if the window alpha channel is enabled,
+                            $false otherwise.]]
           }
        }
-       urgent {
+       @property urgent {
           set {
-             /*@
-             Set the urgent state of a window.
-             @ingroup Win */
+             [[Set the urgent state of a window.]]
           }
           get {
-             /*@
-             Get the urgent state of a window.
-             @return If true, the window is urgent
-             @ingroup Win */
+             [[Get the urgent state of a window.]]
           }
           values {
-             bool urgent; /*@ If true, the window is urgent */
+             urgent: bool; [[If true, the window is urgent.]]
           }
        }
-       rotation {
+       @property rotation {
           set {
-             /*@
-             Set the rotation of the window.
-             Most engines only work with multiples of 90.
+             [[Set the rotation of the window.
  
-             This function is used to set the orientation of the window @p obj to
-             match that of the screen. The window itself will be resized to adjust
-             to the new geometry of its contents. If you want to keep the window size,
-             see elm_win_rotation_with_resize_set().
+               Most engines only work with multiples of 90.
  
-             @ingroup Win */
+               This function is used to set the orientation of the window
+               $obj to match that of the screen. The window itself will be
+               resized to adjust to the new geometry of its contents. If
+               you want to keep the window size,
+               see @.rotation_with_resize.set.
+             ]]
           }
           get {
-             /*@
-             Get the rotation of the window.
-             @return The rotation of the window in degrees (0-360)
-             @see elm_win_rotation_set()
-             @see elm_win_rotation_with_resize_set()
-             @ingroup Win */
+             [[Get the rotation of the window.]]
           }
           values {
-             int rotation; /*@ The rotation of the window, in degrees (0-360),
-             counter-clockwise. */
+             rotation: int; [[The rotation of the window, in degrees (0-360),
+                              counter-clockwise.]]
           }
        }
-       icon_object {
+       @property icon_object {
           set {
-             /*@
-             Set a window object's icon
-             This sets an image to be used as the icon for the given window, in
-             the window manager decoration part. The exact pixel dimensions of
-             the object (not object size) will be used, and the image pixels
-             will be used as-is when this function is called. If the image
-             object has been updated, then call this function again to source
-             the image pixels and put them on the window's icon. Note that
-             <b>only Evas image objects are allowed</b>, for
+             [[Set a window object's icon.
+               This sets an image to be used as the icon for the given
+               window, in the window manager decoration part. The exact
+               pixel dimensions of the object (not object size) will be
+               used, and the image pixels will be used as-is when this
+               function is called. If the image object has been updated,
+               then call this function again to source the image pixels
+               and put them on the window's icon. Note that only Evas
+               image objects are allowed.
+             ]]
+             /* FIXME-doc
              Example of usage:
              @code
              icon = evas_object_image_add(evas_object_evas_get(elm_window));
Simple merge