add TCs and seperate some APIs to utilx_ext.h 42/30142/2
authorBoram Park <boram1288.park@samsung.com>
Wed, 12 Nov 2014 03:56:11 +0000 (12:56 +0900)
committerBoram Park <boram1288.park@samsung.com>
Wed, 12 Nov 2014 03:56:46 +0000 (12:56 +0900)
  - sync with tizen 2.3

Change-Id: I8cd2227d9e0ca35684323594ddfddf97449ab3de

17 files changed:
CMakeLists.txt
TC/_export_env.sh
TC/config
TC/testcase/Makefile
TC/testcase/tslist
TC/testcase/utc_utilx_key_grab_test.c [new file with mode: 0644]
TC/testcase/utc_utilx_notification_level_test.c [new file with mode: 0644]
TC/testcase/utc_utilx_opaque_test.c [new file with mode: 0644]
TC/testcase/utc_utilx_screen_shot_test.c [new file with mode: 0644]
TC/testcase/utc_utilx_test.c [deleted file]
doc/ui_utilx_doc.h [new file with mode: 0644]
packaging/libslp-utilx.spec
utilX.h [changed mode: 0644->0755]
utilX.pc [new file with mode: 0644]
utilX.pc.in
utilX_ext.h [new file with mode: 0644]
x11.c

index 1ee52d7..d0baa57 100644 (file)
@@ -2,10 +2,11 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
 PROJECT(utilX C)
 
 SET(SRCS x11.c)
-SET(HEADERS utilX.h)
+SET(HEADERS utilX.h utilX_ext.h)
 
 SET(PREFIX ${CMAKE_INSTALL_PREFIX})
 SET(EXEC_PREFIX "\${prefix}")
+SET(LIBDIR "\${prefix}/lib")
 SET(INCLUDEDIR "\${prefix}/include")
 SET(VERSION_MAJOR 1)
 SET(VERSION "${VERSION_MAJOR}.1.0")
@@ -36,8 +37,8 @@ SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES VERSION ${VERSION})
 
 CONFIGURE_FILE(${PROJECT_NAME}.pc.in ${PROJECT_NAME}.pc @ONLY)
 
-INSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${LIB_INSTALL_DIR} COMPONENT RuntimeLibraries)
-INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc DESTINATION ${LIB_INSTALL_DIR}/pkgconfig)
+INSTALL(TARGETS ${PROJECT_NAME} DESTINATION lib COMPONENT RuntimeLibraries)
+INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc DESTINATION lib/pkgconfig)
 
 FOREACH(hfile ${HEADERS})
        INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/${hfile} DESTINATION include)
index 72a11ec..467c30b 100755 (executable)
@@ -1,6 +1,7 @@
 #!/bin/sh
 
-. ./config
+source ./config
+
 export TET_INSTALL_PATH=$TET_INSTALL_HOST_PATH # tetware root path
 export TET_TARGET_PATH=$TET_INSTALL_PATH/tetware-target # tetware target path
 export PATH=$TET_TARGET_PATH/bin:$PATH
index c7eae66..dc96c8d 100755 (executable)
--- a/TC/config
+++ b/TC/config
@@ -1,2 +1,3 @@
-TET_INSTALL_HOST_PATH=/home/nfs_mount/TETware
-TET_INSTALL_TARGET_PATH=/mnt/nfs/TETware
+PKG_NAME=utilX
+TET_INSTALL_HOST_PATH=/var/tmp/dts_fw/TC/TETware
+TET_INSTALL_TARGET_PATH=/opt/home/$PKG_NAME/TETware
index dbbc399..0982f06 100755 (executable)
@@ -1,20 +1,21 @@
-CC = gcc
+include ../config
 
-C_FILES = $(shell ls *.c)
+CC ?= gcc
 
-PKGS = elementary ecore-x ecore evas x11 dlog glib-2.0 utilX
+C_FILES = $(shell ls *.c)
 
+PKGS = $(PKG_NAME)
+PKGS += glib-2.0
+PKGS += ecore-x ecore-evas x11 ecore
+LDFLAGS = `pkg-config --libs $(PKGS)`
 LDFLAGS += $(TET_ROOT)/lib/tet3/tcm_s.o
 LDFLAGS += -L$(TET_ROOT)/lib/tet3 -ltcm_s
 LDFLAGS += -L$(TET_ROOT)/lib/tet3 -lapi_s
-LDFLAGS += `pkg-config --libs $(PKGS)`
 
-CFLAGS += `pkg-config --cflags $(PKGS)`
-CFLAGS += -I.
+CFLAGS = -I. `pkg-config --cflags $(PKGS)`
 CFLAGS += -I$(TET_ROOT)/inc/tet3
 CFLAGS += -Wall
 
-#TARGETS = $(C_FILES:%.c=tc-%)
 TCS := $(shell ls -1 *.c | cut -d. -f1)
 
 all: $(TCS)
index 81af698..4caa7d1 100755 (executable)
@@ -1 +1,5 @@
-/testcase/utc_utilx_test
+/testcase/utc_utilx_key_grab_test
+/testcase/utc_utilx_notification_level_test
+/testcase/utc_utilx_screen_shot_test
+/testcase/utc_utilx_opaque_test
+
diff --git a/TC/testcase/utc_utilx_key_grab_test.c b/TC/testcase/utc_utilx_key_grab_test.c
new file mode 100644 (file)
index 0000000..7f7bbb4
--- /dev/null
@@ -0,0 +1,251 @@
+/*
+ * Copyright (c) 2012 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <tet_api.h>
+#include <X11/Xlib.h>
+#include <Ecore_X.h>
+#include <utilX.h>
+#include <Ecore_Evas.h>
+#include <sys/types.h>
+#include <X11/X.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_utilx_grab_key_excl_p(void);
+static void utc_utilx_grab_key_top_p(void);
+static void utc_utilx_grab_key_share_p(void);
+static void utc_utilx_grab_key_excl_n(void);
+static void utc_utilx_grab_key_top_n(void);
+static void utc_utilx_grab_key_share_n(void);
+static void utc_utilx_ungrab_key_p(void);
+static void utc_utilx_ungrab_key_n(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_utilx_grab_key_excl_p, 1 },
+       { utc_utilx_grab_key_top_p, 1 },
+       { utc_utilx_grab_key_share_p, 1 },
+       { utc_utilx_grab_key_excl_n, 1 },
+       { utc_utilx_grab_key_top_n, 1 },
+       { utc_utilx_grab_key_share_n, 1 },
+       { utc_utilx_ungrab_key_p, 1 },
+       { utc_utilx_ungrab_key_n, 1 },
+       // Do not remove below line
+       { NULL, 0 }
+};
+
+Ecore_Evas *ee;
+Ecore_X_Display *disp;
+Ecore_X_Window win;
+
+static void startup(void)
+{
+       /* start of TC */
+       if(!ecore_init()){
+               dts_fail("utilx_grab_key", "failed ecore_init");
+       }
+       if(!ecore_evas_init()){
+               dts_fail("utilx_grab_key", "failed ecore_evas_init");
+       }
+
+       ee = ecore_evas_software_x11_new(NULL, 0, 0, 0, 720, 1280);
+       if(!ee){
+               dts_fail("utilx_grab_key", "failed to make window");
+       }
+       ecore_evas_title_set(ee, "Ecore_Evas Template");
+       ecore_evas_borderless_set(ee, 0);
+       ecore_evas_show(ee);
+
+       disp = ecore_x_display_get();
+       if(!disp){
+               dts_fail("utilx_grab_key", "failed to get display");
+       }
+
+       win = ecore_evas_software_x11_window_get(ee);
+       if(!win){
+               dts_fail("utilx_grab_key", "failed to get ecore_x_window");
+       }
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+       ecore_evas_shutdown();
+       ecore_shutdown();
+}
+
+
+/**
+ * @brief test case of utilx_grab_key() / utilx_ungrab_key()
+ */
+
+static void utc_utilx_grab_key_excl_p(void)
+{
+       int grab_result;
+       int ungrab_result;
+
+       grab_result = utilx_grab_key(disp, win, KEY_MEDIA, EXCLUSIVE_GRAB);
+       if( grab_result == 0 )
+       {
+               dts_pass("utilx_grab_key", "passed");
+               ungrab_result = utilx_ungrab_key(disp, win, KEY_MEDIA);
+               if( ungrab_result != 0)
+                       dts_fail("utilx_grab_key", "ungrab failed");
+       }
+       else
+       {
+               dts_fail("utilx_grab_key", "failed");
+       }
+}
+
+static void utc_utilx_grab_key_top_p(void)
+{
+       int grab_result;
+       int ungrab_result;
+
+       grab_result = utilx_grab_key(disp, win, KEY_STOPCD, TOP_POSITION_GRAB);
+       if( grab_result == 0 )
+       {
+               dts_pass("utilx_grab_key", "passed");
+               ungrab_result = utilx_ungrab_key(disp, win, KEY_STOPCD);
+               if( ungrab_result != 0)
+                       dts_fail("utilx_grab_key", "ungrab failed");
+
+       }
+       else
+       {
+               dts_fail("utilx_grab_key", "failed");
+       }
+}
+
+static void utc_utilx_grab_key_share_p(void)
+{
+       int grab_result;
+       int ungrab_result;
+
+       grab_result = utilx_grab_key(disp, win, KEY_STOPCD, SHARED_GRAB);
+       if( grab_result == 0 )
+       {
+               dts_pass("utilx_grab_key", "passed");
+               ungrab_result = utilx_ungrab_key(disp, win, KEY_STOPCD);
+               if( ungrab_result != 0)
+                       dts_fail("utilx_grab_key", "ungrab failed");
+       }
+       else
+       {
+               dts_fail("utilx_grab_key", "failed");
+       }
+}
+
+static void utc_utilx_grab_key_excl_n(void)
+{
+       int grab_result;
+       int ungrab_result;
+
+       grab_result = utilx_grab_key(NULL, win, KEY_STOPCD, EXCLUSIVE_GRAB);
+       if( grab_result != 0 )
+       {
+               dts_pass("utilx_grab_key", "passed");
+       }
+       else
+       {
+               dts_fail("utilx_grab_key", "failed");
+               ungrab_result = utilx_ungrab_key(disp, win, KEY_STOPCD);
+               if( ungrab_result != 0)
+                       dts_fail("utilx_grab_key", "ungrab failed");
+
+       }
+}
+
+static void utc_utilx_grab_key_top_n(void)
+{
+       int grab_result;
+       int ungrab_result;
+
+       grab_result = utilx_grab_key(NULL, win, KEY_STOPCD, TOP_POSITION_GRAB);
+       if( grab_result != 0 )
+       {
+               dts_pass("utilx_grab_key", "passed");
+       }
+       else
+       {
+               dts_fail("utilx_grab_key", "failed");
+               ungrab_result = utilx_ungrab_key(disp, win, KEY_STOPCD);
+               if( ungrab_result != 0)
+                       dts_fail("utilx_grab_key", "ungrab failed");
+
+       }
+}
+
+static void utc_utilx_grab_key_share_n(void)
+{
+       int grab_result;
+       int ungrab_result;
+
+       grab_result = utilx_grab_key(NULL, win, KEY_STOPCD, SHARED_GRAB);
+       if( grab_result != 0 )
+       {
+               dts_pass("utilx_grab_key", "passed");
+       }
+       else
+       {
+               dts_fail("utilx_grab_key", "failed");
+               ungrab_result = utilx_ungrab_key(disp, win, KEY_STOPCD);
+               if( ungrab_result != 0)
+                       dts_fail("utilx_grab_key", "ungrab failed");
+
+       }
+}
+
+static void utc_utilx_ungrab_key_p(void)
+{
+       int grab_result;
+       int ungrab_result;
+
+       grab_result = utilx_grab_key(disp, win, KEY_STOPCD, SHARED_GRAB);
+       if( grab_result != 0 ){
+               dts_fail("utilx_ungrab_key", "failed to grab the key");
+       }
+
+       ungrab_result = utilx_ungrab_key(disp, win, KEY_STOPCD);
+       if(ungrab_result == 0)
+       {
+               dts_pass("utilx_ungrab_key", "passed");
+       }
+       else
+       {
+               dts_fail("utilx_ungrab_key", "failed");
+       }
+}
+
+static void utc_utilx_ungrab_key_n(void)
+{
+       int grab_result;
+       int ungrab_result;
+
+       ungrab_result = utilx_ungrab_key(NULL, win, KEY_STOPCD);
+       if(ungrab_result != 0)
+       {
+               dts_pass("utilx_ungrab_key", "passed");
+       }
+       else
+       {
+               dts_fail("utilx_ungrab_key", "failed");
+       }
+}
diff --git a/TC/testcase/utc_utilx_notification_level_test.c b/TC/testcase/utc_utilx_notification_level_test.c
new file mode 100644 (file)
index 0000000..cd97990
--- /dev/null
@@ -0,0 +1,214 @@
+/*
+ * Copyright (c) 2012 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <tet_api.h>
+#include <X11/Xlib.h>
+#include <Ecore_X.h>
+#include <utilX.h>
+#include <Ecore_Evas.h>
+#include <sys/types.h>
+#include <X11/X.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_utilx_system_notification_level_test_positive_1(void);
+static void utc_utilx_system_notification_level_test_positive_2(void);
+static void utc_utilx_system_notification_level_test_positive_3(void);
+static void utc_utilx_system_notification_level_test_positive_4(void);
+static void utc_utilx_system_notification_level_test_negative_1(void);
+static void utc_utilx_system_notification_level_test_negative_2(void);
+
+
+struct tet_testlist tet_testlist[] = {
+       { utc_utilx_system_notification_level_test_positive_1, 1 },
+       { utc_utilx_system_notification_level_test_positive_2, 1 },
+       { utc_utilx_system_notification_level_test_positive_3, 1 },
+       { utc_utilx_system_notification_level_test_positive_4, 1 },
+       { utc_utilx_system_notification_level_test_negative_1, 1 },
+       { utc_utilx_system_notification_level_test_negative_2, 1 },
+       // Do not remove below line
+       { NULL, 0 },
+};
+
+Display* dpy;
+Window root, win;
+
+static void startup(void)
+{
+       /* start of TC */
+       tet_printf("\n TC start");
+
+       dpy = XOpenDisplay(NULL);
+       root = XDefaultRootWindow(dpy);
+
+       win = XCreateSimpleWindow(dpy, root, 0, 0, 480, 800, 2, BlackPixel(dpy,0), WhitePixel(dpy,0));
+       XMapWindow(dpy, win);
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+       tet_printf("\n TC end");
+
+       XDestroyWindow(dpy, win);
+       XCloseDisplay(dpy);
+}
+
+/**
+ * @brief test case of utc_utilx_system_notification_level_test_positive_1()
+ */
+static void utc_utilx_system_notification_level_test_positive_1(void)
+{
+       Utilx_Notification_Level level = UTILX_NOTIFICATION_LEVEL_HIGH;
+
+       utilx_set_system_notification_level(dpy, win, UTILX_NOTIFICATION_LEVEL_LOW);
+       XFlush(dpy);
+
+       level = utilx_get_system_notification_level(dpy, win);
+
+       if (level == UTILX_NOTIFICATION_LEVEL_LOW)
+       {
+               dts_pass("utc_utilx_system_notification_level_test_positive_1", "passed");
+       }
+       else
+       {
+               dts_fail("utc_utilx_system_notification_level_test_positive_1", "failed");
+       }
+}
+
+
+/**
+ * @brief test case of utc_utilx_system_notification_level_test_positive_2()
+ */
+static void utc_utilx_system_notification_level_test_positive_2(void)
+{
+       Utilx_Notification_Level level = UTILX_NOTIFICATION_LEVEL_HIGH;
+
+       utilx_set_system_notification_level(dpy, win, UTILX_NOTIFICATION_LEVEL_NORMAL);
+       XFlush(dpy);
+
+       level = utilx_get_system_notification_level(dpy, win);
+
+       if (level == UTILX_NOTIFICATION_LEVEL_NORMAL)
+       {
+               dts_pass("utc_utilx_system_notification_level_test_positive_2", "passed");
+       }
+       else
+       {
+               dts_fail("utc_utilx_system_notification_level_test_positive_2", "failed");
+       }
+}
+
+
+/**
+ * @brief test case of utc_utilx_system_notification_level_test_positive_3()
+ */
+static void utc_utilx_system_notification_level_test_positive_3(void)
+{
+       Utilx_Notification_Level level = UTILX_NOTIFICATION_LEVEL_NORMAL;
+
+       utilx_set_system_notification_level(dpy, win, UTILX_NOTIFICATION_LEVEL_HIGH);
+       XFlush(dpy);
+
+       level = utilx_get_system_notification_level(dpy, win);
+
+       if (level == UTILX_NOTIFICATION_LEVEL_HIGH)
+       {
+               dts_pass("utc_utilx_system_notification_level_test_positive_3", "passed");
+       }
+       else
+       {
+               dts_fail("utc_utilx_system_notification_level_test_positive_3", "failed");
+       }
+}
+
+
+/**
+ * @brief test case of utc_utilx_system_notification_level_test_positive_4()
+ */
+static void utc_utilx_system_notification_level_test_positive_4(void)
+{
+       Utilx_Notification_Level level = UTILX_NOTIFICATION_LEVEL_HIGH;
+
+       utilx_set_system_notification_level(dpy, win, 100);
+       XFlush(dpy);
+
+       level = utilx_get_system_notification_level(dpy, win);
+
+       if (level == UTILX_NOTIFICATION_LEVEL_LOW)
+       {
+               dts_pass("utc_utilx_system_notification_level_test_positive_4", "passed");
+       }
+       else
+       {
+               dts_fail("utc_utilx_system_notification_level_test_positive_4", "failed");
+       }
+}
+
+
+/**
+ * @brief test case of utc_utilx_system_notification_level_test_negative_1()
+ */
+static void utc_utilx_system_notification_level_test_negative_1(void)
+{
+       Ecore_X_Display *dpy2 = NULL;
+       Utilx_Notification_Level level = UTILX_NOTIFICATION_LEVEL_HIGH;
+
+       // invalid display parameter
+       utilx_set_system_notification_level(dpy2, win, UTILX_NOTIFICATION_LEVEL_NORMAL);
+       XFlush(dpy);
+
+       level = utilx_get_system_notification_level(dpy, win);
+
+       if (level == UTILX_NOTIFICATION_LEVEL_LOW)
+       {
+               dts_pass("utc_utilx_system_notification_level_test_negative_1", "passed");
+       }
+       else
+       {
+               dts_fail("utc_utilx_system_notification_level_test_negative_1", "failed");
+       }
+}
+
+
+/**
+ * @brief test case of utc_utilx_system_notification_level_test_negative_2()
+ */
+static void utc_utilx_system_notification_level_test_negative_2(void)
+{
+       Ecore_X_Display *dpy2 = NULL;
+       Utilx_Notification_Level level = UTILX_NOTIFICATION_LEVEL_HIGH;
+
+       utilx_set_system_notification_level(dpy, win, UTILX_NOTIFICATION_LEVEL_NORMAL);
+       XFlush(dpy);
+
+       // invalid display parameter
+       level = utilx_get_system_notification_level(dpy2, win);
+
+       if (level == UTILX_NOTIFICATION_LEVEL_LOW)
+       {
+               dts_pass("utc_utilx_system_notification_level_test_negative_2", "passed");
+       }
+       else
+       {
+               dts_fail("utc_utilx_system_notification_level_test_negative_2", "failed");
+       }
+}
+
diff --git a/TC/testcase/utc_utilx_opaque_test.c b/TC/testcase/utc_utilx_opaque_test.c
new file mode 100644 (file)
index 0000000..e09d4a6
--- /dev/null
@@ -0,0 +1,153 @@
+/*
+ * Copyright (c) 2012 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <tet_api.h>
+#include <X11/Xlib.h>
+#include <Ecore_X.h>
+#include <utilX.h>
+
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_utilx_window_opaque_state_test_positive_1(void);
+static void utc_utilx_window_opaque_state_test_positive_2(void);
+static void utc_utilx_window_opaque_state_test_negative_1(void);
+static void utc_utilx_window_opaque_state_test_negative_2(void);
+
+
+struct tet_testlist tet_testlist[] = {
+       { utc_utilx_window_opaque_state_test_positive_1, 1 },
+       { utc_utilx_window_opaque_state_test_positive_2, 1 },
+       { utc_utilx_window_opaque_state_test_negative_1, 1 },
+       { utc_utilx_window_opaque_state_test_negative_2, 1 },
+       // Do not remove below line
+       { NULL, 0 },
+};
+
+Display* dpy;
+Window root, win;
+
+static void startup(void)
+{
+       /* start of TC */
+       tet_printf("\n TC start");
+
+       dpy = XOpenDisplay(NULL);
+       root = XDefaultRootWindow(dpy);
+
+       win = XCreateSimpleWindow(dpy, root, 0, 0, 480, 800, 2, BlackPixel(dpy,0), WhitePixel(dpy,0));
+       XMapWindow(dpy, win);
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+       tet_printf("\n TC end");
+
+       XDestroyWindow(dpy, win);
+       XCloseDisplay(dpy);
+}
+
+
+/**
+ * @brief test case of utc_utilx_window_opaque_state_test_positive_1()
+ */
+static void utc_utilx_window_opaque_state_test_positive_1(void)
+{
+       int ret;
+
+       ret = utilx_set_window_opaque_state(dpy, win, UTILX_OPAQUE_STATE_ON);
+       XFlush(dpy);
+
+       if (ret == 1)
+       {
+               dts_pass("utc_utilx_window_opaque_state_test_positive_1", "passed");
+       }
+       else
+       {
+               dts_fail("utc_utilx_window_opaque_state_test_positive_1", "failed");
+       }
+}
+
+
+/**
+ * @brief test case of utc_utilx_window_opaque_state_test_positive_2()
+ */
+static void utc_utilx_window_opaque_state_test_positive_2(void)
+{
+       int ret;
+
+       ret = utilx_set_window_opaque_state(dpy, win, UTILX_OPAQUE_STATE_OFF);
+       XFlush(dpy);
+
+       if (ret == 1)
+       {
+               dts_pass("utc_utilx_window_opaque_state_test_positive_2", "passed");
+       }
+       else
+       {
+               dts_fail("utc_utilx_window_opaque_state_test_positive_2", "failed");
+       }
+}
+
+
+/**
+ * @brief test case of utc_utilx_window_opaque_state_test_negative_1()
+ */
+static void utc_utilx_window_opaque_state_test_negative_1(void)
+{
+       int ret;
+
+       ret = utilx_set_window_opaque_state(dpy, win, 100);
+       XFlush(dpy);
+
+       if (ret == 0)
+       {
+               dts_pass("utc_utilx_window_opaque_state_test_positive_2", "passed");
+       }
+       else
+       {
+               dts_fail("utc_utilx_window_opaque_state_test_positive_2", "failed");
+       }
+}
+
+
+/**
+ * @brief test case of utc_utilx_window_opaque_state_test_negative_2()
+ */
+static void utc_utilx_window_opaque_state_test_negative_2(void)
+{
+       int ret;
+
+       ret = utilx_set_window_opaque_state(NULL, win, UTILX_OPAQUE_STATE_ON);
+       XFlush(dpy);
+
+       if (ret == 0)
+       {
+               dts_pass("utc_utilx_window_opaque_state_test_positive_2", "passed");
+       }
+       else
+       {
+               dts_fail("utc_utilx_window_opaque_state_test_positive_2", "failed");
+       }
+}
+
+
+
diff --git a/TC/testcase/utc_utilx_screen_shot_test.c b/TC/testcase/utc_utilx_screen_shot_test.c
new file mode 100644 (file)
index 0000000..b9755ef
--- /dev/null
@@ -0,0 +1,162 @@
+/*
+ * Copyright (c) 2012 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <tet_api.h>
+#include <X11/Xlib.h>
+#include <Ecore_X.h>
+#include <utilX.h>
+#include <Ecore_Evas.h>
+#include <sys/types.h>
+#include <X11/X.h>
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_utilx_screen_shot_test_positive_1(void);
+static void utc_utilx_screen_shot_test_positive_2(void);
+static void utc_utilx_screen_shot_test_positive_3(void);
+static void utc_utilx_screen_shot_test_negative_1(void);
+static void utc_utilx_screen_shot_test_negative_2(void);
+static void utc_utilx_screen_shot_test_negative_3(void);
+
+struct tet_testlist tet_testlist[] = {
+       { utc_utilx_screen_shot_test_positive_1, 1 },
+       { utc_utilx_screen_shot_test_positive_2, 1 },
+       { utc_utilx_screen_shot_test_positive_3, 1 },
+       { utc_utilx_screen_shot_test_negative_1, 1 },
+       { utc_utilx_screen_shot_test_negative_2, 1 },
+       { utc_utilx_screen_shot_test_negative_3, 1 },
+       // Do not remove below line
+       { NULL, 0 },
+};
+
+Display *dpy;
+int width, height;
+void *dump;
+
+static void startup(void)
+{
+       /* start of TC */
+       tet_printf("\n TC start");
+}
+
+static void cleanup(void)
+{
+       /* end of TC */
+       tet_printf("\n TC end");
+}
+
+/**
+ * @brief test case of utc_utilx_screen_shot_test_positive_1()
+ */
+static void utc_utilx_screen_shot_test_positive_1(void)
+{
+       dpy = XOpenDisplay (NULL);
+
+       dump = utilx_create_screen_shot (dpy, 720, 1280);
+
+       dts_pass ("utc_utilx_screen_shot_test_positive_1", "passed");
+
+    utilx_release_screen_shot ();
+
+       XCloseDisplay(dpy);
+}
+
+
+/**
+ * @brief test case of utc_utilx_screen_shot_test_positive_2()
+ */
+static void utc_utilx_screen_shot_test_positive_2(void)
+{
+       dpy = XOpenDisplay (NULL);
+
+       dump = utilx_create_screen_shot (dpy, 400, 400);
+
+       dts_pass ("utc_utilx_screen_shot_test_positive_2", "passed");
+
+    utilx_release_screen_shot ();
+
+       XCloseDisplay(dpy);
+}
+
+
+/**
+ * @brief test case of utc_utilx_screen_shot_test_positive_3()
+ */
+static void utc_utilx_screen_shot_test_positive_3(void)
+{
+       dpy = XOpenDisplay (NULL);
+
+       dump = utilx_create_screen_shot (dpy, 1280, 720);
+
+       dts_pass ("utc_utilx_screen_shot_test_positive_3", "passed");
+
+    utilx_release_screen_shot ();
+
+       XCloseDisplay(dpy);
+}
+
+/**
+ * @brief test case of utc_utilx_screen_shot_test_negative_1()
+ */
+static void utc_utilx_screen_shot_test_negative_1(void)
+{
+       dump = utilx_create_screen_shot (NULL, 720, 720);
+
+    if (dump == NULL)
+               dts_pass ("utc_utilx_screen_shot_test_negative_1", "passed");
+       else
+               dts_fail ("utc_utilx_screen_shot_test_negative_1", "failed");
+}
+
+
+/**
+ * @brief test case of utc_utilx_screen_shot_test_negative_2()
+ */
+static void utc_utilx_screen_shot_test_negative_2(void)
+{
+       dpy = XOpenDisplay (NULL);
+
+       dump = utilx_create_screen_shot (dpy, 0, 720);
+
+    if (dump == NULL)
+               dts_pass ("utc_utilx_screen_shot_test_negative_2", "passed");
+       else
+               dts_fail ("utc_utilx_screen_shot_test_negative_2", "failed");
+
+       XCloseDisplay(dpy);
+}
+
+
+/**
+ * @brief test case of utc_utilx_screen_shot_test_negative_3()
+ */
+static void utc_utilx_screen_shot_test_negative_3(void)
+{
+       dpy = XOpenDisplay (NULL);
+
+       dump = utilx_create_screen_shot (dpy, 720, 0);
+
+    if (dump == NULL)
+               dts_pass ("utc_utilx_screen_shot_test_negative_3", "passed");
+       else
+               dts_fail ("utc_utilx_screen_shot_test_negative_3", "failed");
+
+       XCloseDisplay(dpy);
+}
diff --git a/TC/testcase/utc_utilx_test.c b/TC/testcase/utc_utilx_test.c
deleted file mode 100644 (file)
index 7934c62..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Copyright (c) 2012 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <tet_api.h>
-#include <X11/Xlib.h>
-#include <Ecore_X.h>
-#include <utilX.h>
-
-
-static void startup(void);
-static void cleanup(void);
-
-void (*tet_startup)(void) = startup;
-void (*tet_cleanup)(void) = cleanup;
-
-static void utc_utilx_enable_indicator(void);
-
-
-struct tet_testlist tet_testlist[] = {
-       { utc_utilx_enable_indicator, 1 },
-       // Do not remove below line
-       { NULL, 0 },
-};
-
-static void startup(void)
-{
-       /* start of TC */
-}
-
-static void cleanup(void)
-{
-       /* end of TC */
-}
-
-
-/**
- * @brief test case of utilx_enable_indicator()
- */
-static void utc_utilx_enable_indicator(void)
-{
-       Display* dpy;
-       Window root, win;
-       int ret;
-
-       dpy = XOpenDisplay(NULL);
-       root = XDefaultRootWindow(dpy);
-
-       win = XCreateSimpleWindow(dpy, root, 0, 0, 480, 800, 2, BlackPixel(dpy,0), WhitePixel(dpy,0));
-       XMapWindow(dpy, win);
-
-       // If the win want to show indicator, enables indicator.
-       utilx_enable_indicator(dpy, win, 1);
-       XFlush(dpy);
-
-       ret = 1;
-
-       if(ret)
-       {
-               dts_pass("utc_efl_util_set_notification_window_level_positive", "passed");
-       }
-       else
-       {
-               dts_fail("utc_efl_util_set_notification_window_level_positive", "failed");
-       }
-}
-
diff --git a/doc/ui_utilx_doc.h b/doc/ui_utilx_doc.h
new file mode 100644 (file)
index 0000000..a4b04c4
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#ifndef __TIZEN_UI_UTILX_DOC_H__
+#define __TIZEN_UI_UTILX_DOC_H__
+
+/**
+ * @internal
+ * @defgroup CAPI_UI_UTILX_MODULE utilX
+ * @brief The utilX API contains Tizen Linux platform X11 utilties.
+ * @ingroup CAPI_UI_FRAMEWORK
+ *
+ * @section CAPI_UI_UTILX_MODULE_HEADER Required Header
+ *   \#include <utilX.h>
+ *
+ * @section CAPI_UI_UTILX_MODULE_OVERVIEW Overview
+ * The utilX is a common X11 utility.
+ * It provides functions used by x clients, mainly to get or set the state of X11 resources's information.
+ *
+ */
+
+#endif /* __TIZEN_UI_UTILX_DOC_H__ */
index 126105d..d72f112 100644 (file)
@@ -2,8 +2,8 @@
 
 Name:       libslp-utilx
 Summary:    utilX
-Version:    0.1.24
-Release:    1.1
+Version:    0.4.5
+Release:    1
 Group:      UI Framework/Libraries
 License:    Apache-2.0
 Source0:    %{name}-%{version}.tar.gz
@@ -32,6 +32,8 @@ Utility functions for the XWindow
 Summary:    utilX
 Group:      Development/Libraries
 Requires:   %{name} = %{version}-%{release}
+Requires:   pkgconfig(xproto)
+Requires:   pkgconfig(x11)
 
 %description devel
 Utility functions for the XWindow (developement files)
@@ -69,7 +71,7 @@ cp %{_builddir}/%{buildsubdir}/LICENSE.APLv2 %{buildroot}/usr/share/license/%{na
 %files devel
 %manifest %{name}.manifest
 %defattr(-,root,root,-)
-/usr/include/utilX.h
+/usr/include/*
 %{_libdir}/libutilX.so
 %{_libdir}/pkgconfig/utilX.pc
 
diff --git a/utilX.h b/utilX.h
old mode 100644 (file)
new mode 100755 (executable)
index 148fbf0..c956520
--- a/utilX.h
+++ b/utilX.h
@@ -17,8 +17,8 @@
  *
  */
 
-#ifndef __SAMSUNG_LINUX_UTIL_X11_H__
-#define __SAMSUNG_LINUX_UTIL_X11_H__
+#ifndef __TIZEN_LINUX_UTIL_X11_H__
+#define __TIZEN_LINUX_UTIL_X11_H__
 
 #ifdef __GNUC__
 #define DEPRECATED __attribute__((deprecated))
 #endif
 
 /**
- * @defgroup utilX X11 utilities
- * @ingroup lib
- * @brief Samsung Linux platform X11 utilties
- *
- * Common X11 utilities
- * You can use this API with #include <utilX.h>
- */
-
-/**
- * @addtogroup utilX
- * @{
- */
+* @internal
+* @addtogroup CAPI_UI_UTILX_MODULE
+* @{
+*/
 
 #include <sys/types.h>
 #include <X11/X.h>
 extern "C" {
 #endif
 
+/**
+* @internal
+ * @brief Definition for XKeySym (XServer Key Symbol) corresponding to the 'Volume Up' key.
+ */
+#define KEY_VOLUMEUP           "XF86AudioRaiseVolume"
+/**
+ * @brief Definition for XKeySym (XServer Key Symbol) corresponding to the 'Volume Down' key.
+ */
+#define KEY_VOLUMEDOWN         "XF86AudioLowerVolume"
+/**
+ * @brief Definition for XKeySym (XServer Key Symbol) corresponding to the 'Half-Press of Camera' key.
+ */
+#define KEY_CAMERA             "XF86WebCam"
+/**
+ * @brief Definition for XKeySym (XServer Key Symbol) corresponding to the 'Full-Press of Camera' key.
+ */
+#define KEY_CONFIG             "XF86Pictures"
 
-#define KEY_VOLUMEUP           "XF86AudioRaiseVolume"  /**< this macro means the XKeySym (XServer Key Symbol) corresponds to 'Volume Up' key */
-#define KEY_VOLUMEDOWN         "XF86AudioLowerVolume"  /**< this macro means the XKeySym (XServer Key Symbol) corresponds to 'Volume Down' key */
-
-#define KEY_CAMERA             "XF86WebCam"    /**< this macro means the XKeySym (XServer Key Symbol) corresponds to 'Half-Press of Camera' key */
-#define KEY_CONFIG             "XF86Pictures"  /**< this macro means the XKeySym (XServer Key Symbol) corresponds to 'Full-Press of Camera' key */
-
-#define KEY_POWER              "XF86PowerOff"  /**< this macro means the XKeySym (XServer Key Symbol) corresponds to 'Power' key */
-#define KEY_PAUSE              "XF86Standby"   /**< this macro means the XKeySym (XServer Key Symbol) corresponds to 'Pause' key */
-#define KEY_CANCEL              "Cancel"        /**< this macro means the XKeySym (XServer Key Symbol) corresponds to 'Cancel' key */
+/**
+ * @brief Definition for XKeySym (XServer Key Symbol) corresponding to the 'Power' key.
+ */
+#define KEY_POWER              "XF86PowerOff"
+/**
+ * @brief Definition for XKeySym (XServer Key Symbol) corresponding to the 'Pause' key.
+ */
+#define KEY_PAUSE              "XF86Standby"
+/**
+ * @brief Definition for XKeySym (XServer Key Symbol) corresponding to the 'Cancel' key.
+ */
+#define KEY_CANCEL              "Cancel"
 
 // Earjack/BT Headset/Multimedia keys
-#define KEY_PLAYCD             "XF86AudioPlay" /**< this macro means the XKeySym (XServer Key Symbol) corresponds to 'Play Audio' key */
-#define KEY_STOPCD             "XF86AudioStop" /**< this macro means the XKeySym (XServer Key Symbol) corresponds to 'Stop Audio' key */
-#define KEY_PAUSECD            "XF86AudioPause"        /**< this macro means the XKeySym (XServer Key Symbol) corresponds to 'Pause Audio' key */
-#define KEY_NEXTSONG           "XF86AudioNext" /**< this macro means the XKeySym (XServer Key Symbol) corresponds to 'Next Song' key */
-#define KEY_PREVIOUSSONG       "XF86AudioPrev" /**< this macro means the XKeySym (XServer Key Symbol) corresponds to 'Previous Song' key */
-#define KEY_REWIND             "XF86AudioRewind"       /**< this macro means the XKeySym (XServer Key Symbol) corresponds to 'Rewind Song' key */
-#define KEY_FASTFORWARD                "XF86AudioForward"      /**< this macro means the XKeySym (XServer Key Symbol) corresponds to 'Forward Song' key */
-#define KEY_MEDIA              "XF86AudioMedia"        /**< this macro means the XKeySym (XServer Key Symbol) corresponds to 'Media' key */
-#define KEY_PLAYPAUSE          "XF86AudioPlay" /**< this macro means the XKeySym (XServer Key Symbol) corresponds to 'PlayPause' key */
-#define KEY_MUTE                       "XF86AudioMute" /**< this macro means the XKeySym (XServer Key Symbol) corresponds to 'Mute' key */
+/**
+ * @brief Definition for XKeySym (XServer Key Symbol) corresponding to the 'Play Audio' key.
+ */
+#define KEY_PLAYCD             "XF86AudioPlay"
+/**
+ * @brief Definition for XKeySym (XServer Key Symbol) corresponding to the 'Stop Audio' key.
+ */
+#define KEY_STOPCD             "XF86AudioStop"
+/**
+ * @brief Definition for XKeySym (XServer Key Symbol) corresponding to the 'Pause Audio' key.
+ */
+#define KEY_PAUSECD            "XF86AudioPause"
+/**
+ * @brief Definition for XKeySym (XServer Key Symbol) corresponding to the 'Next Song' key.
+ */
+#define KEY_NEXTSONG           "XF86AudioNext"
+/**
+ * @brief Definition for XKeySym (XServer Key Symbol) corresponding to the 'Previous Song' key.
+ */
+#define KEY_PREVIOUSSONG       "XF86AudioPrev"
+/**
+ * @brief Definition for XKeySym (XServer Key Symbol) corresponding to the 'Rewind Song' key.
+ */
+#define KEY_REWIND             "XF86AudioRewind"
+/**
+ * @brief Definition for XKeySym (XServer Key Symbol) corresponding to the 'Forward Song' key.
+ */
+#define KEY_FASTFORWARD                "XF86AudioForward"
+/**
+ * @brief Definition for XKeySym (XServer Key Symbol) corresponding to the 'Media' key.
+ */
+#define KEY_MEDIA              "XF86AudioMedia"
+/**
+ * @brief Definition for XKeySym (XServer Key Symbol) corresponding to the 'PlayPause' key.
+ */
+#define KEY_PLAYPAUSE          "XF86AudioPlayPause"
+/**
+ * @brief Definition for XKeySym (XServer Key Symbol) corresponding to the 'Mute' key.
+ */
+#define KEY_MUTE                       "XF86AudioMute"
 
 // 3-Touch key
-#define KEY_SEND               "XF86Send"      /**< this macro means the XKeySym (XServer Key Symbol) corresponds to 'Send' key */
-#define KEY_SELECT             "XF86Phone"     /**< this macro means the XKeySym (XServer Key Symbol) corresponds to 'Home' key */
-#define KEY_END                        "XF86Stop"      /**< this macro means the XKeySym (XServer Key Symbol) corresponds to 'End' key */
+/**
+ * @brief Definition for XKeySym (XServer Key Symbol) corresponding to the 'Send' key.
+ */
+#define KEY_SEND               "XF86Send"
+/**
+ * @brief Definition for XKeySym (XServer Key Symbol) corresponding to the 'Home' key.
+ */
+#define KEY_SELECT             "XF86Phone"
+/**
+ * @brief Definition for XKeySym (XServer Key Symbol) corresponding to the 'End' key.
+ */
+#define KEY_END                        "XF86Stop"
 
 // Renamed 3-Touch key
-#define KEY_MENU               "XF86Send"      /**< this macro means the XKeySym (XServer Key Symbol) corresponds to 'Send' key */
-#define KEY_HOME               "XF86Phone"     /**< this macro means the XKeySym (XServer Key Symbol) corresponds to 'Home' key */
-#define KEY_BACK               "XF86Stop"      /**< this macro means the XKeySym (XServer Key Symbol) corresponds to 'End' key */
+/**
+ * @brief Definition for XKeySym (XServer Key Symbol) corresponding to the 'Send' key.
+ */
+#define KEY_MENU               "XF86Send"
+/**
+ * @brief Definition for XKeySym (XServer Key Symbol) corresponding to the 'Home' key.
+ */
+#define KEY_HOME               "XF86Phone"
+/**
+ * @brief Definition for XKeySym (XServer Key Symbol) corresponding to the 'End' key.
+ */
+#define KEY_BACK               "XF86Stop"
 
 //Other functions keys
-#define KEY_HOMEPAGE           "XF86HomePage"  /**< this macro means the XKeySym (XServer Key Symbol) corresponds to 'HomePage' key */
-#define KEY_WEBPAGE            "XF86WWW"       /**< this macro means the XKeySym (XServer Key Symbol) corresponds to 'WWW' key */
-#define KEY_MAIL                       "XF86Mail"      /**< this macro means the XKeySym (XServer Key Symbol) corresponds to 'Mail' key */
-#define KEY_SCREENSAVER        "XF86ScreenSaver"       /**< this macro means the XKeySym (XServer Key Symbol) corresponds to 'ScreenSaver' key */
-#define KEY_BRIGHTNESSUP       "XF86MonBrightnessUp"   /**< this macro means the XKeySym (XServer Key Symbol) corresponds to 'BrightnessUp' key */
-#define KEY_BRIGHTNESSDOWN     "XF86MonBrightnessDown" /**< this macro means the XKeySym (XServer Key Symbol) corresponds to 'BrightnessDown' key */
-#define KEY_SOFTKBD                    "XF86MenuKB"    /**< this macro means the XKeySym (XServer Key Symbol) corresponds to 'Soft keyboard(toggle)' key */
-#define KEY_QUICKPANEL         "XF86Tools"     /**< this macro means the XKeySym (XServer Key Symbol) corresponds to 'Quick panel(toggle)' key */
-#define KEY_TASKSWITCH         "XF86TaskPane"  /**< this macro means the XKeySym (XServer Key Symbol) corresponds to 'Task switcher(toggle)' key */
-#define KEY_APPS               "XF86Launch0"   /**< this macro means the XKeySym (XServer Key Symbol) corresponds to 'Apptray(toggle)' key */
-#define KEY_SEARCH             "XF86Search"            /**< this macro means the XKeySym (XServer Key Symbol) corresponds to 'Search(toggle)' key */
-#define KEY_VOICE              "XF86Launch2"           /**< this macro means the XKeySym (XServer Key Symbol) corresponds to 'Voice(toggle)' key */
-#define KEY_LANGUAGE           "Hangul"                /**< this macro means the XKeySym (XServer Key Symbol) corresponds to 'Language(toggle)' key */
-
-#define LEN_KEY_VOLUMEUP               20      /**< this macro is the length of string corresponds to 'Volume Up' key */
-#define LEN_KEY_VOLUMEDOWN     20      /**< this macro is the length of string corresponds to 'Volume Down' key */
-
-#define LEN_KEY_CAMERA         10      /**< this macro is the length of string corresponds to 'Half-Press of Camera' key */
-#define LEN_KEY_CONFIG         12      /**< this macro is the length of string corresponds to 'Full-Press of Camera' key */
-
-#define LEN_KEY_POWER          12      /**< this macro is the length of string corresponds to 'Power' key */
-#define LEN_KEY_PAUSE          11      /**< this macro is the length of string corresponds to 'Pause' key */
+/**
+ * @brief Definition for XKeySym (XServer Key Symbol) corresponding to the 'HomePage' key.
+ */
+#define KEY_HOMEPAGE           "XF86HomePage"
+/**
+ * @brief Definition for XKeySym (XServer Key Symbol) corresponding to the 'WWW' key.
+ */
+#define KEY_WEBPAGE            "XF86WWW"
+/**
+ * @brief Definition for XKeySym (XServer Key Symbol) corresponding to the 'Mail' key.
+ */
+#define KEY_MAIL                       "XF86Mail"
+/**
+ * @brief Definition for XKeySym (XServer Key Symbol) corresponding to the 'ScreenSaver' key.
+ */
+#define KEY_SCREENSAVER        "XF86ScreenSaver"
+/**
+ * @brief Definition for XKeySym (XServer Key Symbol) corresponding to the 'BrightnessUp' key.
+ */
+#define KEY_BRIGHTNESSUP       "XF86MonBrightnessUp"
+/**
+ * @brief Definition for XKeySym (XServer Key Symbol) corresponding to the 'BrightnessDown' key.
+ */
+#define KEY_BRIGHTNESSDOWN     "XF86MonBrightnessDown"
+/**
+ * @brief Definition for XKeySym (XServer Key Symbol) corresponding to the 'Soft keyboard(toggle)' key.
+ */
+#define KEY_SOFTKBD                    "XF86MenuKB"
+/**
+ * @brief Definition for XKeySym (XServer Key Symbol) corresponding to the 'Quick panel(toggle)' key.
+ */
+#define KEY_QUICKPANEL         "XF86Tools"
+/**
+ * @brief Definition for XKeySym (XServer Key Symbol) corresponding to the 'Task switcher(toggle)' key.
+ */
+#define KEY_TASKSWITCH         "XF86TaskPane"
+/**
+ * @brief Definition for XKeySym (XServer Key Symbol) corresponding to the 'Apptray(toggle)' key.
+ */
+#define KEY_APPS               "XF86Launch0"
+/**
+ * @brief Definition for XKeySym (XServer Key Symbol) corresponding to the 'Search(toggle)' key.
+ */
+#define KEY_SEARCH             "XF86Search"
+/**
+ * @brief Definition for XKeySym (XServer Key Symbol) corresponding to the 'Voice(toggle)' key.
+ */
+#define KEY_VOICE              "XF86Launch2"
+/**
+ * @brief Definition for XKeySym (XServer Key Symbol) corresponding to the 'Language(toggle)' key.
+ */
+#define KEY_LANGUAGE           "Hangul"
+/**
+ * @brief Definition for XKeySym (XServer Key Symbol) corresponding to the 'Call(toggle)' key.
+ */
+#define KEY_CONNECT                    "XF86Go"
+/**
+ * @brief Definition for XKeySym (XServer Key Symbol) corresponding to the 'Play(toggle)' key.
+ */
+#define KEY_GAMEPLAY           "XF86Game"
+/**
+ * @brief Definition for XKeySym (XServer Key Symbol) corresponding to the 'Voice Wakeup LPSD' key.
+ */
+#define KEY_VOICEWAKEUP_LPSD           "XF86Launch3"
+/**
+ * @brief Definition for XKeySym (XServer Key Symbol) corresponding to the 'Voice Wakeup' key.
+ */
+#define KEY_VOICEWAKEUP                "XF86Launch4"
+
+/**
+ * @brief Definition for the length of a string corresponding to the 'Volume Up' key.
+ */
+#define LEN_KEY_VOLUMEUP               20
+/**
+ * @brief Definition for the length of a string corresponding to the 'Volume Down' key.
+ */
+#define LEN_KEY_VOLUMEDOWN     20
+
+/**
+ * @brief Definition for the length of a string corresponding to the 'Half-Press of Camera' key.
+ */
+#define LEN_KEY_CAMERA         10
+/**
+ * @brief Definition for the length of a string corresponding to the 'Full-Press of Camera' key.
+ */
+#define LEN_KEY_CONFIG         12
+
+/**
+ * @brief Definition for the length of a string corresponding to the 'Power' key.
+ */
+#define LEN_KEY_POWER          12
+/**
+ * @brief Definition for the length of a string corresponding to the 'Pause' key.
+ */
+#define LEN_KEY_PAUSE          11
 
 // Earjack/BT Headset/Multimedia keys
-#define LEN_KEY_PLAYCD         13/**< this macro is the length of string corresponds to 'Play Audio' key */
-#define LEN_KEY_STOPCD         13/**< this macro is the length of string corresponds to 'Stop Audio' key */
-#define LEN_KEY_PAUSECD                14/**< this macro is the length of string corresponds to 'Pause Audio' key */
-#define LEN_KEY_NEXTSONG       13/**< this macro is the length of string corresponds to 'Next Song' key */
-#define LEN_KEY_PREVIOUSSONG           13/**< this macro is the length of string corresponds to 'Previous Song' key */
-#define LEN_KEY_REWIND         15/**< this macro is the length of string corresponds to 'Rewind Song' key */
-#define LEN_KEY_FASTFORWARD            16/**< this macro is the length of string corresponds to 'Forwand Song' key */
-#define LEN_KEY_MEDIA          14/**< this macro is the length of string corresponds to 'Media' key */
-#define LEN_KEY_PLAYPAUSE      13      /**< this macro is the length of string corresponds to 'PlayPause' key */
-#define LEN_KEY_MUTE           13      /**< this macro is the length of string corresponds to 'Mute' key */
+/**
+ * @brief Definition for the length of a string corresponding to the 'Play Audio' key.
+ */
+#define LEN_KEY_PLAYCD         13
+/**
+ * @brief Definition for the length of a string corresponding to the 'Stop Audio' key.
+ */
+#define LEN_KEY_STOPCD         13
+/**
+ * @brief Definition for the length of a string corresponding to the 'Pause Audio' key.
+ */
+#define LEN_KEY_PAUSECD                14
+/**
+ * @brief Definition for the length of a string corresponding to the 'Next Song' key.
+ */
+#define LEN_KEY_NEXTSONG       13
+/**
+ * @brief Definition for the length of a string corresponding to the 'Previous Song' key.
+ */
+#define LEN_KEY_PREVIOUSSONG           13
+/**
+ * @brief Definition for the length of a string corresponding to the 'Rewind Song' key.
+ */
+#define LEN_KEY_REWIND         15
+/**
+ * @brief Definition for the length of a string corresponding to the 'Forwand Song' key.
+ */
+#define LEN_KEY_FASTFORWARD            16
+/**
+ * @brief Definition for the length of a string corresponding to the 'Media' key.
+ */
+#define LEN_KEY_MEDIA          14
+/**
+ * @brief Definition for the length of a string corresponding to the 'PlayPause' key.
+ */
+#define LEN_KEY_PLAYPAUSE      13
+/**
+ * @brief Definition for the length of a string corresponding to the 'Mute' key.
+ */
+#define LEN_KEY_MUTE           13
 
 // 3-Touch key
-#define LEN_KEY_SEND           8       /**< this macro is the length of string corresponds to 'Send' key */
-#define LEN_KEY_SELECT         9       /**< this macro is the length of string corresponds to 'Home' key */
-#define LEN_KEY_END            8       /**< this macro is the length of string corresponds to 'End' key */
+/**
+ * @brief Definition for the length of a string corresponding to the 'Send' key.
+ */
+#define LEN_KEY_SEND           8
+/**
+ * @brief Definition for the length of a string corresponding to the 'Home' key.
+ */
+#define LEN_KEY_SELECT         9
+/**
+ * @brief Definition for the length of a string corresponding to the 'End' key.
+ */
+#define LEN_KEY_END            8
 
 // Renamed 3-Touch key
-#define LEN_KEY_MENU           8       /**< this macro is the length of string corresponds to 'Send' key */
-#define LEN_KEY_HOME           9       /**< this macro is the length of string corresponds to 'Home' key */
-#define LEN_KEY_BACK           8       /**< this macro is the length of string corresponds to 'End' key */
+/**
+ * @brief Definition for the length of a string corresponding to the 'Send' key.
+ */
+#define LEN_KEY_MENU           8
+/**
+ * @brief Definition for the length of a string corresponding to the 'Home' key.
+ */
+#define LEN_KEY_HOME           9
+/**
+ * @brief Definition for the length of a string corresponding to the 'End' key.
+ */
+#define LEN_KEY_BACK           8
 
 //Other functions keys
-#define LEN_KEY_HOMEPAGE       12      /**< this macro is the length of string corresponds to 'HomePage' key */
-#define LEN_KEY_WEBPAGE        7       /**< this macro is the length of string corresponds to 'WWW' key */
-#define LEN_KEY_MAIL           8       /**< this macro is the length of string corresponds to 'Mail' key */
-#define LEN_KEY_SCREENSAVER    15      /**< this macro is the length of string corresponds to 'ScreenSaver' key */
-#define LEN_KEY_BRIGHTNESSUP   19      /**< this macro is the length of string corresponds to 'BrightnessUp' key */
-#define LEN_KEY_BRIGHTNESSDOWN 21      /**< this macro is the length of string corresponds to 'BrightnessDown' key */
-
-#define LEN_KEY_SOFTKBD                10      /**< this macro is the length of string corresponds to 'Soft keyboard(toggle)' key */
-#define LEN_KEY_QUICKPANEL             9       /**< this macro is the length of string corresponds to 'Quick panel(toggle)' key */
-#define LEN_KEY_TASKSWITCH     12      /**< this macro is the length of string corresponds to 'Task switcher(toggle)' key */
-#define LEN_KEY_APPS                   11      /**< this macro is the length of string corresponds to 'Apptray(toggle)' key */
-#define LEN_KEY_SEARCH                 10      /**< this macro is the length of string corresponds to 'Search(toggle)' key */
-#define LEN_KEY_VOICE                  11      /**< this macro is the length of string corresponds to 'Voice(toggle)' key */
-#define LEN_KEY_LANGUAGE               6       /**< this macro is the length of string corresponds to 'Language(toggle)' key */
-
-#define OR_EXCLUSIVE_GRAB      0xf00000        /**< this means that the client window will always get the grabbed-key exclusively regardless of the position on the window stack but the grab is overridable by the other client window */
-#define EXCLUSIVE_GRAB         0x0f0000        /**< this means that the client window will always get the grabbed-key exclusively regardless of the position on the window stack */
-#define TOP_POSITION_GRAB      0x00f000        /**< this means that the client window will get the grabbed-key only when on the top of the grabbing-window stack */
-#define SHARED_GRAB            0x000f00        /**< this means that the client window will get the grabbed-key together with the other client window(s) */
-#define GRAB_MODE_MASK 0xffff00        /**< this mask will be used for getting the key-grab mode of a client window */
-
-#define EXCLUSIVE_GRABBED_ALREADY      1       /**< this means that the client window is grabbing the key already in EXCLUSIVE mode */
-
-#define STR_ATOM_GRAB_KEY      "_GRAB_KEY"     /**< this is an XATOM for getting/setting the property for grabbing a key for a window */
-#define STR_ATOM_GRAB_EXCL_WIN "_GRAB_EXCL_WIN_KEYCODE"        /**< this means that the key was grabbed by a client window in EXCLUSIVE mod */
-#define STR_ATOM_GRAB_OR_EXCL_WIN      "_GRAB_OR_EXCL_WIN_KEYCODE"     /**< this means that the key was grabbed by a client window in OR_EXCLUSIVE mod */
-
-#define STR_ATOM_SCRNCONF_STATUS "_SCRNCONF_STATUS" /**< this is an XATOM for getting the status of the screen configuration through the client message */
-
 /**
- * @brief Enumeration of screen configuration status
+ * @brief Definition for the length of a string corresponding to the 'HomePage' key.
  */
-typedef enum _Utilx_Scrnconf_Status
-{
-       UTILX_SCRNCONF_STATUS_NULL,    /**< screen configuration status is null */
-       UTILX_SCRNCONF_STATUS_CONNECT, /**< screen configuration status is connect */
-       UTILX_SCRNCONF_STATUS_ACTIVE   /**< screen configuration status is active */
-} Utilx_Scrnconf_Status;
-
+#define LEN_KEY_HOMEPAGE       12
 /**
- * @brief Enumeration of screen configuration display mode
+ * @brief Definition for the length of a string corresponding to the 'WWW' key.
  */
-typedef enum _Utilx_Scrnconf_Dispmode
-{
-       UTILX_SCRNCONF_DISPMODE_NULL,    /**< display mode of screen configuration is null */
-       UTILX_SCRNCONF_DISPMODE_CLONE,   /**< display mode of screen configuration is clone */
-       UTILX_SCRNCONF_DISPMODE_EXTENDED /**< display mode of screen configuration is extended */
-} Utilx_Scrnconf_Dispmode;
-
-
+#define LEN_KEY_WEBPAGE        7
 /**
- * @brief Enumeration of key status
+ * @brief Definition for the length of a string corresponding to the 'Mail' key.
  */
-typedef enum _Utilx_Key_Status
-{
-       UTILX_KEY_STATUS_PRESSED, /**< key status is pressed */
-       UTILX_KEY_STATUS_RELEASED, /**< key status is released */
-       UTILX_KEY_STATUS_UNKNOWN /** < key status is unknown or error happened */
-} Utilx_Key_Status;
-
+#define LEN_KEY_MAIL           8
 /**
- * @brief Enumeration of notification window's priority level
+ * @brief Definition for the length of a string corresponding to the 'ScreenSaver' key.
  */
-typedef enum _Utilx_Notification_Level
-{
-       UTILX_NOTIFICATION_LEVEL_LOW, /**< low level notification */
-       UTILX_NOTIFICATION_LEVEL_NORMAL, /**< normal level notification*/
-       UTILX_NOTIFICATION_LEVEL_HIGH /**< high level notification */
-} Utilx_Notification_Level;
-
+#define LEN_KEY_SCREENSAVER    15
 /**
- * @brief Enumeration of Compositing Window Manager's Effect Type
+ * @brief Definition for the length of a string corresponding to the 'BrightnessUp' key.
  */
-typedef enum _Utilx_Effect_Type
-{
-       UTILX_EFFECT_TYPE_MAP, /**< Effect for Window's Map Notify Event */
-       UTILX_EFFECT_TYPE_UNMAP, /**< Effect for Window's UnMap Notify Event */
-       UTILX_EFFECT_TYPE_RAISEABOVE, /**< Effect for Window's Configure Notify ( RaiseAbove case ) Event */
-       UTILX_EFFECT_TYPE_ROTATION, /**< Effect for Window's Rotation Property Change Notify Event ( X Property: ECORE_X_ATOM_E_ILLUME_ROTATE_WINDOW_ANGLE ) */
-       UTILX_EFFECT_TYPE_FOCUSIN, /**< Effect for Window's FocusIn Event ( E17's Event: E_EVENT_BORDER_FOCUS_IN ) */
-       UTILX_EFFECT_TYPE_FOCUSOUT /**< Effect for Window's FocusOut Event ( E17's Event : E_EVENT_BORDER_FOCUS_OUT ) */
-} Utilx_Effect_Type;
-
+#define LEN_KEY_BRIGHTNESSUP   19
 /**
- * @brief Enumeration of Compositing Window Manager's Effect Style
+ * @brief Definition for the length of a string corresponding to the 'BrightnessDown' key.
  */
-typedef enum _Utilx_Effect_Style
-{
-       UTILX_EFFECT_STYLE_DEFAULT, /**< Default Effect Style for Effect Type */
-       UTILX_EFFECT_STYLE_NONE, /**< None of Effect Style for Effect Type */
-       UTILX_EFFECT_STYLE_CUSTOM0, /**< Custom0 Effect Style for Effect Type */
-       UTILX_EFFECT_STYLE_CUSTOM1, /**< Custom1 Effect Style for Effect Type */
-       UTILX_EFFECT_STYLE_CUSTOM2, /**< Custom2 Effect Style for Effect Type */
-       UTILX_EFFECT_STYLE_CUSTOM3, /**< Custom3 Effect Style for Effect Type */
-       UTILX_EFFECT_STYLE_CUSTOM4, /**< Custom4 Effect Style for Effect Type */
-       UTILX_EFFECT_STYLE_CUSTOM5, /**< Custom5 Effect Style for Effect Type */
-       UTILX_EFFECT_STYLE_CUSTOM6, /**< Custom6 Effect Style for Effect Type */
-       UTILX_EFFECT_STYLE_CUSTOM7, /**< Custom7 Effect Style for Effect Type */
-       UTILX_EFFECT_STYLE_CUSTOM8, /**< Custom8 Effect Style for Effect Type */
-       UTILX_EFFECT_STYLE_CUSTOM9 /**< Custom9 Effect Style for Effect Type */
-} Utilx_Effect_Style;
-
-/**
- * @brief Enumeration of opaque state
+#define LEN_KEY_BRIGHTNESSDOWN 21
+/**
+ * @brief Definition for the length of a string corresponding to the 'Soft keyboard(toggle)' key.
  */
-typedef enum _Utilx_Opaque_State
-{
-       UTILX_OPAQUE_STATE_OFF = 0, /**< Transparent state */
-       UTILX_OPAQUE_STATE_ON  = 1, /**< Opaque state */
-} Utilx_Opaque_State;
-
+#define LEN_KEY_SOFTKBD                10
 /**
- * @brief Enumeration of Fb's type
+ * @brief Definition for the length of a string corresponding to the 'Quick panel(toggle)' key.
  */
-typedef enum _Utilx_Fb_Type
-{
-       UTILX_FB_TYPE_NONE     = 0, /**< None type */
-       UTILX_FB_TYPE_UI       = 1, /**< Framebuffer type is 'UI' */
-       UTILX_FB_TYPE_OVERLAY  = 2, /**< Framebuffer type is 'Overlay' */
-} Utilx_Fb_Type;
-
+#define LEN_KEY_QUICKPANEL             9
 /**
- * @brief Structure of screen configuration information
+ * @brief Definition for the length of a string corresponding to the 'Task switcher(toggle)' key.
  */
-typedef struct _UtilxScrnConf
-{
-       char *str_output;                 /**< string value for the connector type */
-       Utilx_Scrnconf_Status status;     /**< status of screen configurtaion */
-       char *str_resolution;             /**< string value for the resolution to be active status */
-       Utilx_Scrnconf_Dispmode dispmode; /**< display mode of screen configuration to be active status */
-} UtilxScrnConf;
-
+#define LEN_KEY_TASKSWITCH     12
 /**
- * @fn ScrnConf *utilx_scrnconf_allocate(void)
- * @brief allocate the UtilxScrnConf structure
- *
- * This function allocate the UtilxScrnConf structure.\n
- *
- * @remark This is used only application which want to know the screen configuration info.
- * @pre  This api does not require any pre-condition.
- * @post This api does not change any condition.
- * @see utilx_scrnconf_allocate
- * @par Example
-  @code
-  #include <utilX.h>
-  ...
-
-  UtilxScrnConf *scrnconf = NULL;
-
-  // Allocate the UtilxScrnConf structure
-  scrnconf = utilx_scrnconf_allocate();
-   ...
-  @endcode
+ * @brief Definition for the length of a string corresponding to the 'Apptray(toggle)' key.
  */
-UtilxScrnConf *utilx_scrnconf_allocate (void);
-
+#define LEN_KEY_APPS                   11
 /**
- * @fn void utilx_scrnconf_free (UtilxScrnConf *scrnconf)
- * @brief free the UtilxScrnConf structure
- *
- * This function free the UtilxScrnConf structure.\n
- *
- * @param[in] scrnconf Specifies the UtilxScrnConf structure
- * @return instance of the UtilxScrnConf structure
- * @remark This is used only application which want to know the screen configuration info.
- * @pre  This api does not require any pre-condition.
- * @post This api does not change any condition.
- * @see utilx_scrnconf_free
- * @par Example
-  @code
-  #include <utilX.h>
-  ...
-
-  UtilxScrnConf *scrnconf = NULL;
-
-  // Allocate the UtilxScrnConf structure
-  scrnconf = utilx_scrnconf_allocate();
-   ...
-
-  // Free the UtilxScrnConf structure
-  utilx_scrnconf_free(scrnconf);
-   ...
-  @endcode
+ * @brief Definition for the length of a string corresponding to the 'Search(toggle)' key.
  */
-void utilx_scrnconf_free (UtilxScrnConf *scrnconf);
-
+#define LEN_KEY_SEARCH                 10
 /**
- * @fn void utilx_scrnconf_get_info (Display *dpy, UtilxScrnConf *scrnconf)
- * @brief get the information of the screen configuration
- *
- * This function get the information of the screen configuration.\n
- *
- * This function is a asynchronous call.
- *
- * @param[in] dpy Specifies the connection to the X server
- * @param[in] scrnconf Specifies the information structure of the screen configuration
- * @remark This is used only application which want to know the screen configuration info.
- * @pre  This api does not require any pre-condition.
- * @post This api does not change any condition.
- * @see utilx_scrnconf_get_info
- * @par Example
-  @code
-  #include <X11/Xlib.h>
-  #include <utilX.h>
-  ...
-
-  Display* dpy;
-  UtilxScrnConf *scrnconf = NULL;
-  int ret = 0;
-
-  dpy = XOpenDisplay (NULL);
-
-  // Allocate the UtilxScrnConf structure
-  scrnconf = utilx_scrnconf_allocate();
-  ...
-
-  // Set the display mode for the screen configuration
-  ret = utilx_scrnconf_get_info (dpy, scrnconf);
-  ...
-
-  // Free the UtilxScrnConf structure
-  utilx_scrnconf_free(scrnconf);
-   ...
-
-  @endcode
+ * @brief Definition for the length of a string corresponding to the 'Voice(toggle)' key.
  */
-int utilx_scrnconf_get_info (Display *dpy, UtilxScrnConf *scrnconf);
-
+#define LEN_KEY_VOICE                  11
+/**
+ * @brief Definition for the length of a string corresponding to the 'Language(toggle)' key.
+ */
+#define LEN_KEY_LANGUAGE               6
+/**
+ * @brief Definition for the length of a string corresponding to the 'Call(toggle)' key.
+ */
+#define LEN_KEY_CONNECT                        6
+/**
+ * @brief Definition for the length of a string corresponding to the 'Play(toggle)' key.
+ */
+#define LEN_KEY_GAMEPLAY               8
+/**
+ * @brief Definition for the length of a string corresponding to the 'Voice Wakeup LPSD' key.
+ */
+#define LEN_KEY_VOICEWAKEUP_LPSD       11
+/**
+ * @brief Definition for the length of a string corresponding to the 'Voice Wakeup' key.
+ */
+#define LEN_KEY_VOICEWAKEUP                    11
 
 /**
- * @fn void utilx_scrnconf_set_dispmode (Display *dpy, Utilx_Scrnconf_Dispmode dispmode)
- * @brief set the display mode for the screen configuration
- *
- * This function set the display mode for the screen configuration.\n
- *
- * This function is a asynchronous call.
- *
- * @param[in] dpy Specifies the connection to the X server
- * @param[in] dipmode Specifies the display mode of the screen configuration
- * @return 1 if setting the dispmode is succeeded, 0 if setting the dispmode is failed.
- * @remark This is used only application which want to set the display mode of the screen configuration.
- * @pre  This api does not require any pre-condition.
- * @post This api does not change any condition.
- * @see utilx_scrnconf_set_dispmode
- * @par Example
-  @code
-  #include <X11/Xlib.h>
-  #include <utilX.h>
-  ...
+ * @brief Definition for getting the grabbed-key exclusively regardless of its position on the window stack with the possibility of overriding the grab by the other client window mode.
+ */
+#define OR_EXCLUSIVE_GRAB      0xf00000
+/**
+ * @brief Definition for getting the grabbed-key exclusively regardless of its position on the window stack mode.
+ */
+#define EXCLUSIVE_GRAB         0x0f0000
+/**
+ * @brief Definition for getting the grabbed-key only when on the top of the grabbing-window stack mode.
+ */
+#define TOP_POSITION_GRAB      0x00f000
+/**
+ * @brief Definition for getting the grabbed-key together with the other client window(s) mode.
+ */
+#define SHARED_GRAB            0x000f00
+/**
+ * @brief Definition for getting the key-grab mode of a client window.
+ */
+#define GRAB_MODE_MASK 0xffff00
 
-  Display* dpy;
+/**
+ * @brief Definition for the client window grabbing the key which is already in the EXCLUSIVE mode.
+ */
+#define EXCLUSIVE_GRABBED_ALREADY      1
 
-  dpy = XOpenDisplay (NULL);
+/**
+ * @brief Definition for getting/setting the property while grabbing a key for a window.
+ */
+#define STR_ATOM_GRAB_KEY      "_GRAB_KEY"
+/**
+ * @brief Definition for the key grabbed by a client window in the EXCLUSIVE mode.
+ */
+#define STR_ATOM_GRAB_EXCL_WIN "_GRAB_EXCL_WIN_KEYCODE"
+/**
+ * @brief Definition for the key grabbed by a client window in the OR_EXCLUSIVE mode.
+ */
+#define STR_ATOM_GRAB_OR_EXCL_WIN      "_GRAB_OR_EXCL_WIN_KEYCODE"
 
-  // Set the display mode for the screen configuration
-  utilx_scrnconf_set_dispmode (dpy, UTILX_SCRNCONF_DISPMODE_CLONE);
-   ...
-  @endcode
+/**
+ * @brief Enumeration for notification window's priority level.
  */
-int utilx_scrnconf_set_dispmode (Display *dpy, Utilx_Scrnconf_Dispmode dispmode);
+typedef enum _Utilx_Notification_Level
+{
+       UTILX_NOTIFICATION_LEVEL_LOW, /**< Low level notification */
+       UTILX_NOTIFICATION_LEVEL_NORMAL, /**< Normal level notification*/
+       UTILX_NOTIFICATION_LEVEL_HIGH /**< High level notification */
+} Utilx_Notification_Level;
 
+/**
+ * @brief Enumeration for the opaque state.
+ */
+typedef enum _Utilx_Opaque_State
+{
+       UTILX_OPAQUE_STATE_OFF = 0, /**< Transparent state */
+       UTILX_OPAQUE_STATE_ON  = 1, /**< Opaque state */
+} Utilx_Opaque_State;
 
 /**
- * @fn void utilx_set_system_notification_level (Display* dpy, Window win, Utilx_Notification_Level level)
- * @brief Sets the priority level for the specified notification window
- *
- * This function sets the priority level of the notification windows.\n
- * Every notification window has a base priority level by the notification window's priority value. (Default priority is UTILX_NOTIFICATION_LEVEL_LOW)
- *
- * The priority is used for ordering of notification windows.\n
- * The notification window which is set UTILX_NOTIFICATION_LEVEL_HIGH priority will be placed to the top of notification windows.\n
- * If there are notification windows that have same priorities, the latest created notification window is placed on the other window.
- *
- * This function is a asynchronous call.
- *
- * @param[in] dpy Specifies the connection to the X server
- * @param[in] win Specifies the window to be set
- * @param[in] level Specifies the level (UTILX_NOTIFICATION_LEVEL_LOW, UTILX_NOTIFICATION_LEVEL_NORMAL, UTILX_NOTIFICATION_LEVEL_HIGH)
- * @remark This is used only notification window.
- * @pre The win should be notification type window
- * @post None
- * @see utilx_get_system_notification_level
+ * @brief Sets the priority level for the specified notification window, asynchronously.
+ *
+ * @details This function sets the priority level of notification windows.\n
+ *          Every notification window has a base priority level by the notification window's priority value (default priority is #UTILX_NOTIFICATION_LEVEL_LOW).
+ *
+ *          The priority is used for ordering of notification windows.\n
+ *          The notification window with the priority set to #UTILX_NOTIFICATION_LEVEL_HIGH will be placed at the top of the notification windows.\n
+ *          If there are notification windows which have same priorities, the last created notification window will be placed on the other window.
+ *
+ * @since_tizen 2.3
+ * @remarks This is used only for notification windows.
+ * @param[in] dpy The connection to the X server
+ * @param[in] win The window to set
+ * @param[in] level The level (#UTILX_NOTIFICATION_LEVEL_LOW, #UTILX_NOTIFICATION_LEVEL_NORMAL, #UTILX_NOTIFICATION_LEVEL_HIGH)
+ * @pre The window should be a notification type window.
+ * @see #Utilx_Notification_Level
+ * @see utilx_get_system_notification_level()
  * @par Example
   @code
   #include <utilX.h>
@@ -434,21 +478,20 @@ int utilx_scrnconf_set_dispmode (Display *dpy, Utilx_Scrnconf_Dispmode dispmode)
 void utilx_set_system_notification_level (Display* dpy, Window win, Utilx_Notification_Level level);
 
 /**
- * @fn Utilx_Notification_Level utilx_get_system_notification_level (Display* dpy, Window win)
- * @brief Gets the priority level for the specified notification window
+ * @brief Gets the priority level for the specified notification window.
  *
- * This function returns the priority level of the notification windows.\n
- * If a user didn't set the notification's priority level, this function returns default value (UTILX_NOTIFICATION_LEVEL_LOW).
+ * @details This function returns the priority level of notification windows.\n
+ *          If a user didn't set the notification's priority level, this function returns the default value (#UTILX_NOTIFICATION_LEVEL_LOW).
  *
- * This function is a synchronous call.
+ *          This function is a synchronous call.
  *
- * @param[in] dpy Specifies the connection to the X server
- * @param[in] win Specifies the window to be get
- * @return current notication level (UTILX_NOTIFICATION_LEVEL_LOW, UTILX_NOTIFICATION_LEVEL_NORMAL, UTILX_NOTIFICATION_LEVEL_HIGH)
- * @remark This is used only notification window.
- * @pre The win should be notification type window
- * @post None
- * @see utilx_set_system_notification_level
+ * @since_tizen 2.3
+ * @remarks This is used only for notification windows.
+ * @param[in] dpy The connection to the X server
+ * @param[in] win The window to get
+ * @return The current notification level (#UTILX_NOTIFICATION_LEVEL_LOW, #UTILX_NOTIFICATION_LEVEL_NORMAL, #UTILX_NOTIFICATION_LEVEL_HIGH)
+ * @pre The window should be a notification type window.
+ * @see utilx_set_system_notification_level()
  * @par Example
   @code
   #include <utilX.h>
@@ -470,136 +513,28 @@ void utilx_set_system_notification_level (Display* dpy, Window win, Utilx_Notifi
 Utilx_Notification_Level utilx_get_system_notification_level (Display* dpy, Window win);
 
 /**
- * @fn void utilx_enable_indicator (Display* dpy, Window win, int enable)
- * @brief Sets the window to show/hide the indicator
- *
- * This function enables or disables the indicator.
- *
- * If an application wants to show the window with the indicator, the application must call this function with 1 as the enable parameter.\n
- * Otherwise, the application must call this function with 0 as the enable parameter.
- *
- * This function is a asynchronous call.
- *
- * @param[in] dpy Specifies the connection to the X server
- * @param[in] win Specifies the window to use indicator
- * @param[in] enable Specifies whether the window use indicator or not
- * @remark None
- * @pre None
- * @post If the enable is 1, then the indicator window should be shown on the screen. Otherwise, the indicator window should be hidden from the screen.
- * @see elm_win_indicator_state_set, utilx_get_indicator_state
- * @par Example
-  @code
-  #include <X11/Xlib.h>
-  #include <utilX.h>
-
-  ...
-
-  Display* dpy;
-  Window root, win;
-
-  dpy = XOpenDisplay (NULL);
-  root = XDefaultRootWindow (dpy);
-
-  win = XCreateSimpleWindow (dpy, root, 0, 0, 480, 800, 2, BlackPixel (dpy,0), WhitePixel(dpy,0));
-  XMapWindow (dpy, win);
-
-  // If the win want to show indicator, enables indicator.
-  utilx_enable_indicator (dpy, win, 1);
-  XFlush (d);
-
-  // If the win want to hide indicator, disables indicator.
-  utilx_enable_indicator (dpy, win, 0);
-  XFlush (d);
-
-  ...
-  @endcode
- */
-void utilx_enable_indicator (Display* dpy, Window win, int enable);
-
-/**
- * @fn int utilx_get_indicator_state (Display* dpy, Window win)
- * @brief Gets the indicator's state of the specified window
- *
- * This function gets the indicator's state of the specified window.
- *
- * An application can set the indicator's state using utilx_enable_indicator or elm_win_indicator_state_set.
- * If an application sets enables the indicator, this returns 1.\n
- * If an application disables the indicator, this returns 0.\n
- * If an application doesn't set the indicator's state, in other words,
- * an application doesn't call utilx_enable_indicator or elm_win_indicator_state_set,
- * this returns -1.
- *
- * This function is a asynchronous call.
- *
- * @param[in] dpy Specifies the connection to the X server
- * @param[in] win Specifies the window to get the indicator's state
- * @return 1 if the indicator is enabled, 0 if the indicator is disabled, otherwise -1
- * @remark None
- * @pre None
- * @post None
- * @see elm_win_indicator_state_set, utilx_enable_indicator
- * @par Example
-  @code
-  #include <X11/Xlib.h>
-  #include <utilX.h>
-
-  ...
-
-  Display* dpy;
-  Window root, win;
-  int state;
-
-  dpy = XOpenDisplay (NULL);
-  root = XDefaultRootWindow (dpy);
-
-  win = XCreateSimpleWindow (dpy, root, 0, 0, 480, 800, 2, BlackPixel (dpy,0), WhitePixel(dpy,0));
-  XMapWindow (dpy, win);
-
-  state = utilx_get_indicator_state (dpy, win)
-  // state is -1 (unknown)
-
-  // If the win want to show indicator, enables indicator.
-  utilx_enable_indicator (dpy, win, 1);
-  XFlush (d);
-
-  state = utilx_get_indicator_state (dpy, win)
-  // state is 1 (enabled)
-
-  // If the win want to hide indicator, disables indicator.
-  utilx_enable_indicator (dpy, win, 0);
-  XFlush (d);
-
-  state = utilx_get_indicator_state (dpy, win)
-  // state is 0 (disabled)
-
-  ...
-  @endcode
- */
-int utilx_get_indicator_state (Display* dpy, Window win);
-
-
-/**
- * @fn int utilx_grab_key (Display* dpy, Window win, const char* key_name, int grab_mode)
- * @brief Grabs a key specfied by key_name for win in grab_mode
- *
- * This function establishs a grab of the specified key for the specified window.\n
- * Once a key was grabbed, all events originated from the key will only be reported to the specfied window.\n
- * The grab of the key will be released by calling utilx_ungrab_key.
- *
- * This function is synchronous.
- *
- * @param[in] dpy Specifies the connection to the X server
- * @param[in] win Specifies the window to grab a key
- * @param[in] key_name Name of a key in string (ex> KEY_VOLUMEUP, KEY_VOLUMEDOWN, KEY_SEND and so on)
- * @param[in] grab_mode Grab mode (such as EXCLUSIVE_GRAB, TOP_POSITION_GRAB and SHARED_GRAB)
- * @return 0 on Success, otherwise Fail
- * @remark If utilx_grab_key() returns 0, the specified window will get the events of the specified key.\n
-                  However, delivery of a key can always be changed by other applications grabbing the key with higher priority.\n
-                  It can also be changed by the changes of window stacks.\n
-                  Trial for choosing a proper grab mode will be needed.
- * @pre This API must be called after the window 'win' has been mapped
- * @post This API adds/changes the window property related to grabbed key
- * @see utilx_ungrab_key
+ * @brief Grabs the key specfied by @a key_name for a window in the @a grab_mode.
+ *
+ * @details This function establishes a grab of the specified key for the specified window.\n
+ *          Once a key is grabbed, all events originating from the key will only be reported to the specfied window.\n
+ *          The grab of the key can be released by calling utilx_ungrab_key().
+ *
+ *          This function is synchronous.
+ *
+ * @since_tizen 2.3
+ * @remarks If utilx_grab_key() returns @c 0, the specified window will get the events of the specified key.\n
+ *          However, delivery of a key can always be changed by other applications grabbing the key with higher priority.\n
+ *          It can also be changed by the changes of window stacks.\n
+ *          A trial for choosing a proper grab mode will be needed.
+ * @param[in] dpy The connection to the X server
+ * @param[in] win The window to grab a key
+ * @param[in] key_name The name of a key in the string (ex> #KEY_VOLUMEUP, #KEY_VOLUMEDOWN, #KEY_SEND, and so on)
+ * @param[in] grab_mode The grab mode (such as #EXCLUSIVE_GRAB, #TOP_POSITION_GRAB, and #SHARED_GRAB)
+ * @return @c 0 on success,
+ *         otherwise failure
+ * @pre This API must be called after the window 'win' has been mapped.
+ * @post This API adds/changes the window property related to the grabbed key.
+ * @see utilx_ungrab_key()
  * @par Example (using X11 APIs)
   @code
 
@@ -719,7 +654,7 @@ int utilx_get_indicator_state (Display* dpy, Window win);
 
        ...
 
-       utilx_ungrab_key(disp, win, KEY_POWER);//Ungrab whenever you want to Â¡Â¦
+       utilx_ungrab_key(disp, win, KEY_POWER);//Ungrab whenever a user wants to
        return 0;
   }
 
@@ -740,7 +675,7 @@ int utilx_get_indicator_state (Display* dpy, Window win);
 
        ...
 
-       utilx_ungrab_key(disp, win, KEY_POWER);//Ungrab whenever you want to Â¡Â¦
+       utilx_ungrab_key(disp, win, KEY_POWER);//Ungrab whenever a user wants to
        return 0;
   }
 
@@ -761,7 +696,7 @@ int utilx_get_indicator_state (Display* dpy, Window win);
 
        ...
 
-       utilx_ungrab_key(disp, win, KEY_POWER);//Ungrab whenever you want to Â¡Â¦
+       utilx_ungrab_key(disp, win, KEY_POWER);//Ungrab whenever a user wants to
        return 0;
   }
   @endcode
@@ -769,22 +704,22 @@ int utilx_get_indicator_state (Display* dpy, Window win);
 int utilx_grab_key (Display* dpy, Window win, const char* key_name, int grab_mode);
 
 /**
- * @fn int utilx_ungrab_key (Display* dpy, Window win, const char* key_name)
- * @brief Ungrabs a key specfied by key_name for win
- *
- * This function releases the already established grab of the specfied key for the specified window.\n
- * Once the grab of the key was released, delivery of the key events for the specfied window is going to be stopped.
- *
- * This function is synchronous.
- *
- * @param[in] dpy Specifies the connection to the X server
- * @param[in] win Specifies the window to grab a key
- * @param[in] key_name Name of a key in string (ex> KEY_VOLUMEUP, KEY_VOLUMEDOWN, KEY_SEND and so on)
- * @return 0 on Success, otherwise Fail
- * @remark No additional information
- * @pre This API must be called after the window 'win' has been mapped
- * @post This API changes/removes the window property related to grabbed key
- * @see utilx_grab_key
+ * @brief Ungrabs the key specfied by @a key_name for a window.
+ *
+ * @details This function releases the already established grab of the specfied key for the specified window.\n
+ *          Once the grab of the key is released, delivery of the key events for the specfied window is going to be stopped.
+ *
+ *          This function is synchronous.
+ *
+ * @since_tizen 2.3
+ * @param[in] dpy The connection to the X server
+ * @param[in] win The window to grab a key
+ * @param[in] key_name The name of a key in the string (ex> #KEY_VOLUMEUP, #KEY_VOLUMEDOWN, #KEY_SEND, and so on)
+ * @return @c 0 on success,
+ *         otherwise failure
+ * @pre This API must be called after the window 'win' is mapped.
+ * @post This API changes/removes the window property related to the grabbed key.
+ * @see utilx_grab_key()
  * @par Example (using X11 APIs)
   @code
 
@@ -844,486 +779,131 @@ int utilx_grab_key (Display* dpy, Window win, const char* key_name, int grab_mod
                      break;
              }
              ...
-       }
-       ...
-
-       utilx_ungrab_key(disp, win, KEY_POWER);
-       return 0;
-  }
-
-  // SHARED_GRAB //
-
-  #include <X11/Xlib.h>
-  #include <utilX.h>
-
-  int main()
-  {
-       Display *disp = XOpenDisplay(NULL);
-       XEvent e;
-       Window w = XCreateSimpleWindow(disp, DefaultRootWindow(disp), 5,5, 470, 780, 2, BlackPixel(d,0), WhitePixel(d,0));
-       XSelectInput(disp, w, StructureNotifyMask | KeyPressMask | KeyReleaseMask);
-       XMapWindow(disp, w);
-
-       while(1)
-       {
-             XNextEvent(disp, &e);
-             switch(e.type)
-             {
-                    case MapNotify:
-                     utilx_grab_key(disp, w, KEY_POWER, SHARED_GRAB);
-                     break;
-             }
-             ...
-       }
-       ...
-
-       utilx_ungrab_key(disp, win, KEY_POWER);
-       return 0;
-  }
-
-  @endcode
-   * @par Example (using EFL APIs)
-  @code
-
-  // EXCLUSIVE_GRAB //
-
-  #include <utilX.h>
-  #include <Ecore_Evas.h>
-  #include <Ecore_X.h>
-
-  int main()
-  {
-       ...
-
-       Ecore_X_Display* disp = ecore_x_display_get();
-       Ecore_X_Window win = ecore_evas_software_x11_window_get(ee);
-
-       int grab_result = utilx_grab_key(disp, win, KEY_POWER, EXCLUSIVE_GRAB);
-       if( EXCLUSIVE_GRABBED_ALREADY == grab_result )
-               return -1;
-       ...
-
-       utilx_ungrab_key(disp, win, KEY_POWER);//Ungrab whenever you want to Â¡Â¦
-       return 0;
-  }
-
-  // TOP_POSITION_GRAB //
-
-  #include <utilX.h>
-  #include <Ecore_Evas.h>
-  #include <Ecore_X.h>
-
-  int main()
-  {
-       ...
-
-       Ecore_X_Display* disp = ecore_x_display_get();
-       Ecore_X_Window win = ecore_evas_software_x11_window_get(ee);
-
-       utilx_grab_key(disp, win, KEY_POWER, TOP_POSITION_GRAB);
-
-       ...
-
-       utilx_ungrab_key(disp, win, KEY_POWER);//Ungrab whenever you want to Â¡Â¦
-
-       return 0;
-  }
-
-  // SHARED_GRAB //
-
-  #include <utilX.h>
-  #include <Ecore_Evas.h>
-  #include <Ecore_X.h>
-
-  int main()
-  {
-       ...
-
-       Ecore_X_Display* disp = ecore_x_display_get();
-       Ecore_X_Window win = ecore_evas_software_x11_window_get(ee);
-
-       utilx_grab_key(disp, win, KEY_POWER, SHARED_GRAB);
-
-       ...
-
-       utilx_ungrab_key(disp, win, KEY_POWER);//Ungrab whenever you want to Â¡Â¦
-       return 0;
-  }
-  @endcode
- */
-int utilx_ungrab_key (Display* dpy, Window win, const char* key_name);
-
-/**
- * @fn int utilx_get_key_status(Display* dpy, char *key_name)
- * @brief Gets a status of a key specified by key_name
- *
- * This function gets a status of a key.\n
- * ex>UTILX_KEY_STATUS_PRESSED, UTILX_KEY_STATUS_RELEASED and UTILX_KEY_STATUS_UNKNOWN
- *
- * This function is synchronous.
- *
- * @param[in] dpy Specifies the connection to the X server
- * @param[in] key_name Name of a key in string (ex> KEY_VOLUMEUP, KEY_VOLUMEDOWN, KEY_SEND and so on)
- * @return 0 on Success, otherwise Fail
- * @remark No additional information
- * @pre This API must be called for H/W keys specified in this header file(utilX.h).
- * @par Example (using X11 APIs)
-  @code
-
-  #include <X11/Xlib.h>
-  #include <utilX.h>
-
-  int main()
-  {
-       Display *disp = XOpenDisplay(NULL);
-       Utilx_Key_Status status;
-
-       status = utilx_get_key_status(disp, KEY_PLAYCD);
-
-       switch( status )
-       {
-               case UTILX_KEY_STATUS_PRESSED:
-                       //The key is pressed.
-                       break;
-
-               case UTILX_KEY_STATUS_RELEASED:
-                       //The key is released.
-                       break;
-
-               case UTILX_KEY_STATUS_UNKNOWN:
-               default:
-                       //The key status is unknown;
-                       break;
-       }
-
-       return 0;
-  }
-
-  @endcode
-   * @par Example (using EFL APIs)
-  @code
-
-  #include <utilX.h>
-  #include <Ecore_Evas.h>
-  #include <Ecore_X.h>
-
-  int main()
-  {
-       ...
-
-       Ecore_X_Display* disp = ecore_x_display_get();
-       Utilx_Key_Status status;
-
-       status = utilx_get_key_status(disp, KEY_PLAYCD);
-
-       switch( status )
-       {
-               case UTILX_KEY_STATUS_PRESSED:
-                       //The key is pressed.
-                       break;
-
-               case UTILX_KEY_STATUS_RELEASED:
-                       //The key is released.
-                       break;
-
-               case UTILX_KEY_STATUS_UNKNOWN:
-               default:
-                       //The key status is unknown;
-                       break;
-       }
-       return 0;
-  }
-  @endcode
- */
-Utilx_Key_Status utilx_get_key_status(Display* dpy, char *key_name);
-
-/* Window Effect APIs */
-/**
- * @fn void utilx_set_window_effect_state(Display* dpy, Window win, int state)
- * @brief Sets a window's effect state ( enable or disable )
- *
- * This function sets window's effect state. if effect is not enabled by composite manager, \n
- * window's effect could not be enabled.
- *
- * This function is a asynchronous call.
- *
- * @param[in] dpy Specifies the connection to the X server
- * @param[in] win Specifies the window handle
- * @param[in] state Enables/disables the window effect
- * @remark This is used only client window. ( not root window )
- * @pre This api must be called before fist show ( XMapWindow Event ).
- * @post This changes Client Window's Effect related property.
- * @see utilx_get_window_effect_state
- * @par Example
-  @code
-  #include <X11/Xlib.h>
-  #include <utilX.h>
-  ...
-
-  Display* dpy;
-  Window root, win;
-
-  dpy = XOpenDisplay (NULL);
-  root = XDefaultRootWindow (dpy);
-
-  win = XCreateSimpleWindow (dpy, root, 0, 0, 480, 800, 2, BlackPixel (dpy,0), WhitePixel(dpy,0));
-
-  // Sets a window's effect state to enable ( enable : 1, disable 0 )
-  utilx_set_window_effect_state(dpy, win, 1);
-
-  XMapWindow (dpy, win);
-  ...
-  @endcode
- */
-void utilx_set_window_effect_state(Display* dpy, Window win, int state);
-
-/**
-* @fn int utilx_get_window_effect_state(Display* dpy, Window win)
-* @brief Gets a window's effect state ( enable or disable )
-*
-* This function returns windows's effect state.\n
-* If effect is not enabled by composite manager, then this return value is unusable or meanless.
-*
-* This function is a asynchronous call.
-*
-* @param[in] dpy Specifies the connection to the X server
-* @param[in] win Specifies the window handle
-* @return Current window effect state
-* @remark This is used only client window. ( not root window )
-* @pre This api does not require any pre-condition.
-* @post This api does not change any condition.
-* @see utilx_set_window_effect_state
-* @par Example
- @code
- #include <X11/Xlib.h>
- #include <utilX.h>
- ...
-
- Display* dpy;
- Window root, win;
-
- dpy = XOpenDisplay (NULL);
- root = XDefaultRootWindow (dpy);
-
- win = XCreateSimpleWindow (dpy, root, 0, 0, 480, 800, 2, BlackPixel (dpy,0), WhitePixel(dpy,0));
-
- XMapWindow (dpy, win);
-
- // Gets a window's effect state ( enable : 1, disable 0 )
- printf( "current window's effect state = %d\n", utilx_get_window_effect_state(dpy, win) ) ;
- ...
- @endcode
-*/
-int utilx_get_window_effect_state(Display* dpy, Window win);
-
-/**
- * @fn void utilx_show_fake_effect(Display* dpy, Window win, char *fake_image_file)
- * @brief Shows a window's "fake show effect" animation
- *
- * This function show's application fake show image.\n
- * This function is only used by application launching program.
- *
- * This function is a asynchronous call.
- *
- * @param[in] dpy Specifies the connection to the X server
- * @param[in] win Specifies the root window handle
- * @param[in] fake_image_file Specifies the fake window image and file format is png type.
- * @remark This is used only menu-screen window.
- * @pre  This api must be called before client's fist show ( XMapWindow Event ). you must call this api then run application.
- * @post This changes root window's fake effect related property.
- * @see utilx_hide_fake_effect
- * @par Example
-  @code
-  #include <X11/Xlib.h>
-  #include <utilX.h>
-  ...
-
-  Display* dpy;
-  Window root;
+       }
+       ...
 
-  dpy = XOpenDisplay (NULL);
-  root = XDefaultRootWindow (dpy);
+       utilx_ungrab_key(disp, win, KEY_POWER);
+       return 0;
+  }
 
-  // Shows a window's "fake show effect" animation, and if you want to see animation, /root/fake_window_image.png file must be exited.
-  utilx_show_fake_effect( dpy, root, "/root/fake_window_image.png");
-   ...
-  @endcode
- */
-void utilx_show_fake_effect(Display *dpy, Window win, char *fake_image_file);
+  // SHARED_GRAB //
 
-/**
- * @fn void utilx_hide_fake_effect(Display* dpy, Window win)
- * @brief Shows a window's "fake hide effect" animation, and this animation uses "fake show effect" 's window image.
- *
- * This function shoes a window's fake hide effect.\n
- * This function is only used by application launching program.\n
- * When application was not executed by any error.
- *
- * This function is a asynchronous call.
- *
- * @param[in] dpy Specifies the connection to the X server
- * @param[in] win Specifies the root window handle
- * @remark This is used only menu-screen window.
- * @pre This api must be called after "utilx_show_fake_effect()".
- * @post This changes root window's fake effect related property.
- * @see utilx_show_fake_effect
- * @par Example
-  @code
   #include <X11/Xlib.h>
   #include <utilX.h>
-  ...
 
-  Display* dpy;
-  Window root;
+  int main()
+  {
+       Display *disp = XOpenDisplay(NULL);
+       XEvent e;
+       Window w = XCreateSimpleWindow(disp, DefaultRootWindow(disp), 5,5, 470, 780, 2, BlackPixel(d,0), WhitePixel(d,0));
+       XSelectInput(disp, w, StructureNotifyMask | KeyPressMask | KeyReleaseMask);
+       XMapWindow(disp, w);
 
-  dpy = XOpenDisplay (NULL);
-  root = XDefaultRootWindow (dpy);
+       while(1)
+       {
+             XNextEvent(disp, &e);
+             switch(e.type)
+             {
+                    case MapNotify:
+                     utilx_grab_key(disp, w, KEY_POWER, SHARED_GRAB);
+                     break;
+             }
+             ...
+       }
+       ...
 
-  // Shows a window's "fake hide effect" animation. and if you wnat to see animation, utilx_show_fake_effect() function must be excuted before utilx_show_fake_effect()
-  // and if real window is showed , then fake hide effect could not be showed.
-  utilx_hide_fake_effect( dpy, root );
-   ...
-  @endcode
- */
-void utilx_hide_fake_effect(Display *dpy, Window win);
+       utilx_ungrab_key(disp, win, KEY_POWER);
+       return 0;
+  }
 
-/**
- * @fn void utilx_set_window_effect_style(Display* dpy, Window win, Utilx_Effect_Type type, Utilx_Effect_Style style)
- * @brief Sets a window's effect style with effect type.
- *
- * This function sets a window's effect style with effect type.\n
- * Default Window Effect is setted by Window Type and Window Class.\n
- * And then, you could change custom effecct.\n
- * Custom Effect is available max 10. ( CUSTOM0 ~ CUSTOM9 )\n
- * If you didn't set custom effect, then compositing window manger provides Default Window Effect.\n
- *
- * This function is a asynchronous call.
- *
- * @param[in] dpy Specifies the connection to the X server
- * @param[in] win Specifies the window handle
- * @param[in] type Specifies the window's effect type ( ex. UTILX_EFFECT_TYPE_MAP, UTILX_EFFECT_TYPE_UNMAP, etc )
- * @param[in] style Specifies  the window's effect style ( ex. UTILX_EFFECT_STYLE_DEFAULT, UTILX_EFFECT_STYLE_NONE, UTILX_EFFECT_STYLE_CUSTOM0, etc )
- * @remark This is used only client window. ( not root window )
- * @pre This api does not require any pre-condition.
- * @post This changes window's effect type related property ( _NET_CM_WINDOW_EFFECT_TYPE  ).
- * @see utilx_get_window_effect_style
- * @par Example
+  @endcode
+   * @par Example (using EFL APIs)
   @code
-  #include <X11/Xlib.h>
-  #include <X11/Xutil.h>
-  #include <utilX.h>
-  ...
-
-  Display *dpy ;
-  Window win, root ;
-  unsigned long black, white;
-
-  dpy = XOpenDisplay(NULL) ;
 
-  black = BlackPixel(dpy, 0);
-  white = WhitePixel(dpy, 0);
+  // EXCLUSIVE_GRAB //
 
-  root = XDefaultRootWindow (dpy);
-  win = XCreateSimpleWindow ( dpy, root, 0, 0, 100, 100, 2, BlackPixel (d,0), WhitePixel(d,0) );
+  #include <utilX.h>
+  #include <Ecore_Evas.h>
+  #include <Ecore_X.h>
 
-  utilx_set_window_effect_style(dpy, win, UTILX_EFFECT_TYPE_MAP, UTILX_EFFECT_STYLE_CUSTOM0); //  window's show effet type change to UTILX_EFFECT_STYLE_CUSTOM0
+  int main()
+  {
+       ...
 
-  XMapWindow(dpy, win);
+       Ecore_X_Display* disp = ecore_x_display_get();
+       Ecore_X_Window win = ecore_evas_software_x11_window_get(ee);
 
-  ...
+       int grab_result = utilx_grab_key(disp, win, KEY_POWER, EXCLUSIVE_GRAB);
+       if( EXCLUSIVE_GRABBED_ALREADY == grab_result )
+               return -1;
+       ...
 
-  utilx_set_window_effect_style(dpy, win, UTILX_EFFECT_TYPE_UNMAP, UTILX_EFFECT_STYLE_CUSTOM0); // window's hide effet type change to UTILX_EFFECT_STYLE_CUSTOM0
+       utilx_ungrab_key(disp, win, KEY_POWER);//Ungrab whenever a user wants to
+       return 0;
+  }
 
-  XUnmapWindow (dpy, win);
+  // TOP_POSITION_GRAB //
 
-  utilx_set_window_effect_style(dpy, win, UTILX_EFFECT_TYPE_MAP, UTILX_EFFECT_STYLE_DEFAULT); // window's show effet type change to UTILX_EFFECT_STYLE_DEFAULT
-  XMapWindow (dpy, win);
+  #include <utilX.h>
+  #include <Ecore_Evas.h>
+  #include <Ecore_X.h>
 
-  ...
+  int main()
+  {
+       ...
 
-  utilx_set_window_effect_style(dpy, win, UTILX_EFFECT_TYPE_UNMAP, UTILX_EFFECT_STYLE_DEFAULT); // window's hide effet type change to UTILX_EFFECT_STYLE_DEFAULT
-  XUnmapWindow (dpy, win);
+       Ecore_X_Display* disp = ecore_x_display_get();
+       Ecore_X_Window win = ecore_evas_software_x11_window_get(ee);
 
-  ...
+       utilx_grab_key(disp, win, KEY_POWER, TOP_POSITION_GRAB);
 
-  utilx_set_window_effect_style(dpy, win, UTILX_EFFECT_TYPE_MAP, UTILX_EFFECT_STYLE_NONE); // window's show effet type change to UTILX_EFFECT_STYLE_NONE
-  XMapWindow (dpy, win);
+       ...
 
-  ...
+       utilx_ungrab_key(disp, win, KEY_POWER);//Ungrab whenever a user wants to
 
-  utilx_set_window_effect_style(dpy, win, UTILX_EFFECT_TYPE_UNMAP, UTILX_EFFECT_STYLE_NONE); // window's hide effet type change to UTILX_EFFECT_STYLE_NONE
-  XUnmapWindow (dpy, win);
+       return 0;
+  }
 
-  ...
-  @endcode
- */
-void utilx_set_window_effect_style(Display* dpy, Window win, Utilx_Effect_Type type, Utilx_Effect_Style style);
+  // SHARED_GRAB //
 
-/**
- * @fn Utilx_Effect_Style utilx_get_window_effect_style(Display* dpy, Window win, Utilx_Effect_Type type)
- * @brief Gets a window's effect style with effect type.
- *
- * This function gets a window's effect style with effect type.\n
- *
- * This function is a asynchronous call.
- *
- * @param[in] dpy Specifies the connection to the X server
- * @param[in] win Specifies the window handle
- * @param[in] type Specifies the window's effect type ( ex. UTILX_EFFECT_TYPE_MAP, UTILX_EFFECT_TYPE_UNMAP, etc )
- * @return Current window's effect style ( ex. UTILX_EFFECT_STYLE_DEFAULT, UTILX_EFFECT_STYLE_NONE, UTILX_EFFECT_STYLE_CUSTOM0, etc )
- * @remark This is used only client window. ( not root window )
- * @pre This api does not require any pre-condition.
- * @post This api does not change any condition.
- * @see utilx_set_window_effect_style
- * @par Example
-  @code
-  #include <X11/Xlib.h>
-  #include <X11/Xutil.h>
   #include <utilX.h>
-  ...
-
-  Display *dpy ;
-  Window win, root ;
-  unsigned long black, white;
-  Utilx_Effect_Style style;
-
-  dpy = XOpenDisplay(NULL) ;
-
-  black = BlackPixel(dpy, 0);
-  white = WhitePixel(dpy, 0);
+  #include <Ecore_Evas.h>
+  #include <Ecore_X.h>
 
-  root = XDefaultRootWindow (dpy);
-  win = XCreateSimpleWindow ( dpy, root, 0, 0, 100, 100, 2, BlackPixel (d,0), WhitePixel(d,0) );
+  int main()
+  {
+       ...
 
-  style = utilx_set_window_effect_style(dpy, win, UTILX_EFFECT_TYPE_MAP); //  get effect style with window's show effet type
+       Ecore_X_Display* disp = ecore_x_display_get();
+       Ecore_X_Window win = ecore_evas_software_x11_window_get(ee);
 
-  ...
+       utilx_grab_key(disp, win, KEY_POWER, SHARED_GRAB);
 
-  style = utilx_set_window_effect_style(dpy, win, UTILX_EFFECT_TYPE_UNMAP); //  get effect style with window's show effet type
+       ...
 
-  ...
+       utilx_ungrab_key(disp, win, KEY_POWER);//Ungrab whenever a user wants to
+       return 0;
+  }
   @endcode
  */
-Utilx_Effect_Style utilx_get_window_effect_style(Display* dpy, Window win, Utilx_Effect_Type type);
+int utilx_ungrab_key (Display* dpy, Window win, const char* key_name);
 
 /**
- * @fn void utilx_set_window_opaque_state (Display* dpy, Window win, int opaque)
- * @brief Sets the window's opaque state
+ * @brief Sets the window's opaque state.
  *
- * This function sets window's visibility to opaque even if the window is an alpha window.
- * This function is available only alpha window.
- * An alpha window's default opaque state is UTILX_OPAQUE_STATE_OFF.
+ * @details This function sets the window's visibility to opaque even if the window is an alpha window.
+ *          This function is available only for an alpha window.
+ *          An alpha window's default opaque state is #UTILX_OPAQUE_STATE_OFF.
  *
- * This function is a asynchronous call.
+ *          This function is an asynchronous call.
  *
- * @param[in] dpy Specifies the connection to the X server
- * @param[in] win Specifies the window handle
- * @param[in] state Specifies whether the window set a visible state to opaque(UTILX_OPAQUE_STATE_ON) or not(UTILX_OPAQUE_STATE_OFF)
- * @return 1 on Success, otherwise Fail
- * @remark This is used only alpha window.
- * @pre None
- * @post
- * @see
+ * @since_tizen 2.3
+ * @remarks This is used only for alpha windows.
+ * @param[in] dpy The connection to the X server
+ * @param[in] win The window handle
+ * @param[in] state The value that indicates whether the window has set a visible state to opaque(#UTILX_OPAQUE_STATE_ON) or not(#UTILX_OPAQUE_STATE_OFF)
+ * @return @c 1 on success,
+           otherwise failure
  * @par Example
   @code
   #include <X11/Xlib.h>
@@ -1355,198 +935,21 @@ Utilx_Effect_Style utilx_get_window_effect_style(Display* dpy, Window win, Utilx
 int utilx_set_window_opaque_state (Display* dpy, Window win, Utilx_Opaque_State state);
 
 /**
- * @fn int utilx_set_screen_capture(Display* dpy, int enable)
- * @brief Specifies whether the screen capture functionality is enable or not.
- *
- * This function makes the screen capture functionality of CBHM enable or disable.
- * CBHM = Clipboard History Manager.
- *
- * This function is synchronous.
- *
- * @param[in] dpy    Specifies the connection to the X server
- * @param[in] enable Specifies the window handle. (1:Enable, 0:Disable)
- * @pre This api does not require any pre-condition.
- * @post This api does not change any condition.
- * @see utilx_get_screen_capture
- * @par Example
-  @code
-  #include <X11/Xlib.h>
-  #include <X11/Xutil.h>
-  #include <utilX.h>
-  ...
-
-  Display *dpy ;
-
-  dpy = XOpenDisplay(NULL) ;
-
-  utilx_set_screen_capture (dpy, 1);
-
-  ...
-  @endcode
- */
-int utilx_set_screen_capture(Display* dpy, int enable);
-
-/**
- * @fn int utilx_get_screen_capture(Display* dpy, int enable)
- * @brief Gets whether the screen capture functionality is enable or not.
- *
- * This function gets whether the screen capture functionality of CBHM is enable or not.
- * CBHM = Clipboard History Manager.
- *
- * This function is synchronous.
- *
- * @param[in] dpy    Specifies the connection to the X server
- * @pre This api does not require any pre-condition.
- * @post This api does not change any condition.
- * @see utilx_set_screen_capture
- * @par Example
-  @code
-  #include <X11/Xlib.h>
-  #include <X11/Xutil.h>
-  #include <utilX.h>
-  ...
-
-  Display *dpy ;
-  int enable;
-
-  dpy = XOpenDisplay(NULL) ;
-
-  enable = utilx_set_screen_capture (dpy);
-
-  ...
-  @endcode
- */
-int utilx_get_screen_capture(Display* dpy);
-
-/**
- * @fn void utilx_set_window_cardinal_property(Display* dpy, Window win, Atom atom, unsigned int *value)
- * @brief Sets the cardinal property to Window
- *
- * This function Sets the cardinal property to Window.
- *
- * This function is synchronous.
- *
- * @param[in] dpy    Specifies the connection to the X server
- * @param[in] win    Specifies the window handle
- * @param[in] atom   Specifies the atom of cardinal property
- * @param[in] value  the value of cardinal property to set.
- * @pre This api does not require any pre-condition.
- * @post This api does not change any condition.
- * @see utilx_get_window_cardinal_property
- * @par Example
-  @code
-  #include <X11/Xlib.h>
-  #include <X11/Xutil.h>
-  #include <utilX.h>
-  ...
-
-  Display *dpy ;
-  Window root;
-  Atom atom = None;
-  int value = 1;
-
-  dpy = XOpenDisplay (NULL);
-  root = XDefaultRootWindow (dpy);
-
-  atom = XInternAtom(dpy, "TEST_ATOM", False);
-
-  utilx_set_window_cardinal_property (dpy, root, atom, (unsigned int*)&value);
-
-  ...
-  @endcode
- */
-void utilx_set_window_cardinal_property(Display* dpy, Window win, Atom atom, unsigned int *value);
-
-/**
- * @fn int utilx_get_window_cardinal_property(Display* dpy, Window win, Atom atom, unsigned int *value)
- * @brief Gets the value of cardinal property.
- *
- * This function gets the value of cardinal property.
- *
- * This function is synchronous.
- *
- * @param[in] dpy    Specifies the connection to the X server
- * @param[in] win    Specifies the window handle
- * @param[in] atom   Specifies the atom of cardinal property
- * @param[out] value  the value of cardinal property to get.
- * @pre This api does not require any pre-condition.
- * @post This api does not change any condition.
- * @see utilx_set_window_cardinal_property
- * @par Example
-  @code
-  #include <X11/Xlib.h>
-  #include <X11/Xutil.h>
-  #include <utilX.h>
-  ...
-
-  Display *dpy ;
-  Window root;
-  Atom atom = None;
-  int value;
-
-  dpy = XOpenDisplay (NULL);
-  root = XDefaultRootWindow (dpy);
-
-  atom = XInternAtom(dpy, "TEST_ATOM", False);
-
-  if (utilx_set_window_cardinal_property (dpy, root, atom, (unsigned int*)&value) > 0)
-  {
-    success;
-  }
-
-  ...
-  @endcode
- */
-int utilx_get_window_cardinal_property(Display* dpy, Window win, Atom atom, unsigned int *value);
-
-/**
- * @fn void utilx_show_capture_effect(Display *dpy, Window win )
- * @brief Shows a capture effect animation
- *
- * This function show capture effect animation.\n
- * This function is only used by Screen Capture Application.
- *
- * This function is a asynchronous call.
- *
- * @param[in] dpy Specifies the connection to the X server
- * @param[in] win Specifies the root window handle
- * @remark This is used only screen capture application.
- * @pre  This api does not require any pre-condition.
- * @post This api does not change any condition.
- * @see utilx_set_screen_capture
- * @par Example
-  @code
-  #include <X11/Xlib.h>
-  #include <utilX.h>
-  ...
-
-  Display* dpy;
-  Window root;
-
-  dpy = XOpenDisplay (NULL);
-  root = XDefaultRootWindow (dpy);
-
-  // Shows a  Shows a capture effect animation
-  utilx_show_capture_effect( dpy, root);
-   ...
-  @endcode
- */
-void utilx_show_capture_effect(Display *dpy, Window win );
-
-/**
- * @fn void* utilx_create_screen_shot (Display* dpy, int width, int height)
- * @brief Create a screenshot image.
- *
- * This function create a screenshot image.\n
- * To use this function, you should get the permission first. Once this functions
- * is called, utilx_release_screen_shot should be called after it.
- *
- * @param[in] dpy Specifies the connection to the X server
- * @param[in] width Specifies the root window handle
- * @param[in] height Specifies the root window handle
- * @remark You should get the permission to use.
- * @post This api does not change any condition.
- * @see utilx_release_screen_shot
+ * @brief Creates a screenshot image.
+ *
+ * @details This function creates a screenshot image of the display.\n
+ *          To use this function, you should get the permission first.\n
+ *          In addition, device LCD must be turned on; otherwise, this function fails.\n
+ *          Once this functions is called, utilx_release_screen_shot() should be called after it.
+ *
+ * @since_tizen 2.3
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/screenshot
+ * @remarks You should get the permission to use. Device LCD must be on.
+ * @param[in] dpy The connection to the X server
+ * @param[in] width The root window handle
+ * @param[in] height The root window handle
+ * @see utilx_release_screen_shot()
  * @par Example
   @code
     Display* dpy;
@@ -1574,14 +977,16 @@ void utilx_show_capture_effect(Display *dpy, Window win );
 void* utilx_create_screen_shot (Display* dpy, int width, int height);
 
 /**
- * @fn void  utilx_release_screen_shot (void)
- * @brief Release screenshot resources.
+ * @brief Releases screenshot resources.
  *
- * This function release screenshot resources.\n
- * utilx_release_screen_shot should be called once utilx_create_screen_shot is
- * called.
+ * @details This function releases resources associated with screenshot
+ *          image of the display. utilx_release_screen_shot() should be called once
+ *          utilx_create_screen_shot() is called.
  *
- * @see utilx_create_screen_shot
+ * @since_tizen 2.3
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/screenshot
+ * @see utilx_create_screen_shot()
  * @par Example
   @code
     Display* dpy;
@@ -1608,84 +1013,13 @@ void* utilx_create_screen_shot (Display* dpy, int width, int height);
  */
 void  utilx_release_screen_shot (void);
 
-/**
- * @fn void  utilx_set_fb_visible (Display* dpy, Utilx_Fb_Type fb_type, Bool visible)
- * @brief Set fb's visibility.
- *
- * This function can make a framebuffer visible or non-visible. \n
- * By the way, in case of UTILX_FB_TYPE_UI, if there is the request for UI update,
- * the visibility of UI framebuffer will be changed from False to True automatically.
- * Please note this.
- *
- * @param[in] dpy      Specifies the connection to the X server
- * @param[in] fb_type  Specifies the fb type to set visibility of a framebuffer
- * @param[in] visible  Visible/Non-Visible
- * @see utilx_get_fb_visible
- * @par Example
-  @code
-  #include <utilX.h>
-  ...
-  Display* dpy = XOpenDisplay (NULL);
-
-  // Hide the UI framebuffer of main lcd.
-  utilx_set_fb_visible (dpy, UTILX_FB_TYPE_UI, False);
-  ...
-  @endcode
- */
-void  utilx_set_fb_visible (Display* dpy, Utilx_Fb_Type fb_type, Bool visible);
-
-/**
- * @fn Bool  utilx_get_fb_visible (Display* dpy, Utilx_Fb_Type fb_type)
- * @brief Get framebuffer's visibility.
- *
- * This function get the visibility of a framebuffer. \n
- *
- * @param[in] dpy       Specifies the connection to the X server
- * @param[in] fb_type   Specifies the fb type to get visibility of a framebuffer
- * @return Current visibility of a framebuffer
- * @see utilx_set_fb_visible
- * @par Example
-  @code
-  #include <utilX.h>
-  ...
-  Display* dpy = XOpenDisplay (NULL);
-  Bool visible;
-
-  visible = utilx_get_fb_visible (dpy, UTILX_FB_TYPE_UI);
-  ...
-  @endcode
- */
-Bool  utilx_get_fb_visible (Display* dpy, Utilx_Fb_Type fb_type);
-
-/**
- * @fn void  utilx_set_video_offset (Display* dpy, int x, int y)
- * @brief Set the offset of video.
- *
- * This function sets the offset of video layer. \n
- *
- * @param[in] dpy   Specifies the connection to the X server
- * @param[in] x     x offset
- * @param[in] y     y offset
- * @par Example
-  @code
-  #include <utilX.h>
-  ...
-  Display* dpy = XOpenDisplay (NULL);
-
-  utilx_set_video_offset (dpy, 0, 100);
-  ...
-  @endcode
- */
-void  utilx_set_video_offset (Display* dpy, int x, int y);
-
 #ifdef __cplusplus
 }
 #endif
 
-
 /**
- * @}
- */
+*@}
+*/
 
-#endif /* __SAMSUNG_LINUX_UTIL_X11_H__ */
+#endif /* __TIZEN_LINUX_UTIL_X11_H__ */
 
diff --git a/utilX.pc b/utilX.pc
new file mode 100644 (file)
index 0000000..66e984f
--- /dev/null
+++ b/utilX.pc
@@ -0,0 +1,13 @@
+# Package Information for pkg-config
+
+prefix=/usr
+exec_prefix=${prefix}
+libdir=${prefix}/lib
+includedir=${prefix}/include
+
+Name: libSLP-utilX
+Description: SAMSUNG Linux platform X11 utilities library
+Version: 1.1.0
+Requires: xproto x11
+Libs: -L${libdir} -lutilX
+Cflags: -I${includedir}
index 2c3b2c1..54b2e91 100644 (file)
@@ -2,11 +2,12 @@
 
 prefix=@PREFIX@
 exec_prefix=@EXEC_PREFIX@
-libdir=@LIB_INSTALL_DIR@
+libdir=@LIBDIR@
 includedir=@INCLUDEDIR@
 
 Name: libSLP-utilX
 Description: SAMSUNG Linux platform X11 utilities library
 Version: @VERSION@
+Requires: xproto x11
 Libs: -L${libdir} -lutilX
 Cflags: -I${includedir}
diff --git a/utilX_ext.h b/utilX_ext.h
new file mode 100644 (file)
index 0000000..9bf7b2c
--- /dev/null
@@ -0,0 +1,76 @@
+/*
+ * libslp-utilx
+ *
+   Copyright (c) 2012 Samsung Electronics Co., Ltd All Rights Reserved
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ *
+ */
+
+#ifndef __SAMSUNG_LINUX_UTIL_X11_EXT_H__
+#define __SAMSUNG_LINUX_UTIL_X11_EXT_H__
+
+#include <sys/types.h>
+#include <X11/X.h>
+#include <X11/Xlib.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define STR_ATOM_SCRNCONF_STATUS "_SCRNCONF_STATUS"
+
+typedef enum _Utilx_Scrnconf_Status
+{
+       UTILX_SCRNCONF_STATUS_NULL,
+       UTILX_SCRNCONF_STATUS_CONNECT,
+       UTILX_SCRNCONF_STATUS_ACTIVE
+} Utilx_Scrnconf_Status;
+
+typedef enum _Utilx_Scrnconf_Dispmode
+{
+       UTILX_SCRNCONF_DISPMODE_NULL,
+       UTILX_SCRNCONF_DISPMODE_CLONE,
+       UTILX_SCRNCONF_DISPMODE_EXTENDED
+} Utilx_Scrnconf_Dispmode;
+
+typedef enum _Utilx_Fb_Type
+{
+       UTILX_FB_TYPE_NONE,
+       UTILX_FB_TYPE_UI,
+       UTILX_FB_TYPE_OVERLAY,
+} Utilx_Fb_Type;
+
+typedef struct _UtilxScrnConf
+{
+       char *str_output;
+       Utilx_Scrnconf_Status status;
+       char *str_resolution;
+       Utilx_Scrnconf_Dispmode dispmode;
+} UtilxScrnConf;
+
+UtilxScrnConf *utilx_scrnconf_allocate (void);
+void utilx_scrnconf_free (UtilxScrnConf *scrnconf);
+int utilx_scrnconf_get_info (Display *dpy, UtilxScrnConf *scrnconf);
+int utilx_scrnconf_set_dispmode (Display *dpy, Utilx_Scrnconf_Dispmode dispmode);
+
+void* utilx_create_video_screen_shot (Display* dpy, Window win, int width, int height);
+void  utilx_set_fb_visible (Display* dpy, Utilx_Fb_Type fb_type, Bool visible);
+Bool  utilx_get_fb_visible (Display* dpy, Utilx_Fb_Type fb_type);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __SAMSUNG_LINUX_UTIL_X11_EXT_H__ */
+
diff --git a/x11.c b/x11.c
index d34bf7d..4b3cb17 100644 (file)
--- a/x11.c
+++ b/x11.c
@@ -30,6 +30,7 @@
 #include <X11/extensions/Xrandr.h>
 
 #include "utilX.h"
+#include "utilX_ext.h"
 #include "util_x11.h"
 
 #include <fcntl.h>
@@ -54,44 +55,18 @@ static Atom _atom_grab_excl_win = None;
 static Atom _atom_grab_or_excl_win = None;
 
 static Atom _atom_notification_level = None;
-static Atom _atom_indicator_visible_state = None;
-static Atom _atom_indicator_visible_state_on = None;
-static Atom _atom_indicator_visible_state_off = None;
 
-static Atom _atom_comp_effect_state = None;
-static Atom _atom_comp_fake_launch = None;
 static Atom _atom_comp_fake_launch_image = None;
 
-static Atom _atom_comp_window_effect_type = None;
-static Atom _atom_comp_effect_default = None;
-static Atom _atom_comp_effect_none = None;
-static Atom _atom_comp_effect_custom0 = None;
-static Atom _atom_comp_effect_custom1 = None;
-static Atom _atom_comp_effect_custom2 = None;
-static Atom _atom_comp_effect_custom3 = None;
-static Atom _atom_comp_effect_custom4 = None;
-static Atom _atom_comp_effect_custom5 = None;
-static Atom _atom_comp_effect_custom6 = None;
-static Atom _atom_comp_effect_custom7 = None;
-static Atom _atom_comp_effect_custom8 = None;
-static Atom _atom_comp_effect_custom9 = None;
-
 static Atom _atom_window_opaque = None;
 
-static Atom _atom_screen_capture_disable = None;
-
-static Atom _atom_comp_capture_effect = None;
+static Atom _atom_window_pixman = None;
 
 const unsigned long maxlen = 1024l;
 
 static void _utilx_set_window_property (Display* dpy, Window win, Atom atom, Atom type, unsigned int *val, unsigned int num);
 static int _utilx_get_window_property (Display* dpy, Window win, Atom atom, Atom type, unsigned int *val, unsigned int len);
 
-static void _utilx_effect_atom_check( Display* dpy );
-static Atom _utilx_convert_style_to_atom( Display* dpy, Utilx_Effect_Style style );
-static Utilx_Effect_Style _utilx_convert_atom_to_style( Display* dpy, Atom style );
-
-static int _utilx_get_indicator_atoms(Display *dpy);
 
 API void utilx_set_system_notification_level (Display* dpy, Window win, Utilx_Notification_Level level)
 {
@@ -198,105 +173,6 @@ error:
        return noti_level;
 }
 
-static int _utilx_get_indicator_atoms(Display *dpy)
-{
-       if (!_atom_indicator_visible_state)
-       {
-               _atom_indicator_visible_state = XInternAtom (dpy, "_E_ILLUME_INDICATOR_STATE", False);
-               if (!_atom_indicator_visible_state)
-               {
-                       fprintf (stderr, "[UTILX] Error.. Cannot create _E_ILLUME_INDICATOR_STATE atom.. %s (%d)\n", __func__, __LINE__);
-                       return 0;
-               }
-       }
-
-       if (!_atom_indicator_visible_state_on)
-       {
-               _atom_indicator_visible_state_on = XInternAtom (dpy, "_E_ILLUME_INDICATOR_ON", False);
-               if (!_atom_indicator_visible_state_on)
-               {
-                       fprintf (stderr, "[UTILX] Error.. Cannot create _E_ILLUME_INDICATOR_ON atom.. %s (%d)\n", __func__, __LINE__);
-                       return 0;
-               }
-       }
-
-       if (!_atom_indicator_visible_state_off)
-       {
-               _atom_indicator_visible_state_off = XInternAtom (dpy, "_E_ILLUME_INDICATOR_OFF", False);
-               if (!_atom_indicator_visible_state_off)
-               {
-                       fprintf (stderr, "[UTILX] Error.. Cannot create _E_ILLUME_INDICATOR_OFF atom.. %s (%d)\n", __func__, __LINE__);
-                       return 0;
-               }
-       }
-
-       return 1;
-}
-
-API void utilx_enable_indicator (Display* dpy, Window win, int enable)
-{
-       UTILX_TRACE ("[UTILX] utilx_indicator_set_visible_state... win = %x, show_state = %d\n", win, enable);
-
-       if (dpy == NULL)
-       {
-               fprintf (stderr, "[UTILX] Error.. Invald Display.. %s (%d)\n", __func__, __LINE__);
-               return;
-       }
-
-       if (!_utilx_get_indicator_atoms(dpy))
-       {
-               fprintf (stderr, "[UTILX] Error.. Cannot create atoms.. %s (%d)\n", __func__, __LINE__);
-               return;
-       }
-
-       if (enable == 1)
-       {
-               _utilx_set_window_property (dpy, win, _atom_indicator_visible_state, XA_ATOM,
-                       (unsigned int *)&_atom_indicator_visible_state_on, 1);
-       }
-       else
-       {
-               _utilx_set_window_property (dpy, win, _atom_indicator_visible_state, XA_ATOM,
-                       (unsigned int *)&_atom_indicator_visible_state_off, 1);
-       }
-}
-
-
-API int utilx_get_indicator_state (Display* dpy, Window win)
-{
-       UTILX_TRACE ("[UTILX] utilx_indicator_set_visible_state... win = %x, show_state = %d\n", win, enable);
-
-       int ret;
-       Atom state;
-
-       if (dpy == NULL)
-       {
-               fprintf (stderr, "[UTILX] Error.. Invald Display.. %s (%d)\n", __func__, __LINE__);
-               return -1;
-       }
-
-       if (!_utilx_get_indicator_atoms(dpy))
-       {
-               fprintf (stderr, "[UTILX] Error.. Cannot create atoms.. %s (%d)\n", __func__, __LINE__);
-               return -1;
-       }
-
-       ret = _utilx_get_window_property (dpy, win, _atom_indicator_visible_state, XA_ATOM,
-                       (unsigned int *)&state, 1);
-
-       if (ret > 0)
-       {
-               if (state == _atom_indicator_visible_state_on)
-                       return 1;
-               else if (state == _atom_indicator_visible_state_off)
-                       return 0;
-               else
-                       return -1;
-       }
-       else
-               return -1;
-}
-
 static void
 _utilx_set_window_property (Display* dpy, Window win, Atom atom, Atom type, unsigned int *val, unsigned int num)
 {
@@ -477,6 +353,7 @@ static void _set_exclusive_grab_info_to_root (Display *disp, int keycode, Window
        XSync(disp, False);
 
 out:
+       _free_list_of_grabbed_key(key_list);
        return;
 }
 
@@ -566,10 +443,10 @@ static void _unset_exclusive_grab_info_to_root (Display *disp, int keycode, int
        }
        XSync(disp, False);
 
-       if(new_key_list)
-               free(new_key_list);
+       _free_new_list_of_grabbed_key(new_key_list);
 
 out:
+       _free_list_of_grabbed_key(key_list);
        return;
 }
 
@@ -612,10 +489,14 @@ static int _is_grabbed_key_exclusively (Display* disp, int keycode, int grab_mod
        for( i=0 ; i < nr_item ; i++ )
        {
                if( key_list[i] == keycode )
+        {
+               _free_list_of_grabbed_key(key_list);
                        return EXCLUSIVE_GRABBED_ALREADY;
+        }
        }
 
 out:
+       _free_list_of_grabbed_key(key_list);
        return result;
 }
 
@@ -623,7 +504,7 @@ API int utilx_grab_key (Display* disp, Window win, const char* key, int grab_mod
 {
        unsigned long cnt;
        int *key_list = NULL;
-       int i, result = 0;
+       int i, result=0, ret = 0;
        int keycode = 0;
        KeySym keysym;
        errno = EINVAL;
@@ -657,15 +538,6 @@ API int utilx_grab_key (Display* disp, Window win, const char* key, int grab_mod
                        goto out;
                }
        }
-       else if( grab_mode == OR_EXCLUSIVE_GRAB )
-       {
-               result = _is_grabbed_key_exclusively(disp, keycode, grab_mode);
-
-               if( result )
-               {
-                       utilx_ungrab_key(disp, win, key);
-               }
-       }
 
        keycode |= grab_mode;
 
@@ -674,15 +546,8 @@ API int utilx_grab_key (Display* disp, Window win, const char* key, int grab_mod
                i = _search_grabbed_key(key_list, keycode, cnt);
                _free_list_of_grabbed_key(key_list);
                if ( i != -1 ) {
-                       if( grab_mode == OR_EXCLUSIVE_GRAB )
-                       {
-                               utilx_ungrab_key(disp, win, key);
-                       }
-                       else
-                       {
                        fprintf(stderr, "Key is already grabbed\n");
                        goto out;
-                       }
                }
        }
 
@@ -691,8 +556,17 @@ API int utilx_grab_key (Display* disp, Window win, const char* key, int grab_mod
        XSync(disp, False);
        keycode = keycode & (~GRAB_MODE_MASK);
 
-       if( EXCLUSIVE_GRAB == grab_mode || OR_EXCLUSIVE_GRAB == grab_mode )
+       if( EXCLUSIVE_GRAB == grab_mode )
                _set_exclusive_grab_info_to_root(disp, keycode, win, grab_mode);
+       if( OR_EXCLUSIVE_GRAB == grab_mode )
+       {
+               ret = _is_grabbed_key_exclusively(disp, keycode, grab_mode);
+
+               if( !ret )
+               {
+                       _set_exclusive_grab_info_to_root(disp, keycode, win, grab_mode);
+               }
+       }
 
        errno = 0;
 
@@ -760,10 +634,6 @@ API int utilx_ungrab_key (Display* disp, Window win, const char* key)
                                }
                        }
                }
-               else
-               {
-                       _unset_exclusive_grab_info_to_root(disp, keycode, OR_EXCLUSIVE_GRAB);
-               }
        }
        else
        {
@@ -791,70 +661,6 @@ out:
        return ret;
 }
 
-API Utilx_Key_Status utilx_get_key_status(Display* dpy, char *key_name)
-{
-       unsigned char keymap[32];
-       static unsigned int masktable[8] = { 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80 };
-       Utilx_Key_Status status = UTILX_KEY_STATUS_UNKNOWN;
-
-       if( !strncmp(key_name, KEY_VOLUMEDOWN, LEN_KEY_VOLUMEDOWN) ||
-               !strncmp(key_name, KEY_VOLUMEUP, LEN_KEY_VOLUMEUP) ||
-               !strncmp(key_name, KEY_PAUSE, LEN_KEY_PAUSE) ||
-               !strncmp(key_name, KEY_SEND, LEN_KEY_SEND) ||
-               !strncmp(key_name, KEY_SELECT, LEN_KEY_VOLUMEDOWN) ||
-               !strncmp(key_name, KEY_END, LEN_KEY_END) ||
-               !strncmp(key_name, KEY_POWER, LEN_KEY_POWER) ||
-               !strncmp(key_name, KEY_CAMERA, LEN_KEY_CAMERA) ||
-               !strncmp(key_name, KEY_CONFIG, LEN_KEY_CONFIG) ||
-               !strncmp(key_name, KEY_PLAYCD, LEN_KEY_PLAYCD) ||
-               !strncmp(key_name, KEY_STOPCD, LEN_KEY_STOPCD) ||
-               !strncmp(key_name, KEY_PAUSECD, LEN_KEY_PAUSECD) ||
-               !strncmp(key_name, KEY_NEXTSONG, LEN_KEY_NEXTSONG) ||
-               !strncmp(key_name, KEY_PREVIOUSSONG, LEN_KEY_PREVIOUSSONG) ||
-               !strncmp(key_name, KEY_REWIND, LEN_KEY_REWIND) ||
-               !strncmp(key_name, KEY_FASTFORWARD, LEN_KEY_FASTFORWARD) ||
-               !strncmp(key_name, KEY_MEDIA, LEN_KEY_MEDIA) )
-       {
-               KeySym ks = XStringToKeysym(key_name);
-               KeyCode kc = XKeysymToKeycode(dpy, ks);
-
-               if( kc )
-               {
-                       XQueryKeymap(dpy, (char *)keymap);
-                       if( keymap[kc >> 3] & masktable[kc & 7] )
-                               status = UTILX_KEY_STATUS_PRESSED;
-                       else
-                               status = UTILX_KEY_STATUS_RELEASED;
-               }
-       }
-
-       return status;
-}
-
-API void utilx_set_window_effect_state(Display* dpy, Window win, int state)
-{
-       if ( dpy == NULL )
-       {
-               fprintf (stderr, "[UTILX] Error.. Invald Display.. %s (%d)\n", __func__, __LINE__);
-               return;
-       }
-       if( !_atom_comp_effect_state)
-               _atom_comp_effect_state = XInternAtom(dpy, "_NET_CM_WINDOW_EFFECT_ENABLE",False);
-
-       _utilx_set_window_property(dpy, win, _atom_comp_effect_state, XA_CARDINAL, (unsigned int *)&state, 1);
-
-       XSync(dpy, 0 );
-}
-
-API int utilx_get_window_effect_state(Display* dpy, Window win)
-{
-       int state = 0;
-       if( !_atom_comp_effect_state)
-               _atom_comp_effect_state = XInternAtom(dpy, "_NET_CM_WINDOW_EFFECT_ENABLE",False);
-       _utilx_get_window_property(dpy, win, _atom_comp_effect_state, XA_CARDINAL, (unsigned int *)&state, 1);
-       return state;
-}
-
 static void
 _utilx_string_set_window_property( Display *dpy, Window win, Atom atom, char *val, unsigned int num)
 {
@@ -876,235 +682,6 @@ API void utilx_set_fake_launch_img(Display* dpy, Window win, char *file_name)
        _utilx_string_set_window_property(dpy, win, _atom_comp_fake_launch_image, file_name, 1);
 }
 
-API void utilx_show_fake_effect( Display *dpy, Window win, char *fake_image_file )
-{
-       XEvent xev;
-
-       _atom_comp_fake_launch = XInternAtom( dpy, "_E_COMP_FAKE_LAUNCH", False );
-
-       if(  !_atom_comp_fake_launch )
-       {
-               fprintf( stderr, "XInternAtom(_E_COMP_FAKE_LAUNCH) failed.\n" );
-               return;
-       }
-
-       utilx_set_fake_launch_img(dpy, win, fake_image_file);
-
-       XSync(dpy, 0 );
-
-       // send fake client message
-       xev.xclient.type = ClientMessage;
-       xev.xclient.display = dpy;
-       xev.xclient.window = win;
-       xev.xclient.message_type =  _atom_comp_fake_launch;
-       xev.xclient.format = 32;
-       xev.xclient.data.l[0] = 1;  // 1 : start effect , 0 : end effect
-       xev.xclient.data.l[1] = 0;
-       xev.xclient.data.l[2] = 0;
-       xev.xclient.data.l[3] = 0;
-       xev.xclient.data.l[4] = 0;
-
-       XSendEvent( dpy, win, False,
-                               SubstructureRedirectMask | SubstructureNotifyMask,
-                               &xev );
-       XSync(dpy, 0 );
-
-}
-
-
-API void utilx_hide_fake_effect( Display *dpy, Window win)
-{
-       XEvent xev;
-
-       _atom_comp_fake_launch = XInternAtom( dpy, "_E_COMP_FAKE_LAUNCH", False );
-       if(  !_atom_comp_fake_launch )
-       {
-               fprintf( stderr, "XInternAtom(_E_COMP_FAKE_LAUNCH) failed.\n" );
-               return;
-       }
-
-       // send fake client message
-       xev.xclient.type = ClientMessage;
-       xev.xclient.display = dpy;
-       xev.xclient.window = win;
-       xev.xclient.message_type =  _atom_comp_fake_launch;
-       xev.xclient.format = 32;
-       xev.xclient.data.l[0] = 0;  // 1 : start effect , 0 : end effect
-       xev.xclient.data.l[1] = 0;
-       xev.xclient.data.l[2] = 0;
-       xev.xclient.data.l[3] = 0;
-       xev.xclient.data.l[4] = 0;
-
-       XSendEvent( dpy, win, False,
-                               SubstructureRedirectMask | SubstructureNotifyMask,
-                               &xev );
-       XSync(dpy, 0 );
-}
-
-static void _utilx_effect_atom_check( Display* dpy )
-{
-       if ( dpy == NULL )
-       {
-               fprintf (stderr, "[UTILX] Error.. Invald Display.. %s (%d)\n", __func__, __LINE__);
-               return;
-       }
-
-       if( !_atom_comp_window_effect_type)
-               _atom_comp_window_effect_type =  XInternAtom(dpy, "_NET_CM_WINDOW_EFFECT_TYPE",False);
-       if( !_atom_comp_effect_default )
-               _atom_comp_effect_default = XInternAtom(dpy, "_NET_CM_EFFECT_DEFAULT",False);
-       if( !_atom_comp_effect_none )
-               _atom_comp_effect_none = XInternAtom(dpy, "_NET_CM_EFFECT_NONE",False);
-       if( !_atom_comp_effect_custom0 )
-               _atom_comp_effect_custom0 = XInternAtom(dpy, "_NET_CM_EFFECT_CUSTOM0",False);
-       if( !_atom_comp_effect_custom1 )
-               _atom_comp_effect_custom1 = XInternAtom(dpy, "_NET_CM_EFFECT_CUSTOM1",False);
-       if( !_atom_comp_effect_custom2 )
-               _atom_comp_effect_custom2 = XInternAtom(dpy, "_NET_CM_EFFECT_CUSTOM2",False);
-       if( !_atom_comp_effect_custom3 )
-               _atom_comp_effect_custom3 = XInternAtom(dpy, "_NET_CM_EFFECT_CUSTOM3",False);
-       if( !_atom_comp_effect_custom4 )
-               _atom_comp_effect_custom4 = XInternAtom(dpy, "_NET_CM_EFFECT_CUSTOM4",False);
-       if( !_atom_comp_effect_custom5 )
-               _atom_comp_effect_custom5 = XInternAtom(dpy, "_NET_CM_EFFECT_CUSTOM5",False);
-       if( !_atom_comp_effect_custom6 )
-               _atom_comp_effect_custom6 = XInternAtom(dpy, "_NET_CM_EFFECT_CUSTOM6",False);
-       if( !_atom_comp_effect_custom7 )
-               _atom_comp_effect_custom7 = XInternAtom(dpy, "_NET_CM_EFFECT_CUSTOM7",False);
-       if( !_atom_comp_effect_custom8 )
-               _atom_comp_effect_custom8 = XInternAtom(dpy, "_NET_CM_EFFECT_CUSTOM8",False);
-       if( !_atom_comp_effect_custom9 )
-               _atom_comp_effect_custom9 = XInternAtom(dpy, "_NET_CM_EFFECT_CUSTOM9",False);
-}
-
-static Atom _utilx_convert_style_to_atom( Display* dpy, Utilx_Effect_Style style )
-{
-       if ( dpy == NULL )
-       {
-               fprintf (stderr, "[UTILX] Error.. Invald Display.. %s (%d)\n", __func__, __LINE__);
-               return _atom_comp_effect_none;
-       }
-       _utilx_effect_atom_check(dpy);
-
-       if ( style == UTILX_EFFECT_STYLE_DEFAULT )       return _atom_comp_effect_default;
-       else if ( style == UTILX_EFFECT_STYLE_NONE )     return _atom_comp_effect_none;
-       else if ( style == UTILX_EFFECT_STYLE_CUSTOM0 )  return _atom_comp_effect_custom0;
-       else if ( style == UTILX_EFFECT_STYLE_CUSTOM1 )  return _atom_comp_effect_custom1;
-       else if ( style == UTILX_EFFECT_STYLE_CUSTOM2 )  return _atom_comp_effect_custom2;
-       else if ( style == UTILX_EFFECT_STYLE_CUSTOM3 )  return _atom_comp_effect_custom3;
-       else if ( style == UTILX_EFFECT_STYLE_CUSTOM4 )  return _atom_comp_effect_custom4;
-       else if ( style == UTILX_EFFECT_STYLE_CUSTOM5 )  return _atom_comp_effect_custom5;
-       else if ( style == UTILX_EFFECT_STYLE_CUSTOM6 )  return _atom_comp_effect_custom6;
-       else if ( style == UTILX_EFFECT_STYLE_CUSTOM7 )  return _atom_comp_effect_custom7;
-       else if ( style == UTILX_EFFECT_STYLE_CUSTOM8 )  return _atom_comp_effect_custom8;
-       else if ( style == UTILX_EFFECT_STYLE_CUSTOM9 )  return _atom_comp_effect_custom9;
-       else                                             return _atom_comp_effect_none;
-
-}
-
-static Utilx_Effect_Style _utilx_convert_atom_to_style( Display* dpy, Atom style )
-{
-       if ( dpy == NULL )
-       {
-               fprintf (stderr, "[UTILX] Error.. Invald Display.. %s (%d)\n", __func__, __LINE__);
-               return UTILX_EFFECT_STYLE_NONE;
-       }
-       _utilx_effect_atom_check(dpy);
-
-       if ( style == _atom_comp_effect_default )       return UTILX_EFFECT_STYLE_DEFAULT;
-       else if ( style == _atom_comp_effect_none )     return UTILX_EFFECT_STYLE_NONE;
-       else if ( style == _atom_comp_effect_custom0 )  return UTILX_EFFECT_STYLE_CUSTOM0;
-       else if ( style == _atom_comp_effect_custom1 )  return UTILX_EFFECT_STYLE_CUSTOM1;
-       else if ( style == _atom_comp_effect_custom2 )  return UTILX_EFFECT_STYLE_CUSTOM2;
-       else if ( style == _atom_comp_effect_custom3 )  return UTILX_EFFECT_STYLE_CUSTOM3;
-       else if ( style == _atom_comp_effect_custom4 )  return UTILX_EFFECT_STYLE_CUSTOM4;
-       else if ( style == _atom_comp_effect_custom5 )  return UTILX_EFFECT_STYLE_CUSTOM5;
-       else if ( style == _atom_comp_effect_custom6 )  return UTILX_EFFECT_STYLE_CUSTOM6;
-       else if ( style == _atom_comp_effect_custom7 )  return UTILX_EFFECT_STYLE_CUSTOM7;
-       else if ( style == _atom_comp_effect_custom8 )  return UTILX_EFFECT_STYLE_CUSTOM8;
-       else if ( style == _atom_comp_effect_custom9 )  return UTILX_EFFECT_STYLE_CUSTOM9;
-       else                                            return UTILX_EFFECT_STYLE_DEFAULT;
-}
-
-API void utilx_set_window_effect_style(Display* dpy, Window win, Utilx_Effect_Type type, Utilx_Effect_Style style)
-{
-       Atom *window_effect_type_list = NULL;
-       if ( dpy == NULL )
-       {
-               fprintf (stderr, "[UTILX] Error.. Invald Display.. %s (%d)\n", __func__, __LINE__);
-               return;
-       }
-       _utilx_effect_atom_check(dpy);
-
-       window_effect_type_list = (Atom *)malloc(sizeof(Atom) * 6);
-
-       if ( !window_effect_type_list )
-       {
-               fprintf (stderr, "[UTILX] Error.. malloc().. %s (%d)\n", __func__, __LINE__);
-               return;
-       }
-
-       window_effect_type_list[0] = _atom_comp_effect_default;
-       window_effect_type_list[1] = _atom_comp_effect_default;
-       window_effect_type_list[2] = _atom_comp_effect_default;
-       window_effect_type_list[3] = _atom_comp_effect_default;
-       window_effect_type_list[4] = _atom_comp_effect_default;
-       window_effect_type_list[5] = _atom_comp_effect_default;
-
-       _utilx_get_window_property(dpy, win, _atom_comp_window_effect_type, XA_ATOM, (unsigned int *)window_effect_type_list, 6);
-
-       if ( type == UTILX_EFFECT_TYPE_MAP )             window_effect_type_list[0] = _utilx_convert_style_to_atom(dpy, style);
-       else if ( type == UTILX_EFFECT_TYPE_UNMAP )      window_effect_type_list[1] = _utilx_convert_style_to_atom(dpy, style);
-       else if ( type == UTILX_EFFECT_TYPE_RAISEABOVE ) window_effect_type_list[2] = _utilx_convert_style_to_atom(dpy, style);
-       else if ( type == UTILX_EFFECT_TYPE_ROTATION )   window_effect_type_list[3] = _utilx_convert_style_to_atom(dpy, style);
-       else if ( type == UTILX_EFFECT_TYPE_FOCUSIN )    window_effect_type_list[4] = _utilx_convert_style_to_atom(dpy, style);
-       else if ( type == UTILX_EFFECT_TYPE_FOCUSOUT )   window_effect_type_list[5] = _utilx_convert_style_to_atom(dpy, style);
-
-       _utilx_set_window_property(dpy, win, _atom_comp_window_effect_type, XA_ATOM, (unsigned int *)window_effect_type_list, 6);
-
-       XSync(dpy, 0 );
-       free(window_effect_type_list);
-}
-
-API Utilx_Effect_Style utilx_get_window_effect_style(Display* dpy, Window win, Utilx_Effect_Type type)
-{
-       Atom *window_effect_type_list = NULL;
-       Utilx_Effect_Style style = UTILX_EFFECT_STYLE_DEFAULT;
-
-       if ( dpy == NULL )
-       {
-               fprintf (stderr, "[UTILX] Error.. Invald Display.. %s (%d)\n", __func__, __LINE__);
-               return UTILX_EFFECT_STYLE_NONE;
-       }
-       _utilx_effect_atom_check(dpy);
-
-       window_effect_type_list = (Atom *)malloc(sizeof(Atom) * 6);
-
-       if ( !window_effect_type_list )
-       {
-               fprintf (stderr, "[UTILX] Error.. malloc().. %s (%d)\n", __func__, __LINE__);
-               return UTILX_EFFECT_STYLE_NONE;
-       }
-
-       if ( _utilx_get_window_property(dpy, win, _atom_comp_window_effect_type, XA_ATOM, (unsigned int *)window_effect_type_list, 6) != 6 )
-       {
-               fprintf (stderr, "[UTILX] Error.. get property failed!.. %s (%d)\n", __func__, __LINE__);
-               free(window_effect_type_list);
-               return UTILX_EFFECT_STYLE_NONE;
-       }
-
-       if ( type == UTILX_EFFECT_TYPE_MAP )             style = _utilx_convert_atom_to_style(dpy, window_effect_type_list[0]);
-       else if ( type == UTILX_EFFECT_TYPE_UNMAP )      style = _utilx_convert_atom_to_style(dpy, window_effect_type_list[1]);
-       else if ( type == UTILX_EFFECT_TYPE_RAISEABOVE ) style = _utilx_convert_atom_to_style(dpy, window_effect_type_list[2]);
-       else if ( type == UTILX_EFFECT_TYPE_ROTATION )   style = _utilx_convert_atom_to_style(dpy, window_effect_type_list[3]);
-       else if ( type == UTILX_EFFECT_TYPE_FOCUSIN )    style = _utilx_convert_atom_to_style(dpy, window_effect_type_list[4]);
-       else if ( type == UTILX_EFFECT_TYPE_FOCUSOUT )   style = _utilx_convert_atom_to_style(dpy, window_effect_type_list[5]);
-
-       XSync(dpy, 0 );
-       free(window_effect_type_list);
-       return style;
-}
-
 API int utilx_set_window_opaque_state (Display* dpy, Window win, Utilx_Opaque_State state)
 {
        UTILX_TRACE ("[UTILX] utilx_set_window_opaque_state... win = %x, show_state = %d\n", win, state);
@@ -1148,142 +725,54 @@ API int utilx_set_window_opaque_state (Display* dpy, Window win, Utilx_Opaque_St
        return 1;
 }
 
-static void
-_utilx_screen_capture_atom_ensure (Display* dpy)
+API UtilxScrnConf *utilx_scrnconf_allocate (void)
 {
-       if (_atom_screen_capture_disable)
-               return;
-
-       _atom_screen_capture_disable = XInternAtom (dpy, "_CB_SCREEN_CAPTURE_DISABLE", False);
-       if (_atom_screen_capture_disable)
-               return;
+    UtilxScrnConf *scrnconf = calloc (1, sizeof(UtilxScrnConf));
+    if (!scrnconf)
+    {
+        fprintf (stderr, "fail to allocate UtilxScrnConf\n");
+        return NULL;
+    }
 
-       fprintf (stderr, "[UTILX] Error.. Cannot create _CB_SCREEN_CAPTURE_DISABLE atom.. %s (%d)\n", __func__, __LINE__);
+    return scrnconf;
 }
 
-API int
-utilx_set_screen_capture(Display* dpy, int enable)
+API void utilx_scrnconf_free (UtilxScrnConf *scrnconf)
 {
-       Window root;
-       int disable;
-
-       if (!dpy)
-       {
-               fprintf (stderr, "[UTILX] Error.. dpy is NULL %s (%d)\n", __func__, __LINE__);
-               return 0;
-       }
-
-       root = RootWindow (dpy, DefaultScreen(dpy));
-       disable = (enable) ? 0 : 1;
+    if (!scrnconf)
+        return;
 
-       _utilx_screen_capture_atom_ensure (dpy);
+    if (scrnconf->str_output)
+        free (scrnconf->str_output);
 
-       _utilx_set_window_property (dpy, root, _atom_screen_capture_disable, XA_CARDINAL, (unsigned int *)&disable, 1);
+    if (scrnconf->str_resolution)
+        free (scrnconf->str_resolution);
 
-       return 1;
+    free(scrnconf);
+    scrnconf = NULL;
 }
 
-API int
-utilx_get_screen_capture(Display* dpy)
+API int utilx_scrnconf_get_info (Display *dpy, UtilxScrnConf *scrnconf)
 {
-       Window root;
-       int disable = 0;
+    Window win;
+       Atom scrnconf_atom = None;
+    XTextProperty xtp;
+    char *str = NULL;
+    char *ptr = NULL;
+    int items;
+    char **list = NULL;
+    int i = 0;
+    int s;
 
-       if (!dpy)
-       {
-               fprintf (stderr, "[UTILX] Error.. dpy is NULL %s (%d)\n", __func__, __LINE__);
-               return 0;
-       }
+    if (!dpy)
+        goto fail;
 
-       root = RootWindow (dpy, DefaultScreen(dpy));
+    if (!scrnconf)
+        goto fail;
 
-       _utilx_screen_capture_atom_ensure (dpy);
+    win = DefaultRootWindow(dpy);
 
-       _utilx_get_window_property(dpy, root, _atom_screen_capture_disable, XA_CARDINAL,
-                                   (unsigned int *)&disable, 1);
-
-       return (disable) ? 0 : 1;
-}
-
-API void utilx_set_window_cardinal_property(Display* dpy, Window win, Atom atom, unsigned int *value)
-{
-       _utilx_set_window_property(dpy, win, atom, XA_CARDINAL, value, 1);
-}
-
-API int utilx_get_window_cardinal_property (Display* dpy, Window win, Atom atom, unsigned int *value)
-{
-       return _utilx_get_window_property(dpy, win, atom, XA_CARDINAL, value, 1);
-}
-
-API void utilx_show_capture_effect( Display *dpy, Window win)
-{
-    XEvent xev;
-
-    _atom_comp_capture_effect = XInternAtom( dpy, "_E_COMP_CAPTURE_EFFECT", False );
-    if(  !_atom_comp_capture_effect )
-    {
-        fprintf( stderr, "XInternAtom(_E_COMP_CAPTURE_EFFECT) failed.\n" );
-        return;
-    }
-
-    // send capture effect client message
-    xev.xclient.type = ClientMessage;
-    xev.xclient.display = dpy;
-    xev.xclient.window = win;
-    xev.xclient.message_type =  _atom_comp_capture_effect;
-    xev.xclient.format = 32;
-    xev.xclient.data.l[0] = 0;
-    xev.xclient.data.l[1] = 0;
-    xev.xclient.data.l[2] = 0;
-    xev.xclient.data.l[3] = 0;
-    xev.xclient.data.l[4] = 0;
-
-    XSendEvent( dpy, win, False,
-                SubstructureRedirectMask | SubstructureNotifyMask,
-                &xev );
-    XSync(dpy, 0 );
-}
-
-API UtilxScrnConf *utilx_scrnconf_allocate (void)
-{
-    UtilxScrnConf *scrnconf = calloc (1, sizeof(UtilxScrnConf));
-    if (!scrnconf)
-    {
-        fprintf (stderr, "fail to allocate UtilxScrnConf\n");
-        return NULL;
-    }
-
-    return scrnconf;
-}
-
-API void utilx_scrnconf_free (UtilxScrnConf *scrnconf)
-{
-    if (!scrnconf)
-        return;
-
-    if (scrnconf->str_output)
-        free (scrnconf->str_output);
-
-    if (scrnconf->str_resolution)
-        free (scrnconf->str_resolution);
-
-    free(scrnconf);
-    scrnconf = NULL;
-}
-
-API int utilx_scrnconf_get_info (Display *dpy, UtilxScrnConf *scrnconf)
-{
-    Window win = DefaultRootWindow(dpy);
-       Atom scrnconf_atom = None;
-    XTextProperty xtp;
-    char *str = NULL;
-    char *ptr = NULL;
-    int items;
-    char **list = NULL;
-    int i = 0;
-    int s;
-
-    scrnconf_atom = XInternAtom (dpy, "_SCRNCONF_INFO", False);
+    scrnconf_atom = XInternAtom (dpy, "_SCRNCONF_INFO", False);
 
     /* get property */
     if (XGetTextProperty (dpy, win, &xtp, scrnconf_atom))
@@ -1306,7 +795,7 @@ API int utilx_scrnconf_get_info (Display *dpy, UtilxScrnConf *scrnconf)
     {
         if (i == 0)
         {
-            scrnconf->str_output = calloc (1, strlen(ptr));
+            scrnconf->str_output = calloc (1, strlen(ptr)+1);
             if (!scrnconf->str_output)
                 goto fail;
 
@@ -1323,7 +812,7 @@ API int utilx_scrnconf_get_info (Display *dpy, UtilxScrnConf *scrnconf)
         }
         else if (i == 2)
         {
-            scrnconf->str_resolution = calloc (1, strlen(ptr));
+            scrnconf->str_resolution = calloc (1, strlen(ptr)+1);
             if (!scrnconf->str_resolution)
                 goto fail;
 
@@ -1417,15 +906,9 @@ typedef struct _ShotInfo
     Damage   damage;
     int      damage_base;
 
-    /* Dri2 */
-    int      drm_fd;
-    tbm_bufmgr bufmgr;
     void    *virtual;
-    DRI2Buffer* dri2_buffers;
-    tbm_bo bo;
 
     /* XShm */
-    Bool       enable_xshm;
     XImage    *image;
     XShmSegmentInfo shminfo;
 } ShotInfo;
@@ -1441,7 +924,7 @@ static Bool x_error_caught;
 static ShotInfo *shot_info;
 
 static int
-_get_port (Display *dpy, unsigned int id)
+_get_port (Display *dpy, unsigned int id, Window win)
 {
     unsigned int ver, rev, req_base, evt_base, err_base;
     unsigned int adaptors;
@@ -1456,7 +939,7 @@ _get_port (Display *dpy, unsigned int id)
         return -1;
     }
 
-    if (XvQueryAdaptors (dpy, DefaultRootWindow (dpy), &adaptors, &ai) != Success)
+    if (XvQueryAdaptors (dpy, win, &adaptors, &ai) != Success)
     {
         fprintf (stderr, "[UTILX] fail : query adaptors. \n");
         return -1;
@@ -1489,10 +972,13 @@ _get_port (Display *dpy, unsigned int id)
         if (!support_format)
             continue;
 
-        if (XvGrabPort (dpy, p, 0) == Success)
+        for (; p < ai[i].base_id + ai[i].num_ports; p++)
         {
-            XvFreeAdaptorInfo (ai);
-            return p;
+            if (XvGrabPort (dpy, p, 0) == Success)
+            {
+                XvFreeAdaptorInfo (ai);
+                return p;
+            }
         }
 
         fprintf (stderr, "[UTILX] fail : grab port. \n");
@@ -1506,15 +992,11 @@ _get_port (Display *dpy, unsigned int id)
 static void
 _deinit_screen_shot (ShotInfo *info)
 {
-    static Atom atom_stream_off = None;
-
     if (!info)
         return;
 
-    if (atom_stream_off == None)
-        atom_stream_off = XInternAtom (info->dpy, "_USER_WM_PORT_ATTRIBUTE_STREAM_OFF", False);
-
-    XvSetPortAttribute (info->dpy, info->port, atom_stream_off, 1);
+    if (info->port > 0 && info->pixmap > 0)
+        XvStopVideo (info->dpy, info->port, info->pixmap);
 
     if (info->image)
         XDestroyImage (info->image);
@@ -1525,15 +1007,6 @@ _deinit_screen_shot (ShotInfo *info)
         shmctl (info->shminfo.shmid, IPC_RMID, 0);
     }
 
-    if (info->bo)
-        tbm_bo_unref(info->bo);
-    if (info->dri2_buffers)
-        free(info->dri2_buffers);
-    if (info->bufmgr)
-        tbm_bufmgr_deinit (info->bufmgr);
-    if (info->drm_fd >= 0)
-        close (info->drm_fd);
-
     if (info->damage)
         XDamageDestroy (info->dpy, info->damage);
 
@@ -1583,132 +1056,6 @@ _init_screen_shot_damage (ShotInfo *info)
 }
 
 static Bool
-_init_screen_shot_dri2 (ShotInfo *info)
-{
-    int screen;
-    int dri2_base = 0;
-    int dri2_err_base = 0;
-    int dri2Major, dri2Minor;
-    char *driverName = NULL, *deviceName = NULL;
-    unsigned int attachments[1];
-    int dri2_count, dri2_out_count;
-    int dri2_width, dri2_height, dri2_stride;
-    drm_magic_t magic;
-    tbm_bo_handle bo_handle;
-
-    screen = DefaultScreen(info->dpy);
-    if (!DRI2QueryExtension (info->dpy, &dri2_base, &dri2_err_base))
-    {
-        fprintf (stderr, "[UTILX] no DRI2 extension. !!\n");
-        goto fail_init_dri2;
-    }
-
-    if (!DRI2QueryVersion (info->dpy, &dri2Major, &dri2Minor))
-    {
-        fprintf (stderr, "[UTILX] fail : DRI2QueryVersion !!\n");
-        goto fail_init_dri2;
-    }
-
-    if (!DRI2Connect (info->dpy, RootWindow(info->dpy, screen), &driverName, &deviceName))
-    {
-        fprintf (stderr, "[UTILX] fail : DRI2Connect !!\n");
-        goto fail_init_dri2;
-    }
-
-    if (!driverName || !deviceName)
-    {
-        fprintf (stderr, "[UTILX] fail : Get DRI info !!\n");
-        goto fail_init_dri2;
-    }
-
-    /* drm_fd */
-    info->drm_fd = open (deviceName, O_RDWR);
-    if (info->drm_fd < 0)
-    {
-        fprintf (stderr, "[UTILX] fail : open drm device (%s)\n", deviceName);
-        goto fail_init_dri2;
-    }
-
-    /* get the drm magic */
-    drmGetMagic(info->drm_fd, &magic);
-    if (!DRI2Authenticate(info->dpy, RootWindow(info->dpy, screen), magic))
-    {
-        fprintf (stderr, "[UTILX] fail : DRI2Authenticate (%d)\n", magic);
-        goto fail_init_dri2;
-    }
-
-    /* bufmgr */
-    info->bufmgr = tbm_bufmgr_init (info->drm_fd);
-    if (!info->bufmgr)
-    {
-        fprintf (stderr, "[UTILX] fail : init buffer manager \n");
-        goto fail_init_dri2;
-    }
-
-    DRI2CreateDrawable (info->dpy, info->pixmap);
-
-    attachments[0] = DRI2BufferFrontLeft;
-    dri2_count = 1;
-    info->dri2_buffers = DRI2GetBuffers (info->dpy, info->pixmap, &dri2_width, &dri2_height,
-                                         attachments, dri2_count, &dri2_out_count);
-
-    if (!info->dri2_buffers)
-    {
-        fprintf (stderr, "[UTILX] fail : get buffers\n");
-        goto fail_init_dri2;
-    }
-
-    if (!info->dri2_buffers[0].name)
-    {
-        fprintf (stderr, "[UTILX] fail : a handle of the dri2 buffer is null \n ");
-        goto fail_init_dri2;
-    }
-
-    info->bo = tbm_bo_import (info->bufmgr, info->dri2_buffers[0].name);
-    if (!info->bo)
-    {
-        fprintf (stderr, "[UTILX] fail : import bo (key:%d)\n", info->dri2_buffers[0].name);
-        goto fail_init_dri2;
-    }
-
-    dri2_stride = info->dri2_buffers[0].pitch;
-
-    /* virtual */
-    bo_handle = tbm_bo_get_handle (info->bo, TBM_DEVICE_CPU);
-    info->virtual = (void *)bo_handle.ptr;
-    if (!info->virtual)
-    {
-        fprintf (stderr, "[UTILX] fail : map \n");
-        goto fail_init_dri2;
-    }
-
-    info->enable_xshm = False;
-
-    free (driverName);
-    free (deviceName);
-
-    return True;
-
-fail_init_dri2:
-
-    if (info->bo)
-        tbm_bo_unref(info->bo);
-    if (info->dri2_buffers)
-        free(info->dri2_buffers);
-    if (info->bufmgr)
-        tbm_bufmgr_deinit (info->bufmgr);
-    if (info->drm_fd >= 0)
-        close (info->drm_fd);
-
-    if (driverName)
-        free (driverName);
-    if (deviceName)
-        free (deviceName);
-
-    return False;
-}
-
-static Bool
 _init_screen_shot_shm (ShotInfo *info)
 {
     if (!XShmQueryExtension (info->dpy))
@@ -1764,8 +1111,6 @@ _init_screen_shot_shm (ShotInfo *info)
     info->image->data = info->shminfo.shmaddr;
     info->virtual = info->shminfo.shmaddr;
 
-    info->enable_xshm = True;
-
     return True;
 }
 
@@ -1774,7 +1119,6 @@ _init_screen_shot (Display* dpy, unsigned int width, unsigned int height)
 {
     ShotInfo *info = NULL;
     static Atom atom_capture = None;
-    static Atom atom_fps = None;
     XErrorHandler old_handler = NULL;
 
     if (shot_info)
@@ -1795,25 +1139,21 @@ _init_screen_shot (Display* dpy, unsigned int width, unsigned int height)
     info->dpy = dpy;
     info->shminfo.shmid = -1;
     info->shminfo.shmaddr = (void*)-1;
-    info->drm_fd = -1;
 
     /* port */
-    info->port = _get_port (info->dpy, FOURCC_RGB32);
+    info->port = _get_port (info->dpy, FOURCC_RGB32, DefaultRootWindow (dpy));
     if (info->port <= 0)
         goto fail_init;
 
     /* width, height */
     if (atom_capture == None)
         atom_capture = XInternAtom (info->dpy, "_USER_WM_PORT_ATTRIBUTE_CAPTURE", False);
-    if (atom_fps == None)
-        atom_fps = XInternAtom (info->dpy, "_USER_WM_PORT_ATTRIBUTE_FPS", False);
 
     XSync (info->dpy, 0);
     x_error_caught = False;
     old_handler = XSetErrorHandler (_screen_shot_x_error_handle);
 
     XvSetPortAttribute (info->dpy, info->port, atom_capture, 1);
-    XvSetPortAttribute (info->dpy, info->port, atom_fps, 60);
 
     XSync (info->dpy, 0);
 
@@ -1851,13 +1191,10 @@ _init_screen_shot (Display* dpy, unsigned int width, unsigned int height)
     if (!_init_screen_shot_damage (info))
         goto fail_init;
 
-    if (!_init_screen_shot_dri2 (info))
-    {
-        if (!_init_screen_shot_shm (info))
-            goto fail_init;
-        else
-            fprintf (stderr, "[UTILX] XShm success. !!\n");
-    }
+    if (!_init_screen_shot_shm (info))
+        goto fail_init;
+    else
+        fprintf (stderr, "[UTILX] XShm success. !!\n");
 
     if (!info->virtual)
     {
@@ -1955,9 +1292,211 @@ utilx_create_screen_shot (Display* dpy, int width, int height)
         XDamageNotifyEvent *damage_ev = (XDamageNotifyEvent *)&ev;
         if (damage_ev->drawable == info->pixmap)
         {
-            if (info->enable_xshm)
-                XShmGetImage (info->dpy, info->pixmap, info->image, 0, 0, AllPlanes);
+            XShmGetImage (info->dpy, info->pixmap, info->image, 0, 0, AllPlanes);
+            XDamageSubtract (info->dpy, info->damage, None, None );
+            return info->virtual;
+        }
+
+        XDamageSubtract (info->dpy, info->damage, None, None );
+    }
+
+    utilx_release_screen_shot ();
+
+    return NULL;
+}
+
+static ShotInfo*
+_init_video_screen_shot (Display* dpy, unsigned int width, unsigned int height, Window win)
+{
+    ShotInfo *info = NULL;
+    static Atom atom_capture = None;
+    static Atom atom_capture_on_win = None;
+    XErrorHandler old_handler = NULL;
+
+    if (shot_info)
+    {
+        if (shot_info->width == width && shot_info->height == height)
+            return shot_info;
+
+        _deinit_screen_shot (shot_info);
+    }
+
+    info = calloc (1, sizeof (ShotInfo));
+    if (!info)
+        goto fail_init;
+
+    shot_info = info;
+
+    /* dpy */
+    info->dpy = dpy;
+    info->shminfo.shmid = -1;
+    info->shminfo.shmaddr = (void*)-1;
+
+    /* port */
+    info->port = _get_port (info->dpy, FOURCC_RGB32, win);
+    if (info->port <= 0)
+        goto fail_init;
+
+    /* width, height */
+    if (atom_capture == None)
+        atom_capture = XInternAtom (info->dpy, "_USER_WM_PORT_ATTRIBUTE_CAPTURE", False);
+
+    if (atom_capture_on_win  == None)
+        atom_capture_on_win = XInternAtom (info->dpy, "_USER_WM_PORT_ATTRIBUTE_CAPTURE_ON_WINDOW", False);
+
+    XSync (info->dpy, 0);
+    x_error_caught = False;
+    old_handler = XSetErrorHandler (_screen_shot_x_error_handle);
+
+    XvSetPortAttribute (info->dpy, info->port, atom_capture, 3);
+    XvSetPortAttribute (info->dpy, info->port, atom_capture_on_win, 1);
+
+    XSync (info->dpy, 0);
+
+    x_error_caught = False;
+    XSetErrorHandler (old_handler);
+
+    XvQueryBestSize (info->dpy, info->port, 0, 0, 0, width, height, &width, &height);
+    if (width <= 0 || height <= 0)
+        goto fail_init;
+    info->width = width;
+    info->height = height;
+
+    /* pixmap */
+    info->pixmap = XCreatePixmap (info->dpy,
+                                  win,
+                                  width, height,
+                                  DefaultDepth (info->dpy, DefaultScreen (info->dpy)));
+    if (info->pixmap <= 0)
+    {
+        fprintf (stderr, "[UTILX] fail : create pixmap. \n");
+        goto fail_init;
+    }
+
+    /* gc */
+    info->gc = XCreateGC (info->dpy, info->pixmap, 0, 0);
+    if (info->gc == NULL)
+    {
+        fprintf (stderr, "[UTILX] fail : create gc. \n");
+        goto fail_init;
+    }
+
+    XSetForeground (info->dpy, info->gc, 0xFF000000);
+    XFillRectangle (info->dpy, info->pixmap, info->gc, 0, 0, width, height);
+
+    if (!_init_screen_shot_damage (info))
+        goto fail_init;
+
+    if (!_init_screen_shot_shm (info))
+        goto fail_init;
+    else
+        fprintf (stderr, "[UTILX] XShm success. !!\n");
+
+    if (!info->virtual)
+    {
+        fprintf (stderr, "[UTILX] fail : get virtual \n");
+        goto fail_init;
+    }
+
+    XFlush (info->dpy);
+
+    return info;
+
+fail_init:
+    _deinit_screen_shot (info);
+    return NULL;
+}
+
+Bool
+predicate_proc(Display *dpy, XEvent *event, char *arg)
+{
+    ShotInfo *info = (ShotInfo *)arg;
+
+    if(event->type == (info->damage_base + XDamageNotify))
+        return True;
+    else
+        return False;
+}
+API void*
+utilx_create_video_screen_shot (Display* dpy, Window win, int width, int height)
+{
+    ShotInfo *info;
+    XEvent ev = {0,};
+    XErrorHandler old_handler = NULL;
+    unsigned int pixmap = 0;
+
+    if (dpy == NULL)
+    {
+        fprintf (stderr, "[UTILX] invalid display(%p) \n", dpy);
+        return NULL;
+    }
+
+    if (width <= 0 || height <= 0)
+    {
+        fprintf (stderr, "[UTILX] invalid size(%dx%d) \n", width, height);
+        return NULL;
+    }
+
+    XSync (dpy, 0);
+
+    info = _init_video_screen_shot (dpy, width, height, win);
+
+    if (!info)
+    {
+        fprintf (stderr, "[UTILX] fail : initialize screenshot. \n");
+        return NULL;
+    }
+
+    if (!_atom_window_pixman)
+    {
+        _atom_window_pixman = XInternAtom (dpy, "_UTIL_WINDOW_PIXMAP_HANDLE", False);
+        if (!_atom_window_pixman)
+        {
+            fprintf (stderr, "[UTILX] Error.. Cannot create _UTIL_WINDOW_PIXMAP_HANDLE atom.. %s (%d)\n", __func__, __LINE__);
+            return 0;
+        }
+    }
+
+    x_error_caught = False;
+    old_handler = XSetErrorHandler (_screen_shot_x_error_handle);
+
+    pixmap = (unsigned int)info->pixmap;
+    XChangeProperty (dpy, win, _atom_window_pixman, XA_PIXMAP, 32, PropModeReplace, (unsigned char *)((unsigned int *)&pixmap), 1);
+    XSync (dpy, 0);
+
+    if (x_error_caught)
+    {
+        x_error_caught = False;
+        XSetErrorHandler (old_handler);
+        return NULL;
+    }
+
+    XvPutStill (info->dpy, info->port, info->pixmap, info->gc,
+                0, 0, info->width, info->height,
+                0, 0, info->width, info->height);
+    XSync (dpy, 0);
+
+    if (x_error_caught)
+    {
+        x_error_caught = False;
+        XSetErrorHandler (old_handler);
+        return NULL;
+    }
+
+    XDeleteProperty(info->dpy, win, _atom_window_pixman);
+    _atom_window_pixman = None;
+    XSync (dpy, 0);
+
+    x_error_caught = False;
+    XSetErrorHandler (old_handler);
 
+    XIfEvent(info->dpy, &ev, predicate_proc, info);
+    if (ev.type == (info->damage_base + XDamageNotify))
+    {
+        XDamageNotifyEvent *damage_ev = (XDamageNotifyEvent *)&ev;
+        if (damage_ev->drawable == info->pixmap)
+        {
+            XShmGetImage (info->dpy, info->pixmap, info->image, 0, 0, AllPlanes);
             XDamageSubtract (info->dpy, info->damage, None, None );
             return info->virtual;
         }
@@ -2142,40 +1681,3 @@ utilx_get_fb_visible (Display* dpy, Utilx_Fb_Type fb)
 
     return visible;
 }
-
-API void
-utilx_set_video_offset (Display* dpy, int x, int y)
-{
-    static Atom property = None;
-    char buf[32] = {0,};
-    char *p = buf;
-    int buf_len = 0;
-
-    if (!dpy)
-    {
-        fprintf (stderr, "[UTILX] invalid display(%p).. %s (%d)\n", dpy, __func__, __LINE__);
-        return;
-    }
-
-    p += sprintf (p, "%d,%d", x, y);
-
-    *p = '\0';
-    p++;
-
-    buf_len = p - buf;
-
-    if (property == None)
-        property = XInternAtom (dpy, XRR_PROPERTY_VIDEO_OFFSET, False);
-
-    if (property == None)
-    {
-        fprintf (stderr, "[UTILX] Warning : VIDEO_OFFSET property is None.. %s (%d)\n", __func__, __LINE__);
-        return;
-    }
-
-    if (!_utilx_xrr_set_property (dpy, property, (unsigned char*)buf, buf_len, NULL))
-    {
-        fprintf (stderr, "[UTILX] Warning : set_property failed.. %s (%d)\n", __func__, __LINE__);
-        return;
-    }
-}