[Pkg-e-commits] [SCM] Enlightenment DR17 graphical layout and animation library branch, new-svn-snapshot, updated. debian/0.9.9.050+svn20081206-1-1175-g3a95c7f

Albin Tonnerre albin.tonnerre at gmail.com
Fri Jun 19 14:13:22 UTC 2009


The following commit has been merged in the new-svn-snapshot branch:
commit 145319820690a450b186b0b66a3615346c9dab21
Author: Albin Tonnerre <albin.tonnerre at gmail.com>
Date:   Thu Jun 18 09:32:28 2009 +0200

    Import upstream release 0.9.92.061

diff --git a/Makefile.in b/Makefile.in
index e2d60e2..d4938c7 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -116,6 +116,8 @@ ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@
 ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@
 ECORE_FILE_CFLAGS = @ECORE_FILE_CFLAGS@
 ECORE_FILE_LIBS = @ECORE_FILE_LIBS@
+ECORE_IMF_CFLAGS = @ECORE_IMF_CFLAGS@
+ECORE_IMF_LIBS = @ECORE_IMF_LIBS@
 EDJE_CC_PRG = @EDJE_CC_PRG@
 EDJE_CFLAGS = @EDJE_CFLAGS@
 EDJE_DECC_PRG = @EDJE_DECC_PRG@
diff --git a/config.h.in b/config.h.in
index 61cbc51..a91d3e9 100644
--- a/config.h.in
+++ b/config.h.in
@@ -22,6 +22,9 @@
 /* Define to 1 if you have the <dlfcn.h> header file. */
 #undef HAVE_DLFCN_H
 
+/* Input Method Support for Edje Entry */
+#undef HAVE_ECORE_IMF
+
 /* Set to 1 if Evil library is installed */
 #undef HAVE_EVIL
 
diff --git a/configure b/configure
index d890e83..29a303e 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.61 for edje 0.9.92.060.
+# Generated by GNU Autoconf 2.61 for edje 0.9.92.061.
 #
 # Report bugs to <enlightenment-devel at lists.sourceforge.net>.
 #
@@ -723,8 +723,8 @@ SHELL=${CONFIG_SHELL-/bin/sh}
 # Identity of this package.
 PACKAGE_NAME='edje'
 PACKAGE_TARNAME='edje'
-PACKAGE_VERSION='0.9.92.060'
-PACKAGE_STRING='edje 0.9.92.060'
+PACKAGE_VERSION='0.9.92.061'
+PACKAGE_STRING='edje 0.9.92.061'
 PACKAGE_BUGREPORT='enlightenment-devel at lists.sourceforge.net'
 
 ac_unique_file="configure.ac"
@@ -902,6 +902,8 @@ EVIL_LIBS
 EFL_EDJE_BUILD
 EDJE_CFLAGS
 EDJE_LIBS
+ECORE_IMF_CFLAGS
+ECORE_IMF_LIBS
 ECORE_FILE_CFLAGS
 ECORE_FILE_LIBS
 ECORE_EVAS_CFLAGS
@@ -926,6 +928,8 @@ EVIL_CFLAGS
 EVIL_LIBS
 EDJE_CFLAGS
 EDJE_LIBS
+ECORE_IMF_CFLAGS
+ECORE_IMF_LIBS
 ECORE_FILE_CFLAGS
 ECORE_FILE_LIBS
 ECORE_EVAS_CFLAGS
@@ -1432,7 +1436,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures edje 0.9.92.060 to adapt to many kinds of systems.
+\`configure' configures edje 0.9.92.061 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1502,7 +1506,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of edje 0.9.92.060:";;
+     short | recursive ) echo "Configuration of edje 0.9.92.061:";;
    esac
   cat <<\_ACEOF
 
@@ -1545,6 +1549,10 @@ Some influential environment variables:
   EVIL_LIBS   linker flags for EVIL, overriding pkg-config
   EDJE_CFLAGS C compiler flags for EDJE, overriding pkg-config
   EDJE_LIBS   linker flags for EDJE, overriding pkg-config
+  ECORE_IMF_CFLAGS
+              C compiler flags for ECORE_IMF, overriding pkg-config
+  ECORE_IMF_LIBS
+              linker flags for ECORE_IMF, overriding pkg-config
   ECORE_FILE_CFLAGS
               C compiler flags for ECORE_FILE, overriding pkg-config
   ECORE_FILE_LIBS
@@ -1618,7 +1626,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-edje configure 0.9.92.060
+edje configure 0.9.92.061
 generated by GNU Autoconf 2.61
 
 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
@@ -1632,7 +1640,7 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by edje $as_me 0.9.92.060, which was
+It was created by edje $as_me 0.9.92.061, which was
 generated by GNU Autoconf 2.61.  Invocation command line was
 
   $ $0 $@
@@ -3474,7 +3482,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE='edje'
- VERSION='0.9.92.060'
+ VERSION='0.9.92.061'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -4724,13 +4732,13 @@ if test "${lt_cv_nm_interface+set}" = set; then
 else
   lt_cv_nm_interface="BSD nm"
   echo "int some_variable = 0;" > conftest.$ac_ext
-  (eval echo "\"\$as_me:4727: $ac_compile\"" >&5)
+  (eval echo "\"\$as_me:4735: $ac_compile\"" >&5)
   (eval "$ac_compile" 2>conftest.err)
   cat conftest.err >&5
-  (eval echo "\"\$as_me:4730: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
+  (eval echo "\"\$as_me:4738: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
   (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
   cat conftest.err >&5
-  (eval echo "\"\$as_me:4733: output\"" >&5)
+  (eval echo "\"\$as_me:4741: output\"" >&5)
   cat conftest.out >&5
   if $GREP 'External.*some_variable' conftest.out > /dev/null; then
     lt_cv_nm_interface="MS dumpbin"
@@ -5840,7 +5848,7 @@ ia64-*-hpux*)
   ;;
 *-*-irix6*)
   # Find out which ABI we are using.
-  echo '#line 5843 "configure"' > conftest.$ac_ext
+  echo '#line 5851 "configure"' > conftest.$ac_ext
   if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
@@ -7689,11 +7697,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:7692: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:7700: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:7696: \$? = $ac_status" >&5
+   echo "$as_me:7704: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
@@ -8013,11 +8021,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:8016: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:8024: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:8020: \$? = $ac_status" >&5
+   echo "$as_me:8028: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
@@ -8118,11 +8126,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:8121: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:8129: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:8125: \$? = $ac_status" >&5
+   echo "$as_me:8133: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
@@ -8173,11 +8181,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:8176: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:8184: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:8180: \$? = $ac_status" >&5
+   echo "$as_me:8188: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
@@ -10934,7 +10942,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 10937 "configure"
+#line 10945 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -11034,7 +11042,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 11037 "configure"
+#line 11045 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -11271,10 +11279,17 @@ VMIN=`echo $PACKAGE_VERSION | awk -F. '{printf("%s", $2);}'`
 VMIC=`echo $PACKAGE_VERSION | awk -F. '{printf("%s", $3);}'`
 SNAP=`echo $PACKAGE_VERSION | awk -F. '{printf("%s", $4);}'`
 version_info=`expr $VMAJ + $VMIN`":$VMIC:$VMIN"
-release="ver-pre-01"
-release_info="-release $release"
 
 
+release="ver-svn-02"
+case "$host_os" in
+   mingw32ce* | cegcc*)
+      ;;
+   *)
+      release_info="-release $release"
+      ;;
+esac
+
 
 
 ### Default options with respect to host
@@ -12100,10 +12115,14 @@ if test "${enable_doc+set}" = set; then
 
 else
   efl_enable_doc="yes"
-
 fi
 
 
+{ echo "$as_me:$LINENO: checking whether to build documentation" >&5
+echo $ECHO_N "checking whether to build documentation... $ECHO_C" >&6; }
+{ echo "$as_me:$LINENO: result: ${efl_enable_doc}" >&5
+echo "${ECHO_T}${efl_enable_doc}" >&6; }
+
 if test "x${efl_enable_doc}" = "xyes" ; then
 
 
@@ -12154,11 +12173,11 @@ fi
        if test "x${efl_have_doxygen}" = "xno" ; then
           echo "WARNING:"
           echo "The doxygen program you specified:"
-          echo "$efl_doxygen"
+          echo "${efl_doxygen}"
           echo "was not found.  Please check the path and make sure "
           echo "the program exists and is executable."
-          { echo "$as_me:$LINENO: WARNING: Warning: no doxygen detected. Documentation will not be built" >&5
-echo "$as_me: WARNING: Warning: no doxygen detected. Documentation will not be built" >&2;}
+          { echo "$as_me:$LINENO: WARNING: no doxygen detected. Documentation will not be built" >&5
+echo "$as_me: WARNING: no doxygen detected. Documentation will not be built" >&2;}
        fi
 
 else
@@ -12202,18 +12221,17 @@ fi
 
        if test "x${efl_have_doxygen}" = "xno" ; then
           echo "WARNING:"
-          echo "The doxygen program was not found in your execute"
+          echo "The doxygen program was not found in your execute path."
           echo "You may have doxygen installed somewhere not covered by your path."
           echo ""
           echo "If this is the case make sure you have the packages installed, AND"
           echo "that the doxygen program is in your execute path (see your"
           echo "shell manual page on setting the \$PATH environment variable), OR"
           echo "alternatively, specify the program to use with --with-doxygen."
-          { echo "$as_me:$LINENO: WARNING: Warning: no doxygen detected. Documentation will not be built" >&5
-echo "$as_me: WARNING: Warning: no doxygen detected. Documentation will not be built" >&2;}
+          { echo "$as_me:$LINENO: WARNING: no doxygen detected. Documentation will not be built" >&5
+echo "$as_me: WARNING: no doxygen detected. Documentation will not be built" >&2;}
        fi
 
-
 fi
 
 fi
@@ -12436,8 +12454,7 @@ else
 fi
 
 
-
-### Checks for libraries
+# pkg-config
 
 
 
@@ -12560,6 +12577,9 @@ echo "${ECHO_T}no" >&6; }
 
 fi
 
+
+### Checks for libraries
+
 # Evil library for compilation on Windows
 
 EFL_EDJE_BUILD=""
@@ -12706,8 +12726,7 @@ if test -n "$PKG_CONFIG"; then
     ecore >= 0.9.9
     ecore-job >= 0.9.9
     embryo >= 0.9.1
-
-\"") >&5
+   \"") >&5
   ($PKG_CONFIG --exists --print-errors "
     eina-0
     eet >= 1.0.1
@@ -12715,8 +12734,7 @@ if test -n "$PKG_CONFIG"; then
     ecore >= 0.9.9
     ecore-job >= 0.9.9
     embryo >= 0.9.1
-
-") 2>&5
+   ") 2>&5
   ac_status=$?
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; then
@@ -12727,8 +12745,7 @@ if test -n "$PKG_CONFIG"; then
     ecore >= 0.9.9
     ecore-job >= 0.9.9
     embryo >= 0.9.1
-
-" 2>/dev/null`
+   " 2>/dev/null`
 else
   pkg_failed=yes
 fi
@@ -12748,8 +12765,7 @@ if test -n "$PKG_CONFIG"; then
     ecore >= 0.9.9
     ecore-job >= 0.9.9
     embryo >= 0.9.1
-
-\"") >&5
+   \"") >&5
   ($PKG_CONFIG --exists --print-errors "
     eina-0
     eet >= 1.0.1
@@ -12757,8 +12773,7 @@ if test -n "$PKG_CONFIG"; then
     ecore >= 0.9.9
     ecore-job >= 0.9.9
     embryo >= 0.9.1
-
-") 2>&5
+   ") 2>&5
   ac_status=$?
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; then
@@ -12769,8 +12784,7 @@ if test -n "$PKG_CONFIG"; then
     ecore >= 0.9.9
     ecore-job >= 0.9.9
     embryo >= 0.9.1
-
-" 2>/dev/null`
+   " 2>/dev/null`
 else
   pkg_failed=yes
 fi
@@ -12796,8 +12810,7 @@ fi
     ecore >= 0.9.9
     ecore-job >= 0.9.9
     embryo >= 0.9.1
-
-"`
+   "`
         else
 	        EDJE_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "
     eina-0
@@ -12806,8 +12819,7 @@ fi
     ecore >= 0.9.9
     ecore-job >= 0.9.9
     embryo >= 0.9.1
-
-"`
+   "`
         fi
 	# Put the nasty error message in config.log where it belongs
 	echo "$EDJE_PKG_ERRORS" >&5
@@ -12819,8 +12831,7 @@ fi
     ecore >= 0.9.9
     ecore-job >= 0.9.9
     embryo >= 0.9.1
-
-) were not met:
+   ) were not met:
 
 $EDJE_PKG_ERRORS
 
@@ -12838,8 +12849,7 @@ echo "$as_me: error: Package requirements (
     ecore >= 0.9.9
     ecore-job >= 0.9.9
     embryo >= 0.9.1
-
-) were not met:
+   ) were not met:
 
 $EDJE_PKG_ERRORS
 
@@ -12883,6 +12893,111 @@ fi
 
 requirement_edje="embryo ecore-job ecore evas eet eina-0 ${requirement_edje}"
 
+have_ecore_imf="no"
+
+pkg_failed=no
+{ echo "$as_me:$LINENO: checking for ECORE_IMF" >&5
+echo $ECHO_N "checking for ECORE_IMF... $ECHO_C" >&6; }
+
+if test -n "$PKG_CONFIG"; then
+    if test -n "$ECORE_IMF_CFLAGS"; then
+        pkg_cv_ECORE_IMF_CFLAGS="$ECORE_IMF_CFLAGS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"
+    ecore-imf >= 0.9.9
+    ecore-imf-evas >= 0.9.9
+   \"") >&5
+  ($PKG_CONFIG --exists --print-errors "
+    ecore-imf >= 0.9.9
+    ecore-imf-evas >= 0.9.9
+   ") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  pkg_cv_ECORE_IMF_CFLAGS=`$PKG_CONFIG --cflags "
+    ecore-imf >= 0.9.9
+    ecore-imf-evas >= 0.9.9
+   " 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+    if test -n "$ECORE_IMF_LIBS"; then
+        pkg_cv_ECORE_IMF_LIBS="$ECORE_IMF_LIBS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"
+    ecore-imf >= 0.9.9
+    ecore-imf-evas >= 0.9.9
+   \"") >&5
+  ($PKG_CONFIG --exists --print-errors "
+    ecore-imf >= 0.9.9
+    ecore-imf-evas >= 0.9.9
+   ") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  pkg_cv_ECORE_IMF_LIBS=`$PKG_CONFIG --libs "
+    ecore-imf >= 0.9.9
+    ecore-imf-evas >= 0.9.9
+   " 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        ECORE_IMF_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "
+    ecore-imf >= 0.9.9
+    ecore-imf-evas >= 0.9.9
+   "`
+        else
+	        ECORE_IMF_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "
+    ecore-imf >= 0.9.9
+    ecore-imf-evas >= 0.9.9
+   "`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$ECORE_IMF_PKG_ERRORS" >&5
+
+	{ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+                have_ecore_imf="no"
+elif test $pkg_failed = untried; then
+	have_ecore_imf="no"
+else
+	ECORE_IMF_CFLAGS=$pkg_cv_ECORE_IMF_CFLAGS
+	ECORE_IMF_LIBS=$pkg_cv_ECORE_IMF_LIBS
+        { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_ECORE_IMF 1
+_ACEOF
+
+    have_ecore_imf="yes"
+    requirement_edje="ecore-imf ecore-imf-evas ${requirement_edje}"
+
+fi
+
 # Dependencies for the binaries
 
 if test "x$have_edje_cc" = "xyes"; then
@@ -15039,7 +15154,7 @@ exec 6>&1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by edje $as_me 0.9.92.060, which was
+This file was extended by edje $as_me 0.9.92.061, which was
 generated by GNU Autoconf 2.61.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -15092,7 +15207,7 @@ Report bugs to <bug-autoconf at gnu.org>."
 _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF
 ac_cs_version="\\
-edje config.status 0.9.92.060
+edje config.status 0.9.92.061
 configured by $0, generated by GNU Autoconf 2.61,
   with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
 
@@ -15717,6 +15832,8 @@ EVIL_LIBS!$EVIL_LIBS$ac_delim
 EFL_EDJE_BUILD!$EFL_EDJE_BUILD$ac_delim
 EDJE_CFLAGS!$EDJE_CFLAGS$ac_delim
 EDJE_LIBS!$EDJE_LIBS$ac_delim
+ECORE_IMF_CFLAGS!$ECORE_IMF_CFLAGS$ac_delim
+ECORE_IMF_LIBS!$ECORE_IMF_LIBS$ac_delim
 ECORE_FILE_CFLAGS!$ECORE_FILE_CFLAGS$ac_delim
 ECORE_FILE_LIBS!$ECORE_FILE_LIBS$ac_delim
 ECORE_EVAS_CFLAGS!$ECORE_EVAS_CFLAGS$ac_delim
@@ -15728,7 +15845,7 @@ LIBOBJS!$LIBOBJS$ac_delim
 LTLIBOBJS!$LTLIBOBJS$ac_delim
 _ACEOF
 
-  if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 50; then
+  if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 52; then
     break
   elif $ac_last_try; then
     { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
@@ -16982,11 +17099,13 @@ echo "------------------------------------------------------------------------"
 echo
 echo "Configuration Options Summary:"
 echo
+echo "  Ecore IMF............: $have_ecore_imf"
+echo
 echo "  EDJE_PROGRAM_CACHE...: $want_edje_program_cache"
 echo
 echo "  Build binaries.......: $have_edje_cc"
 echo
-echo "  Documentation........: ${enable_doc}"
+echo "  Documentation........: ${build_doc}"
 echo
 echo "  Compilation..........: make"
 echo
diff --git a/configure.ac b/configure.ac
index 93a4b3f..74e01a4 100644
--- a/configure.ac
+++ b/configure.ac
@@ -3,8 +3,8 @@ dnl Process this file with autoconf to produce a configure script.
 # get rid of that stupid cache mechanism
 rm -f config.cache
 
-AC_INIT([edje], 0.9.92.060, [enlightenment-devel at lists.sourceforge.net])
-AC_PREREQ(2.52)
+AC_INIT([edje], [0.9.92.061], [enlightenment-devel at lists.sourceforge.net])
+AC_PREREQ([2.52])
 AC_CONFIG_SRCDIR([configure.ac])
 AC_CONFIG_MACRO_DIR([m4])
 AC_CANONICAL_BUILD
@@ -24,9 +24,16 @@ VMIN=`echo $PACKAGE_VERSION | awk -F. '{printf("%s", $2);}'`
 VMIC=`echo $PACKAGE_VERSION | awk -F. '{printf("%s", $3);}'`
 SNAP=`echo $PACKAGE_VERSION | awk -F. '{printf("%s", $4);}'`
 version_info=`expr $VMAJ + $VMIN`":$VMIC:$VMIN"
-release="ver-pre-01"
-release_info="-release $release"
 AC_SUBST(version_info)
+
+release="ver-svn-02"
+case "$host_os" in
+   mingw32ce* | cegcc*)
+      ;;
+   *)
+      release_info="-release $release"
+      ;;
+esac
 AC_SUBST(release_info)
 
 
@@ -138,11 +145,13 @@ EFL_CHECK_DOXYGEN([build_doc="yes"], [build_doc="no"])
 AM_PATH_PYTHON([2.5], , [:])
 AM_CONDITIONAL([HAVE_PYTHON], [test "$PYTHON" != : ])
 
-
-### Checks for libraries
+# pkg-config
 
 PKG_PROG_PKG_CONFIG
 
+
+### Checks for libraries
+
 # Evil library for compilation on Windows
 
 EFL_EDJE_BUILD=""
@@ -166,11 +175,23 @@ PKG_CHECK_MODULES([EDJE],
     ecore >= 0.9.9
     ecore-job >= 0.9.9
     embryo >= 0.9.1
-   ]
-)
+   ])
 
 requirement_edje="embryo ecore-job ecore evas eet eina-0 ${requirement_edje}"
 
+have_ecore_imf="no"
+PKG_CHECK_MODULES([ECORE_IMF],
+   [
+    ecore-imf >= 0.9.9
+    ecore-imf-evas >= 0.9.9
+   ],
+   [
+    AC_DEFINE(HAVE_ECORE_IMF, 1, [Input Method Support for Edje Entry])
+    have_ecore_imf="yes"
+    requirement_edje="ecore-imf ecore-imf-evas ${requirement_edje}"
+   ],
+   [have_ecore_imf="no"])
+
 # Dependencies for the binaries
 
 if test "x$have_edje_cc" = "xyes"; then
@@ -259,11 +280,13 @@ echo "------------------------------------------------------------------------"
 echo
 echo "Configuration Options Summary:"
 echo
+echo "  Ecore IMF............: $have_ecore_imf"
+echo
 echo "  EDJE_PROGRAM_CACHE...: $want_edje_program_cache"
 echo
 echo "  Build binaries.......: $have_edje_cc"
 echo
-echo "  Documentation........: ${enable_doc}"
+echo "  Documentation........: ${build_doc}"
 echo
 echo "  Compilation..........: make"
 echo
diff --git a/data/Makefile.in b/data/Makefile.in
index 44d1558..4936b4e 100644
--- a/data/Makefile.in
+++ b/data/Makefile.in
@@ -86,6 +86,8 @@ ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@
 ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@
 ECORE_FILE_CFLAGS = @ECORE_FILE_CFLAGS@
 ECORE_FILE_LIBS = @ECORE_FILE_LIBS@
+ECORE_IMF_CFLAGS = @ECORE_IMF_CFLAGS@
+ECORE_IMF_LIBS = @ECORE_IMF_LIBS@
 EDJE_CC_PRG = @EDJE_CC_PRG@
 EDJE_CFLAGS = @EDJE_CFLAGS@
 EDJE_DECC_PRG = @EDJE_DECC_PRG@
diff --git a/data/include/Makefile.in b/data/include/Makefile.in
index d4fbf98..7799199 100644
--- a/data/include/Makefile.in
+++ b/data/include/Makefile.in
@@ -84,6 +84,8 @@ ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@
 ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@
 ECORE_FILE_CFLAGS = @ECORE_FILE_CFLAGS@
 ECORE_FILE_LIBS = @ECORE_FILE_LIBS@
+ECORE_IMF_CFLAGS = @ECORE_IMF_CFLAGS@
+ECORE_IMF_LIBS = @ECORE_IMF_LIBS@
 EDJE_CC_PRG = @EDJE_CC_PRG@
 EDJE_CFLAGS = @EDJE_CFLAGS@
 EDJE_DECC_PRG = @EDJE_DECC_PRG@
diff --git a/doc/Makefile.in b/doc/Makefile.in
index ebdcfd6..133d056 100644
--- a/doc/Makefile.in
+++ b/doc/Makefile.in
@@ -75,6 +75,8 @@ ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@
 ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@
 ECORE_FILE_CFLAGS = @ECORE_FILE_CFLAGS@
 ECORE_FILE_LIBS = @ECORE_FILE_LIBS@
+ECORE_IMF_CFLAGS = @ECORE_IMF_CFLAGS@
+ECORE_IMF_LIBS = @ECORE_IMF_LIBS@
 EDJE_CC_PRG = @EDJE_CC_PRG@
 EDJE_CFLAGS = @EDJE_CFLAGS@
 EDJE_DECC_PRG = @EDJE_DECC_PRG@
diff --git a/edje.pc.in b/edje.pc.in
index d589e9a..7d2d4bf 100644
--- a/edje.pc.in
+++ b/edje.pc.in
@@ -10,5 +10,5 @@ Description: Enlightened graphical design and layout engine.
 Requires: @requirement_edje@
 Version: @VERSION@
 Libs: -L${libdir} -ledje
-Libs.private: @EDJE_LIBS@ @EVIL_LIBS@
+Libs.private: @EDJE_LIBS@ @EVIL_LIBS@ @ECORE_IMF_LIBS@
 Cflags: -I${includedir}
diff --git a/edje.spec b/edje.spec
index 2f13828..b957711 100644
--- a/edje.spec
+++ b/edje.spec
@@ -2,7 +2,7 @@
 
 Summary: Complex Graphical Design/Layout Engine
 Name: edje
-Version: 0.9.92.060
+Version: 0.9.92.061
 Release: 0.%(date '+%Y%m%d')
 License: BSD
 Group: System Environment/Libraries
diff --git a/m4/efl_doxygen.m4 b/m4/efl_doxygen.m4
index 0c1452f..dd6bc3e 100644
--- a/m4/efl_doxygen.m4
+++ b/m4/efl_doxygen.m4
@@ -25,13 +25,15 @@ AC_ARG_ENABLE([doc],
        efl_enable_doc="no"
     fi
    ],
-   [efl_enable_doc="yes"]
-)
+   [efl_enable_doc="yes"])
+
+AC_MSG_CHECKING([whether to build documentation])
+AC_MSG_RESULT([${efl_enable_doc}])
 
 if test "x${efl_enable_doc}" = "xyes" ; then
 
 dnl
-dnl Specify the full file name, with path
+dnl Specify the file name, without path
 dnl
 
    efl_doxygen="doxygen"
@@ -51,10 +53,10 @@ dnl
        if test "x${efl_have_doxygen}" = "xno" ; then
           echo "WARNING:"
           echo "The doxygen program you specified:"
-          echo "$efl_doxygen"
+          echo "${efl_doxygen}"
           echo "was not found.  Please check the path and make sure "
           echo "the program exists and is executable."
-          AC_MSG_WARN([Warning: no doxygen detected. Documentation will not be built])
+          AC_MSG_WARN([no doxygen detected. Documentation will not be built])
        fi
       ],
       [AC_CHECK_PROG([efl_have_doxygen],
@@ -63,17 +65,16 @@ dnl
           [no])
        if test "x${efl_have_doxygen}" = "xno" ; then
           echo "WARNING:"
-          echo "The doxygen program was not found in your execute"
+          echo "The doxygen program was not found in your execute path."
           echo "You may have doxygen installed somewhere not covered by your path."
           echo ""
           echo "If this is the case make sure you have the packages installed, AND"
           echo "that the doxygen program is in your execute path (see your"
           echo "shell manual page on setting the \$PATH environment variable), OR"
           echo "alternatively, specify the program to use with --with-doxygen."
-          AC_MSG_WARN([Warning: no doxygen detected. Documentation will not be built])
+          AC_MSG_WARN([no doxygen detected. Documentation will not be built])
        fi
-      ]
-   )
+      ])
 fi
 
 dnl
@@ -88,9 +89,9 @@ fi
 AM_CONDITIONAL(EFL_BUILD_DOC, test "x${efl_enable_doc}" = "xyes")
 
 if test "x${efl_enable_doc}" = "xyes" ; then
-  ifelse([$1], , :, [$1])
+  m4_default([$1], [:])
 else
-  ifelse([$2], , :, [$2])
+  m4_default([$2], [:])
 fi
 
 ])
diff --git a/src/Makefile.in b/src/Makefile.in
index 3c9cacf..7c35f20 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -86,6 +86,8 @@ ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@
 ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@
 ECORE_FILE_CFLAGS = @ECORE_FILE_CFLAGS@
 ECORE_FILE_LIBS = @ECORE_FILE_LIBS@
+ECORE_IMF_CFLAGS = @ECORE_IMF_CFLAGS@
+ECORE_IMF_LIBS = @ECORE_IMF_LIBS@
 EDJE_CC_PRG = @EDJE_CC_PRG@
 EDJE_CFLAGS = @EDJE_CFLAGS@
 EDJE_DECC_PRG = @EDJE_DECC_PRG@
diff --git a/src/bin/Makefile.in b/src/bin/Makefile.in
index 4c730e5..7391432 100644
--- a/src/bin/Makefile.in
+++ b/src/bin/Makefile.in
@@ -118,6 +118,8 @@ ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@
 ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@
 ECORE_FILE_CFLAGS = @ECORE_FILE_CFLAGS@
 ECORE_FILE_LIBS = @ECORE_FILE_LIBS@
+ECORE_IMF_CFLAGS = @ECORE_IMF_CFLAGS@
+ECORE_IMF_LIBS = @ECORE_IMF_LIBS@
 EDJE_CC_PRG = @EDJE_CC_PRG@
 EDJE_CFLAGS = @EDJE_CFLAGS@
 EDJE_DECC_PRG = @EDJE_DECC_PRG@
diff --git a/src/bin/edje_cc_handlers.c b/src/bin/edje_cc_handlers.c
index 97a4731..c68a4e3 100644
--- a/src/bin/edje_cc_handlers.c
+++ b/src/bin/edje_cc_handlers.c
@@ -154,6 +154,7 @@ static void st_collections_group_parts_part_description_image_normal(void);
 static void st_collections_group_parts_part_description_image_tween(void);
 static void st_collections_group_parts_part_description_image_border(void);
 static void st_collections_group_parts_part_description_image_middle(void);
+static void st_collections_group_parts_part_description_image_scale_hint(void);
 static void st_collections_group_parts_part_description_fill_smooth(void);
 static void st_collections_group_parts_part_description_fill_origin_relative(void);
 static void st_collections_group_parts_part_description_fill_origin_offset(void);
@@ -349,6 +350,7 @@ New_Statement_Handler statement_handlers[] =
      {"collections.group.parts.part.description.image.images.image", st_images_image}, /* dup */
      {"collections.group.parts.part.description.image.border", st_collections_group_parts_part_description_image_border},
      {"collections.group.parts.part.description.image.middle", st_collections_group_parts_part_description_image_middle},
+     {"collections.group.parts.part.description.image.scale_hint", st_collections_group_parts_part_description_image_scale_hint},
      {"collections.group.parts.part.description.fill.smooth", st_collections_group_parts_part_description_fill_smooth},
      {"collections.group.parts.part.description.fill.origin.relative", st_collections_group_parts_part_description_fill_origin_relative},
      {"collections.group.parts.part.description.fill.origin.offset", st_collections_group_parts_part_description_fill_origin_offset},
@@ -3903,6 +3905,47 @@ st_collections_group_parts_part_description_image_middle(void)
 
 /**
     @page edcref
+    @property
+        scale_hint
+    @parameters
+        0, NONE, DYNAMIC, STATIC
+    @effect
+      Sets the evas image scale hint letting the engine more efectively save
+      cached copies of the scaled image if it maks sense
+    @endproperty
+*/
+static void
+st_collections_group_parts_part_description_image_scale_hint(void)
+{
+   Edje_Part_Collection *pc;
+   Edje_Part *ep;
+   Edje_Part_Description *ed;
+
+   check_arg_count(1);
+
+   pc = eina_list_data_get(eina_list_last(edje_collections));
+   ep = eina_list_data_get(eina_list_last(pc->parts));
+
+   if (ep->type != EDJE_PART_TYPE_IMAGE)
+     {
+	fprintf(stderr, "%s: Error. parse error %s:%i. "
+		"image attributes in non-IMAGE part.\n",
+		progname, file_in, line - 1);
+	exit(-1);
+     }
+
+   ed = ep->default_desc;
+   if (ep->other_desc) ed = eina_list_data_get(eina_list_last(ep->other_desc));
+   ed->image.scale_hint =  parse_enum(0,
+                                    "NONE", EVAS_IMAGE_SCALE_HINT_NONE,
+                                    "DYNAMIC", EVAS_IMAGE_SCALE_HINT_DYNAMIC,
+                                    "STATIC", EVAS_IMAGE_SCALE_HINT_STATIC,
+                                    "0", EVAS_IMAGE_SCALE_HINT_NONE,
+                                    NULL);
+}
+
+/**
+    @page edcref
     @block
         fill
     @context
diff --git a/src/lib/Makefile.am b/src/lib/Makefile.am
index 8b738a4..0e6b159 100644
--- a/src/lib/Makefile.am
+++ b/src/lib/Makefile.am
@@ -11,6 +11,7 @@ AM_CPPFLAGS = \
 -DPACKAGE_DATA_DIR=\"$(datadir)/$(PACKAGE)\" \
 @EVIL_CFLAGS@ \
 @EDJE_CFLAGS@ \
+ at ECORE_IMF_CFLAGS@ \
 @EFL_EDJE_BUILD@
 
 lib_LTLIBRARIES = libedje.la
@@ -41,5 +42,5 @@ edje_edit.c \
 edje_script_only.c \
 edje_entry.c
 
-libedje_la_LIBADD = @EDJE_LIBS@ -lm
+libedje_la_LIBADD = @EDJE_LIBS@ @ECORE_IMF_LIBS@ -lm
 libedje_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -version-info @version_info@ @release_info@
diff --git a/src/lib/Makefile.in b/src/lib/Makefile.in
index 687265e..496f3dd 100644
--- a/src/lib/Makefile.in
+++ b/src/lib/Makefile.in
@@ -113,6 +113,8 @@ ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@
 ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@
 ECORE_FILE_CFLAGS = @ECORE_FILE_CFLAGS@
 ECORE_FILE_LIBS = @ECORE_FILE_LIBS@
+ECORE_IMF_CFLAGS = @ECORE_IMF_CFLAGS@
+ECORE_IMF_LIBS = @ECORE_IMF_LIBS@
 EDJE_CC_PRG = @EDJE_CC_PRG@
 EDJE_CFLAGS = @EDJE_CFLAGS@
 EDJE_DECC_PRG = @EDJE_DECC_PRG@
@@ -238,6 +240,7 @@ AM_CPPFLAGS = \
 -DPACKAGE_DATA_DIR=\"$(datadir)/$(PACKAGE)\" \
 @EVIL_CFLAGS@ \
 @EDJE_CFLAGS@ \
+ at ECORE_IMF_CFLAGS@ \
 @EFL_EDJE_BUILD@
 
 lib_LTLIBRARIES = libedje.la
@@ -266,7 +269,7 @@ edje_edit.c \
 edje_script_only.c \
 edje_entry.c
 
-libedje_la_LIBADD = @EDJE_LIBS@ -lm
+libedje_la_LIBADD = @EDJE_LIBS@ @ECORE_IMF_LIBS@ -lm
 libedje_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -version-info @version_info@ @release_info@
 all: all-am
 
diff --git a/src/lib/edje_cache.c b/src/lib/edje_cache.c
index f74abf8..ed6ddb3 100644
--- a/src/lib/edje_cache.c
+++ b/src/lib/edje_cache.c
@@ -222,11 +222,11 @@ _edje_cache_file_coll_open(const char *file, const char *coll, int *error_ret, E
 	return edf;
      }
 
+   if (!coll) return edf;
+
    if (!edf->collection_hash)
      edf->collection_hash = eina_hash_string_small_new(NULL);
 
-   if (!coll) return edf;
-
    edc = eina_hash_find(edf->collection_hash, coll);
    if (edc)
      {
@@ -321,6 +321,11 @@ _edje_cache_file_coll_open(const char *file, const char *coll, int *error_ret, E
      }
    if (edc_ret) *edc_ret = edc;
 
+   if (eina_hash_population(edf->collection_hash) == 0)
+     {
+       eina_hash_free(edf->collection_hash);
+       edf->collection_hash = NULL;
+     }
    return edf;
 }
 
@@ -360,7 +365,7 @@ _edje_cache_coll_unref(Edje_File *edf, Edje_Part_Collection *edc)
    edc->references--;
    if (edc->references != 0) return;
    eina_hash_del(edf->collection_hash, edc->part, edc);
-   if (!eina_hash_population(edf->collection_hash))
+   if (eina_hash_population(edf->collection_hash) == 0)
      {
        eina_hash_free(edf->collection_hash);
        edf->collection_hash = NULL;
diff --git a/src/lib/edje_calc.c b/src/lib/edje_calc.c
index e650990..342d51a 100644
--- a/src/lib/edje_calc.c
+++ b/src/lib/edje_calc.c
@@ -56,7 +56,7 @@ _edje_part_description_find(Edje *ed, Edje_Real_Part *rp, const char *name,
    Edje_Part_Description *ret = NULL;
    Edje_Part_Description *d;
    Eina_List *l;
-   double min_dst = 999.0;
+   double min_dst = 99999.0;
 
    if (!strcmp(name, "default") && val == 0.0)
      return ep->default_desc;
@@ -180,7 +180,6 @@ _edje_recalc_do(Edje *ed)
 	  _edje_part_recalc(ed, ep, (~ep->calculated) & FLAG_XY);
      }
    if (!ed->calc_only) ed->recalc = 0;
-   ed->calc_only = 0;
 }
 
 int
@@ -655,7 +654,7 @@ _edje_part_recalc_single(Edje *ed,
 
 	if (ep->part->scale)
 	  evas_object_scale_set(ep->object, sc);
-	
+
 	if (stl)
 	  {
 	     const char *ptxt;
@@ -690,11 +689,11 @@ _edje_part_recalc_single(Edje *ed,
 		  evas_object_textblock_style_insets_get(ep->object, &ins_l, &ins_r, &ins_t, &ins_b);
 		  mw = ins_l + tw + ins_r;
 		  mh = ins_t + th + ins_b;
-		  if (chosen_desc->text.min_x)
+//		  if (chosen_desc->text.min_x)
 		    {
 		       if (mw > minw) minw = mw;
 		    }
-		  if (chosen_desc->text.min_y)
+//		  if (chosen_desc->text.min_y)
 		    {
 		       if (mh > minh) minh = mh;
 		    }
@@ -882,7 +881,6 @@ _edje_part_recalc_single(Edje *ed,
 	free(sfont);
 	params->text.size = size;
      }
-
    /* rememebr what our size is BEFORE we go limit it */
    params->req.x = params->x;
    params->req.y = params->y;
@@ -1256,6 +1254,11 @@ _edje_table_recalc_apply(Edje *ed, Edje_Real_Part *ep, Edje_Calc_Params *p3, Edj
    evas_object_table_homogeneous_set(ep->object, chosen_desc->table.homogeneous);
    evas_object_table_align_set(ep->object, chosen_desc->table.align.x, chosen_desc->table.align.y);
    evas_object_table_padding_set(ep->object, chosen_desc->table.padding.x, chosen_desc->table.padding.y);
+   if (evas_object_smart_need_recalculate_get(ep->object))
+     {
+	evas_object_smart_need_recalculate_set(ep->object, 0);
+	evas_object_smart_calculate(ep->object);
+     }
 }
 
 static void
@@ -1267,7 +1270,6 @@ _edje_image_recalc_apply(Edje *ed, Edje_Real_Part *ep, Edje_Calc_Params *p3, Edj
    evas_object_image_fill_set(ep->object, p3->fill.x, p3->fill.y,
 			      p3->fill.w, p3->fill.h);
    evas_object_image_smooth_scale_set(ep->object, p3->smooth);
-
    evas_object_image_border_set(ep->object, p3->border.l, p3->border.r,
 				p3->border.t, p3->border.b);
    if (chosen_desc->border.no_fill == 0)
@@ -1546,8 +1548,10 @@ _edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int flags)
 	/* Common move, resize and color_set for all part. */
 	switch (ep->part->type)
 	  {
-	   case EDJE_PART_TYPE_RECTANGLE:
 	   case EDJE_PART_TYPE_IMAGE:
+             evas_object_image_scale_hint_set(ep->object, 
+                                              chosen_desc->image.scale_hint);
+	   case EDJE_PART_TYPE_RECTANGLE:
 	   case EDJE_PART_TYPE_TEXTBLOCK:
 	   case EDJE_PART_TYPE_GRADIENT:
 	   case EDJE_PART_TYPE_BOX:
diff --git a/src/lib/edje_entry.c b/src/lib/edje_entry.c
index c61a6b3..a44e8d3 100644
--- a/src/lib/edje_entry.c
+++ b/src/lib/edje_entry.c
@@ -27,6 +27,13 @@ void *alloca (size_t);
 
 #include "edje_private.h"
 
+#ifdef HAVE_ECORE_IMF
+static int _edje_entry_imf_retrieve_surrounding_cb(void *data, Ecore_IMF_Context *ctx, char **text, int *cursor_pos);
+static int _edje_entry_imf_event_commit_cb(void *data, int type, void *event);
+static int _edje_entry_imf_event_changed_cb(void *data, int type, void *event);
+static int _edje_entry_imf_event_delete_surrounding_cb(void *data, int type, void *event);
+#endif
+
 typedef struct _Entry Entry;
 typedef struct _Sel Sel;
 typedef struct _Anchor Anchor;
@@ -49,6 +56,16 @@ struct _Entry
    Evas_Bool select_mod_start : 1;
    Evas_Bool select_mod_end : 1;
    Evas_Bool had_sel : 1;
+
+#ifdef HAVE_ECORE_IMF   
+   int	comp_len;
+   Evas_Bool have_composition : 1;
+   Ecore_IMF_Context *imf_context;
+
+   Ecore_Event_Handler *imf_ee_handler_commit;
+   Ecore_Event_Handler *imf_ee_handler_delete;
+   Ecore_Event_Handler *imf_ee_handler_changed;
+#endif   
 };
 
 struct _Sel
@@ -65,18 +82,96 @@ struct _Anchor
    Eina_List *sel;
 };
 
+#ifdef HAVE_ECORE_IMF   
+static void 
+_edje_entry_focus_in_cb(void *data, Evas_Object *o, const char *emission, const char *source)
+{
+   Edje_Real_Part *rp = data;
+   if (!rp) return;
+   Entry *en = rp->entry_data;
+   
+   if (!en) return;
+
+   if (!rp->edje || !rp->edje->obj) return;
+   
+   if (!en->imf_context) return;
+
+   if (evas_object_focus_get(rp->edje->obj))
+     {
+	ecore_imf_context_reset(en->imf_context);
+	ecore_imf_context_focus_in(en->imf_context);
+     }
+}
+
+static void
+_edje_entry_focus_out_cb(void *data, Evas_Object *o, const char *emission, const char *source)
+{
+   Edje_Real_Part *rp = data;
+   if (!rp) return;
+   Entry *en = rp->entry_data;
+   if (!en) return;
+
+   if (!en->imf_context) return;
+
+   ecore_imf_context_reset(en->imf_context);
+   ecore_imf_context_cursor_position_set(en->imf_context, evas_textblock_cursor_pos_get(en->cursor));
+   ecore_imf_context_focus_out(en->imf_context);
+}
+#endif
+
 static void
 _edje_focus_in_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
 {
    Edje *ed = data;
+#ifdef HAVE_ECORE_IMF   
+   Edje_Real_Part *rp;
+   Entry *en;
+#endif
+   
    _edje_emit(ed, "focus,in", "");
+#ifdef HAVE_ECORE_IMF
+   rp = ed->focused_part;
+   if (rp == NULL) return;
+   
+   en = rp->entry_data;
+   if ((!en) || (rp->part->type != EDJE_PART_TYPE_TEXTBLOCK) ||
+       (rp->part->entry_mode < EDJE_ENTRY_EDIT_MODE_EDITABLE))
+     return;
+ 
+   if (en->imf_context)
+     {
+	ecore_imf_context_reset(en->imf_context);
+	ecore_imf_context_focus_in(en->imf_context);
+     }
+#endif
 }
     
 static void
 _edje_focus_out_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
 {
    Edje *ed = data;
+#ifdef HAVE_ECORE_IMF
+   Edje_Real_Part *rp = ed->focused_part;
+   Entry *en;
+#endif
+   
    _edje_emit(ed, "focus,out", "");
+
+#ifdef HAVE_ECORE_IMF
+   if (!rp) return;
+   en = rp->entry_data;
+   if ((!en) || (rp->part->type != EDJE_PART_TYPE_TEXTBLOCK) ||
+       (rp->part->entry_mode < EDJE_ENTRY_EDIT_MODE_EDITABLE))
+     return;
+
+   if (en->imf_context)
+     {
+        ecore_imf_context_reset(en->imf_context);
+        ecore_imf_context_cursor_position_set(en->imf_context,
+                                              evas_textblock_cursor_pos_get(en->cursor));
+        ecore_imf_context_focus_out(en->imf_context);
+     }
+#endif
 }
 
 static void
@@ -108,8 +203,24 @@ _curs_back(Evas_Textblock_Cursor *c, Evas_Object *o, Entry *en)
 static void
 _curs_next(Evas_Textblock_Cursor *c, Evas_Object *o, Entry *en)
 {
+   int ln, ln2;
+   Eina_Bool eol;
+
+   ln = evas_textblock_cursor_line_geometry_get(c, NULL, NULL, NULL, NULL);
+   eol = evas_textblock_cursor_eol_get(c);
    if (!evas_textblock_cursor_char_next(c))
      {
+        if (!eol)
+          {
+             ln2 = evas_textblock_cursor_line_geometry_get(c, NULL, NULL, NULL, NULL);
+             if (ln2 != ln)
+               {
+                  evas_textblock_cursor_char_prev(c);
+                  evas_textblock_cursor_eol_set(c, 1);
+                  return;
+               }
+          }
+        evas_textblock_cursor_eol_set(c, 0);
 	if (evas_textblock_cursor_node_next(c))
 	  {
 	     while (evas_textblock_cursor_node_format_get(c))
@@ -128,7 +239,33 @@ _curs_next(Evas_Textblock_Cursor *c, Evas_Object *o, Entry *en)
 	len = evas_textblock_cursor_node_text_length_get(c);
 	pos = evas_textblock_cursor_pos_get(c);
 	if (pos == len)
-	  evas_textblock_cursor_node_next(c);
+          {
+             evas_textblock_cursor_node_next(c);
+             if (!eol)
+               {
+                  ln2 = evas_textblock_cursor_line_geometry_get(c, NULL, NULL, NULL, NULL);
+                  if (ln2 != ln)
+                    {
+                       evas_textblock_cursor_node_prev(c);
+                       evas_textblock_cursor_line_last(c);
+                       return;
+                    }
+               }
+          }
+        else
+          {
+             if (!eol)
+               {
+                  ln2 = evas_textblock_cursor_line_geometry_get(c, NULL, NULL, NULL, NULL);
+                  if (ln2 != ln)
+                    {
+                       evas_textblock_cursor_char_prev(c);
+                       evas_textblock_cursor_eol_set(c, 1);
+                       return;
+                    }
+               }
+          }
+        evas_textblock_cursor_eol_set(c, 0);
      }
    _curs_update_from_curs(c, o, en);
 }
@@ -198,8 +335,8 @@ static void
 _curs_lin_end(Evas_Textblock_Cursor *c, Evas_Object *o, Entry *en)
 {
    evas_textblock_cursor_line_last(c);
-   if (!evas_textblock_cursor_node_format_get(c))
-     _curs_next(c, o, en);
+//   if (!evas_textblock_cursor_node_format_get(c))
+//     _curs_next(c, o, en);
    _curs_update_from_curs(c, o, en);
 }
 
@@ -229,6 +366,7 @@ _sel_start(Evas_Textblock_Cursor *c, Evas_Object *o, Entry *en)
    evas_textblock_cursor_copy(c, en->sel_start);
    en->sel_end = evas_object_textblock_cursor_new(o);
    evas_textblock_cursor_copy(c, en->sel_end);
+
    en->have_selection = 0;
    if (en->selection)
      {
@@ -657,6 +795,7 @@ _anchors_clear(Evas_Textblock_Cursor *c, Evas_Object *o, Entry *en)
 	     free(sel);
 	     an->sel = eina_list_remove_list(an->sel, an->sel);
 	  }
+        free(an->name);
 	free(an);
 	en->anchors = eina_list_remove_list(en->anchors, en->anchors);
      }
@@ -801,6 +940,20 @@ _edje_key_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
        (rp->part->entry_mode < EDJE_ENTRY_EDIT_MODE_EDITABLE))
      return;
    if (!ev->key) return;
+
+#ifdef HAVE_ECORE_IMF
+#if 0 // FIXME -- keyboard activated IMF
+   if (en->imf_context)
+     {
+        Ecore_IMF_Event_Key_Down ecore_ev;
+        ecore_imf_evas_event_key_down_wrap(ev, &ecore_ev);
+        if (ecore_imf_context_filter_event(en->imf_context,
+                                           ECORE_IMF_EVENT_KEY_DOWN,
+                                           (Ecore_IMF_Event *)&ecore_ev))
+          return;
+     }
+#endif
+#endif
    
    tc = evas_object_textblock_cursor_new(rp->object);
    evas_textblock_cursor_copy(en->cursor, tc);
@@ -874,6 +1027,11 @@ _edje_key_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
 	       _range_del(en->cursor, rp->object, en);
 	     else
 	       _backspace(en->cursor, rp->object, en);
+
+#ifdef HAVE_ECORE_IMF
+	     if (en->have_composition)
+	       _backspace(en->cursor, rp->object, en);
+#endif
 	  }
 	_sel_clear(en->cursor, rp->object, en);
 	_curs_update_from_curs(en->cursor, rp->object, en);
@@ -1029,6 +1187,8 @@ _edje_key_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
 	     _curs_update_from_curs(en->cursor, rp->object, en);
 	     _anchors_get(en->cursor, rp->object, en);
 	     _edje_emit(ed, "entry,changed", rp->part->name);
+	     _edje_emit(ed, "cursor,changed", rp->part->name);
+	     cursor_changed = 1;
 	     ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
 	  }
         _edje_emit(ed, "entry,key,enter", rp->part->name);
@@ -1063,6 +1223,16 @@ _edje_key_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
      }
    if ((evas_textblock_cursor_compare(tc, en->cursor)) && (!cursor_changed))
      _edje_emit(ed, "cursor,changed", rp->part->name);
+
+#ifdef HAVE_ECORE_IMF
+   if (en->imf_context)
+     {
+	ecore_imf_context_reset(en->imf_context);
+	ecore_imf_context_cursor_position_set(en->imf_context,
+                                              evas_textblock_cursor_pos_get(en->cursor));
+     }
+#endif
+   
    evas_textblock_cursor_free(tc);
    _edje_entry_real_part_configure(rp);
 }
@@ -1078,6 +1248,21 @@ _edje_key_up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
    if ((!en) || (rp->part->type != EDJE_PART_TYPE_TEXTBLOCK) ||
        (rp->part->entry_mode < EDJE_ENTRY_EDIT_MODE_EDITABLE))
      return;
+
+#ifdef HAVE_ECORE_IMF
+#if 0 // FIXME key activation imf
+   if (en->imf_context)
+     {
+        Ecore_IMF_Event_Key_Up ecore_ev;
+        ecore_imf_evas_event_key_down_wrap(ev, &ecore_ev);
+        if (ecore_imf_context_filter_event(en->imf_context,
+                                           ECORE_IMF_EVENT_KEY_UP,
+                                           (Ecore_IMF_Event *)&ecore_ev))
+          return;
+     }
+#endif
+#endif
+   
 }
 
 static void
@@ -1091,6 +1276,7 @@ _edje_part_mouse_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info
    Evas_Textblock_Cursor *tc;
    Evas_Bool dosel = 0;
    if (!rp) return;
+   if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return;
    en = rp->entry_data;
    if ((!en) || (rp->part->type != EDJE_PART_TYPE_TEXTBLOCK) ||
        (rp->part->entry_mode < EDJE_ENTRY_EDIT_MODE_SELECTABLE))
@@ -1124,7 +1310,7 @@ _edje_part_mouse_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info
      {
         Evas_Coord lx, ly, lw, lh;
         int line;
-        
+
         line = evas_textblock_cursor_line_coord_set(en->cursor, en->cy);
         if (line == -1)
           _curs_end(en->cursor, rp->object, en);
@@ -1136,6 +1322,14 @@ _edje_part_mouse_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info
              else
                _curs_lin_end(en->cursor, rp->object, en);
           }
+        line = evas_textblock_cursor_line_geometry_get(en->cursor, &lx, &ly, &lw, &lh);
+     }
+   else
+     {
+        Evas_Coord lx, ly, lw, lh;
+        int line;
+        
+        line = evas_textblock_cursor_line_geometry_get(en->cursor, &lx, &ly, &lw, &lh);
      }
    if (dosel)
      {
@@ -1193,6 +1387,16 @@ _edje_part_mouse_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info
      }
    if (evas_textblock_cursor_compare(tc, en->cursor))
      _edje_emit(rp->edje, "cursor,changed", rp->part->name);
+
+#ifdef HAVE_ECORE_IMF
+   if (en->imf_context)
+     {
+	ecore_imf_context_reset(en->imf_context);
+	ecore_imf_context_cursor_position_set(en->imf_context,
+                                              evas_textblock_cursor_pos_get(en->cursor));
+     }
+#endif
+   
    evas_textblock_cursor_free(tc);
    _edje_entry_real_part_configure(rp);
 }
@@ -1209,6 +1413,7 @@ _edje_part_mouse_up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
    Evas_Bool dosel = 0;
    if (ev->button != 1) return;
    if (!rp) return;
+   if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return;
    en = rp->entry_data;
    if ((!en) || (rp->part->type != EDJE_PART_TYPE_TEXTBLOCK) ||
        (rp->part->entry_mode < EDJE_ENTRY_EDIT_MODE_SELECTABLE))
@@ -1342,6 +1547,11 @@ void
 _edje_entry_real_part_init(Edje_Real_Part *rp)
 {
    Entry *en;
+#ifdef HAVE_ECORE_IMF
+   const char *ctx_id;
+   const Ecore_IMF_Context_Info *ctx_info;
+   Evas *evas;
+#endif
    
    en = calloc(1, sizeof(Entry));
    if (!en) return;
@@ -1381,8 +1591,51 @@ _edje_entry_real_part_init(Edje_Real_Part *rp)
      {
 	evas_object_show(en->cursor_bg);
 	evas_object_show(en->cursor_fg);
+#ifdef HAVE_ECORE_IMF
+        ecore_imf_init();
+        
+        edje_object_signal_callback_add(rp->edje->obj, "focus,part,in", rp->part->name, _edje_entry_focus_in_cb, rp);
+        edje_object_signal_callback_add(rp->edje->obj, "focus,part,out", rp->part->name, _edje_entry_focus_out_cb, rp);
+        
+        ctx_id = ecore_imf_context_default_id_get();
+        if (ctx_id)
+          {
+             ctx_info = ecore_imf_context_info_by_id_get(ctx_id);
+             if (!ctx_info->canvas_type ||
+                 strcmp(ctx_info->canvas_type, "evas") == 0)
+               {
+                  en->imf_context = ecore_imf_context_add(ctx_id);
+               }
+             
+             else
+               {
+                  ctx_id = ecore_imf_context_default_id_by_canvas_type_get("evas");
+                  if (ctx_id)
+                    {
+                       en->imf_context = ecore_imf_context_add(ctx_id);
+                    }
+               }
+          }
+        else
+          en->imf_context = NULL;
+        
+        if (!en->imf_context) goto done;
+        
+        ecore_imf_context_client_window_set(en->imf_context, rp->object);
+        ecore_imf_context_client_canvas_set(en->imf_context, rp->edje->evas);
+        
+        ecore_imf_context_retrieve_surrounding_callback_set(en->imf_context, _edje_entry_imf_retrieve_surrounding_cb, rp);
+        en->imf_ee_handler_commit = ecore_event_handler_add(ECORE_IMF_EVENT_COMMIT, _edje_entry_imf_event_commit_cb, rp->edje);     
+        en->imf_ee_handler_delete = ecore_event_handler_add(ECORE_IMF_EVENT_DELETE_SURROUNDING, _edje_entry_imf_event_delete_surrounding_cb, rp);
+        en->imf_ee_handler_changed = ecore_event_handler_add(ECORE_IMF_EVENT_PREEDIT_CHANGED, _edje_entry_imf_event_changed_cb, rp->edje);
+        ecore_imf_context_input_mode_set(en->imf_context, 
+                                         rp->part->entry_mode == EDJE_ENTRY_EDIT_MODE_PASSWORD ? 
+                                         ECORE_IMF_INPUT_MODE_INVISIBLE : ECORE_IMF_INPUT_MODE_FULL);
+#endif
      }
+   done:
    en->cursor = evas_object_textblock_cursor_get(rp->object);
+
 }
 
 void
@@ -1397,6 +1650,40 @@ _edje_entry_real_part_shutdown(Edje_Real_Part *rp)
    rp->edje->subobjs = eina_list_remove(rp->edje->subobjs, en->cursor_fg);
    evas_object_del(en->cursor_bg);
    evas_object_del(en->cursor_fg);
+
+#ifdef HAVE_ECORE_IMF
+   if (rp->part->entry_mode >= EDJE_ENTRY_EDIT_MODE_EDITABLE)
+     {
+        if (en->imf_context)
+          {
+             if (en->imf_ee_handler_commit)
+               {
+                  ecore_event_handler_del(en->imf_ee_handler_commit);
+                  en->imf_ee_handler_commit = NULL;
+               }
+             
+             if (en->imf_ee_handler_delete)
+               {
+                  ecore_event_handler_del(en->imf_ee_handler_delete);
+                  en->imf_ee_handler_delete = NULL;
+               }
+             
+             if (en->imf_ee_handler_changed) 
+               {
+                  ecore_event_handler_del(en->imf_ee_handler_changed);
+                  en->imf_ee_handler_changed = NULL;
+               }
+             
+             ecore_imf_context_del(en->imf_context);
+             en->imf_context = NULL;
+          }
+        
+        edje_object_signal_callback_del(rp->edje->obj, "focus,part,in", rp->part->name, _edje_entry_focus_in_cb);
+        edje_object_signal_callback_del(rp->edje->obj, "focus,part,out", rp->part->name, _edje_entry_focus_out_cb);
+        ecore_imf_shutdown();
+     }
+#endif
+   
    free(en);
 }
 
@@ -1596,3 +1883,156 @@ _edje_entry_select_abort(Edje_Real_Part *rp)
         _edje_entry_real_part_configure(rp);
      }
 }
+
+#ifdef HAVE_ECORE_IMF
+static int
+_edje_entry_imf_retrieve_surrounding_cb(void *data, Ecore_IMF_Context *ctx, char **text, int *cursor_pos)
+{
+   Edje_Real_Part *rp = data;
+   Entry *en;
+   const char *str;
+   
+   if (!rp) return 0;
+   en = rp->entry_data;
+   if ((!en) || (rp->part->type != EDJE_PART_TYPE_TEXTBLOCK) ||
+       (rp->part->entry_mode < EDJE_ENTRY_EDIT_MODE_SELECTABLE))
+     return 0;
+   
+   if (text)
+     {
+        str = _edje_entry_text_get(rp);
+        *text = str ? strdup(str) : strdup("");
+     }
+   
+   if (cursor_pos)
+     {
+        *cursor_pos = evas_textblock_cursor_pos_get(en->cursor);
+     }
+   
+   return 1;
+}
+
+static int 
+_edje_entry_imf_event_commit_cb(void *data, int type, void *event)
+{
+   Edje* ed = data;
+   Edje_Real_Part *rp = ed->focused_part;
+   Entry *en;
+   Ecore_IMF_Event_Commit *ev = event;
+   int cursor_pos, composition_pos;
+   int start_pos, end_pos;
+   Evas_Bool selecting;
+   Evas_Bool changed = 0;
+   int i;
+   
+   if (!rp) return 1;
+   
+   en = rp->entry_data;
+   if ((!en) || (rp->part->type != EDJE_PART_TYPE_TEXTBLOCK) ||
+       (rp->part->entry_mode < EDJE_ENTRY_EDIT_MODE_SELECTABLE))
+     return 1;
+   
+   if (en->imf_context != ev->ctx) return 1;
+
+   if (en->have_composition)
+     {
+	for (i = 0; i < en->comp_len; i++)
+	  _backspace(en->cursor, rp->object, en);
+	_sel_clear(en->cursor, rp->object, en);
+	en->have_composition = 0;
+     }
+
+   evas_textblock_cursor_text_prepend(en->cursor, ev->str);
+
+   _curs_update_from_curs(en->cursor, rp->object, en);
+   _anchors_get(en->cursor, rp->object, en);
+   _edje_emit(rp->edje, "entry,changed", rp->part->name);
+   _edje_emit(ed, "cursor,changed", rp->part->name);
+   
+   return 0;
+}
+
+static int 
+_edje_entry_imf_event_changed_cb(void *data, int type, void *event)
+{
+   Edje* ed = data;
+   Edje_Real_Part *rp = ed->focused_part;
+   Entry *en;
+   int cursor_pos;
+   int composition_pos, length;
+   int start_pos, end_pos;
+   Evas_Bool selecting = 0;
+   Evas_Bool changed = 0;
+   Ecore_IMF_Event_Commit *ev = event;
+   Evas_Textblock_Cursor *start_cur, *end_cur;
+   int i;
+   char *preedit_string;
+
+   if (!rp) return 1;
+
+   en = rp->entry_data;
+   if ((!en) || (rp->part->type != EDJE_PART_TYPE_TEXTBLOCK) ||
+       (rp->part->entry_mode < EDJE_ENTRY_EDIT_MODE_SELECTABLE))
+     return 1;
+   
+   if (!en->imf_context) return 1;
+   
+   if (en->imf_context != ev->ctx) return 1;
+
+   ecore_imf_context_preedit_string_get(en->imf_context, &preedit_string, &length);
+
+   // FIXME : check the maximum length of evas_textblock
+   if ( 0 /* check the maximum length of evas_textblock */ )
+     return 1;
+   
+   cursor_pos = evas_textblock_cursor_pos_get(en->cursor); 
+
+   if (en->have_composition)
+     {
+	// delete the composing characters
+	for (i = 0;i < en->comp_len; i++)
+	  _backspace(en->cursor, rp->object, en);
+     }
+
+   en->comp_len = length;
+
+   _sel_clear(en->cursor, rp->object, en);
+   _sel_enable(en->cursor, rp->object, en);
+   _sel_start(en->cursor, rp->object, en);
+
+   en->have_composition = 1;
+
+   evas_textblock_cursor_text_prepend(en->cursor, preedit_string);
+
+   _sel_extend(en->cursor, rp->object, en);
+
+   _curs_update_from_curs(en->cursor, rp->object, en);
+   _anchors_get(en->cursor, rp->object, en);
+   _edje_emit(rp->edje, "entry,changed", rp->part->name);
+   _edje_emit(ed, "cursor,changed", rp->part->name);
+   
+   return 0;
+}
+
+static int
+_edje_entry_imf_event_delete_surrounding_cb(void *data, int type, void *event)
+{
+   Edje *ed = data;
+   Edje_Real_Part *rp = ed->focused_part;
+   Entry *en;
+   Ecore_IMF_Event_Delete_Surrounding *ev = event;
+   int cursor_pos;
+   
+   if (!rp) return 1;
+   en = rp->entry_data;
+   if ((!en) || (rp->part->type != EDJE_PART_TYPE_TEXTBLOCK) ||
+       (rp->part->entry_mode < EDJE_ENTRY_EDIT_MODE_SELECTABLE))
+     return 1;
+   
+   if (en->imf_context != ev->ctx) return 1;
+   
+   cursor_pos = evas_textblock_cursor_pos_get(en->cursor);
+
+   return 0;
+}
+#endif
diff --git a/src/lib/edje_load.c b/src/lib/edje_load.c
index 34ebc65..738b4b5 100644
--- a/src/lib/edje_load.c
+++ b/src/lib/edje_load.c
@@ -72,14 +72,16 @@ edje_object_file_get(const Evas_Object *obj, const char **file, const char **gro
  * @param obj A valid Evas_Object handle
  *
  * @return The Edje load error:\n
- * 0: No Error\n
- * 1: Generic Error\n
- * 2: Does not Exist\n
- * 3: Permission Denied\n
- * 4: Resource Allocation Failed\n
- * 5: Corrupt File\n
- * 6: Unknown Format\n
- * 7: Incompatible File
+ * EDJE_LOAD_ERROR_NONE: No Error\n
+ * EDJE_LOAD_ERROR_GENERIC: Generic Error\n
+ * EDJE_LOAD_ERROR_DOES_NOT_EXIST: Does not Exist\n
+ * EDJE_LOAD_ERROR_PERMISSION_DENIED: Permission Denied\n
+ * EDJE_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED: Resource Allocation Failed\n
+ * EDJE_LOAD_ERROR_CORRUPT_FILE: Corrupt File\n
+ * EDJE_LOAD_ERROR_UNKNOWN_FORMAT: Unknown Format\n
+ * EDJE_LOAD_ERROR_INCOMPATIBLE_FILE: Incompatible File\n
+ * EDJE_LOAD_ERROR_UNKNOWN_COLLECTION: Unknown Collection\n
+ * EDJE_LOAD_ERROR_RECURSIVE_REFERENCE: Recursive Reference\n
  */
 EAPI int
 edje_object_load_error_get(const Evas_Object *obj)
diff --git a/src/lib/edje_private.h b/src/lib/edje_private.h
index 6d24e0c..80d77bb 100644
--- a/src/lib/edje_private.h
+++ b/src/lib/edje_private.h
@@ -14,14 +14,15 @@
 #include <Ecore.h>
 #include <Ecore_Str.h>
 #include <Ecore_Job.h>
+#ifdef HAVE_ECORE_IMF
+# include <Ecore_IMF.h>
+#endif
 #include <Eet.h>
 #include <Embryo.h>
-#include <eina_stringshare.h>
 
 #include "Edje.h"
 #include "Edje_Edit.h"
 
-
 #ifdef __GNUC__
 # if __GNUC__ >= 4
 // BROKEN in gcc 4 on amd64
@@ -524,6 +525,7 @@ struct _Edje_Part_Description
    struct {
       Eina_List     *tween_list; /* list of Edje_Part_Image_Id */
       int            id; /* the image id to use */
+      int            scale_hint; /* evas scale hint */
    } image;
 
    struct {
@@ -581,24 +583,24 @@ struct _Edje_Part_Description
       unsigned char  min_y; /* if text size should be part min size */
       unsigned char  max_x; /* if text size should be part max size */
       unsigned char  max_y; /* if text size should be part max size */
-
    } text;
 
    struct {
       char          *layout, *alt_layout;
       Edje_Alignment align;
       struct {
-	      int x, y;
+         int x, y;
       } padding;
       struct {
-              Eina_Bool h, v;
+         Eina_Bool h, v;
       } min;
    } box;
+   
    struct {
       unsigned char  homogeneous;
       Edje_Alignment align;
       struct {
-	      int x, y;
+         int x, y;
       } padding;
    } table;
 
@@ -722,78 +724,79 @@ struct _Edje
 
 struct _Edje_Real_Part
 {
-   Edje                     *edje;
-   Evas_Object              *object;
-   Eina_List                *extra_objects;
-   Evas_Object              *swallowed_object;
-   Eina_List                *items;
-   void                     *entry_data;
-   Evas_Object              *cursorbg_object;
-   Evas_Object              *cursorfg_object;
-   // FIXME: add selection objects
-   Edje_Part                *part;
-   int                       x, y, w, h;
-   Edje_Rectangle            req;
-   Edje_Position             offset;
+   Edje                     *edje; // 4
+   Edje_Part                *part; // 4
+   Evas_Object              *object; // 4
+   Eina_List                *extra_objects; // 4
+   Evas_Object              *swallowed_object; // 4 // FIXME: move with swallow_params data
+   Eina_List                *items; // 4 //FIXME: only if table/box
+   void                     *entry_data; // 4 // FIXME: move to entry section
+   Evas_Object              *cursorbg_object; // 4 // FIXME: move to entry section
+   Evas_Object              *cursorfg_object; // 4 // FIXME: move to entry section
+   int                       x, y, w, h; // 16
+   Edje_Rectangle            req; // 16
+   Edje_Position             offset; // 8 // FIXME: move to text section
    struct {
-      Edje_Size min, max;
-      Edje_Aspect aspect;
-   } swallow_params;
+      Edje_Size min, max; // 16
+      Edje_Aspect aspect; // 12
+   } swallow_params; // 28 // FIXME: only if type SWALLOW
    struct {
-      double        x, y;
-      Edje_Position_Scale val, size, step, page;
+      double        x, y; // 16
+      Edje_Position_Scale val, size, step, page; // 64
       struct {
-	 unsigned int count;
-	 int  x, y;
+	 unsigned int count; // 4
+	 int  x, y; // 8
       } down;
       struct {
-	 int  x, y;
+	 int  x, y; // 8
       } tmp;
-      unsigned char need_reset : 1;
-   } drag;
+      unsigned char need_reset : 1; // 4
+   } drag; // 104 // FIME: make drag pointer to struct optional
    struct {
-      Edje_Real_Part        *source;
-      Edje_Real_Part        *text_source;
-      const char            *text;
-      const char	    *font;
-      const char	    *style;
-      int                    size;
+      Edje_Real_Part        *source; // 4
+      Edje_Real_Part        *text_source; // 4
+      const char            *text; // 4
+      const char	    *font; // 4 text only
+      const char	    *style; // 4 text only
+      int                    size; // 4 text only
       struct {
-	 double              in_w, in_h;
-	 int                 in_size;
-	 const char	    *in_str;
-	 const char         *out_str;
-	 int                 out_size;
-	 double              align_x, align_y;
-	 double              elipsis;
-	 int                 fit_x, fit_y;
-      } cache;
-   } text;
-
-   double                    description_pos;
-   Edje_Part_Description    *chosen_description;
+	 double              in_w, in_h; // 16 text only
+	 int                 in_size; // 4 text only
+	 const char	    *in_str; // 4 text only
+	 const char         *out_str; // 4 text only
+	 int                 out_size; // 4 text only
+	 double              align_x, align_y; // 16 text only
+	 double              elipsis; // 8 text only
+	 int                 fit_x, fit_y; // 8 text only
+      } cache; // 64
+   } text; // 86 // FIXME make text a potiner to struct and alloc at end
+                 // if part type is TEXT move common members textblock +
+                 // text to front and have smaller struct for textblock
+
+   double                    description_pos; // 8
+   Edje_Part_Description    *chosen_description; // 4
    struct {
-      Edje_Part_Description *description;
-      Edje_Real_Part        *rel1_to_x;
-      Edje_Real_Part        *rel1_to_y;
-      Edje_Real_Part        *rel2_to_x;
-      Edje_Real_Part        *rel2_to_y;
-   } param1, param2, custom;
+      Edje_Part_Description *description; // 4
+      Edje_Real_Part        *rel1_to_x; // 4
+      Edje_Real_Part        *rel1_to_y; // 4
+      Edje_Real_Part        *rel2_to_x; // 4
+      Edje_Real_Part        *rel2_to_y; // 4
+   } param1, param2, custom; // 60 // FIXME: custom should be alloced on demand - 20--
 
-   Edje_Real_Part           *confine_to;
-   Edje_Real_Part           *clip_to;
+   Edje_Real_Part           *confine_to; // 4 // fixme - make part of drag
+   Edje_Real_Part           *clip_to; // 4
 
-   Edje_Running_Program     *program;
-   Edje_Real_Part           *events_to;
+   Edje_Running_Program     *program; // 4
+   Edje_Real_Part           *events_to; // 4
 
-   int                       clicked_button;
-   int                       gradient_id;
+   int                       clicked_button; // 4
+   int                       gradient_id; // 4
 
-   unsigned char             calculated;
-   unsigned char             calculating;
+   unsigned char             calculated; // 1
+   unsigned char             calculating; // 1
 
-   unsigned char             still_in   : 1;
-};
+   unsigned char             still_in   : 1; // 2
+}; //  394
 
 struct _Edje_Running_Program
 {
diff --git a/src/lib/edje_program.c b/src/lib/edje_program.c
index 2c6e518..a04c4b0 100644
--- a/src/lib/edje_program.c
+++ b/src/lib/edje_program.c
@@ -2,6 +2,7 @@
  * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
  */
 
+#define _GNU_SOURCE
 #include <string.h>
 
 #include "edje_private.h"
@@ -814,8 +815,49 @@ _edje_emit(Edje *ed, const char *sig, const char *src)
    Edje_Message_Signal emsg;
    Eina_List *l;
    Evas_Object *obj;
-   
+   const char *sep;
+
    if (ed->delete_me) return;
+
+   sep = strchr(sig, ':');
+   if (sep)
+     {
+        size_t length;
+        char *part;
+       /* the signal contains a colon, split the signal into "group:signal",
+	* and deliver it to "group"
+	*/
+       length = strlen(sig) + 1;
+       part = alloca(length);
+       if (part)
+	 {
+            char *newsig;
+	    int i;
+
+            memcpy(part, sig, length);
+            newsig = part + (sep - sig);
+	    *newsig = '\0';
+	    newsig++;
+
+            for (i = 0; i < ed->table_parts_size; i++)
+              {
+                 Edje_Real_Part *rp = ed->table_parts[i];
+                 if ((rp->part->type == EDJE_PART_TYPE_GROUP) &&
+                     (rp->swallowed_object) &&
+                     (rp->part) && (rp->part->name) &&
+                     (strcmp(rp->part->name, part) == 0))
+                   {
+                      Edje *ed2 = _edje_fetch(rp->swallowed_object);
+                      if (ed2) _edje_emit(ed2, newsig, src);
+                      return; /* stop processing.
+			       * XXX maybe let signal be processed anyway?
+			       * XXX in this case, just comment this line
+			       */
+                   }
+              }
+         }
+     }
+
    emsg.sig = sig;
    emsg.src = src;
    _edje_message_send(ed, EDJE_QUEUE_SCRIPT, EDJE_MESSAGE_SIGNAL, 0, &emsg);
diff --git a/src/lib/edje_util.c b/src/lib/edje_util.c
index 367d16e..2b27bb2 100644
--- a/src/lib/edje_util.c
+++ b/src/lib/edje_util.c
@@ -2617,6 +2617,34 @@ edje_object_part_box_remove_all(Evas_Object *obj, const char *part, Evas_Bool cl
 
 }
 
+static void
+_edje_box_child_del_cb(void *data, Evas *e __UNUSED__, Evas_Object *child __UNUSED__, void *einfo __UNUSED__)
+{
+   Edje_Real_Part *rp = data;
+   rp->edje->dirty = 1;
+   _edje_recalc(rp->edje);
+}
+
+static void
+_edje_box_child_add(Edje_Real_Part *rp, Evas_Object *child)
+{
+   evas_object_event_callback_add
+     (child, EVAS_CALLBACK_DEL, _edje_box_child_del_cb, rp);
+
+   rp->edje->dirty = 1;
+   _edje_recalc(rp->edje);
+}
+
+static void
+_edje_box_child_remove(Edje_Real_Part *rp, Evas_Object *child)
+{
+   evas_object_event_callback_del_full
+     (child, EVAS_CALLBACK_DEL, _edje_box_child_del_cb, rp);
+
+   rp->edje->dirty = 1;
+   _edje_recalc(rp->edje);
+}
+
 Evas_Bool
 _edje_real_part_box_append(Edje_Real_Part *rp, Evas_Object *child_obj)
 {
@@ -2625,6 +2653,8 @@ _edje_real_part_box_append(Edje_Real_Part *rp, Evas_Object *child_obj)
    opt = evas_object_box_append(rp->object, child_obj);
    if (!opt) return 0;
 
+   _edje_box_child_add(rp, child_obj);
+
    return 1;
 }
 
@@ -2636,6 +2666,8 @@ _edje_real_part_box_prepend(Edje_Real_Part *rp, Evas_Object *child_obj)
    opt = evas_object_box_prepend(rp->object, child_obj);
    if (!opt) return 0;
 
+   _edje_box_child_add(rp, child_obj);
+
    return 1;
 }
 
@@ -2647,6 +2679,8 @@ _edje_real_part_box_insert_before(Edje_Real_Part *rp, Evas_Object *child_obj, co
    opt = evas_object_box_insert_before(rp->object, child_obj, ref);
    if (!opt) return 0;
 
+   _edje_box_child_add(rp, child_obj);
+
    return 1;
 }
 
@@ -2658,6 +2692,8 @@ _edje_real_part_box_insert_at(Edje_Real_Part *rp, Evas_Object *child_obj, unsign
    opt = evas_object_box_insert_at(rp->object, child_obj, pos);
    if (!opt) return 0;
 
+   _edje_box_child_add(rp, child_obj);
+
    return 1;
 }
 
@@ -2665,9 +2701,9 @@ Evas_Object *
 _edje_real_part_box_remove(Edje_Real_Part *rp, Evas_Object *child_obj)
 {
    if (evas_object_data_get(child_obj, "\377 edje.box_item")) return NULL;
-   if (evas_object_box_remove(rp->object, child_obj))
-     return child_obj;
-   return NULL;
+   if (!evas_object_box_remove(rp->object, child_obj)) return NULL;
+   _edje_box_child_remove(rp, child_obj);
+   return child_obj;
 }
 
 Evas_Object *
@@ -2682,9 +2718,9 @@ _edje_real_part_box_remove_at(Edje_Real_Part *rp, unsigned int pos)
    if (!opt) return NULL;
    child_obj = opt->obj;
    if (evas_object_data_get(child_obj, "\377 edje.box_item")) return NULL;
-   if (evas_object_box_remove_at(rp->object, pos))
-     return child_obj;
-   return NULL;
+   if (!evas_object_box_remove_at(rp->object, pos)) return NULL;
+   _edje_box_child_remove(rp, child_obj);
+   return child_obj;
 }
 
 Evas_Bool
@@ -2693,13 +2729,12 @@ _edje_real_part_box_remove_all(Edje_Real_Part *rp, Evas_Bool clear)
    Eina_List *children;
    int i;
 
-   if (eina_list_count(rp->items) == 0)
-     return evas_object_box_remove_all(rp->object, clear);
    i = 0;
    children = evas_object_box_children_get(rp->object);
    while (children)
      {
 	Evas_Object *child_obj = children->data;
+	_edje_box_child_remove(rp, child_obj);
 	if (evas_object_data_get(child_obj, "\377 edje.box_item"))
 	  i++;
 	else
@@ -2714,6 +2749,34 @@ _edje_real_part_box_remove_all(Edje_Real_Part *rp, Evas_Bool clear)
    return 1;
 }
 
+static void
+_edje_table_child_del_cb(void *data, Evas *e __UNUSED__, Evas_Object *child __UNUSED__, void *einfo __UNUSED__)
+{
+   Edje_Real_Part *rp = data;
+   rp->edje->dirty = 1;
+   _edje_recalc(rp->edje);
+}
+
+static void
+_edje_table_child_add(Edje_Real_Part *rp, Evas_Object *child)
+{
+   evas_object_event_callback_add
+     (child, EVAS_CALLBACK_DEL, _edje_table_child_del_cb, rp);
+
+   rp->edje->dirty = 1;
+   _edje_recalc(rp->edje);
+}
+
+static void
+_edje_table_child_remove(Edje_Real_Part *rp, Evas_Object *child)
+{
+   evas_object_event_callback_del_full
+     (child, EVAS_CALLBACK_DEL, _edje_table_child_del_cb, rp);
+
+   rp->edje->dirty = 1;
+   _edje_recalc(rp->edje);
+}
+
 /** Packs an object into the table
  * @param obj A valid Evas_Object handle
  * @param part The part name
@@ -2829,13 +2892,22 @@ edje_object_part_table_clear(Evas_Object *obj, const char *part, Evas_Bool clear
 Evas_Bool
 _edje_real_part_table_pack(Edje_Real_Part *rp, Evas_Object *child_obj, unsigned short col, unsigned short row, unsigned short colspan, unsigned short rowspan)
 {
-   return evas_object_table_pack(rp->object, child_obj, col, row, colspan, rowspan);
+   Evas_Bool ret = evas_object_table_pack(rp->object, child_obj, col, row, colspan, rowspan);
+
+   _edje_table_child_add(rp, child_obj);
+
+   return ret;
 }
 
 Evas_Bool
 _edje_real_part_table_unpack(Edje_Real_Part *rp, Evas_Object *child_obj)
 {
-   return evas_object_table_unpack(rp->object, child_obj);
+   Evas_Bool ret = evas_object_table_unpack(rp->object, child_obj);
+
+   if (ret)
+     _edje_table_child_remove(rp, child_obj);
+
+   return ret;
 }
 
 void
@@ -2843,15 +2915,11 @@ _edje_real_part_table_clear(Edje_Real_Part *rp, Evas_Bool clear)
 {
    Eina_List *children;
 
-   if (eina_list_count(rp->items) == 0)
-     {
-	evas_object_table_clear(rp->object, clear);
-	return;
-     }
    children = evas_object_table_children_get(rp->object);
    while (children)
      {
 	Evas_Object *child_obj = children->data;
+	_edje_table_child_remove(rp, child_obj);
 	if (!evas_object_data_get(child_obj, "\377 edje.table_item"))
 	  {
 	     evas_object_table_unpack(rp->object, child_obj);
diff --git a/utils/Makefile.in b/utils/Makefile.in
index ba88c70..a0f62e8 100644
--- a/utils/Makefile.in
+++ b/utils/Makefile.in
@@ -78,6 +78,8 @@ ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@
 ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@
 ECORE_FILE_CFLAGS = @ECORE_FILE_CFLAGS@
 ECORE_FILE_LIBS = @ECORE_FILE_LIBS@
+ECORE_IMF_CFLAGS = @ECORE_IMF_CFLAGS@
+ECORE_IMF_LIBS = @ECORE_IMF_LIBS@
 EDJE_CC_PRG = @EDJE_CC_PRG@
 EDJE_CFLAGS = @EDJE_CFLAGS@
 EDJE_DECC_PRG = @EDJE_DECC_PRG@

-- 
Enlightenment DR17 graphical layout and animation library



More information about the Pkg-e-commits mailing list