summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjk7744.park <jk7744.park@samsung.com>2015-02-01 14:07:49 +0900
committerjk7744.park <jk7744.park@samsung.com>2015-02-01 14:07:49 +0900
commita3ffbb4253c654ea71d4d78182e19741d43f8cb9 (patch)
tree53f7df498e7c04772f932b2aa96078ae555c731a
parenta74a177b5dfd069e2c62d3016d20b9344db1e1ba (diff)
downloadlibslp-utilx-tizen_2.3.tar.gz
libslp-utilx-tizen_2.3.tar.bz2
libslp-utilx-tizen_2.3.zip
-rw-r--r--CMakeLists.txt2
-rwxr-xr-xTC/_export_env.sh3
-rwxr-xr-xTC/config5
-rwxr-xr-xTC/testcase/Makefile15
-rwxr-xr-xTC/testcase/tslist6
-rw-r--r--TC/testcase/utc_utilx_key_grab_test.c251
-rw-r--r--TC/testcase/utc_utilx_notification_level_test.c214
-rw-r--r--TC/testcase/utc_utilx_opaque_test.c153
-rw-r--r--TC/testcase/utc_utilx_screen_shot_test.c162
-rw-r--r--TC/testcase/utc_utilx_test.c79
-rw-r--r--doc/ui_utilx_doc.h36
-rw-r--r--packaging/libslp-utilx.spec8
-rwxr-xr-xutilX.h1577
-rw-r--r--utilX.pc1
-rw-r--r--utilX.pc.in1
-rw-r--r--utilX_ext.h76
-rw-r--r--x11.c811
17 files changed, 1602 insertions, 1798 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 930bf5e..d0baa57 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -2,7 +2,7 @@ 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}")
diff --git a/TC/_export_env.sh b/TC/_export_env.sh
index 72a11ec..467c30b 100755
--- a/TC/_export_env.sh
+++ b/TC/_export_env.sh
@@ -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
diff --git a/TC/config b/TC/config
index c7eae66..dc96c8d 100755
--- 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
diff --git a/TC/testcase/Makefile b/TC/testcase/Makefile
index dbbc399..0982f06 100755
--- a/TC/testcase/Makefile
+++ b/TC/testcase/Makefile
@@ -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)
diff --git a/TC/testcase/tslist b/TC/testcase/tslist
index 81af698..4caa7d1 100755
--- a/TC/testcase/tslist
+++ b/TC/testcase/tslist
@@ -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
index 0000000..7f7bbb4
--- /dev/null
+++ b/TC/testcase/utc_utilx_key_grab_test.c
@@ -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
index 0000000..cd97990
--- /dev/null
+++ b/TC/testcase/utc_utilx_notification_level_test.c
@@ -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
index 0000000..e09d4a6
--- /dev/null
+++ b/TC/testcase/utc_utilx_opaque_test.c
@@ -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
index 0000000..b9755ef
--- /dev/null
+++ b/TC/testcase/utc_utilx_screen_shot_test.c
@@ -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
index 7934c62..0000000
--- a/TC/testcase/utc_utilx_test.c
+++ /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
index 0000000..a4b04c4
--- /dev/null
+++ b/doc/ui_utilx_doc.h
@@ -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__ */
diff --git a/packaging/libslp-utilx.spec b/packaging/libslp-utilx.spec
index 29cf2eb..392a87c 100644
--- a/packaging/libslp-utilx.spec
+++ b/packaging/libslp-utilx.spec
@@ -1,9 +1,8 @@
#sbs-git:slp/pkgs/l/libslp-utilx libslp-utilx 0.1.7 5957503c84e65113399e346c7d5618e73957d6ff
Name: libslp-utilx
Summary: utilX
-Version: 0.1.32
-Release: 1.1
-VCS: framework/uifw/xorg/libslp-utilx#libslp-utilx-0.1.23-1.1-27-ga47333741b68616ea6a0dc58e55951c2b2089cdc
+Version: 0.4.5
+Release: 1
Group: System/Libraries
License: Apache-2.0
Source0: %{name}-%{version}.tar.gz
@@ -29,6 +28,7 @@ Utility functions for the XWindow
Summary: utilX
Group: Development/Libraries
Requires: %{name} = %{version}-%{release}
+Requires: pkgconfig(xproto)
Requires: pkgconfig(x11)
%description devel
@@ -64,7 +64,7 @@ cp %{_builddir}/%{buildsubdir}/LICENSE.APLv2 %{buildroot}/usr/share/license/%{na
%files devel
%defattr(-,root,root,-)
-/usr/include/utilX.h
+/usr/include/*
/usr/lib/libutilX.so
/usr/lib/pkgconfig/utilX.pc
diff --git a/utilX.h b/utilX.h
index ab95bd9..c956520 100755
--- 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))
@@ -27,19 +27,8 @@
#endif
/**
- * @ingroup CORE_LIB_GROUP
- * @defgroup UTILX_MODULE utilX
- * @brief Samsung Linux platform X11 utilties
- *
- * @section UTILX_MODULE_HEADER Required Header
- * \#include <utilX.h>
- * @section UTILX_MODULE_OVERVIEW Overview
- * The utilX is common X11 utility.
- * It provides functions used by xclients, mainly to get or set state of X11 resources's information.
- */
-
-/**
-* @addtogroup UTILX_MODULE
+* @internal
+* @addtogroup CAPI_UI_UTILX_MODULE
* @{
*/
@@ -51,368 +40,420 @@
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 "XF86AudioPlayPause" /**< 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, asynchronously
- *
- * @details 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)
+ * @brief Sets the priority level for the specified notification window, asynchronously.
*
- * 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.
+ * @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.
*
- * @remarks This is used only notification window.
- * @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)
- * @pre The win should be notification type window
- * @post None
+ * @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
+ * @see utilx_get_system_notification_level()
* @par Example
@code
#include <utilX.h>
@@ -437,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>
@@ -473,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
- *
- * @details 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.
- *
- * @remarks 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.
- * @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
- * @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
@@ -722,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;
}
@@ -743,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;
}
@@ -764,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
@@ -772,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
+ * @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 was released, delivery of the key events for the specfied window is going to be stopped.
- *
- * This function is synchronous.
- *
- * @remarks No additional information
- * @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
- * @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
+ * 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
@@ -906,7 +838,7 @@ int utilx_grab_key (Display* dpy, Window win, const char* key_name, int grab_mod
return -1;
...
- 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;
}
@@ -927,7 +859,7 @@ int utilx_grab_key (Display* dpy, Window win, const char* key_name, int grab_mod
...
- 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;
}
@@ -949,7 +881,7 @@ int utilx_grab_key (Display* dpy, Window win, const char* key_name, int grab_mod
...
- 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
@@ -957,376 +889,21 @@ int utilx_grab_key (Display* dpy, Window win, const char* key_name, int grab_mod
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);
-
- // 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);
-
-/**
- * @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;
-
- dpy = XOpenDisplay (NULL);
- root = XDefaultRootWindow (dpy);
-
- // 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);
-
-/**
- * @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, asynchronously.
- *
- * @details 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
- *
- * @remarks This is used only client window. ( not root window )
- * @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 )
- * @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_Effect_Type
- * @see #Utilx_Effect_Style
- * @see utilx_get_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;
-
- dpy = XOpenDisplay(NULL) ;
-
- black = BlackPixel(dpy, 0);
- white = WhitePixel(dpy, 0);
-
- root = XDefaultRootWindow (dpy);
- win = XCreateSimpleWindow ( dpy, root, 0, 0, 100, 100, 2, BlackPixel (d,0), WhitePixel(d,0) );
-
- 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
-
- XMapWindow(dpy, win);
-
- ...
-
- 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
-
- XUnmapWindow (dpy, win);
-
- 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);
-
- ...
-
- 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);
-
- ...
-
- 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_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);
-
- ...
- @endcode
- */
-void utilx_set_window_effect_style(Display* dpy, Window win, Utilx_Effect_Type type, Utilx_Effect_Style style);
-
-/**
- * @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.
- *
- * @remark This is used only client window. ( not root window )
- * @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 )
- * @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);
-
- root = XDefaultRootWindow (dpy);
- win = XCreateSimpleWindow ( dpy, root, 0, 0, 100, 100, 2, BlackPixel (d,0), WhitePixel(d,0) );
-
- style = utilx_set_window_effect_style(dpy, win, UTILX_EFFECT_TYPE_MAP); // get effect style with window's show effet type
-
- ...
-
- style = utilx_set_window_effect_style(dpy, win, UTILX_EFFECT_TYPE_UNMAP); // get effect style with window's show effet type
-
- ...
- @endcode
- */
-Utilx_Effect_Style utilx_get_window_effect_style(Display* dpy, Window win, Utilx_Effect_Type type);
-
-/**
- * @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>
@@ -1358,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;
@@ -1577,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;
@@ -1611,77 +1013,6 @@ 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.
- *
- * @details 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_Fb_Type
- * @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
@@ -1690,5 +1021,5 @@ void utilx_set_video_offset (Display* dpy, int x, int y);
*@}
*/
-#endif /* __SAMSUNG_LINUX_UTIL_X11_H__ */
+#endif /* __TIZEN_LINUX_UTIL_X11_H__ */
diff --git a/utilX.pc b/utilX.pc
index f0fd703..66e984f 100644
--- a/utilX.pc
+++ b/utilX.pc
@@ -8,5 +8,6 @@ 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}
diff --git a/utilX.pc.in b/utilX.pc.in
index 5079edf..54b2e91 100644
--- a/utilX.pc.in
+++ b/utilX.pc.in
@@ -8,5 +8,6 @@ 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
index 0000000..9bf7b2c
--- /dev/null
+++ b/utilX_ext.h
@@ -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 ac4dce1..4b3cb17 100644
--- 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)
{
@@ -628,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;
@@ -662,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;
@@ -679,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;
- }
}
}
@@ -696,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;
@@ -765,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
{
@@ -796,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)
{
@@ -881,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);
@@ -1153,102 +725,6 @@ 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)
-{
- if (_atom_screen_capture_disable)
- return;
-
- _atom_screen_capture_disable = XInternAtom (dpy, "_CB_SCREEN_CAPTURE_DISABLE", False);
- if (_atom_screen_capture_disable)
- return;
-
- fprintf (stderr, "[UTILX] Error.. Cannot create _CB_SCREEN_CAPTURE_DISABLE atom.. %s (%d)\n", __func__, __LINE__);
-}
-
-API int
-utilx_set_screen_capture(Display* dpy, int enable)
-{
- 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;
-
- _utilx_screen_capture_atom_ensure (dpy);
-
- _utilx_set_window_property (dpy, root, _atom_screen_capture_disable, XA_CARDINAL, (unsigned int *)&disable, 1);
-
- return 1;
-}
-
-API int
-utilx_get_screen_capture(Display* dpy)
-{
- Window root;
- int disable = 0;
-
- if (!dpy)
- {
- fprintf (stderr, "[UTILX] Error.. dpy is NULL %s (%d)\n", __func__, __LINE__);
- return 0;
- }
-
- root = RootWindow (dpy, DefaultScreen(dpy));
-
- _utilx_screen_capture_atom_ensure (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));
@@ -1278,7 +754,7 @@ API void utilx_scrnconf_free (UtilxScrnConf *scrnconf)
API int utilx_scrnconf_get_info (Display *dpy, UtilxScrnConf *scrnconf)
{
- Window win = DefaultRootWindow(dpy);
+ Window win;
Atom scrnconf_atom = None;
XTextProperty xtp;
char *str = NULL;
@@ -1288,6 +764,14 @@ API int utilx_scrnconf_get_info (Display *dpy, UtilxScrnConf *scrnconf)
int i = 0;
int s;
+ if (!dpy)
+ goto fail;
+
+ if (!scrnconf)
+ goto fail;
+
+ win = DefaultRootWindow(dpy);
+
scrnconf_atom = XInternAtom (dpy, "_SCRNCONF_INFO", False);
/* get property */
@@ -1311,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;
@@ -1328,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;
@@ -1440,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;
@@ -1455,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;
@@ -1657,7 +1141,7 @@ _init_screen_shot (Display* dpy, unsigned int width, unsigned int height)
info->shminfo.shmaddr = (void*)-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;
@@ -1821,6 +1305,210 @@ utilx_create_screen_shot (Display* dpy, int width, int height)
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;
+ }
+
+ XDamageSubtract (info->dpy, info->damage, None, None );
+ }
+
+ utilx_release_screen_shot ();
+
+ return NULL;
+}
+
API void
utilx_release_screen_shot (void)
{
@@ -1993,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;
- }
-}