[Upstream migration @62307] Merge remote branch 'origin/upstream'
authorMike McCormack <mj.mccormack@samsung.com>
Thu, 11 Aug 2011 07:59:06 +0000 (16:59 +0900)
committerMike McCormack <mj.mccormack@samsung.com>
Thu, 11 Aug 2011 07:59:06 +0000 (16:59 +0900)
Conflicts:
.gitignore

1  2 
.gitignore
src/lib/ecore/ecore_thread.c
src/lib/ecore_evas/ecore_evas_x.c
src/lib/ecore_imf/ecore_imf_context.c
src/lib/ecore_x/Ecore_X.h

diff --combined .gitignore
@@@ -14,7 -14,7 +14,7 @@@ Makefile.i
  /ABOUT-NLS
  /README
  /aclocal.m4
- autom4te.cache/
/autom4te.cache/
  /config.cache
  /config.cache-env
  /config.guess
  /config.rpath
  /config.sub
  /depcomp
- doc/ecore.dox
/doc/ecore.dox
  /ecore.spec
  /install-sh
  /libtool
  /ltmain.sh
- m4/codeset.m4
- m4/gettext.m4
- m4/glibc21.m4
- m4/iconv.m4
- m4/intdiv0.m4
- m4/intmax.m4
- m4/inttypes-pri.m4
- m4/inttypes.m4
- m4/inttypes_h.m4
- m4/isc-posix.m4
- m4/lcmessage.m4
- m4/lib-ld.m4
- m4/lib-link.m4
- m4/lib-prefix.m4
- m4/libtool.m4
- m4/longdouble.m4
- m4/longlong.m4
- m4/ltoptions.m4
- m4/ltsugar.m4
- m4/ltversion.m4
- m4/lt~obsolete.m4
- m4/nls.m4
- m4/po.m4
- m4/printf-posix.m4
- m4/progtest.m4
- m4/signed.m4
- m4/size_max.m4
- m4/stdint_h.m4
- m4/uintmax_t.m4
- m4/ulonglong.m4
- m4/wchar_t.m4
- m4/wint_t.m4
- m4/xsize.m4
/m4/codeset.m4
/m4/gettext.m4
/m4/glibc21.m4
/m4/iconv.m4
/m4/intdiv0.m4
/m4/intmax.m4
/m4/inttypes-pri.m4
/m4/inttypes.m4
/m4/inttypes_h.m4
/m4/isc-posix.m4
/m4/lcmessage.m4
/m4/lib-ld.m4
/m4/lib-link.m4
/m4/lib-prefix.m4
/m4/libtool.m4
/m4/longdouble.m4
/m4/longlong.m4
/m4/ltoptions.m4
/m4/ltsugar.m4
/m4/ltversion.m4
/m4/lt~obsolete.m4
/m4/nls.m4
/m4/po.m4
/m4/printf-posix.m4
/m4/progtest.m4
/m4/signed.m4
/m4/size_max.m4
/m4/stdint_h.m4
/m4/uintmax_t.m4
/m4/ulonglong.m4
/m4/wchar_t.m4
/m4/wint_t.m4
/m4/xsize.m4
  /missing
  /mkinstalldirs
- po/Makefile.in.in
- po/Makevars.template
- po/POTFILES
- po/Rules-quot
- po/boldquot.sed
- po/ecore.pot
- po/en@boldquot.header
- po/en@quot.header
- po/insert-header.sin
- po/quot.sed
- po/remove-potcdate.sed
- po/remove-potcdate.sin
- po/stamp-po
/po/Makefile.in.in
/po/Makevars.template
/po/POTFILES
/po/Rules-quot
/po/boldquot.sed
/po/ecore.pot
/po/en@boldquot.header
/po/en@quot.header
/po/insert-header.sin
/po/quot.sed
/po/remove-potcdate.sed
/po/remove-potcdate.sin
/po/stamp-po
  /stamp-h1
  /doc/Doxyfile
  /src/bin/ecore_test
+ /src/lib/ecore_x/xcb/ecore_xcb_keysym_table.h
+ /src/util/makekeys
 +debian/*.debhelper.log
 +debian/*.substvars
 +debian/*.debhelper
 +debian/libecore-bin/
 +config.guess.cdbs-orig
 +config.sub.cdbs-orig
 +debian/files
 +debian/libecore-con/
 +debian/libecore-config/
 +debian/libecore-data/
 +debian/libecore-dbg/
 +debian/libecore-dev/
 +debian/libecore-doc/
 +debian/libecore-evas/
 +debian/libecore-fb/
 +debian/libecore-file/
 +debian/libecore-imf/
 +debian/libecore-input/
 +debian/libecore-ipc/
 +debian/libecore-x/
 +debian/libecore/
 +debian/stamp-*
 +debian/tmp/
 +doc/html/
 +doc/latex/
 +doc/man/
@@@ -3,6 -3,7 +3,7 @@@
  #endif
  
  #include <sys/time.h>
+ #include <assert.h>
  
  #ifdef HAVE_EVIL
  # include <Evil.h>
@@@ -389,6 -390,7 +390,7 @@@ static LRWK(_ecore_thread_global_hash_l
  static LK(_ecore_thread_global_hash_mutex);
  static CD(_ecore_thread_global_hash_cond);
  
+ static LK(_ecore_main_loop_mutex);
  static Eina_Bool have_main_loop_thread = 0;
  
  static Eina_Trash *_ecore_thread_worker_trash = NULL;
@@@ -792,6 -794,7 +794,7 @@@ _ecore_thread_init(void
     LKI(_ecore_pending_job_threads_mutex);
     LRWKI(_ecore_thread_global_hash_lock);
     LKI(_ecore_thread_global_hash_mutex);
+    LKI(_ecore_main_loop_mutex);
     CDI(_ecore_thread_global_hash_cond);
  #endif
  }
@@@ -867,12 -870,30 +870,32 @@@ _ecore_thread_assert_main_loop_thread(c
     if (!good)
       {
          EINA_LOG_CRIT("Call to %s from wrong thread!", function);
 +#if 0
          abort();
 +#endif
       }
  }
  
+ #ifdef HAVE_THREAD_SAFETY
+ static int lock_count;
+ void
+ _ecore_lock(void)
+ {
+   LKL(_ecore_main_loop_mutex);
+   lock_count++;
+   assert(lock_count == 1);
+ }
+ void
+ _ecore_unlock(void)
+ {
+   lock_count--;
+   assert(lock_count == 0);
+   LKU(_ecore_main_loop_mutex);
+ }
+ #endif
  EAPI Ecore_Thread *
  ecore_thread_run(Ecore_Thread_Cb func_blocking,
                   Ecore_Thread_Cb func_end,
index d3dcb58,1869b76..a66caad
mode 100755,100644..100755
@@@ -997,17 -997,6 +997,17 @@@ _ecore_evas_x_event_window_show(void *d
     ee = ecore_event_window_match(e->win);
     if (!ee) return ECORE_CALLBACK_PASS_ON; /* pass on event */
     if (e->win != ee->prop.window) return ECORE_CALLBACK_PASS_ON;
 +   /* some GL drivers are doing buffer copy in a separate thread.
 +    * we need to check whether GL driver sends SYNC_DRAW_DONE msg afger copying
 +    * that are required in order to exactly render. - added by gl77.lee
 +    */
 +   if (ee->gl_sync_draw_done < 0)
 +     {
 +        if (getenv("ECORE_EVAS_GL_SYNC_DRAW_DONE"))
 +           ee->gl_sync_draw_done = atoi(getenv("ECORE_EVAS_GL_SYNC_DRAW_DONE"));
 +        else
 +           ee->gl_sync_draw_done = 0;
 +     }
     if (first_map_bug < 0)
       {
          char *bug = NULL;
@@@ -1544,41 -1533,10 +1544,41 @@@ _ecore_evas_x_rotation_set_internal(Eco
       }
  }
  
 +#define _USE_WIN_ROT_EFFECT 1
 +
 +#if _USE_WIN_ROT_EFFECT
 +static void _ecore_evas_x_flush_pre(void *data, Evas *e __UNUSED__, void *event_info __UNUSED__);
 +
 +typedef struct _Ecore_Evas_X_Rotation_Effect Ecore_Evas_X_Rotation_Effect;
 +struct _Ecore_Evas_X_Rotation_Effect
 +{
 +   Eina_Bool    wait_for_comp_reply;
 +};
 +
 +static Ecore_Evas_X_Rotation_Effect _rot_effect =
 +{
 +   EINA_FALSE
 +};
 +
 +static void
 +_ecore_evas_x_rotation_effect_setup(void)
 +{
 +   _rot_effect.wait_for_comp_reply = EINA_TRUE;
 +}
 +#endif /* end of _USE_WIN_ROT_EFFECT */
 +
  static void
  _ecore_evas_x_rotation_set(Ecore_Evas *ee, int rotation, int resize)
  {
     if (ee->rotation == rotation) return;
 +   if (!strcmp(ee->driver, "xrender_x11")) return;
 +
 +#if _USE_WIN_ROT_EFFECT
 +   int angles[2];
 +   angles[0] = rotation;
 +   angles[1] = ee->rotation;
 +#endif /* end of _USE_WIN_ROT_EFFECT */
 +
     if (!strcmp(ee->driver, "opengl_x11"))
       {
  #ifdef BUILD_ECORE_EVAS_OPENGL_X11
          einfo->info.rotation = rotation;
          _ecore_evas_x_rotation_set_internal(ee, rotation, resize, 
                                              (Evas_Engine_Info *)einfo);
 +# if _USE_WIN_ROT_EFFECT
 +        ecore_x_window_prop_property_set(ee->prop.window,
 +                                         ECORE_X_ATOM_E_ILLUME_ROTATE_WINDOW_ANGLE,
 +                                         ECORE_X_ATOM_CARDINAL, 32, &angles, 2);
 +# else
 +        ecore_x_window_prop_property_set(ee->prop.window,
 +                                         ECORE_X_ATOM_E_ILLUME_ROTATE_WINDOW_ANGLE,
 +                                         ECORE_X_ATOM_CARDINAL, 32, &rotation, 1);
 +# endif
  #endif /* BUILD_ECORE_EVAS_OPENGL_X11 */
       }
     else if (!strcmp(ee->driver, "software_x11"))
          einfo->info.rotation = rotation;
          _ecore_evas_x_rotation_set_internal(ee, rotation, resize, 
                                              (Evas_Engine_Info *)einfo);
 +# if _USE_WIN_ROT_EFFECT
 +        ecore_x_window_prop_property_set(ee->prop.window,
 +                                         ECORE_X_ATOM_E_ILLUME_ROTATE_WINDOW_ANGLE,
 +                                         ECORE_X_ATOM_CARDINAL, 32, &angles, 2);
 +# else
 +        ecore_x_window_prop_property_set(ee->prop.window,
 +                                         ECORE_X_ATOM_E_ILLUME_ROTATE_WINDOW_ANGLE,
 +                                         ECORE_X_ATOM_CARDINAL, 32, &rotation, 1);
 +# endif
  #endif /* BUILD_ECORE_EVAS_SOFTWARE_X11 */
       }
     else if (!strcmp(ee->driver,  "software_16_x11"))
          einfo->info.rotation = rotation;
          _ecore_evas_x_rotation_set_internal(ee, rotation, resize, 
                                              (Evas_Engine_Info *)einfo);
 +# if _USE_WIN_ROT_EFFECT
 +        ecore_x_window_prop_property_set(ee->prop.window,
 +                                         ECORE_X_ATOM_E_ILLUME_ROTATE_WINDOW_ANGLE,
 +                                         ECORE_X_ATOM_CARDINAL, 32, &angles, 2);
 +# else
 +        ecore_x_window_prop_property_set(ee->prop.window,
 +                                         ECORE_X_ATOM_E_ILLUME_ROTATE_WINDOW_ANGLE,
 +                                         ECORE_X_ATOM_CARDINAL, 32, &rotation, 1);
 +# endif
  #endif /* BUILD_ECORE_EVAS_SOFTWARE_16_X11 */
       }
     else if (!strcmp(ee->driver,  "software_8_x11"))
          einfo->info.rotation = rotation;
          _ecore_evas_x_rotation_set_internal(ee, rotation, resize, 
                                              (Evas_Engine_Info *)einfo);
 +# if _USE_WIN_ROT_EFFECT
 +        ecore_x_window_prop_property_set(ee->prop.window,
 +                                         ECORE_X_ATOM_E_ILLUME_ROTATE_WINDOW_ANGLE,
 +                                         ECORE_X_ATOM_CARDINAL, 32, &angles, 2);
 +# else
 +        ecore_x_window_prop_property_set(ee->prop.window,
 +                                         ECORE_X_ATOM_E_ILLUME_ROTATE_WINDOW_ANGLE,
 +                                         ECORE_X_ATOM_CARDINAL, 32, &rotation, 1);
 +# endif
  #endif /* BUILD_ECORE_EVAS_SOFTWARE_8_X11 */
       }
 +
 +#if _USE_WIN_ROT_EFFECT
 +  _ecore_evas_x_rotation_effect_setup();
 +  _ecore_evas_x_flush_pre(ee, NULL, NULL);
 +#endif /* end of _USE_WIN_ROT_EFFECT */
  }
  
  static void
@@@ -2842,8 -2759,7 +2842,8 @@@ _ecore_evas_x_flush_post(void *data, Ev
  {
     Ecore_Evas *ee = data;
  
 -   if ((!ee->no_comp_sync) && (_ecore_evas_app_comp_sync))
 +   if ((!ee->no_comp_sync) && (_ecore_evas_app_comp_sync) &&
 +       (!ee->gl_sync_draw_done)) // added by gl77.lee
       {
          if (ee->engine.x.sync_counter)
            {
@@@ -3210,14 -3126,12 +3210,14 @@@ ecore_evas_gl_x11_options_new(const cha
  
     ECORE_MAGIC_SET(ee, ECORE_MAGIC_EVAS);
  
 +   ee->gl_sync_draw_done = -1; // added by gl77.lee
 +
     _ecore_evas_x_init();
  
     ee->engine.func = (Ecore_Evas_Engine_Func *)&_ecore_x_engine_func;
  
     ee->driver = "opengl_x11";
 -   ee->semi_sync = 1; // gl engine doesn't need to sync - its whole swaps
 +   ee->semi_sync = 0; // gl engine doesn't need to sync - its whole swaps
  //   ee->no_comp_sync = 1; // gl engine doesn't need to sync - its whole swaps
     if (disp_name) ee->name = strdup(disp_name);
  
       (ee, ee->engine.x.win_root, x, y, w, h, 0, 0, opt);
     if (!ee->prop.window)
       {
+         ERR("evas_engine_info_set() init engine '%s' failed.", ee->driver);
          ecore_evas_free(ee);
          return NULL;
       }
@@@ -3605,6 -3520,12 +3606,12 @@@ ecore_evas_software_x11_16_new(const ch
               return NULL;
            }
       }
+    else
+      {
+         ERR("evas_engine_info_set() init engine '%s' failed.", ee->driver);
+         ecore_evas_free(ee);
+         return NULL;
+      }
  
     ecore_x_icccm_hints_set(ee->prop.window,
                             1 /* accepts_focus */,
@@@ -3923,6 -3844,12 +3930,12 @@@ ecore_evas_software_x11_8_new(const cha
               return NULL;
            }
       }
+    else
+      {
+         ERR("evas_engine_info_set() init engine '%s' failed.", ee->driver);
+         ecore_evas_free(ee);
+         return NULL;
+      }
  
     ecore_x_icccm_hints_set(ee->prop.window,
                             1 /* accepts_focus */,
@@@ -223,8 -223,6 +223,8 @@@ ecore_imf_context_info_get(Ecore_IMF_Co
  EAPI void
  ecore_imf_context_del(Ecore_IMF_Context *ctx)
  {
 +   void *data;
 +
     if (!ECORE_MAGIC_CHECK(ctx, ECORE_MAGIC_CONTEXT))
       {
          ECORE_MAGIC_FAIL(ctx, ECORE_MAGIC_CONTEXT,
       }
     if (ctx->klass->del) ctx->klass->del(ctx);
     ECORE_MAGIC_SET(ctx, ECORE_MAGIC_NONE);
 +
 +   EINA_LIST_FREE(ctx->private_key_list, data)
 +      free(data);
 +
 +   EINA_LIST_FREE(ctx->disabled_key_list, data)
 +      free(data);
 +
 +   ctx->private_key_list = NULL;
 +   ctx->disabled_key_list = NULL;
 +
     free(ctx);
  }
  
@@@ -525,6 -513,7 +525,7 @@@ ecore_imf_context_cursor_position_set(E
   * @param w cursor width.
   * @param h cursor height.
   * @ingroup Ecore_IMF_Context_Group
+  * @since 1.1.0
   */
  EAPI void
  ecore_imf_context_cursor_location_set(Ecore_IMF_Context *ctx, int x, int y, int w, int h)
@@@ -777,13 -766,6 +778,13 @@@ ecore_imf_context_new(const Ecore_IMF_C
     ctx->data = NULL;
     ctx->retrieve_surrounding_func = NULL;
     ctx->retrieve_surrounding_data = NULL;
 +   ctx->input_panel_x = 0;
 +   ctx->input_panel_y = 0;
 +   ctx->input_panel_layout = ECORE_IMF_INPUT_PANEL_LAYOUT_NORMAL;
 +   ctx->input_panel_orient = ECORE_IMF_INPUT_PANEL_ORIENT_NONE;
 +   ctx->use_effect = EINA_TRUE;
 +   ctx->callbacks = NULL;
 +
     return ctx;
  }
  
@@@ -1253,667 -1235,3 +1254,667 @@@ ecore_imf_context_input_panel_enabled_g
     return ctx->input_panel_enabled;
  }
  
 +/**
 + * Set the specific data to pass to the input panel.
 + * this API is used by applications to deliver specific data to the input panel.
 + * the data format MUST be negotiated by both application and the input panel. 
 + *
 + * @param ctx An #Ecore_IMF_Context.
 + * @param data The specific data to be set to the input panel.
 + * @param len the length of data
 + * @ingroup Ecore_IMF_Context_IMControl_Group
 + * @since 1.1.0
 + */
 +EAPI void
 +ecore_imf_context_input_panel_imdata_set (Ecore_IMF_Context *ctx, const char *data, int len)
 +{
 +   if (!ECORE_MAGIC_CHECK(ctx, ECORE_MAGIC_CONTEXT))
 +     {
 +        ECORE_MAGIC_FAIL(ctx, ECORE_MAGIC_CONTEXT,
 +                         "ecore_imf_context_input_panel_imdata_set");
 +        return;
 +     }
 +
 +   if ((!data) || (len <=0)) return;
 +
 +   if (ctx->klass->input_panel_imdata_set)
 +     ctx->klass->input_panel_imdata_set(ctx, data, len);
 +}
 +
 +/**
 + * Get the specific data of the current active input panel.
 + *
 + * @param ctx An #Ecore_IMF_Context.
 + * @param data The specific data to be got from the input panel
 + * @param len The length of data
 + * @ingroup Ecore_IMF_Context_IMControl_Group
 + * @since 1.1.0
 + */
 +EAPI void
 +ecore_imf_context_input_panel_imdata_get (Ecore_IMF_Context *ctx, char *data, int *len)
 +{
 +   if (!ECORE_MAGIC_CHECK(ctx, ECORE_MAGIC_CONTEXT))
 +     {
 +        ECORE_MAGIC_FAIL(ctx, ECORE_MAGIC_CONTEXT,
 +                         "ecore_imf_context_input_panel_imdata_get");
 +        return;
 +     }
 +
 +   if (!data) return;
 +
 +   if (ctx->klass->input_panel_imdata_get)
 +     ctx->klass->input_panel_imdata_get(ctx, data, len);
 +}
 +
 +/**
 + * Get ISE Language of given ISE. -- Not supported for now --
 + * @ingroup Ecore_IMF_Context_IMControl_Group
 + */
 +EAPI int
 +ecore_imf_context_ise_get_ise_language (Ecore_IMF_Context *ctx, const char* ise_name, char ***langlist)
 +{
 +   if (!ECORE_MAGIC_CHECK(ctx, ECORE_MAGIC_CONTEXT))
 +     {
 +        ECORE_MAGIC_FAIL(ctx, ECORE_MAGIC_CONTEXT,
 +                         "ecore_imf_context_ise_get_ise_language");
 +        return -1;
 +     }
 +
 +   if (!ise_name) return -1;
 +
 +   if (ctx->klass->ise_get_ise_language)
 +       return ctx->klass->ise_get_ise_language(ctx, ise_name, langlist);
 +   else
 +      return -1;
 +}
 +
 +/**
 + * Set keyboard language.
 + *
 + * @param ctx An #Ecore_IMF_Context.
 + * @param lang see Ecore_IMF_Input_Panel_Lang
 + * @ingroup Ecore_IMF_Context_IMControl_Group
 + * THIS API IS NOT SUPPORTED NOW
 + * @since 1.1.0
 + */
 +EAPI void
 +ecore_imf_context_keyboard_language_set (Ecore_IMF_Context *ctx, Ecore_IMF_Keyboard_Lang lang)
 +{
 +   if (!ECORE_MAGIC_CHECK(ctx, ECORE_MAGIC_CONTEXT))
 +     {
 +        ECORE_MAGIC_FAIL(ctx, ECORE_MAGIC_CONTEXT,
 +                         "ecore_imf_context_keyboard_language_set");
 +        return;
 +     }
 +//   if (ctx->klass->ise_set_language) ctx->klass->ise_set_language(ctx, lang);
 +}
 +
 +/**
 + * Get keyboard language.
 + *
 + * @param ctx An #Ecore_IMF_Context.
 + * @return Ecore_IMF_Input_Panel_Lang
 + * @ingroup Ecore_IMF_Context_IMControl_Group
 + * THIS API IS NOT SUPPORTED NOW
 + * @since 1.1.0
 + */
 +EAPI Ecore_IMF_Keyboard_Lang
 +ecore_imf_context_keyboard_language_get (Ecore_IMF_Context *ctx)
 +{
 +   Ecore_IMF_Keyboard_Lang lang = ECORE_IMF_KEYBOARD_LANG_NATIVE;
 +
 +   if (!ECORE_MAGIC_CHECK(ctx, ECORE_MAGIC_CONTEXT))
 +     {
 +        ECORE_MAGIC_FAIL(ctx, ECORE_MAGIC_CONTEXT,
 +                         "ecore_imf_context_keyboard_language_get");
 +        return lang;
 +     }
 +/*
 +   if (ctx->klass->input_panel_language_get) 
 +     lang = ctx->klass->input_panel_language_get(ctx);
 +*/
 +   return lang;
 +}
 +
 +/**
 + * Set ISF Language. -- Not supported for now --
 + * @ingroup Ecore_IMF_Context_IMControl_Group
 + */
 +EAPI void
 +ecore_imf_context_ise_set_isf_language (Ecore_IMF_Context *ctx, const char* lang)
 +{
 +   if (!ECORE_MAGIC_CHECK(ctx, ECORE_MAGIC_CONTEXT))
 +     {
 +        ECORE_MAGIC_FAIL(ctx, ECORE_MAGIC_CONTEXT,
 +                         "ecore_imf_context_ise_set_isf_language");
 +        return;
 +     }
 +
 +   if (!lang) return;
 +
 +   if (ctx->klass->ise_set_isf_language)
 +      ctx->klass->ise_set_isf_language(ctx, lang);
 +}
 +
 +/**
 + * Set whether animation effect of the input panel is shown or not.
 + *
 + * @param ctx An #Ecore_IMF_Context.
 + * @param use_effect whether animation effect is shown or not
 + * @ingroup Ecore_IMF_Context_IMControl_Group
 + * @since 1.1.0
 + */
 +EAPI void
 +ecore_imf_context_input_panel_use_effect_set (Ecore_IMF_Context *ctx, Eina_Bool use_effect)
 +{
 +   if (!ECORE_MAGIC_CHECK(ctx, ECORE_MAGIC_CONTEXT))
 +     {
 +        ECORE_MAGIC_FAIL(ctx, ECORE_MAGIC_CONTEXT,
 +                         "ecore_imf_context_input_panel_use_effect_set");
 +        return;
 +     }
 +
 +   if (ctx->klass->input_panel_use_effect_set)
 +     ctx->klass->input_panel_use_effect_set(ctx, use_effect);
 +
 +   ctx->use_effect = use_effect;
 +}
 +
 +/**
 + * Get whether the input panel supports animation effect or not when it is shown or hidden.
 + *
 + * @param ctx An #Ecore_IMF_Context.
 + * @param use_effect whether animation effect is shown or not
 + * @ingroup Ecore_IMF_Context_IMControl_Group
 + * @since 1.1.0
 + */
 +EAPI Eina_Bool
 +ecore_imf_context_input_panel_use_effect_get (Ecore_IMF_Context *ctx)
 +{
 +   if (!ECORE_MAGIC_CHECK(ctx, ECORE_MAGIC_CONTEXT))
 +     {
 +        ECORE_MAGIC_FAIL(ctx, ECORE_MAGIC_CONTEXT,
 +                         "ecore_imf_context_input_panel_use_effect_get");
 +        return EINA_TRUE;
 +     }
 +
 +   return ctx->use_effect;
 +}
 +
 +/**
 + * Get the position of the current active input panel.
 + *
 + * @param ctx An #Ecore_IMF_Context.
 + * @param x top-left x co-ordinate of the input panel
 + * @param y top-left y co-ordinate of the input panel
 + * @param w width of the input panel
 + * @param h height of the input panel
 + * @ingroup Ecore_IMF_Context_IMControl_Group
 + * @since 1.1.0
 + */
 +EAPI void
 +ecore_imf_context_input_panel_geometry_get (Ecore_IMF_Context *ctx, int *x, int *y, int *w, int *h)
 +{
 +   if (!ECORE_MAGIC_CHECK(ctx, ECORE_MAGIC_CONTEXT))
 +     {
 +        ECORE_MAGIC_FAIL(ctx, ECORE_MAGIC_CONTEXT,
 +                         "ecore_imf_context_input_panel_geometry_get");
 +        return;
 +     }
 +
 +   if (ctx->klass->input_panel_geometry_get)
 +     ctx->klass->input_panel_geometry_get(ctx, x, y, w, h);
 +}
 +
 +/**
 + * Set the private key of input panel.
 + * Since the second parameter of this API requires a layout index, so before using this API 
 + * application has to set a specific layout and that layout index should 
 + * be passed in the 2nd argument of this API.
 + *
 + * @param ctx An #Ecore_IMF_Context.
 + * @param layout_index index of layout page to be set
 + * @param img_path the path of image file to be set
 + * @param key_index index of key to be set
 + * @param label text label to be appeared on private key
 + * @param value value of key, If NULL it will use original value of key
 + * @ingroup Ecore_IMF_Context_IMControl_Group
 + * @since 1.1.0
 + */
 +EAPI void
 +ecore_imf_context_input_panel_private_key_set (Ecore_IMF_Context *ctx, int layout_index, int key_index, const char *img_path, const char *label, int key_value, const char *key_string)
 +{
 +   Private_Key_Item *key_item;
 +   Eina_List *l;
 +   Eina_Bool exist = EINA_FALSE;
 +
 +   if (!ECORE_MAGIC_CHECK(ctx, ECORE_MAGIC_CONTEXT))
 +     {
 +        ECORE_MAGIC_FAIL(ctx, ECORE_MAGIC_CONTEXT,
 +                         "ecore_imf_context_input_panel_private_key_set");
 +        return;
 +     }
 +
 +   if ((!label) && (!img_path)) return;
 +
 +   EINA_LIST_FOREACH(ctx->private_key_list, l, key_item)
 +     {
 +        if (key_item && (key_item->layout_idx == layout_index) &&
 +            (key_item->key_idx == key_index))
 +          {
 +             // if exist in the list
 +             exist = EINA_TRUE;
 +             if (label)
 +               {
 +                  key_item->type = 0;
 +                  strcpy(key_item->data, label);
 +               }
 +             else
 +               {
 +                  key_item->type = 1;
 +                  strcpy(key_item->data, img_path);
 +               }
 +             key_item->key_value = key_value;
 +             strcpy(key_item->key_string, key_string);
 +          }
 +     }
 +
 +   if (!exist)
 +     {
 +        key_item = calloc(1, sizeof(Private_Key_Item));
 +        if (!key_item) return;
 +
 +        key_item->layout_idx = layout_index;
 +        key_item->key_idx = key_index;;
 +        if (label)
 +          {
 +             key_item->type = 0;
 +             strcpy(key_item->data, label);
 +          }
 +        else
 +          {
 +             key_item->type = 1;
 +             strcpy(key_item->data, img_path);
 +          }
 +        key_item->key_value = key_value;
 +
 +        if (key_string)
 +          strcpy(key_item->key_string, key_string);
 +
 +        ctx->private_key_list = eina_list_append(ctx->private_key_list, key_item);
 +     }
 +
 +//   if (ctx->klass->input_panel_private_key_set) ctx->klass->input_panel_private_key_set(ctx, layout_index, key_index, img_path, label, value);
 +}
 +
 +/**
 + * Get the list of private key.
 + *
 + * @param ctx An #Ecore_IMF_Context.
 + * @return Return the list of private key
 + * @ingroup Ecore_IMF_Context_IMControl_Group
 + * @since 1.1.0
 + */
 +EAPI Eina_List *
 +ecore_imf_context_input_panel_private_key_list_get  (Ecore_IMF_Context *ctx)
 +{
 +   if (!ECORE_MAGIC_CHECK(ctx, ECORE_MAGIC_CONTEXT))
 +     {
 +        ECORE_MAGIC_FAIL(ctx, ECORE_MAGIC_CONTEXT,
 +                         "ecore_imf_context_input_panel_private_key_list_get");
 +        return NULL;
 +     }
 +
 +   return ctx->private_key_list;
 +}
 +
 +/**
 + * Set the key to be disabled.
 + * Since the second parameter of this API requires a layout index, so before using this API application has to set a specific layout and that layout index 
 + * should be passed in the 2nd argument of this API.
 + *
 + * @param ctx An #Ecore_IMF_Context.
 + * @param layout_index index of layout page to be set
 + * @param key_index index of key to be set
 + * @param disabled The state
 + * @ingroup Ecore_IMF_Context_IMControl_Group
 + * @since 1.1.0
 + */
 +EAPI void
 +ecore_imf_context_input_panel_key_disabled_set (Ecore_IMF_Context *ctx, int layout_index, int key_index, Eina_Bool disabled)
 +{
 +   Disable_Key_Item *key_item;
 +   Eina_List *l;
 +   Eina_Bool exist = EINA_FALSE;
 +
 +   if (!ECORE_MAGIC_CHECK(ctx, ECORE_MAGIC_CONTEXT))
 +     {
 +        ECORE_MAGIC_FAIL(ctx, ECORE_MAGIC_CONTEXT,
 +                         "ecore_imf_context_input_panel_key_disabled_set");
 +        return;
 +     }
 +
 +   EINA_LIST_FOREACH(ctx->disabled_key_list, l, key_item)
 +     {
 +        if (key_item && (key_item->layout_idx == layout_index) &&
 +            (key_item->key_idx == key_index))
 +          {
 +             key_item->disabled = disabled;
 +             exist = EINA_TRUE;
 +          }
 +     }
 +
 +   if (!exist)
 +     {
 +        key_item = calloc(1, sizeof(Disable_Key_Item));
 +        if (!key_item) return;
 +
 +        key_item->layout_idx = layout_index;
 +        key_item->key_idx = key_index;;
 +        key_item->disabled = disabled;
 +
 +        ctx->disabled_key_list = eina_list_append(ctx->disabled_key_list, key_item);
 +     }
 +
 +//   if (ctx->klass->input_panel_key_disabled_set) ctx->klass->input_panel_key_disabled_set(ctx, layout_index, key_index, disabled);
 +}
 +
 +/**
 + * Get the list of disabled keys.
 + *
 + * @param ctx An #Ecore_IMF_Context.
 + * @return Return the list of private key
 + * @ingroup Ecore_IMF_Context_IMControl_Group
 + * @since 1.1.0
 + */
 +EAPI Eina_List *
 +ecore_imf_context_input_panel_key_disabled_list_get (Ecore_IMF_Context *ctx)
 +{
 +   return ctx->disabled_key_list;
 +}
 +
 +/**
 + * Restore all default properties of input panel.
 + *
 + * @param ctx An #Ecore_IMF_Context.
 + * @ingroup Ecore_IMF_Context_IMControl_Group
 + * @since 1.1.0
 + */
 +EAPI void
 +ecore_imf_context_input_panel_reset (Ecore_IMF_Context *ctx)
 +{
 +   if (!ECORE_MAGIC_CHECK(ctx, ECORE_MAGIC_CONTEXT))
 +     {
 +        ECORE_MAGIC_FAIL(ctx, ECORE_MAGIC_CONTEXT,
 +                         "ecore_imf_context_input_panel_reset");
 +        return;
 +     }
 +
 +   if (ctx->klass->input_panel_reset) ctx->klass->input_panel_reset(ctx);
 +}
 +
 +/**
 + * Set the screen orientation of input panel
 + * To show the keypad in landscape mode application should first call this API with 2nd parameter as 90 or 270.
 + * After then only application should call @ref ecore_imf_context_input_panel_show.
 + *
 + * @param ctx An #Ecore_IMF_Context.
 + * @param orientation the orientation of input panel
 + * @ingroup Ecore_IMF_Context_IMControl_Group
 + * @since 1.1.0
 + */
 +EAPI void
 +ecore_imf_context_input_panel_orient_set (Ecore_IMF_Context *ctx, Ecore_IMF_Input_Panel_Orient orientation)
 +{
 +   if (!ECORE_MAGIC_CHECK(ctx, ECORE_MAGIC_CONTEXT))
 +     {
 +        ECORE_MAGIC_FAIL(ctx, ECORE_MAGIC_CONTEXT,
 +                         "ecore_imf_context_input_panel_orient_set");
 +        return;
 +     }
 +
 +   if (ctx->klass->input_panel_orient_set)
 +      ctx->klass->input_panel_orient_set(ctx, orientation*90);
 +
 +   ctx->input_panel_orient = orientation;
 +}
 +
 +/**
 + * Get the screen orientation of input panel.
 + *
 + * @param ctx An #Ecore_IMF_Context.
 + * @return The screen orientation of input panel
 + * @ingroup Ecore_IMF_Context_IMControl_Group
 + * @since 1.1.0
 + */
 +EAPI Ecore_IMF_Input_Panel_Orient
 +ecore_imf_context_input_panel_orient_get (Ecore_IMF_Context *ctx)
 +{
 +   if (!ECORE_MAGIC_CHECK(ctx, ECORE_MAGIC_CONTEXT))
 +     {
 +        ECORE_MAGIC_FAIL(ctx, ECORE_MAGIC_CONTEXT,
 +                         "ecore_imf_context_input_panel_orient_get");
 +        return ECORE_IMF_INPUT_PANEL_ORIENT_NONE;
 +     }
 +
 +   return ctx->input_panel_orient;
 +}
 +
 +/**
 + * Get name of current active input panel.
 + *
 + * @param ctx An #Ecore_IMF_Context.
 + * @param name input panel name to be got
 + * @ingroup Ecore_IMF_Context_IMControl_Group
 + */
 +EAPI void
 +ecore_imf_context_ise_get_active_isename (Ecore_IMF_Context *ctx, char* name)
 +{
 +   if (!ECORE_MAGIC_CHECK(ctx, ECORE_MAGIC_CONTEXT))
 +     {
 +        ECORE_MAGIC_FAIL(ctx, ECORE_MAGIC_CONTEXT,
 +                         "ecore_imf_context_ise_get_active_isename");
 +        return;
 +     }
 +
 +   if (!name) return;
 +
 +   if (ctx->klass->ise_get_active_isename)
 +      ctx->klass->ise_get_active_isename(ctx, name);
 +}
 +
 +/**
 + * Choose the active input panel by its name.
 + *
 + * @param ctx An #Ecore_IMF_Context.
 + * @param name input panel name to be set
 + * @ingroup Ecore_IMF_Context_IMControl_Group
 + */
 +EAPI void
 +ecore_imf_context_ise_set_active_ise_by_name (Ecore_IMF_Context *ctx, const char* name)
 +{
 +   if (!ECORE_MAGIC_CHECK(ctx, ECORE_MAGIC_CONTEXT))
 +     {
 +        ECORE_MAGIC_FAIL(ctx, ECORE_MAGIC_CONTEXT,
 +                         "ecore_imf_context_ise_set_active_ise_by_name");
 +        return;
 +     }
 +
 +   if (!name) return;
 +
 +   if (ctx->klass->ise_set_active_ise_by_name)
 +      ctx->klass->ise_set_active_ise_by_name(ctx, name);
 +}
 +
 +/**
 + * Set input panel by its uuid.
 + *
 + * @param ctx An #Ecore_IMF_Context.
 + * @param uuid input panel uuid to be set
 + * @ingroup Ecore_IMF_Context_IMControl_Group
 + */
 +EAPI void
 +ecore_imf_context_ise_set_active_ise_by_uuid (Ecore_IMF_Context *ctx, const char* uuid)
 +{
 +   if (!ECORE_MAGIC_CHECK(ctx, ECORE_MAGIC_CONTEXT))
 +     {
 +        ECORE_MAGIC_FAIL(ctx, ECORE_MAGIC_CONTEXT,
 +                         "ecore_imf_context_ise_set_active_ise_by_uuid");
 +        return;
 +     }
 +
 +   if (!uuid) return;
 +
 +   if (ctx->klass->ise_set_active_ise_by_uuid)
 +      ctx->klass->ise_set_active_ise_by_uuid(ctx, uuid);
 +}
 +
 +/**
 + * Get list of input panels.
 + *
 + * @param ctx An #Ecore_IMF_Context.
 + * @param iselist pointer to the list to be got.
 + * @return  int ise counter of iselist
 + * @ingroup Ecore_IMF_Context_IMControl_Group
 + */
 +EAPI int
 +ecore_imf_context_ise_get_iselist (Ecore_IMF_Context *ctx, char*** iselist)
 +{
 +   if (!ECORE_MAGIC_CHECK(ctx, ECORE_MAGIC_CONTEXT))
 +     {
 +        ECORE_MAGIC_FAIL(ctx, ECORE_MAGIC_CONTEXT,
 +                         "ecore_imf_context_ise_get_iselist");
 +        return -1;
 +     }
 +
 +   if (ctx->klass->ise_get_iselist)
 +      return ctx->klass->ise_get_iselist(ctx, iselist);
 +   else
 +      return -1;
 +}
 +
 +/**
 + * Get state of current active input panel.
 + *
 + * @param ctx An #Ecore_IMF_Context.
 + * @param The state of input panel.
 + * @ingroup Ecore_IMF_Context_IMControl_Group
 + * @since 1.1.0
 + */
 +EAPI Ecore_IMF_Input_Panel_State
 +ecore_imf_context_input_panel_state_get (Ecore_IMF_Context *ctx)
 +{
 +   Ecore_IMF_Input_Panel_State state = ECORE_IMF_INPUT_PANEL_STATE_INVALID;
 +   if (!ECORE_MAGIC_CHECK(ctx, ECORE_MAGIC_CONTEXT))
 +     {
 +        ECORE_MAGIC_FAIL(ctx, ECORE_MAGIC_CONTEXT,
 +                         "ecore_imf_context_input_panel_state_get");
 +        return ECORE_IMF_INPUT_PANEL_STATE_INVALID;
 +     }
 +
 +   if (ctx->klass->input_panel_state_get)
 +     state = ctx->klass->input_panel_state_get(ctx);
 +
 +   return state;
 +}
 +
 +/**
 + * Register a callback function which will be called if there is change in input panel state,language,mode etc.
 + * In order to deregister the callback function 
 + * Use @ref ecore_imf_context_input_panel_event_callback_del.
 + *
 + * @param ctx An #Ecore_IMF_Context
 + * @param type event type
 + * @param func the callback function
 + * @param data application-input panel specific data.
 + * @ingroup Ecore_IMF_Context_IMControl_Group
 + * @since 1.1.0
 + */
 +EAPI void
 +ecore_imf_context_input_panel_event_callback_add (Ecore_IMF_Context *ctx,
 +                                                  Ecore_IMF_Input_Panel_Event type,
 +                                                  void (*func) (void *data, Ecore_IMF_Context *ctx, int value),
 +                                                  const void *data)
 +{
 +   if (!ECORE_MAGIC_CHECK(ctx, ECORE_MAGIC_CONTEXT))
 +     {
 +        ECORE_MAGIC_FAIL(ctx, ECORE_MAGIC_CONTEXT,
 +                         "ecore_imf_context_input_panel_event_callback_add");
 +        return;
 +     }
 +
 +   if (ctx->klass->input_panel_event_callback_add)
 +     ctx->klass->input_panel_event_callback_add(ctx, type, func, data);
 +}
 +
 +/**
 + * Unregister a callback function which will be called if there is change in input panel state, language, mode etc.
 + *
 + * @param ctx An #Ecore_IMF_Context.
 + * @param func the callback function
 + * @param data application-input panel specific data.
 + * @ingroup Ecore_IMF_Context_IMControl_Group
 + * @since 1.1.0
 + */
 +EAPI void
 +ecore_imf_context_input_panel_event_callback_del (Ecore_IMF_Context *ctx,
 +                                                  Ecore_IMF_Input_Panel_Event type,
 +                                                  void (*func) (void *data, Ecore_IMF_Context *ctx, int value))
 +{
 +   if (!ECORE_MAGIC_CHECK(ctx, ECORE_MAGIC_CONTEXT))
 +     {
 +        ECORE_MAGIC_FAIL(ctx, ECORE_MAGIC_CONTEXT,
 +                         "ecore_imf_context_input_panel_event_callback_del");
 +        return;
 +     }
 +
 +   if (ctx->klass->input_panel_event_callback_del)
 +     ctx->klass->input_panel_event_callback_del(ctx, type, func);
 +}
 +
 +/**
 + * Move the soft keyboard to the new position.
 + *
 + * @param ctx An #Ecore_IMF_Context.
 + * @param x X position to move the input panel to
 + * @param y Y position to move the input panel to
 + * @ingroup Ecore_IMF_Context_IMControl_Group
 + * @since 1.1.0
 + */
 +EAPI void
 +ecore_imf_context_input_panel_move (Ecore_IMF_Context *ctx, int x, int y)
 +{
 +   if (!ECORE_MAGIC_CHECK(ctx, ECORE_MAGIC_CONTEXT))
 +     {
 +        ECORE_MAGIC_FAIL(ctx, ECORE_MAGIC_CONTEXT,
 +                         "ecore_imf_context_input_panel_move");
 +        return;
 +     }
 +
 +   if (ctx->klass->input_panel_move) ctx->klass->input_panel_move(ctx, x, y);
 +   ctx->input_panel_x = x;
 +   ctx->input_panel_y = y;
 +}
 +
 +/**
 + * Set the caps mode of the input panel.
 + *
 + * @param ctx An #Ecore_IMF_Context.
 + * @param mode the caps mode
 + * @ingroup Ecore_IMF_Context_IMControl_Group
 + * @since 1.1.0
 + */
 +EAPI void
 +ecore_imf_context_input_panel_caps_mode_set (Ecore_IMF_Context *ctx,
 +                                             Ecore_IMF_Input_Panel_Caps_Mode mode)
 +{
 +   if (!ECORE_MAGIC_CHECK(ctx, ECORE_MAGIC_CONTEXT))
 +     {
 +        ECORE_MAGIC_FAIL(ctx, ECORE_MAGIC_CONTEXT,
 +                         "ecore_imf_context_input_panel_caps_mode_set");
 +        return;
 +     }
 +
 +   if (ctx->klass->input_panel_caps_mode_set)
 +     ctx->klass->input_panel_caps_mode_set(ctx, mode);
 +}
index 630e11b,05f7e9f..a06136e
mode 100755,100644..100755
@@@ -371,6 -371,7 +371,7 @@@ typedef struct _Ecore_X_Event_Window_Ma
  typedef struct _Ecore_X_Event_Selection_Clear     Ecore_X_Event_Selection_Clear;
  typedef struct _Ecore_X_Event_Selection_Request   Ecore_X_Event_Selection_Request;
  typedef struct _Ecore_X_Event_Selection_Notify    Ecore_X_Event_Selection_Notify;
+ typedef struct _Ecore_X_Event_Fixes_Selection_Notify    Ecore_X_Event_Fixes_Selection_Notify;
  typedef struct _Ecore_X_Selection_Data            Ecore_X_Selection_Data;
  typedef struct _Ecore_X_Selection_Data_Files      Ecore_X_Selection_Data_Files;
  typedef struct _Ecore_X_Selection_Data_Text       Ecore_X_Selection_Data_Text;
@@@ -617,6 -618,24 +618,24 @@@ struct _Ecore_X_Event_Selection_Reques
     Ecore_X_Atom   property;
  };
  
+ typedef enum
+ {
+    ECORE_X_OWNER_CHANGE_REASON_NEW_OWNER,
+    ECORE_X_OWNER_CHANGE_REASON_DESTROY,
+    ECORE_X_OWNER_CHANGE_REASON_CLOSE
+ } Ecore_X_Owner_Change_Reason;
+ struct _Ecore_X_Event_Fixes_Selection_Notify
+ {
+    Ecore_X_Window    win;
+    Ecore_X_Window    owner;
+    Ecore_X_Time      time;
+    Ecore_X_Time      selection_time;
+    Ecore_X_Selection selection;
+    Ecore_X_Atom      atom;
+    Ecore_X_Owner_Change_Reason reason;
+ };
  struct _Ecore_X_Event_Selection_Notify
  {
     Ecore_X_Window    win;
@@@ -817,64 -836,7 +836,64 @@@ struct _Ecore_X_Event_Window_Delete_Req
     Ecore_X_Window win;
     Ecore_X_Time   time;
  };
 -  
 +
 +struct _Ecore_X_Event_Window_Prop_Title_Change
 +{
 +   Ecore_X_Window win;
 +   char          *title;
 +   Ecore_X_Time   time;
 +};
 +
 +struct _Ecore_X_Event_Window_Prop_Visible_Title_Change
 +{
 +   Ecore_X_Window win;
 +   char          *title;
 +   Ecore_X_Time   time;
 +};
 +
 +struct _Ecore_X_Event_Window_Prop_Icon_Name_Change
 +{
 +   Ecore_X_Window win;
 +   char          *name;
 +   Ecore_X_Time   time;
 +};
 +
 +struct _Ecore_X_Event_Window_Prop_Visible_Icon_Name_Change
 +{
 +   Ecore_X_Window win;
 +   char          *name;
 +   Ecore_X_Time   time;
 +};
 +
 +struct _Ecore_X_Event_Window_Prop_Client_Machine_Change
 +{
 +   Ecore_X_Window win;
 +   char          *name;
 +   Ecore_X_Time   time;
 +};
 +
 +struct _Ecore_X_Event_Window_Prop_Name_Class_Change
 +{
 +   Ecore_X_Window win;
 +   char          *name;
 +   char          *clas;
 +   Ecore_X_Time   time;
 +};
 +
 +struct _Ecore_X_Event_Window_Prop_Pid_Change
 +{
 +   Ecore_X_Window win;
 +   pid_t          pid;
 +   Ecore_X_Time   time;
 +};
 +
 +struct _Ecore_X_Event_Window_Prop_Desktop_Change
 +{
 +   Ecore_X_Window win;
 +   long           desktop;
 +   Ecore_X_Time   time;
 +};
 +
  struct _Ecore_X_Event_Startup_Sequence
  {
     Ecore_X_Window win;
@@@ -955,6 -917,7 +974,7 @@@ EAPI extern int ECORE_X_EVENT_MAPPING_C
  EAPI extern int ECORE_X_EVENT_SELECTION_CLEAR;
  EAPI extern int ECORE_X_EVENT_SELECTION_REQUEST;
  EAPI extern int ECORE_X_EVENT_SELECTION_NOTIFY;
+ EAPI extern int ECORE_X_EVENT_FIXES_SELECTION_NOTIFY;
  EAPI extern int ECORE_X_EVENT_CLIENT_MESSAGE;
  EAPI extern int ECORE_X_EVENT_WINDOW_SHAPE;
  EAPI extern int ECORE_X_EVENT_SCREENSAVER_NOTIFY;
@@@ -1535,11 -1498,6 +1555,11 @@@ EAPI void                     ecore_x_w
     Ecore_X_Window shape_win,
     int            x,
     int            y);
 +EAPI void                     ecore_x_window_shape_window_set_xy(
 +   Ecore_X_Window win,
 +   Ecore_X_Window shape_win,
 +   int            x,
 +   int            y);
  EAPI void                     ecore_x_window_shape_rectangle_set(
     Ecore_X_Window win,
     int            x,
@@@ -2252,25 -2210,6 +2272,25 @@@ EAPI voi
                                            ecore_x_e_illume_quickpanel_position_update_send(
     Ecore_X_Window win);
  
 +/* added by doyoun.kang - for sliding window */
 +EAPI void                                 ecore_x_e_illume_sliding_win_state_set(
 +   Ecore_X_Window win,
 +   unsigned int   is_visible);
 +EAPI int                                  ecore_x_e_illume_sliding_win_state_get(
 +   Ecore_X_Window win);
 +EAPI void                                 ecore_x_e_illume_sliding_win_geometry_set(
 +   Ecore_X_Window win, 
 +   int            x,
 +   int            y,
 +   int            w,
 +   int            h);
 +EAPI int                                  ecore_x_e_illume_sliding_win_geometry_get(
 +   Ecore_X_Window win,
 +   int           *x,
 +   int           *y,
 +   int           *w,
 +   int           *h);
 +
  EAPI void                                 ecore_x_e_comp_sync_counter_set(
     Ecore_X_Window       win,
     Ecore_X_Sync_Counter counter);
@@@ -2306,9 -2245,6 +2326,9 @@@ EAPI voi
  EAPI Ecore_X_Pixmap                       ecore_x_e_comp_pixmap_get(
     Ecore_X_Window win);
  
 +EAPI void                 ecore_x_e_comp_dri_buff_flip_supported_set(Ecore_X_Window root, Eina_Bool enabled);
 +EAPI Eina_Bool            ecore_x_e_comp_dri_buff_flip_supported_get(Ecore_X_Window root);
 +  
  EAPI Ecore_X_Sync_Alarm                   ecore_x_sync_alarm_new(
     Ecore_X_Sync_Counter counter);
  EAPI Eina_Bool                            ecore_x_sync_alarm_free(
@@@ -3086,6 -3022,16 +3106,16 @@@ EAPI void                   ecore_x_reg
                                                              int             x_origin,
                                                              int             y_origin);
  
+ /**
+  * xfixes selection notification request.
+  *
+  * This lets you choose which selections you want to get notifications for.
+  * @param selection the selection atom.
+  * @return EINA_TRUE on success, EINA_FALSE otherwise.
+  * @since 1.1.0
+  */
+ EAPI Eina_Bool              ecore_x_fixes_selection_notification_request(Ecore_X_Atom selection);
  /* XComposite Extension Support */
  EAPI Eina_Bool              ecore_x_composite_query(void);
  EAPI void                   ecore_x_composite_redirect_window(Ecore_X_Window                win,