tizen 2.4 release accepted/tizen_2.4_mobile accepted/tizen/2.4/mobile/20151029.031415 submit/tizen_2.4/20151028.064819 tizen_2.4_mobile_release
authorjk7744.park <jk7744.park@samsung.com>
Sat, 24 Oct 2015 08:08:47 +0000 (17:08 +0900)
committerjk7744.park <jk7744.park@samsung.com>
Sat, 24 Oct 2015 08:08:47 +0000 (17:08 +0900)
203 files changed:
2.2/CMakeLists.txt [new file with mode: 0644]
2.2/data/images/B12_button_delete.png [new file with mode: 0755]
2.2/data/images/B12_button_delete_press.png [new file with mode: 0755]
2.2/data/images/B12_icon_lock.png [new file with mode: 0644]
2.2/data/images/B12_memo_bg.#.png [new file with mode: 0644]
2.2/data/images/B12_memo_bg_line.#.png [new file with mode: 0644]
2.2/data/images/B12_panel_button.#.png [new file with mode: 0644]
2.2/data/images/B12_panel_button_dim.png [new file with mode: 0644]
2.2/data/images/B12_panel_button_line.#.png [new file with mode: 0644]
2.2/data/images/B12_panel_icon_close.png [new file with mode: 0755]
2.2/data/images/B12_panel_scroll_bar.png [new file with mode: 0644]
2.2/data/images/B12_panel_title_bg.#.png [new file with mode: 0644]
2.2/data/images/B12_panel_title_bg.png [new file with mode: 0755]
2.2/data/images/B12_panel_title_bg_line.#.png [new file with mode: 0644]
2.2/data/images/B12_thumbnail_bg.#.png [new file with mode: 0644]
2.2/data/images/B12_thumbnail_bg_line.#.png [new file with mode: 0644]
2.2/data/images/bouncing_left_00.png [new file with mode: 0644]
2.2/data/images/bouncing_left_01.png [new file with mode: 0644]
2.2/data/images/bouncing_left_02.png [new file with mode: 0644]
2.2/data/images/bouncing_left_03.png [new file with mode: 0644]
2.2/data/images/bouncing_left_04.png [new file with mode: 0644]
2.2/data/images/bouncing_left_05.png [new file with mode: 0644]
2.2/data/images/bouncing_left_06.png [new file with mode: 0644]
2.2/data/images/bouncing_left_07.png [new file with mode: 0644]
2.2/data/images/bouncing_left_08.png [new file with mode: 0644]
2.2/data/images/bouncing_left_09.png [new file with mode: 0644]
2.2/data/images/bouncing_left_10.png [new file with mode: 0644]
2.2/data/images/bouncing_left_11.png [new file with mode: 0644]
2.2/data/images/bouncing_left_12.png [new file with mode: 0644]
2.2/data/images/bouncing_left_13.png [new file with mode: 0644]
2.2/data/images/bouncing_left_14.png [new file with mode: 0644]
2.2/data/images/bouncing_left_15.png [new file with mode: 0644]
2.2/data/images/bouncing_left_16.png [new file with mode: 0644]
2.2/data/images/bouncing_left_17.png [new file with mode: 0644]
2.2/data/images/bouncing_left_18.png [new file with mode: 0644]
2.2/data/images/bouncing_left_19.png [new file with mode: 0644]
2.2/data/images/bouncing_right_00.png [new file with mode: 0644]
2.2/data/images/bouncing_right_01.png [new file with mode: 0644]
2.2/data/images/bouncing_right_02.png [new file with mode: 0644]
2.2/data/images/bouncing_right_03.png [new file with mode: 0644]
2.2/data/images/bouncing_right_04.png [new file with mode: 0644]
2.2/data/images/bouncing_right_05.png [new file with mode: 0644]
2.2/data/images/bouncing_right_06.png [new file with mode: 0644]
2.2/data/images/bouncing_right_07.png [new file with mode: 0644]
2.2/data/images/bouncing_right_08.png [new file with mode: 0644]
2.2/data/images/bouncing_right_09.png [new file with mode: 0644]
2.2/data/images/bouncing_right_10.png [new file with mode: 0644]
2.2/data/images/bouncing_right_11.png [new file with mode: 0644]
2.2/data/images/bouncing_right_12.png [new file with mode: 0644]
2.2/data/images/bouncing_right_13.png [new file with mode: 0644]
2.2/data/images/bouncing_right_14.png [new file with mode: 0644]
2.2/data/images/bouncing_right_15.png [new file with mode: 0644]
2.2/data/images/bouncing_right_16.png [new file with mode: 0644]
2.2/data/images/bouncing_right_17.png [new file with mode: 0644]
2.2/data/images/bouncing_right_18.png [new file with mode: 0644]
2.2/data/images/bouncing_right_19.png [new file with mode: 0644]
2.2/data/sounds/button-pressed.wav [new file with mode: 0755]
2.2/data/tables/_ChangeableColorInfo.xml [new file with mode: 0644]
2.2/data/tables/_ChangeableFontInfo.xml [new file with mode: 0644]
2.2/data/themes/cbhmdrawer.edc [new file with mode: 0644]
2.2/data/themes/popup_layout.edc [new file with mode: 0644]
2.2/data/themes/scroller.edc [new file with mode: 0644]
2.2/po/CMakeLists.txt [new file with mode: 0755]
2.2/po/az.po [new file with mode: 0644]
2.2/po/bg.po [new file with mode: 0644]
2.2/po/ca.po [new file with mode: 0644]
2.2/po/cs.po [new file with mode: 0644]
2.2/po/da.po [new file with mode: 0644]
2.2/po/de.po [new file with mode: 0644]
2.2/po/el_GR.po [new file with mode: 0644]
2.2/po/en.po [new file with mode: 0644]
2.2/po/en_US.po [new file with mode: 0644]
2.2/po/es_ES.po [new file with mode: 0644]
2.2/po/es_US.po [new file with mode: 0644]
2.2/po/et.po [new file with mode: 0644]
2.2/po/eu.po [new file with mode: 0644]
2.2/po/fi.po [new file with mode: 0644]
2.2/po/fr.po [new file with mode: 0644]
2.2/po/fr_CA.po [new file with mode: 0644]
2.2/po/gl.po [new file with mode: 0644]
2.2/po/hr.po [new file with mode: 0644]
2.2/po/hu.po [new file with mode: 0644]
2.2/po/hy.po [new file with mode: 0644]
2.2/po/is.po [new file with mode: 0644]
2.2/po/it_IT.po [new file with mode: 0644]
2.2/po/ka.po [new file with mode: 0644]
2.2/po/kk.po [new file with mode: 0644]
2.2/po/ko_KR.po [new file with mode: 0644]
2.2/po/lt.po [new file with mode: 0644]
2.2/po/lv.po [new file with mode: 0644]
2.2/po/mn_MN.po [new file with mode: 0644]
2.2/po/nb.po [new file with mode: 0644]
2.2/po/nl.po [new file with mode: 0644]
2.2/po/pl.po [new file with mode: 0644]
2.2/po/pt_BR.po [new file with mode: 0644]
2.2/po/pt_PT.po [new file with mode: 0644]
2.2/po/ro.po [new file with mode: 0644]
2.2/po/ru_RU.po [new file with mode: 0644]
2.2/po/sk.po [new file with mode: 0644]
2.2/po/sl.po [new file with mode: 0644]
2.2/po/sr.po [new file with mode: 0644]
2.2/po/sv.po [new file with mode: 0644]
2.2/po/tr_TR.po [new file with mode: 0644]
2.2/po/uk.po [new file with mode: 0644]
2.2/po/uz.po [new file with mode: 0644]
2.2/src/cbhm.h [new file with mode: 0644]
2.2/src/clipdrawer.c [new file with mode: 0644]
2.2/src/clipdrawer.h [new file with mode: 0644]
2.2/src/item_manager.c [new file with mode: 0644]
2.2/src/item_manager.h [new file with mode: 0644]
2.2/src/main.c [new file with mode: 0644]
2.2/src/storage.c [new file with mode: 0644]
2.2/src/storage.h [new file with mode: 0644]
2.2/src/xconverter.c [new file with mode: 0644]
2.2/src/xconverter.h [new file with mode: 0644]
2.2/src/xhandler.c [new file with mode: 0644]
2.2/src/xhandler.h [new file with mode: 0644]
2.3-mobile/CMakeLists.txt
2.3-mobile/data/images/clipboard_button_bg.#.png [new file with mode: 0644]
2.3-mobile/data/themes/cbhmdrawer.edc
2.3-mobile/po/CMakeLists.txt
2.3-mobile/po/ar.po
2.3-mobile/po/as.po [new file with mode: 0644]
2.3-mobile/po/az.po
2.3-mobile/po/bg.po
2.3-mobile/po/bn.po [new file with mode: 0644]
2.3-mobile/po/ca.po
2.3-mobile/po/cs.po
2.3-mobile/po/da.po
2.3-mobile/po/de.po
2.3-mobile/po/el_GR.po
2.3-mobile/po/en.po
2.3-mobile/po/en_PH.po
2.3-mobile/po/en_US.po
2.3-mobile/po/es_ES.po
2.3-mobile/po/es_US.po
2.3-mobile/po/et.po
2.3-mobile/po/eu.po
2.3-mobile/po/fi.po
2.3-mobile/po/fr.po
2.3-mobile/po/fr_CA.po
2.3-mobile/po/ga.po
2.3-mobile/po/gl.po
2.3-mobile/po/hi.po
2.3-mobile/po/hr.po
2.3-mobile/po/hu.po
2.3-mobile/po/hy.po
2.3-mobile/po/is.po
2.3-mobile/po/it_IT.po
2.3-mobile/po/ja_JP.po
2.3-mobile/po/ka.po
2.3-mobile/po/kk.po
2.3-mobile/po/kn.po [new file with mode: 0644]
2.3-mobile/po/ko_KR.po
2.3-mobile/po/lt.po
2.3-mobile/po/lv.po
2.3-mobile/po/mk.po
2.3-mobile/po/ml.po [new file with mode: 0644]
2.3-mobile/po/mr.po [new file with mode: 0644]
2.3-mobile/po/nb.po
2.3-mobile/po/ne.po [new file with mode: 0644]
2.3-mobile/po/nl.po
2.3-mobile/po/or.po [new file with mode: 0644]
2.3-mobile/po/pa.po [new file with mode: 0644]
2.3-mobile/po/pl.po
2.3-mobile/po/pt_BR.po
2.3-mobile/po/pt_PT.po
2.3-mobile/po/ro.po
2.3-mobile/po/ru_RU.po
2.3-mobile/po/si.po [new file with mode: 0644]
2.3-mobile/po/sk.po
2.3-mobile/po/sl.po
2.3-mobile/po/sr.po
2.3-mobile/po/sv.po
2.3-mobile/po/ta.po [new file with mode: 0644]
2.3-mobile/po/te.po [new file with mode: 0644]
2.3-mobile/po/tr_TR.po
2.3-mobile/po/uk.po
2.3-mobile/po/ur.po [new file with mode: 0644]
2.3-mobile/po/uz.po
2.3-mobile/po/zh_CN.po
2.3-mobile/po/zh_HK.po
2.3-mobile/po/zh_TW.po
2.3-mobile/src/cbhm.h
2.3-mobile/src/clipdrawer.c
2.3-mobile/src/clipdrawer.h
2.3-mobile/src/item_manager.c
2.3-mobile/src/item_manager.h
2.3-mobile/src/main.c
2.3-mobile/src/storage.c
2.3-mobile/src/xconverter.c
2.3-mobile/src/xhandler.c
2.3-wearable/CMakeLists.txt
2.3-wearable/src/cbhm.h
2.3-wearable/src/clipdrawer.c
2.3-wearable/src/item_manager.c
2.3-wearable/src/item_manager.h
2.3-wearable/src/storage.c
2.3-wearable/src/xconverter.c
LICENSE
cbhm.manifest
packaging/cbhm.spec
systemd/cbhm.service

diff --git a/2.2/CMakeLists.txt b/2.2/CMakeLists.txt
new file mode 100644 (file)
index 0000000..507c453
--- /dev/null
@@ -0,0 +1,55 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+PROJECT(cbhm C)
+
+SET(PREFIX ${CMAKE_INSTALL_PREFIX})
+SET(LIBDIR "${PREFIX}/lib")
+SET(DATADIR "${PREFIX}/share")
+SET(LOCALEDIR "${DATADIR}/locale")
+SET(VERSION 0.1.0)
+
+SET(SRCS src/main.c
+       src/item_manager.c
+       src/xconverter.c
+       src/xhandler.c
+       src/clipdrawer.c
+       src/storage.c
+)
+
+INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR})
+
+IF ( MDM_ENABLE )
+        ADD_DEFINITIONS( -DMDM_ENABLE )
+        SET(MDM_REQUIRED_PKGS "mdm")
+ENDIF ( MDM_ENABLE )
+
+INCLUDE(FindPkgConfig)
+       pkg_check_modules(pkgs REQUIRED elementary eet appcore-efl appcore-common x11 ecore-x utilX eina evas ecore ecore-file ecore-evas edje ecore-input notification vconf vconf-internal-keys libsystemd-daemon ${MDM_REQUIED_PKGS})
+
+FOREACH(flag ${pkgs_CFLAGS})
+       SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
+ENDFOREACH(flag)
+
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -fvisibility=hidden -Wall -fPIC -g")
+
+ADD_DEFINITIONS("-DPREFIX=\"${CMAKE_INSTALL_PREFIX}\"")
+
+ADD_EXECUTABLE(${PROJECT_NAME} ${SRCS})
+#for XV extension screenshot
+TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${pkgs_LDFLAGS})
+
+ADD_CUSTOM_TARGET(cbhmdrawer.edj
+          COMMAND edje_cc
+          -id ${CMAKE_CURRENT_SOURCE_DIR}/data/images
+          -sd ${CMAKE_CURRENT_SOURCE_DIR}/data/sounds
+          ${CMAKE_SOURCE_DIR}/data/themes/cbhmdrawer.edc ${CMAKE_BINARY_DIR}/data/themes/cbhmdrawer.edj
+          DEPENDS ${CMAKE_SOURCE_DIR}/data/themes/cbhmdrawer.edc
+)
+ADD_DEPENDENCIES(${PROJECT_NAME} cbhmdrawer.edj)
+
+INSTALL(TARGETS ${PROJECT_NAME} DESTINATION bin)
+INSTALL(FILES ${CMAKE_BINARY_DIR}/data/themes/cbhmdrawer.edj DESTINATION ${DATADIR}/edje)
+INSTALL(FILES ${CMAKE_BINARY_DIR}/data/tables/_ChangeableColorInfo.xml DESTINATION ${DATADIR}/tables)
+INSTALL(FILES ${CMAKE_BINARY_DIR}/data/tables/_ChangeableFontInfo.xml DESTINATION ${DATADIR}/tables)
+ADD_SUBDIRECTORY(po)
+INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/../systemd/cbhm.service DESTINATION ${LIBDIR}/systemd/user)
+INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/../systemd/cbhm.service DESTINATION ${LIBDIR}/systemd/system)
diff --git a/2.2/data/images/B12_button_delete.png b/2.2/data/images/B12_button_delete.png
new file mode 100755 (executable)
index 0000000..1309d7f
Binary files /dev/null and b/2.2/data/images/B12_button_delete.png differ
diff --git a/2.2/data/images/B12_button_delete_press.png b/2.2/data/images/B12_button_delete_press.png
new file mode 100755 (executable)
index 0000000..26e623b
Binary files /dev/null and b/2.2/data/images/B12_button_delete_press.png differ
diff --git a/2.2/data/images/B12_icon_lock.png b/2.2/data/images/B12_icon_lock.png
new file mode 100644 (file)
index 0000000..7628919
Binary files /dev/null and b/2.2/data/images/B12_icon_lock.png differ
diff --git a/2.2/data/images/B12_memo_bg.#.png b/2.2/data/images/B12_memo_bg.#.png
new file mode 100644 (file)
index 0000000..65ea1e0
Binary files /dev/null and b/2.2/data/images/B12_memo_bg.#.png differ
diff --git a/2.2/data/images/B12_memo_bg_line.#.png b/2.2/data/images/B12_memo_bg_line.#.png
new file mode 100644 (file)
index 0000000..80def74
Binary files /dev/null and b/2.2/data/images/B12_memo_bg_line.#.png differ
diff --git a/2.2/data/images/B12_panel_button.#.png b/2.2/data/images/B12_panel_button.#.png
new file mode 100644 (file)
index 0000000..249a90e
Binary files /dev/null and b/2.2/data/images/B12_panel_button.#.png differ
diff --git a/2.2/data/images/B12_panel_button_dim.png b/2.2/data/images/B12_panel_button_dim.png
new file mode 100644 (file)
index 0000000..ebfb371
Binary files /dev/null and b/2.2/data/images/B12_panel_button_dim.png differ
diff --git a/2.2/data/images/B12_panel_button_line.#.png b/2.2/data/images/B12_panel_button_line.#.png
new file mode 100644 (file)
index 0000000..505abe2
Binary files /dev/null and b/2.2/data/images/B12_panel_button_line.#.png differ
diff --git a/2.2/data/images/B12_panel_icon_close.png b/2.2/data/images/B12_panel_icon_close.png
new file mode 100755 (executable)
index 0000000..9dac074
Binary files /dev/null and b/2.2/data/images/B12_panel_icon_close.png differ
diff --git a/2.2/data/images/B12_panel_scroll_bar.png b/2.2/data/images/B12_panel_scroll_bar.png
new file mode 100644 (file)
index 0000000..e6e4def
Binary files /dev/null and b/2.2/data/images/B12_panel_scroll_bar.png differ
diff --git a/2.2/data/images/B12_panel_title_bg.#.png b/2.2/data/images/B12_panel_title_bg.#.png
new file mode 100644 (file)
index 0000000..eb1de29
Binary files /dev/null and b/2.2/data/images/B12_panel_title_bg.#.png differ
diff --git a/2.2/data/images/B12_panel_title_bg.png b/2.2/data/images/B12_panel_title_bg.png
new file mode 100755 (executable)
index 0000000..cb26df8
Binary files /dev/null and b/2.2/data/images/B12_panel_title_bg.png differ
diff --git a/2.2/data/images/B12_panel_title_bg_line.#.png b/2.2/data/images/B12_panel_title_bg_line.#.png
new file mode 100644 (file)
index 0000000..46b3b39
Binary files /dev/null and b/2.2/data/images/B12_panel_title_bg_line.#.png differ
diff --git a/2.2/data/images/B12_thumbnail_bg.#.png b/2.2/data/images/B12_thumbnail_bg.#.png
new file mode 100644 (file)
index 0000000..dc5cd39
Binary files /dev/null and b/2.2/data/images/B12_thumbnail_bg.#.png differ
diff --git a/2.2/data/images/B12_thumbnail_bg_line.#.png b/2.2/data/images/B12_thumbnail_bg_line.#.png
new file mode 100644 (file)
index 0000000..66b6283
Binary files /dev/null and b/2.2/data/images/B12_thumbnail_bg_line.#.png differ
diff --git a/2.2/data/images/bouncing_left_00.png b/2.2/data/images/bouncing_left_00.png
new file mode 100644 (file)
index 0000000..4082737
Binary files /dev/null and b/2.2/data/images/bouncing_left_00.png differ
diff --git a/2.2/data/images/bouncing_left_01.png b/2.2/data/images/bouncing_left_01.png
new file mode 100644 (file)
index 0000000..e991f6a
Binary files /dev/null and b/2.2/data/images/bouncing_left_01.png differ
diff --git a/2.2/data/images/bouncing_left_02.png b/2.2/data/images/bouncing_left_02.png
new file mode 100644 (file)
index 0000000..a39701a
Binary files /dev/null and b/2.2/data/images/bouncing_left_02.png differ
diff --git a/2.2/data/images/bouncing_left_03.png b/2.2/data/images/bouncing_left_03.png
new file mode 100644 (file)
index 0000000..7c6cc40
Binary files /dev/null and b/2.2/data/images/bouncing_left_03.png differ
diff --git a/2.2/data/images/bouncing_left_04.png b/2.2/data/images/bouncing_left_04.png
new file mode 100644 (file)
index 0000000..a028d85
Binary files /dev/null and b/2.2/data/images/bouncing_left_04.png differ
diff --git a/2.2/data/images/bouncing_left_05.png b/2.2/data/images/bouncing_left_05.png
new file mode 100644 (file)
index 0000000..cb0a48a
Binary files /dev/null and b/2.2/data/images/bouncing_left_05.png differ
diff --git a/2.2/data/images/bouncing_left_06.png b/2.2/data/images/bouncing_left_06.png
new file mode 100644 (file)
index 0000000..0f4a24f
Binary files /dev/null and b/2.2/data/images/bouncing_left_06.png differ
diff --git a/2.2/data/images/bouncing_left_07.png b/2.2/data/images/bouncing_left_07.png
new file mode 100644 (file)
index 0000000..322fb4d
Binary files /dev/null and b/2.2/data/images/bouncing_left_07.png differ
diff --git a/2.2/data/images/bouncing_left_08.png b/2.2/data/images/bouncing_left_08.png
new file mode 100644 (file)
index 0000000..ae0eba5
Binary files /dev/null and b/2.2/data/images/bouncing_left_08.png differ
diff --git a/2.2/data/images/bouncing_left_09.png b/2.2/data/images/bouncing_left_09.png
new file mode 100644 (file)
index 0000000..9f9ac29
Binary files /dev/null and b/2.2/data/images/bouncing_left_09.png differ
diff --git a/2.2/data/images/bouncing_left_10.png b/2.2/data/images/bouncing_left_10.png
new file mode 100644 (file)
index 0000000..3042518
Binary files /dev/null and b/2.2/data/images/bouncing_left_10.png differ
diff --git a/2.2/data/images/bouncing_left_11.png b/2.2/data/images/bouncing_left_11.png
new file mode 100644 (file)
index 0000000..960b8cd
Binary files /dev/null and b/2.2/data/images/bouncing_left_11.png differ
diff --git a/2.2/data/images/bouncing_left_12.png b/2.2/data/images/bouncing_left_12.png
new file mode 100644 (file)
index 0000000..496c447
Binary files /dev/null and b/2.2/data/images/bouncing_left_12.png differ
diff --git a/2.2/data/images/bouncing_left_13.png b/2.2/data/images/bouncing_left_13.png
new file mode 100644 (file)
index 0000000..736c0b9
Binary files /dev/null and b/2.2/data/images/bouncing_left_13.png differ
diff --git a/2.2/data/images/bouncing_left_14.png b/2.2/data/images/bouncing_left_14.png
new file mode 100644 (file)
index 0000000..3bd102b
Binary files /dev/null and b/2.2/data/images/bouncing_left_14.png differ
diff --git a/2.2/data/images/bouncing_left_15.png b/2.2/data/images/bouncing_left_15.png
new file mode 100644 (file)
index 0000000..801eb26
Binary files /dev/null and b/2.2/data/images/bouncing_left_15.png differ
diff --git a/2.2/data/images/bouncing_left_16.png b/2.2/data/images/bouncing_left_16.png
new file mode 100644 (file)
index 0000000..43920e6
Binary files /dev/null and b/2.2/data/images/bouncing_left_16.png differ
diff --git a/2.2/data/images/bouncing_left_17.png b/2.2/data/images/bouncing_left_17.png
new file mode 100644 (file)
index 0000000..58f3d61
Binary files /dev/null and b/2.2/data/images/bouncing_left_17.png differ
diff --git a/2.2/data/images/bouncing_left_18.png b/2.2/data/images/bouncing_left_18.png
new file mode 100644 (file)
index 0000000..ba1dec6
Binary files /dev/null and b/2.2/data/images/bouncing_left_18.png differ
diff --git a/2.2/data/images/bouncing_left_19.png b/2.2/data/images/bouncing_left_19.png
new file mode 100644 (file)
index 0000000..edc83c1
Binary files /dev/null and b/2.2/data/images/bouncing_left_19.png differ
diff --git a/2.2/data/images/bouncing_right_00.png b/2.2/data/images/bouncing_right_00.png
new file mode 100644 (file)
index 0000000..4082737
Binary files /dev/null and b/2.2/data/images/bouncing_right_00.png differ
diff --git a/2.2/data/images/bouncing_right_01.png b/2.2/data/images/bouncing_right_01.png
new file mode 100644 (file)
index 0000000..23f0d2a
Binary files /dev/null and b/2.2/data/images/bouncing_right_01.png differ
diff --git a/2.2/data/images/bouncing_right_02.png b/2.2/data/images/bouncing_right_02.png
new file mode 100644 (file)
index 0000000..f54f36b
Binary files /dev/null and b/2.2/data/images/bouncing_right_02.png differ
diff --git a/2.2/data/images/bouncing_right_03.png b/2.2/data/images/bouncing_right_03.png
new file mode 100644 (file)
index 0000000..c1fb5a1
Binary files /dev/null and b/2.2/data/images/bouncing_right_03.png differ
diff --git a/2.2/data/images/bouncing_right_04.png b/2.2/data/images/bouncing_right_04.png
new file mode 100644 (file)
index 0000000..fd7b67c
Binary files /dev/null and b/2.2/data/images/bouncing_right_04.png differ
diff --git a/2.2/data/images/bouncing_right_05.png b/2.2/data/images/bouncing_right_05.png
new file mode 100644 (file)
index 0000000..a0c6c58
Binary files /dev/null and b/2.2/data/images/bouncing_right_05.png differ
diff --git a/2.2/data/images/bouncing_right_06.png b/2.2/data/images/bouncing_right_06.png
new file mode 100644 (file)
index 0000000..9667e72
Binary files /dev/null and b/2.2/data/images/bouncing_right_06.png differ
diff --git a/2.2/data/images/bouncing_right_07.png b/2.2/data/images/bouncing_right_07.png
new file mode 100644 (file)
index 0000000..b1fc811
Binary files /dev/null and b/2.2/data/images/bouncing_right_07.png differ
diff --git a/2.2/data/images/bouncing_right_08.png b/2.2/data/images/bouncing_right_08.png
new file mode 100644 (file)
index 0000000..8c9941a
Binary files /dev/null and b/2.2/data/images/bouncing_right_08.png differ
diff --git a/2.2/data/images/bouncing_right_09.png b/2.2/data/images/bouncing_right_09.png
new file mode 100644 (file)
index 0000000..4036244
Binary files /dev/null and b/2.2/data/images/bouncing_right_09.png differ
diff --git a/2.2/data/images/bouncing_right_10.png b/2.2/data/images/bouncing_right_10.png
new file mode 100644 (file)
index 0000000..7e2370c
Binary files /dev/null and b/2.2/data/images/bouncing_right_10.png differ
diff --git a/2.2/data/images/bouncing_right_11.png b/2.2/data/images/bouncing_right_11.png
new file mode 100644 (file)
index 0000000..b694f6a
Binary files /dev/null and b/2.2/data/images/bouncing_right_11.png differ
diff --git a/2.2/data/images/bouncing_right_12.png b/2.2/data/images/bouncing_right_12.png
new file mode 100644 (file)
index 0000000..5fd0a8c
Binary files /dev/null and b/2.2/data/images/bouncing_right_12.png differ
diff --git a/2.2/data/images/bouncing_right_13.png b/2.2/data/images/bouncing_right_13.png
new file mode 100644 (file)
index 0000000..92bec11
Binary files /dev/null and b/2.2/data/images/bouncing_right_13.png differ
diff --git a/2.2/data/images/bouncing_right_14.png b/2.2/data/images/bouncing_right_14.png
new file mode 100644 (file)
index 0000000..147f644
Binary files /dev/null and b/2.2/data/images/bouncing_right_14.png differ
diff --git a/2.2/data/images/bouncing_right_15.png b/2.2/data/images/bouncing_right_15.png
new file mode 100644 (file)
index 0000000..d2aa5aa
Binary files /dev/null and b/2.2/data/images/bouncing_right_15.png differ
diff --git a/2.2/data/images/bouncing_right_16.png b/2.2/data/images/bouncing_right_16.png
new file mode 100644 (file)
index 0000000..63372e7
Binary files /dev/null and b/2.2/data/images/bouncing_right_16.png differ
diff --git a/2.2/data/images/bouncing_right_17.png b/2.2/data/images/bouncing_right_17.png
new file mode 100644 (file)
index 0000000..089d106
Binary files /dev/null and b/2.2/data/images/bouncing_right_17.png differ
diff --git a/2.2/data/images/bouncing_right_18.png b/2.2/data/images/bouncing_right_18.png
new file mode 100644 (file)
index 0000000..6bdf8bc
Binary files /dev/null and b/2.2/data/images/bouncing_right_18.png differ
diff --git a/2.2/data/images/bouncing_right_19.png b/2.2/data/images/bouncing_right_19.png
new file mode 100644 (file)
index 0000000..eacfc19
Binary files /dev/null and b/2.2/data/images/bouncing_right_19.png differ
diff --git a/2.2/data/sounds/button-pressed.wav b/2.2/data/sounds/button-pressed.wav
new file mode 100755 (executable)
index 0000000..99ba74d
Binary files /dev/null and b/2.2/data/sounds/button-pressed.wav differ
diff --git a/2.2/data/tables/_ChangeableColorInfo.xml b/2.2/data/tables/_ChangeableColorInfo.xml
new file mode 100644 (file)
index 0000000..0ff1814
--- /dev/null
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ChangeableColorTable num="1">
+       <Theme style="Dark">
+               <ChangeableColorInfo id="AO001" inputColor="W" hue="0" saturation="0" value="-72" alpha="100" />
+               <ChangeableColorInfo id="AO002L1" inputColor="W" hue="51" saturation="12" value="-3" alpha="100" />
+               <ChangeableColorInfo id="AO002L2" inputColor="W" hue="0" saturation="0" value="0" alpha="100" />
+               <ChangeableColorInfo id="AO003" inputColor="W" hue="0" saturation="0" value="0" alpha="100" />
+               <ChangeableColorInfo id="AO004" inputColor="K" hue="0" saturation="0" value="0" alpha="50" />
+               <ChangeableColorInfo id="AO004P" inputColor="3" hue="-8" saturation="3" value="-57" alpha="100" />
+               <ChangeableColorInfo id="AO004L1" inputColor="W" hue="0" saturation="0" value="0" alpha="25" />
+               <ChangeableColorInfo id="AO005" inputColor="W" hue="0" saturation="0" value="0" alpha="100" />
+               <ChangeableColorInfo id="AO005P" inputColor="3" hue="-8" saturation="3" value="-57" alpha="100" />
+               <ChangeableColorInfo id="AO006" inputColor="K" hue="0" saturation="0" value="8" alpha="100" />
+               <ChangeableColorInfo id="AO006L1" inputColor="W" hue="0" saturation="0" value="0" alpha="8" />
+               <ChangeableColorInfo id="ATO001" inputColor="K" hue="0" saturation="0" value="0" alpha="100" />
+               <ChangeableColorInfo id="ATO002" inputColor="K" hue="0" saturation="0" value="0" alpha="100" />
+               <ChangeableColorInfo id="ATO003" inputColor="W" hue="0" saturation="0" value="0" alpha="100" />
+               <ChangeableColorInfo id="ATO004" inputColor="W" hue="0" saturation="0" value="0" alpha="100" />
+               <ChangeableColorInfo id="ATO004P" inputColor="W" hue="0" saturation="0" value="0" alpha="100" />
+               <ChangeableColorInfo id="ATO004D" inputColor="W" hue="0" saturation="0" value="0" alpha="40" />
+       </Theme>
+       <Theme style="Light">
+               <ChangeableColorInfo id="AO001" inputColor="W" hue="0" saturation="0" value="-72" alpha="100" />
+               <ChangeableColorInfo id="AO002L1" inputColor="W" hue="51" saturation="12" value="-3" alpha="100" />
+               <ChangeableColorInfo id="AO002L2" inputColor="W" hue="0" saturation="0" value="0" alpha="100" />
+               <ChangeableColorInfo id="AO003" inputColor="W" hue="0" saturation="0" value="0" alpha="100" />
+               <ChangeableColorInfo id="AO004" inputColor="K" hue="0" saturation="0" value="0" alpha="50" />
+               <ChangeableColorInfo id="AO004P" inputColor="3" hue="-8" saturation="3" value="-57" alpha="100" />
+               <ChangeableColorInfo id="AO004L1" inputColor="W" hue="0" saturation="0" value="0" alpha="25" />
+               <ChangeableColorInfo id="AO005" inputColor="W" hue="0" saturation="0" value="0" alpha="100" />
+               <ChangeableColorInfo id="AO005P" inputColor="3" hue="-8" saturation="3" value="-57" alpha="100" />
+               <ChangeableColorInfo id="AO006" inputColor="K" hue="0" saturation="0" value="8" alpha="100" />
+               <ChangeableColorInfo id="AO006L1" inputColor="W" hue="0" saturation="0" value="0" alpha="8" />
+               <ChangeableColorInfo id="ATO001" inputColor="K" hue="0" saturation="0" value="0" alpha="100" />
+               <ChangeableColorInfo id="ATO002" inputColor="K" hue="0" saturation="0" value="0" alpha="100" />
+               <ChangeableColorInfo id="ATO003" inputColor="W" hue="0" saturation="0" value="0" alpha="100" />
+               <ChangeableColorInfo id="ATO004" inputColor="W" hue="0" saturation="0" value="0" alpha="100" />
+               <ChangeableColorInfo id="ATO004P" inputColor="W" hue="0" saturation="0" value="0" alpha="100" />
+               <ChangeableColorInfo id="ATO004D" inputColor="W" hue="0" saturation="0" value="0" alpha="40" />
+       </Theme>
+</ChangeableColorTable>
+<ChangeableColorTable num="2">
+       <Theme style="Dark">
+               <ChangeableColorInfo id="AO001" inputColor="W" hue="0" saturation="0" value="-72" alpha="100" />
+               <ChangeableColorInfo id="AO002L1" inputColor="4" hue="0" saturation="-3" value="11" alpha="100" />
+               <ChangeableColorInfo id="AO002L2" inputColor="W" hue="0" saturation="0" value="0" alpha="100" />
+               <ChangeableColorInfo id="AO003" inputColor="W" hue="0" saturation="0" value="0" alpha="100" />
+               <ChangeableColorInfo id="AO004" inputColor="K" hue="0" saturation="0" value="0" alpha="50" />
+               <ChangeableColorInfo id="AO004P" inputColor="3" hue="0" saturation="0" value="0" alpha="100" />
+               <ChangeableColorInfo id="AO004L1" inputColor="W" hue="0" saturation="0" value="0" alpha="25" />
+               <ChangeableColorInfo id="AO005" inputColor="W" hue="0" saturation="0" value="0" alpha="100" />
+               <ChangeableColorInfo id="AO005P" inputColor="3" hue="0" saturation="0" value="0" alpha="100" />
+               <ChangeableColorInfo id="AO006" inputColor="K" hue="0" saturation="0" value="8" alpha="100" />
+               <ChangeableColorInfo id="AO006L1" inputColor="W" hue="0" saturation="0" value="0" alpha="8" />
+               <ChangeableColorInfo id="ATO001" inputColor="K" hue="0" saturation="0" value="0" alpha="100" />
+               <ChangeableColorInfo id="ATO002" inputColor="K" hue="0" saturation="0" value="0" alpha="100" />
+               <ChangeableColorInfo id="ATO003" inputColor="W" hue="0" saturation="0" value="0" alpha="100" />
+               <ChangeableColorInfo id="ATO004" inputColor="W" hue="0" saturation="0" value="0" alpha="100" />
+               <ChangeableColorInfo id="ATO004P" inputColor="W" hue="0" saturation="0" value="0" alpha="100" />
+               <ChangeableColorInfo id="ATO004D" inputColor="W" hue="0" saturation="0" value="0" alpha="40" />
+       </Theme>
+       <Theme style="Light">
+               <ChangeableColorInfo id="AO001" inputColor="W" hue="0" saturation="0" value="-72" alpha="100" />
+               <ChangeableColorInfo id="AO002L1" inputColor="4" hue="0" saturation="-3" value="11" alpha="100" />
+               <ChangeableColorInfo id="AO002L2" inputColor="W" hue="0" saturation="0" value="0" alpha="100" />
+               <ChangeableColorInfo id="AO003" inputColor="W" hue="0" saturation="0" value="0" alpha="100" />
+               <ChangeableColorInfo id="AO004" inputColor="K" hue="0" saturation="0" value="0" alpha="50" />
+               <ChangeableColorInfo id="AO004P" inputColor="3" hue="0" saturation="0" value="0" alpha="100" />
+               <ChangeableColorInfo id="AO004L1" inputColor="W" hue="0" saturation="0" value="0" alpha="25" />
+               <ChangeableColorInfo id="AO005" inputColor="W" hue="0" saturation="0" value="0" alpha="100" />
+               <ChangeableColorInfo id="AO005P" inputColor="3" hue="0" saturation="0" value="0" alpha="100" />
+               <ChangeableColorInfo id="AO006" inputColor="K" hue="0" saturation="0" value="8" alpha="100" />
+               <ChangeableColorInfo id="AO006L1" inputColor="W" hue="0" saturation="0" value="0" alpha="8" />
+               <ChangeableColorInfo id="ATO001" inputColor="K" hue="0" saturation="0" value="0" alpha="100" />
+               <ChangeableColorInfo id="ATO002" inputColor="K" hue="0" saturation="0" value="0" alpha="100" />
+               <ChangeableColorInfo id="ATO003" inputColor="W" hue="0" saturation="0" value="0" alpha="100" />
+               <ChangeableColorInfo id="ATO004" inputColor="W" hue="0" saturation="0" value="0" alpha="100" />
+               <ChangeableColorInfo id="ATO004P" inputColor="W" hue="0" saturation="0" value="0" alpha="100" />
+               <ChangeableColorInfo id="ATO004D" inputColor="W" hue="0" saturation="0" value="0" alpha="40" />
+       </Theme>
+</ChangeableColorTable>
+<ChangeableColorTable num="3">
+       <Theme style="Dark">
+               <ChangeableColorInfo id="AO001" inputColor="W" hue="0" saturation="0" value="-72" alpha="100" />
+               <ChangeableColorInfo id="AO002L1" inputColor="4" hue="0" saturation="-27" value="60" alpha="100" />
+               <ChangeableColorInfo id="AO002L2" inputColor="W" hue="0" saturation="0" value="0" alpha="100" />
+               <ChangeableColorInfo id="AO003" inputColor="W" hue="0" saturation="0" value="0" alpha="100" />
+               <ChangeableColorInfo id="AO004" inputColor="K" hue="0" saturation="0" value="0" alpha="50" />
+               <ChangeableColorInfo id="AO004P" inputColor="3" hue="0" saturation="0" value="0" alpha="100" />
+               <ChangeableColorInfo id="AO004L1" inputColor="W" hue="0" saturation="0" value="0" alpha="25" />
+               <ChangeableColorInfo id="AO005" inputColor="W" hue="0" saturation="0" value="0" alpha="100" />
+               <ChangeableColorInfo id="AO005P" inputColor="3" hue="0" saturation="0" value="0" alpha="100" />
+               <ChangeableColorInfo id="AO006" inputColor="K" hue="0" saturation="0" value="8" alpha="100" />
+               <ChangeableColorInfo id="AO006L1" inputColor="W" hue="0" saturation="0" value="0" alpha="8" />
+               <ChangeableColorInfo id="ATO001" inputColor="K" hue="0" saturation="0" value="0" alpha="100" />
+               <ChangeableColorInfo id="ATO002" inputColor="K" hue="0" saturation="0" value="0" alpha="100" />
+               <ChangeableColorInfo id="ATO003" inputColor="W" hue="0" saturation="0" value="0" alpha="100" />
+               <ChangeableColorInfo id="ATO004" inputColor="W" hue="0" saturation="0" value="0" alpha="100" />
+               <ChangeableColorInfo id="ATO004P" inputColor="W" hue="0" saturation="0" value="0" alpha="100" />
+               <ChangeableColorInfo id="ATO004D" inputColor="W" hue="0" saturation="0" value="0" alpha="40" />
+       </Theme>
+       <Theme style="Light">
+               <ChangeableColorInfo id="AO001" inputColor="W" hue="0" saturation="0" value="-72" alpha="100" />
+               <ChangeableColorInfo id="AO002L1" inputColor="4" hue="0" saturation="-27" value="60" alpha="100" />
+               <ChangeableColorInfo id="AO002L2" inputColor="W" hue="0" saturation="0" value="0" alpha="100" />
+               <ChangeableColorInfo id="AO003" inputColor="W" hue="0" saturation="0" value="0" alpha="100" />
+               <ChangeableColorInfo id="AO004" inputColor="K" hue="0" saturation="0" value="0" alpha="50" />
+               <ChangeableColorInfo id="AO004P" inputColor="3" hue="0" saturation="0" value="0" alpha="100" />
+               <ChangeableColorInfo id="AO004L1" inputColor="W" hue="0" saturation="0" value="0" alpha="25" />
+               <ChangeableColorInfo id="AO005" inputColor="W" hue="0" saturation="0" value="0" alpha="100" />
+               <ChangeableColorInfo id="AO005P" inputColor="3" hue="0" saturation="0" value="0" alpha="100" />
+               <ChangeableColorInfo id="AO006" inputColor="K" hue="0" saturation="0" value="8" alpha="100" />
+               <ChangeableColorInfo id="AO006L1" inputColor="W" hue="0" saturation="0" value="0" alpha="8" />
+               <ChangeableColorInfo id="ATO001" inputColor="K" hue="0" saturation="0" value="0" alpha="100" />
+               <ChangeableColorInfo id="ATO002" inputColor="K" hue="0" saturation="0" value="0" alpha="100" />
+               <ChangeableColorInfo id="ATO003" inputColor="W" hue="0" saturation="0" value="0" alpha="100" />
+               <ChangeableColorInfo id="ATO004" inputColor="W" hue="0" saturation="0" value="0" alpha="100" />
+               <ChangeableColorInfo id="ATO004P" inputColor="W" hue="0" saturation="0" value="0" alpha="100" />
+               <ChangeableColorInfo id="ATO004D" inputColor="W" hue="0" saturation="0" value="0" alpha="40" />
+       </Theme>
+</ChangeableColorTable>
diff --git a/2.2/data/tables/_ChangeableFontInfo.xml b/2.2/data/tables/_ChangeableFontInfo.xml
new file mode 100644 (file)
index 0000000..f814cea
--- /dev/null
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<FontInfoTable>
+       <FontInfo id="ATO001" style="R" size="28" />
+       <FontInfo id="ATO002" style="R" size="26" />
+       <FontInfo id="ATO003" style="B" size="34" />
+       <FontInfo id="ATO004" style="B" size="32" />
+       <FontInfo id="ATO004P" style="B" size="32" />
+       <FontInfo id="ATO004D" style="B" size="32" />
+</FontInfoTable>
diff --git a/2.2/data/themes/cbhmdrawer.edc b/2.2/data/themes/cbhmdrawer.edc
new file mode 100644 (file)
index 0000000..d265822
--- /dev/null
@@ -0,0 +1,2039 @@
+/*
+ * 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.
+ *
+ */
+collections {
+
+#include "scroller.edc"
+#include "popup_layout.edc"
+
+// Clipboard
+#define CLIPBOARD_H_INC 528
+#define CLIPBOARD_LANDSCAPE_H_INC 400
+#define CLIPBOARD_PANEL_TOP_PADDING_INC 0
+#define CLIPBOARD_PANEL_LEFT_PADDING_INC 16 // also used for RIGHT_PADDING
+#define CLIPBOARD_PANEL_H_INC 84
+#define CLIPBOARD_CLOSE_BTN_BG_W_INC (CLIPBOARD_PANEL_LEFT_PADDING_INC + CLIPBOARD_CLOSE_BTN_W_INC + CLIPBOARD_PANEL_LEFT_PADDING_INC)
+#define CLIPBOARD_CLOSE_BTN_W_INC 72
+#define CLIPBOARD_CLOSE_BTN_H_INC 72
+#define CLIPBOARD_FUNCTION_BTN_MIN_W_INC 60
+#define CLIPBOARD_FUNCTION_BTN_MAX_W_INC 225
+#define CLIPBOARD_FUNCTION_BTN_LANDSCAPE_MAX_W_INC 505
+#define CLIPBOARD_FUNCTION_BTN_LEFT_SIZE_INC 16 // also used for BTN_RIGHT
+#define CLIPBOARD_FUNCTION_BTN_TEXT_MAX_W_INC (CLIPBOARD_FUNCTION_BTN_MAX_W_INC - CLIPBOARD_FUNCTION_BTN_LEFT_SIZE_INC - CLIPBOARD_FUNCTION_BTN_LEFT_SIZE_INC)
+#define CLIPBOARD_FUNCTION_BTN_TEXT_LANDSCAPE_MAX_W_INC (CLIPBOARD_FUNCTION_BTN_LANDSCAPE_MAX_W_INC - CLIPBOARD_FUNCTION_BTN_LEFT_SIZE_INC - CLIPBOARD_FUNCTION_BTN_LEFT_SIZE_INC)
+#define CLIPBOARD_FUNCTION_BTN_H_INC 60
+
+#define CLIPBOARD_CONTENT_TOP_LEFT_PADDING_INC 0 0
+#define CLIPBOARD_CONTENT_BOTTOM_RIGHT_PADDING_INC 16 0
+#define CLIPBOARD_CONTENT_COLOR_INC 62 62 62 255
+
+#define CLIPBOARD_TITLE_FONT_SIZE_INC 34
+#define CLIPBOARD_TITLE_FONT_COLOR_INC 250 250 250 255
+#define CLIPBOARD_FUNCTION_FONT_SIZE_INC 32
+#define CLIPBOARD_FUNCTION_FONT_COLOR_INC 250 250 250 255
+#define CLIPBOARD_FUNCTION_FONT_COLOR_DIM_INC 107 108 109 255
+
+#define CLIPBOARD_TITLE_TOP_LEFT_PADDING_INC CLIPBOARD_PANEL_LEFT_PADDING_INC CLIPBOARD_PANEL_TOP_PADDING_INC
+#define CLIPBOARD_FUNCTION_BTN_RIGHT_PADDING_INC (CLIPBOARD_PANEL_LEFT_PADDING_INC + CLIPBOARD_FUNCTION_BTN_LEFT_SIZE_INC)
+
+// Grid Item
+#define GRID_ITEM_W_INC 196
+#define GRID_ITEM_H_INC 196
+
+#define GRID_ITEM_BG_LEFT_PADDING_INC 6
+#define GRID_ITEM_BG_RIGHT_PADDING_INC 8
+#define GRID_ITEM_BG_TOP_PADDING_INC 8
+#define GRID_ITEM_BG_BOTTOM_PADDING_INC 6
+
+#define GRID_TEXT_ITEM_BG_LEFT_PADDING_INC 6
+#define GRID_TEXT_ITEM_BG_RIGHT_PADDING_INC 8
+#define GRID_TEXT_ITEM_BG_TOP_PADDING_INC 28
+#define GRID_TEXT_ITEM_BG_BOTTOM_PADDING_INC 26
+
+#define GRID_ITEM_OUTER_LINE_SIZE_INC 3
+#define GRID_TEXT_ITEM_INNER_LINE_SIZE_INC 2
+#define GRID_TEXT_ITEM_LEFT_PADDING_INC 12
+#define GRID_TEXT_ITEM_TOP_PADDING_INC 8
+#define GRID_TEXT_ITEM_FONT_SIZE_INC 32
+#define GRID_COMBINED_ITEM_LEFT_PADDING_INC 6
+#define GRID_COMBINED_ITEM_TOP_PADDING_INC 6
+#define GRID_COMBINED_ITEM_FONT_SIZE_INC 30
+
+#define GRID_COMBINED_ITEM_PADDING_INC 4
+
+#define GRID_ITEM_DELETE_BTN_TOP_PADDING_INC 11 // also used for RIGHT_PADDING
+#define GRID_ITEM_DELETE_BTN_SIZE_INC 54 54
+#define GRID_ITEM_LOCK_BTN_SIZE_INC 54 54
+
+#define GRID_TEXT_ITEM_COLOR_INC 237 233 208 255
+
+#define GRID_ITEM_BG_W_INC (GRID_ITEM_W_INC + GRID_ITEM_BG_LEFT_PADDING_INC + GRID_ITEM_BG_RIGHT_PADDING_INC)
+#define GRID_ITEM_BG_H_INC (GRID_ITEM_H_INC + GRID_ITEM_BG_TOP_PADDING_INC + GRID_ITEM_BG_BOTTOM_PADDING_INC)
+#define GRID_TEXT_ITEM_W_INC (GRID_ITEM_W_INC - GRID_TEXT_ITEM_LEFT_PADDING_INC - GRID_TEXT_ITEM_LEFT_PADDING_INC - GRID_TEXT_ITEM_BG_LEFT_PADDING_INC - GRID_TEXT_ITEM_BG_RIGHT_PADDING_INC)
+#define GRID_TEXT_ITEM_H_INC (GRID_ITEM_H_INC - GRID_TEXT_ITEM_TOP_PADDING_INC - GRID_TEXT_ITEM_TOP_PADDING_INC - GRID_TEXT_ITEM_BG_TOP_PADDING_INC - GRID_TEXT_ITEM_BG_BOTTOM_PADDING_INC)
+#define GRID_IMAGE_ITEM_W_INC (GRID_ITEM_W_INC - GRID_ITEM_OUTER_LINE_SIZE_INC - GRID_ITEM_OUTER_LINE_SIZE_INC)
+#define GRID_IMAGE_ITEM_H_INC (GRID_ITEM_H_INC - GRID_ITEM_OUTER_LINE_SIZE_INC - GRID_ITEM_OUTER_LINE_SIZE_INC)
+#define GRID_COMBINED_ITEM_W_INC (GRID_ITEM_W_INC - GRID_ITEM_OUTER_LINE_SIZE_INC - GRID_ITEM_OUTER_LINE_SIZE_INC - GRID_COMBINED_ITEM_LEFT_PADDING_INC - GRID_COMBINED_ITEM_LEFT_PADDING_INC)
+#define GRID_COMBINED_ITEM_IMAGE_H_INC 80
+
+#define SCROLLER_BOTTOM_RIGHT_PADDING_INC 8
+#define SCROLLER_TOP_PADDING_INC 11
+#define SCROLLER_TOP_LANDSCAPE_PADDING_INC 52
+
+#define GENGRID_ITEM_SELECT_VI_EFFECT \
+} \
+description { state: "pressed" 0.0; \
+   inherit: "default" 0.0; \
+   map { \
+      on: 1; \
+      perspective: "persp1"; \
+      smooth: 0; \
+   } \
+} \
+description { state: "selected" 0.0; \
+   inherit: "default" 0.0; \
+   map { \
+      on: 1; \
+      perspective: "persp"; \
+      smooth: 1; \
+   }
+
+#define GENGRID_PROGRAM_ITEM_SELECT_VI_EFFECT( TARGET ) \
+   program { name: "vi_pressed"; \
+      action: STATE_SET "pressed" 0.0; \
+      TARGET \
+      after: "vi_zoom_in"; \
+   } \
+   program { name: "vi_zoom_in"; \
+      action: STATE_SET "selected" 0.0; \
+      TARGET \
+      transition: SIN_FAC 0.167 1.1; \
+   } \
+   program { name: "vi_zoom_out"; \
+      action: STATE_SET "pressed" 0.0; \
+      TARGET \
+      transition: SIN_FAC 0.167 1.1; \
+      after: "vi_default"; \
+   } \
+   program { name: "vi_default"; \
+      action: STATE_SET "default" 0.0; \
+      TARGET \
+   }
+
+
+   sounds {
+      sample {
+         name: "touch_sound" RAW;
+         source: "button-pressed.wav";
+      }
+   }
+
+   group { name: "cbhmdrawer";
+      images {
+         image: "B12_panel_title_bg.#.png" COMP;
+         image: "B12_panel_title_bg_line.#.png" COMP;
+         image: "B12_panel_button.#.png" COMP;
+         image: "B12_panel_button_line.#.png" COMP;
+         image: "B12_panel_button_dim.png" COMP;
+         image: "B12_panel_icon_close.png" COMP;
+      }
+      data.item: "clipboard_height" CLIPBOARD_H_INC;
+      data.item: "clipboard_landscape_height" CLIPBOARD_LANDSCAPE_H_INC;
+      data.item: "grid_item_bg_w" GRID_ITEM_BG_W_INC;
+      data.item: "grid_item_bg_h" GRID_ITEM_BG_H_INC;
+      data.item: "grid_image_item_w" GRID_IMAGE_ITEM_W_INC;
+      data.item: "grid_image_item_h" GRID_IMAGE_ITEM_H_INC;
+
+      script {
+         public g_landscape = 0; // Flag for landscape mode
+      }
+
+      parts {
+         part { name: "background";
+            type: RECT;
+            scale: 1;
+            mouse_events: 1;
+            description { state: "default" 0.0;
+               rel1 { relative: 0.0 0.0; }
+               rel2 { relative: 1.0 1.0; }
+               color_class: "AO001";
+            }
+         }
+         part { name: "top_left_padding";
+            type: SPACER;
+            scale: 1;
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               align: 0.0 0.0;
+               min: CLIPBOARD_TITLE_TOP_LEFT_PADDING_INC;
+               max: CLIPBOARD_TITLE_TOP_LEFT_PADDING_INC;
+               rel1 { relative: 0.0 0.0; to: "background"; }
+               rel2 { relative: 0.0 0.0; to: "background"; }
+            }
+         }
+         part { name: "background/title";
+            type: RECT;
+            scale: 1;
+            mouse_events: 1;
+            description { state: "default" 0.0;
+               fixed: 0 1;
+               align: 0.0 0.0;
+               min: 0 CLIPBOARD_PANEL_H_INC;
+               rel1 { relative: 0.0 1.0; to_x: "background"; to_y: "top_left_padding"; }
+               rel2 { relative: 1.0 1.0; to_x: "background"; to_y: "top_left_padding"; }
+               color: 0 0 0 0;
+            }
+         }
+         part { name: "background/title/image";
+            type: IMAGE;
+            scale: 1;
+            mouse_events: 1;
+            description { state: "default" 0.0;
+               rel1 { relative: 0.0 0.0; to: "background";}
+               rel2 { relative: 1.0 1.0; to: "background/title";}
+               color_class: "AO006";
+               image {
+                  normal: "B12_panel_title_bg.#.png";
+               }
+            }
+         }
+         part { name: "background/title/image/line";
+            scale: 1;
+            mouse_events: 0;
+            description {
+               state: "default" 0.0;
+               rel1.to: "background/title/image";
+               rel2.to: "background/title/image";
+               color_class: "AO006L1";
+               image.normal: "B12_panel_title_bg_line.#.png";
+            }
+         }
+         part { name: "background/title/close/bg";
+            type: RECT;
+            scale: 1;
+            mouse_events: 1;
+            description { state: "default" 0.0;
+               fixed: 1 0;
+               align: 0.0 0.5;
+               min: CLIPBOARD_CLOSE_BTN_BG_W_INC 0;
+               max: CLIPBOARD_CLOSE_BTN_BG_W_INC -1;
+               color: 0 0 0 0;
+               rel1 { relative: 0.0 0.0; to: "background/title"; }
+               rel2 { relative: 0.0 1.0; to: "background/title"; }
+            }
+         }
+         part { name: "background/title/close/image";
+            type: IMAGE;
+            scale: 1;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               align: 0.5 0.5;
+               min: CLIPBOARD_CLOSE_BTN_W_INC CLIPBOARD_CLOSE_BTN_H_INC;
+               max: CLIPBOARD_CLOSE_BTN_W_INC CLIPBOARD_CLOSE_BTN_H_INC;
+               rel1 { to: "background/title/close/bg"; }
+               rel2 { to: "background/title/close/bg"; }
+               color_class: "AO005";
+               image { normal: "B12_panel_icon_close.png"; }
+            }
+            description { state: "pressed" 0.0;
+               inherit: "default" 0.0;
+               color_class: "AO005P";
+            }
+         }
+         part { name: "title_text_right_padding";
+            type: SPACER;
+            scale: 1;
+            description { state: "default" 0.0;
+               fixed: 1 0;
+               align: 1.0 0.5;
+               min: CLIPBOARD_PANEL_LEFT_PADDING_INC 0;
+               rel1 { relative: 0.0 0.0; to_x: "background/title/delete_all/image"; to_y: "background/title"; }
+               rel2 { relative: 0.0 1.0; to_x: "background/title/delete_all/image"; to_y: "background/title"; }
+            }
+         }
+         part { name: "panel_title";
+            type: TEXT;
+            scale: 1;
+            description { state: "default" 0.0;
+               align: 0.0 0.5;
+               text {
+                  min: 0 1;
+                  max: 1 0;
+                  align: 0.5 0.5;
+                  text_class: "ATO003";
+               }
+               rel1 { relative: 1.0 0.0; to_x: "background/title/close/bg"; to_y: "background/title"; }
+               rel2 { relative: 0.0 1.0; to_x: "title_text_right_padding"; to_y: "background/title"; }
+            }
+         }
+         part { name: "delete_text_left_padding";
+            type: SPACER;
+            scale: 1;
+            description { state: "default" 0.0;
+               fixed: 1 0;
+               align: 1.0 0.5;
+               min: CLIPBOARD_FUNCTION_BTN_LEFT_SIZE_INC 0;
+               rel1 { relative: 0.0 0.0; to: "panel_function_delete"; }
+               rel2 { relative: 0.0 1.0; to: "panel_function_delete"; }
+            }
+         }
+         part { name: "delete_text_right_padding";
+            type: SPACER;
+            scale: 1;
+            description { state: "default" 0.0;
+               fixed: 1 0;
+               align: 0.0 0.5;
+               min: CLIPBOARD_FUNCTION_BTN_LEFT_SIZE_INC 0;
+               rel1 { relative: 1.0 0.0; to: "panel_function_delete"; }
+               rel2 { relative: 1.0 1.0; to: "panel_function_delete"; }
+            }
+         }
+         part { name: "background/title/delete/image";
+            type: IMAGE;
+            scale: 1;
+            mouse_events: 1;
+            description { state: "default" 0.0;
+               align: 0.5 0.5;
+               min: CLIPBOARD_FUNCTION_BTN_MIN_W_INC CLIPBOARD_FUNCTION_BTN_H_INC;
+               max: -1 CLIPBOARD_FUNCTION_BTN_H_INC;
+               fixed: 1 1;
+               visible: 1;
+                  rel1 { relative: 0.0 0.0; to: "delete_text_left_padding"; }
+                  rel2 { relative: 1.0 1.0; to: "delete_text_right_padding"; }
+                  color_class: "AO004";
+                  image { normal: "B12_panel_button.#.png";
+               }
+            }
+            description { state: "pressed" 0.0;
+               inherit: "default" 0.0;
+               color_class: "AO004P";
+            }
+            description { state: "disabled" 0.0;
+               inherit: "default" 0.0;
+               image { normal: "B12_panel_button_dim.png"; }
+            }
+         }
+         part { name: "background/title/delete/image/line";
+            scale: 1;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               rel1.to: "background/title/delete/image";
+               rel2.to: "background/title/delete/image";
+               color_class: "AO004L1";
+               image.normal: "B12_panel_button_line.#.png";
+            }
+         }
+         part { name: "delete_right_padding";
+            type: SPACER;
+            scale: 1;
+            description { state: "default" 0.0;
+               fixed: 1 0;
+               align: 1.0 0.5;
+               min: CLIPBOARD_FUNCTION_BTN_RIGHT_PADDING_INC 0;
+               max: CLIPBOARD_FUNCTION_BTN_RIGHT_PADDING_INC -1;
+               rel1 { relative: 1.0 0.0; to: "background/title"; }
+               rel2 { relative: 1.0 1.0; to: "background/title"; }
+            }
+         }
+         part { name: "delete_text_bg";
+            type: SPACER;
+            scale: 1;
+            description { state: "default" 0.0;
+               fixed: 1 0;
+               align: 1.0 0.5;
+               min: CLIPBOARD_FUNCTION_BTN_TEXT_MAX_W_INC 0;
+               max: CLIPBOARD_FUNCTION_BTN_TEXT_MAX_W_INC -1;
+               rel1 { relative: 0.0 0.0; to: "delete_right_padding"; }
+               rel2 { relative: 0.0 1.0; to: "delete_right_padding"; }
+            }
+            description { state: "landscape" 0.0;
+               inherit: "default" 0.0;
+               min: CLIPBOARD_FUNCTION_BTN_TEXT_LANDSCAPE_MAX_W_INC 0;
+               max: CLIPBOARD_FUNCTION_BTN_TEXT_LANDSCAPE_MAX_W_INC -1;
+            }
+         }
+         part { name: "panel_function_delete";
+            type: TEXT;
+            scale: 1;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               align: 1.0 0.5;
+               text {
+                  min: 0 1;
+                  max: 1 0;
+                  align: 1.0 0.5;
+                  text_class: "ATO004";
+               }
+               rel1.to: "delete_text_bg";
+               rel2.to: "delete_text_bg";
+            }
+            description { state: "disabled" 0.0;
+               inherit: "default" 0.0;
+               color: CLIPBOARD_FUNCTION_FONT_COLOR_DIM_INC;
+            }
+         }
+         part { name: "delete_all_text_left_padding";
+            type: SPACER;
+            scale: 1;
+            description { state: "default" 0.0;
+               fixed: 1 0;
+               align: 1.0 0.5;
+               min: CLIPBOARD_FUNCTION_BTN_LEFT_SIZE_INC 0;
+               rel1 { relative: 0.0 0.0; to: "panel_function_delete_all"; }
+               rel2 { relative: 0.0 1.0; to: "panel_function_delete_all"; }
+            }
+         }
+         part { name: "delete_all_text_right_padding";
+            type: SPACER;
+            scale: 1;
+            description { state: "default" 0.0;
+               fixed: 1 0;
+               align: 0.0 0.5;
+               min: CLIPBOARD_FUNCTION_BTN_LEFT_SIZE_INC 0;
+               rel1 { relative: 1.0 0.0; to: "panel_function_delete_all"; }
+               rel2 { relative: 1.0 1.0; to: "panel_function_delete_all"; }
+            }
+         }
+         part { name: "background/title/delete_all/image";
+            type: IMAGE;
+            scale: 1;
+            mouse_events: 1;
+            description { state: "default" 0.0;
+               align: 0.5 0.5;
+               min: CLIPBOARD_FUNCTION_BTN_MIN_W_INC CLIPBOARD_FUNCTION_BTN_H_INC;
+               max: -1 CLIPBOARD_FUNCTION_BTN_H_INC;
+               fixed: 1 1;
+               visible: 1;
+                  rel1 { relative: 0.0 0.0; to: "delete_all_text_left_padding"; }
+                  rel2 { relative: 1.0 1.0; to: "delete_all_text_right_padding"; }
+                  color_class: "AO004";
+                  image { normal: "B12_panel_button.#.png";
+               }
+            }
+            description { state: "pressed" 0.0;
+               inherit: "default" 0.0;
+               color_class: "AO004P";
+               image { normal: "B12_panel_button.#.png"; }
+            }
+            description { state: "disabled" 0.0;
+               inherit: "default" 0.0;
+               image { normal: "B12_panel_button.#.png"; }
+            }
+         }
+         part { name: "background/title/delete_all/image/line";
+            scale: 1;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               rel1.to: "background/title/delete_all/image";
+               rel2.to: "background/title/delete_all/image";
+               color_class: "AO004L1";
+               image.normal: "B12_panel_button_line.#.png";
+            }
+         }
+         part { name: "delete_all_right_padding";
+            type: SPACER;
+            scale: 1;
+            description { state: "default" 0.0;
+               fixed: 1 0;
+               align: 1.0 0.5;
+               min: CLIPBOARD_FUNCTION_BTN_RIGHT_PADDING_INC 0;
+               max: CLIPBOARD_FUNCTION_BTN_RIGHT_PADDING_INC -1;
+               rel1 { relative: 0.0 0.0; to_x: "delete_text_left_padding"; to_y: "background/title"; }
+               rel2 { relative: 0.0 1.0; to_x: "delete_text_left_padding"; to_y: "background/title"; }
+            }
+         }
+         part { name: "delete_all_text_bg";
+            type: SPACER;
+            scale: 1;
+            description { state: "default" 0.0;
+               fixed: 1 0;
+               align: 1.0 0.5;
+               min: CLIPBOARD_FUNCTION_BTN_TEXT_MAX_W_INC 0;
+               max: CLIPBOARD_FUNCTION_BTN_TEXT_MAX_W_INC -1;
+               rel1 { relative: 0.0 0.0; to: "delete_all_right_padding"; }
+               rel2 { relative: 0.0 1.0; to: "delete_all_right_padding"; }
+            }
+            description { state: "landscape" 0.0;
+               inherit: "default" 0.0;
+               min: CLIPBOARD_FUNCTION_BTN_TEXT_LANDSCAPE_MAX_W_INC 0;
+               max: CLIPBOARD_FUNCTION_BTN_TEXT_LANDSCAPE_MAX_W_INC -1;
+            }
+         }
+         part { name: "panel_function_delete_all";
+            type: TEXT;
+            scale: 1;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               align: 1.0 0.5;
+               text {
+                  min: 0 1;
+                  max: 1 0;
+                  align: 0.5 0.5;
+                  text_class: "ATO004";
+               }
+               rel1.to: "delete_all_text_bg";
+               rel2.to: "delete_all_text_bg";
+            }
+            description { state: "disabled" 0.0;
+               inherit: "default" 0.0;
+               color: CLIPBOARD_FUNCTION_FONT_COLOR_DIM_INC;
+            }
+         }
+         part { name: "delete_disabler";
+            type: RECT;
+            description { state: "default" 0.0;
+               color: 0 0 0 0;
+               rel1.to: "background/title/delete/image";
+               rel2.to: "background/title/delete/image";
+               visible: 0;
+            }
+            description { state: "disabled" 0.0;
+               inherit: "default" 0.0;
+               visible: 1;
+            }
+         }
+         part { name: "delete_all_disabler";
+            type: RECT;
+            description { state: "default" 0.0;
+               color: 0 0 0 0;
+               rel1.to: "background/title/delete_all/image";
+               rel2.to: "background/title/delete_all/image";
+               visible: 0;
+            }
+            description { state: "disabled" 0.0;
+               inherit: "default" 0.0;
+               visible: 1;
+            }
+         }
+         part { name: "historyitems_top_left_padding";
+            type: SPACER;
+            scale: 1;
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               align: 0.0 0.0;
+               min: CLIPBOARD_CONTENT_TOP_LEFT_PADDING_INC;
+               max: CLIPBOARD_CONTENT_TOP_LEFT_PADDING_INC;
+               rel1 { relative: 0.0 1.0; to: "background/title"; }
+               rel2 { relative: 0.0 1.0; to: "background/title"; }
+            }
+         }
+         part { name: "historyitems_bottom_right_padding";
+            type: SPACER;
+            scale: 1;
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               align: 1.0 1.0;
+               min: CLIPBOARD_CONTENT_BOTTOM_RIGHT_PADDING_INC;
+               max: CLIPBOARD_CONTENT_BOTTOM_RIGHT_PADDING_INC;
+               rel1 { relative: 1.0 1.0; to: "background"; }
+               rel2 { relative: 1.0 1.0; to: "background"; }
+            }
+         }
+         part { name: "historyitems";
+            type: SWALLOW;
+            mouse_events: 1;
+            description { state: "default" 0.0;
+               rel1 { relative: 1.0 1.0; to: "historyitems_top_left_padding"; }
+               rel2 { relative: 1.0 1.0; to: "historyitems_bottom_right_padding"; }
+               visible: 1;
+            }
+            description { state: "hidden" 0.0;
+               inherit: "default" 0.0;
+               visible: 0;
+            }
+         }
+      }
+      programs {
+         program { name: "historyitems_hide";
+            signal: "elm,state,hide,historyitems";
+            source: "elm";
+            action: STATE_SET "hidden" 0.0;
+            target: "historyitems";
+         }
+         program { name: "historyitems_show";
+            signal: "elm,state,show,historyitems";
+            source: "elm";
+            action: STATE_SET "default" 0.0;
+            target: "historyitems";
+         }
+         program { name: "mouse_down_closebtn";
+            signal: "mouse,down,1";
+            source: "background/title/close/bg";
+            action: STATE_SET "pressed" 0.0;
+            target: "background/title/close/image";
+         }
+         program { name: "mouse_out_closebtn";
+            signal: "mouse,out";
+            source: "background/title/close/bg";
+            action: STATE_SET "default" 0.0;
+            target: "background/title/close/image";
+         }
+         program { name: "play_sound_closebtn";
+            signal: "mouse,clicked,1";
+            source: "background/title/close/bg";
+            action: PLAY_SAMPLE "touch_sound" 1.0;
+         }
+         program { name: "mouse_down_delbtn";
+            signal: "mouse,down,1";
+            source: "background/title/delete/image";
+            action: STATE_SET "pressed" 0.0;
+            target: "background/title/delete/image";
+         }
+         program { name: "mouse_out_delbtn";
+            signal: "mouse,out";
+            source: "background/title/delete/image";
+            action: STATE_SET "default" 0.0;
+            target: "background/title/delete/image";
+         }
+         program { name: "mouse_up_delbtn";
+            signal: "mouse,up,1";
+            source: "background/title/delete/image";
+            action: STATE_SET "default" 0.0;
+            target: "background/title/delete/image";
+         }
+         program { name: "mouse_down_del_all_btn";
+            signal: "mouse,down,1";
+            source: "background/title/delete_all/image";
+            action: STATE_SET "pressed" 0.0;
+            target: "background/title/delete_all/image";
+         }
+         program { name: "mouse_out_del_all_btn";
+            signal: "mouse,out";
+            source: "background/title/delete_all/image";
+            action: STATE_SET "default" 0.0;
+            target: "background/title/delete_all/image";
+         }
+         program { name: "mouse_up_del_all_btn";
+            signal: "mouse,up,1";
+            source: "background/title/delete_all/image";
+            action: STATE_SET "default" 0.0;
+            target: "background/title/delete_all/image";
+         }
+         program { name: "play_sound_delbtn";
+            signal: "mouse,clicked,1";
+            source: "background/title/delete/image";
+            action: PLAY_SAMPLE "touch_sound" 1.0;
+         }
+         program { name: "play_sound_del_all_btn";
+            signal: "mouse,clicked,1";
+            source: "background/title/delete_all/image";
+            action: PLAY_SAMPLE "touch_sound" 1.0;
+         }
+         program { name: "show_panel_function";
+            source: "elm";
+            signal: "elm,state,show,function";
+            action: STATE_SET "show" 0.0;
+            target: "panel_function_delete_all";
+            target: "panel_function_delete";
+         }
+         program { name: "hide_panel_function";
+            source: "elm";
+            signal: "elm,state,hide,function";
+            action: STATE_SET "default" 0.0;
+            target: "panel_function_delete_all";
+            target: "panel_function_delete";
+         }
+         program { name: "hide_del_mode";
+            source: "elm";
+            signal: "elm,state,hide,delmode";
+            action: STATE_SET "hide" 0.0;
+            target: "background/title/delete/image";
+         }
+         program { name: "show_del_mode";
+            source: "elm";
+            signal: "elm,state,show,delmode";
+            action: STATE_SET "default" 0.0;
+            target: "background/title/delete/image";
+         }
+         program { name: "disable_del";
+            source: "elm";
+            signal: "elm,state,disable,del";
+            action: STATE_SET "disabled" 0.0;
+            target: "delete_disabler";
+            target: "delete_all_disabler";
+            target: "panel_function_delete_all";
+            target: "background/title/delete/image";
+            target: "background/title/delete_all/image";
+            target: "panel_function_delete";
+         }
+         program { name: "enable_del";
+            source: "elm";
+            signal: "elm,state,enable,del";
+            action: STATE_SET "default" 0.0;
+            target: "delete_disabler";
+            target: "delete_all_disabler";
+            target: "panel_function_delete_all";
+            target: "background/title/delete/image";
+            target: "background/title/delete_all/image";
+            target: "panel_function_delete";
+         }
+         program { name: "change_to_landscape";
+            script {
+               new st[32];
+               new Float:vl;
+
+               if (!get_int(g_landscape)) {
+                  get_state(PART:"delete_text_bg", st, 32, vl);
+                  if (!strcmp(st, "default")) {
+                     set_state(PART:"delete_text_bg", "landscape", 0.0);
+                     set_state(PART:"delete_all_text_bg", "landscape", 0.0);
+                  }
+                  set_int(g_landscape, 1);
+               }
+            }
+         }
+         program { name: "change_to_portrait";
+            script {
+               new st[32];
+               new Float:vl;
+
+               if (get_int(g_landscape)) {
+                  get_state(PART:"delete_text_bg", st, 32, vl);
+                  if (!strcmp(st, "landscape")) {
+                     set_state(PART:"delete_text_bg", "default", 0.0);
+                     set_state(PART:"delete_all_text_bg", "default", 0.0);
+                  }
+                  set_int(g_landscape, 0);
+               }
+            }
+         }
+         program { name: "landscape_mode";
+            source: "elm";
+            signal: "elm,state,orient,90";
+            after: "change_to_landscape";
+         }
+         program { name: "landscape_mode2";
+            source: "elm";
+            signal: "elm,state,orient,270";
+            after: "change_to_landscape";
+         }
+         program { name: "portrait_mode";
+            source: "elm";
+            signal: "elm,state,orient,0";
+            after: "change_to_portrait";
+         }
+         program { name: "portrait_mode2";
+            source: "elm";
+            signal: "elm,state,orient,180";
+            after: "change_to_portrait";
+         }
+      }
+   }
+
+   group { name: "elm/scroller/base/grid_cbhm";
+      alias: "elm/gengrid/base/cbhm";
+      inherit: "elm/scroller/base/list_effect";
+
+      images {
+          image: "B12_panel_scroll_bar.png" COMP;
+      }
+      parts {
+         part { name: "padding.left";
+            type: SPACER;
+            scale:1 ;
+            description { state: "default" 0.0;
+               min: SCROLLER_BOTTOM_RIGHT_PADDING_INC SCROLLER_TOP_PADDING_INC;
+               max: SCROLLER_BOTTOM_RIGHT_PADDING_INC SCROLLER_TOP_PADDING_INC;
+               rel1 {
+                  relative: 0.0 0.0;
+                  to: "bg";
+               }
+               rel2.to: "bg";
+               fixed: 1 1;
+               align: 0.0 0.0;
+            }
+            description { state: "landscape" 0.0;
+               inherit: "default" 0.0;
+               min: 0 SCROLLER_TOP_LANDSCAPE_PADDING_INC;
+               max: 0 SCROLLER_TOP_LANDSCAPE_PADDING_INC;
+            }
+         }
+         part { name: "padding.right";
+            type: SPACER;
+            scale:1 ;
+            description { state: "default" 0.0;
+               min: SCROLLER_BOTTOM_RIGHT_PADDING_INC 0;
+               max: SCROLLER_BOTTOM_RIGHT_PADDING_INC 0;
+               rel1 {
+                   relative: 1.0 1.0;
+                   to: "bg";
+               }
+               rel2.to: "bg";
+               fixed: 1 1;
+               align: 1.0 1.0;
+            }
+         }
+         part { name: "elm.swallow.content";
+            description { state: "default" 0.0;
+               rel1 {
+                   relative: 1.0 1.0;
+                   to: "padding.left";
+                   offset: 0 0;
+               }
+               rel2 {
+                   relative: 0.0 0.0;
+                   to: "padding.right";
+                   offset: -1 -1;
+               }
+            }
+         }
+         part { name: "elm.dragable.hbar";
+            description { state: "default" 0.0;
+               min: SCROLLER_DEFAULT_SCROLLBAR_HBAR_MIN_SIZE_INC;
+               max: SCROLLER_DEFAULT_SCROLLBAR_HBAR_MAX_SIZE_INC;
+               image {
+                  normal: "B12_panel_scroll_bar.png";
+                  border: SCROLLER_DEFAULT_SCROLLBAR_HBAR_IMAGE_BORDER;
+                  border_scale: 1;
+                  middle: DEFAULT;
+               }
+            }
+         }
+      }
+      programs {
+         program { name: "change_to_landscape";
+            script {
+               new st[32];
+               new Float:vl;
+
+               if (!get_int(g_landscape)) {
+                  get_state(PART:"padding.left", st, 32, vl);
+                  if (!strcmp(st, "default")) {
+                     set_state(PART:"padding.left", "landscape", 0.0);
+                  }
+                  set_int(g_landscape, 1);
+               }
+            }
+         }
+         program { name: "change_to_portrait";
+            script {
+               new st[32];
+               new Float:vl;
+
+               if (get_int(g_landscape)) {
+                  get_state(PART:"padding.left", st, 32, vl);
+                  if (!strcmp(st, "landscape")) {
+                     set_state(PART:"padding.left", "default", 0.0);
+                  }
+                  set_int(g_landscape, 0);
+               }
+            }
+         }
+         program { name: "landscape_mode";
+            source: "elm";
+            signal: "elm,state,orient,90";
+            after: "change_to_landscape";
+         }
+         program { name: "landscape_mode2";
+            source: "elm";
+            signal: "elm,state,orient,270";
+            after: "change_to_landscape";
+         }
+         program { name: "portrait_mode";
+            source: "elm";
+            signal: "elm,state,orient,0";
+            after: "change_to_portrait";
+         }
+         program { name: "portrait_mode2";
+            source: "elm";
+            signal: "elm,state,orient,180";
+            after: "change_to_portrait";
+         }
+      }
+   }
+
+   group { name: "elm/gengrid/item/clipboard/image_style/default";
+      data.item: "contents" "elm.swallow.content";
+
+      images {
+         image: "B12_thumbnail_bg.#.png" COMP;
+         image: "B12_thumbnail_bg_line.#.png" COMP;
+         image: "B12_button_delete.png" COMP;
+         image: "B12_button_delete_press.png" COMP;
+         image: "B12_icon_lock.png" COMP;
+      }
+
+      parts {
+         part { name: "persp";
+            type: RECT;
+            description { state: "default" 0.0;
+               min: 32 32;
+               max: 32 32;
+               fixed: 1 1;
+               align: 0.5 0.5;
+               color: 0 0 0 0;
+               visible: 1;
+               perspective {
+                  zplane: -70;
+                  focal: 1000;
+               }
+            }
+         }
+         part { name: "persp1";
+            type: RECT;
+            description { state: "default" 0.0;
+               min: 32 32;
+               max: 32 32;
+               fixed: 1 1;
+               align: 0.5 0.5;
+               color: 0 0 0 0;
+               visible: 1;
+               perspective {
+                  zplane: 0;
+                  focal: 1000;
+               }
+            }
+         }
+         part { name: "bg";
+            type: RECT;
+            scale: 1;
+            description { state: "default" 0.0;
+               color: 0 0 0 0;
+               GENGRID_ITEM_SELECT_VI_EFFECT
+            }
+         }
+         part { name: "item_outer_bg";
+            scale: 1;
+            mouse_events: 1;
+            description { state: "default" 0.0;
+               rel1 { relative: 0.0 0.0; to: "item_outer_bg_top_left_padding"; }
+               rel2 { relative: 1.0 1.0; to: "item_outer_bg_bottom_right_padding"; }
+               color_class: "AO003";
+               image.normal: "B12_thumbnail_bg.#.png";
+               GENGRID_ITEM_SELECT_VI_EFFECT
+            }
+         }
+         part { name: "item_outer_bg_line";
+            scale: 1;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               rel2.to: "item_outer_bg";
+               rel1.to: "item_outer_bg";
+               color_class: "AO003";
+               image.normal: "B12_thumbnail_bg_line.#.png";
+               GENGRID_ITEM_SELECT_VI_EFFECT
+            }
+         }
+         part { name: "item_outer_bg_top_left_padding";
+            type: SPACER;
+            scale: 1;
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               align: 1.0 1.0;
+               min: GRID_ITEM_OUTER_LINE_SIZE_INC GRID_ITEM_OUTER_LINE_SIZE_INC;
+               max: GRID_ITEM_OUTER_LINE_SIZE_INC GRID_ITEM_OUTER_LINE_SIZE_INC;
+               rel1 { relative: 0.0 0.0; to: "elm.swallow.content"; }
+               rel2 { relative: 0.0 0.0; to: "elm.swallow.content"; }
+            }
+         }
+         part { name: "item_outer_bg_bottom_right_padding";
+            type: SPACER;
+            scale: 1;
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               align: 0.0 0.0;
+               min: GRID_ITEM_OUTER_LINE_SIZE_INC GRID_ITEM_OUTER_LINE_SIZE_INC;
+               max: GRID_ITEM_OUTER_LINE_SIZE_INC GRID_ITEM_OUTER_LINE_SIZE_INC;
+               rel1 { relative: 1.0 1.0; to: "elm.swallow.content"; }
+               rel2 { relative: 1.0 1.0; to: "elm.swallow.content"; }
+            }
+         }
+         part { name: "elm.swallow.content";
+            type: SWALLOW;
+            scale: 1;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               max: GRID_IMAGE_ITEM_W_INC GRID_IMAGE_ITEM_H_INC;
+               rel1 { relative: 0.5 0.5; to: "bg"; }
+               rel2 { relative: 0.5 0.5; to: "bg"; }
+               GENGRID_ITEM_SELECT_VI_EFFECT
+            }
+         }
+         part { name: "elm.rect.dim";
+            type: RECT;
+            scale: 1;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               visible: 0;
+               color: 0 0 0 200;
+               rel1.to: "elm.swallow.content";
+               rel2.to: "elm.swallow.content";
+            }
+            description { state: "show" 0.0;
+               inherit: "default" 0.0;
+               visible: 1;
+            }
+         }
+         part { name: "icon_lock/img";
+            scale: 1;
+            mouse_events: 1;
+            description { state: "default" 0.0;
+               rel1 { relative: 0.5 0.5; to: "item_outer_bg"; }
+               rel2 { relative: 0.5 0.5; to: "item_outer_bg"; }
+               align: 0.5 0.5;
+               fixed: 1 1;
+               min: GRID_ITEM_LOCK_BTN_SIZE_INC;
+               max: GRID_ITEM_LOCK_BTN_SIZE_INC;
+               visible: 0;
+            }
+            description { state: "show" 0.0;
+               inherit: "default" 0.0;
+               visible: 1;
+               image {
+                  normal: "B12_icon_lock.png";
+               }
+            }
+         }
+         part { name: "delbtn_top_left_padding";
+            type: SPACER;
+            scale: 1;
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               align: 1.0 1.0;
+               min: GRID_ITEM_DELETE_BTN_TOP_PADDING_INC GRID_ITEM_DELETE_BTN_TOP_PADDING_INC;
+               max: GRID_ITEM_DELETE_BTN_TOP_PADDING_INC GRID_ITEM_DELETE_BTN_TOP_PADDING_INC;
+               rel1 { relative: 0.0 0.0; to: "item_outer_bg_top_left_padding"; }
+               rel2 { relative: 0.0 0.0; to: "item_outer_bg_top_left_padding"; }
+            }
+         }
+         part { name: "delbtn";
+            type: SPACER;
+            scale: 1;
+            description { state: "default" 0.0;
+               rel1 { relative: 0.0 0.0; to: "delbtn_top_left_padding"; }
+               rel2 { relative: 0.0 0.0; to: "delbtn_top_left_padding"; }
+               align: 0.0 0.0;
+               fixed: 1 1;
+               min: GRID_ITEM_DELETE_BTN_SIZE_INC;
+               max: GRID_ITEM_DELETE_BTN_SIZE_INC;
+            }
+         }
+         part { name: "delbtn/img";
+            scale: 1;
+            mouse_events: 1;
+            description { state: "default" 0.0;
+               rel1.to: "delbtn";
+               rel2.to: "delbtn";
+               visible: 0;
+            }
+            description { state: "show" 0.0;
+               inherit: "default" 0.0;
+               visible: 1;
+               image {
+                  normal: "B12_button_delete.png";
+               }
+            }
+            description { state: "pressed" 0.0;
+               inherit: "default" 0.0;
+               visible: 1;
+               image {
+                  normal: "B12_button_delete_press.png";
+               }
+            }
+         }
+      }
+      programs {
+         program { name: "selected";
+            signal: "elm,state,selected";
+            source: "elm";
+            script {
+               new st[31], st2[31];
+               new Float:vl, Float:vl2;
+               get_state(PART:"delbtn/img", st, 30, vl);
+               get_state(PART:"elm.rect.dim", st2, 30, vl2);
+               if (!strcmp(st, "default") && !strcmp(st2, "default"))
+                  run_program(PROGRAM:"vi_pressed");
+            }
+         }
+         program { name: "unselected";
+            signal: "elm,state,unselected";
+            source: "elm";
+            script {
+               new st[31], st2[31];
+               new Float:vl, Float:vl2;
+               get_state(PART:"delbtn/img", st, 30, vl);
+               get_state(PART:"elm.rect.dim", st2, 30, vl2);
+               if (!strcmp(st, "default") && !strcmp(st2, "default"))
+                  run_program(PROGRAM:"vi_zoom_out");
+            }
+         }
+         GENGRID_PROGRAM_ITEM_SELECT_VI_EFFECT(
+            target: "bg";
+            target: "item_outer_bg";
+            target: "item_outer_bg_line";
+            target: "elm.swallow.content";
+         )
+         program { name: "mouse_down";
+            signal: "mouse,down,1";
+            source: "delbtn/img";
+            script {
+               new st[31];
+               new Float:vl;
+               get_state(PART:"delbtn/img", st, 30, vl);
+               if (!strcmp(st, "show"))
+                  set_state(PART:"delbtn/img", "pressed", 0.0);
+            }
+         }
+         program { name: "mouse_out";
+            signal: "mouse,out";
+            source: "delbtn/img";
+            script {
+               new st[31];
+               new Float:vl;
+               get_state(PART:"delbtn/img", st, 30, vl);
+               if (!strcmp(st, "pressed"))
+                  set_state(PART:"delbtn/img", "show", 0.0);
+            }
+         }
+         program { name: "mouse_up";
+            signal: "mouse,up,1";
+            source: "delbtn/img";
+            script {
+               new st[31];
+               new Float:vl;
+               get_state(PART:"delbtn/img", st, 30, vl);
+               if (!strcmp(st, "pressed"))
+                  set_state(PART:"delbtn/img", "show", 0.0);
+            }
+         }
+         program { name: "play_sound_delbtn";
+            signal: "mouse,clicked,1";
+            source: "delbtn/img";
+            action: PLAY_SAMPLE "touch_sound" 1.0;
+         }
+         program { name: "play_sound_item";
+            signal: "mouse,clicked,1";
+            source: "item_outer_bg";
+            script {
+               new st[31], st2[31];
+               new Float:vl, Float:vl2;
+               get_state(PART:"delbtn/img", st, 30, vl);
+               get_state(PART:"elm.rect.dim", st2, 30, vl2);
+               if (!strcmp(st, "default") && !strcmp(st2, "default"))
+                  play_sample("touch_sound", 1.0);
+            }
+         }
+         program { name: "show_lock_icon";
+            source: "elm";
+            signal: "elm,state,show,lockicon";
+            script {
+               set_state(PART:"icon_lock/img", "show", 0.0);
+            }
+         }
+         program { name: "hide_lock_icon";
+            source: "elm";
+            signal: "elm,state,hide,lockicon";
+            script {
+               set_state(PART:"icon_lock/img", "hide", 0.0);
+            }
+         }
+         program { name: "show_delbtn";
+            source: "elm";
+            signal: "elm,state,show,delbtn";
+            script {
+               set_state(PART:"delbtn/img", "show", 0.0);
+            }
+         }
+         program { name: "hide_delbtn";
+            source: "elm";
+            signal: "elm,state,hide,delbtn";
+            script {
+               set_state(PART:"delbtn/img", "default", 0.0);
+            }
+         }
+         program { name: "show_dim";
+            source: "elm";
+            signal: "elm,state,show,dim";
+            action: STATE_SET "show" 0.0;
+            target: "elm.rect.dim";
+         }
+         program { name: "hide_dim";
+            source: "elm";
+            signal: "elm,state,hide,dim";
+            action: STATE_SET "default" 0.0;
+            target: "elm.rect.dim";
+         }
+      }
+   }
+
+   group { name: "elm/gengrid/item/clipboard/text_style/default";
+      data.item: "texts" "elm.text";
+
+      images {
+         image: "B12_memo_bg.#.png" COMP;
+         image: "B12_memo_bg_line.#.png" COMP;
+         image: "B12_button_delete.png" COMP;
+         image: "B12_button_delete_press.png" COMP;
+         image: "B12_icon_lock.png" COMP;
+      }
+
+      styles {
+         style { name: "clipboard_01_style";
+            base: "font=Tizen:style=Regular font_size="GRID_TEXT_ITEM_FONT_SIZE_INC" color=#000000FF color_class=ATO001 align=left wrap=mixed text_class=ATO001";
+            tag: "br" "\n";
+            tag: "ps" "ps";
+            tag: "tab" "\t";
+         }
+         style { name: "clipboard_01_style_pressed";
+            base: "font=Tizen:style=Regular font_size="GRID_TEXT_ITEM_FONT_SIZE_INC" color=#FAFAFAFF color_class=ATO001 align=left wrap=mixed text_class=ATO001";
+            tag: "br" "\n";
+            tag: "ps" "ps";
+            tag: "tab" "\t";
+         }
+      }
+
+      parts {
+         part { name: "persp";
+            type: RECT;
+            description { state: "default" 0.0;
+               min: 32 32;
+               max: 32 32;
+               fixed: 1 1;
+               align: 0.5 0.5;
+               color: 0 0 0 0;
+               visible: 1;
+               perspective {
+                  zplane: -70;
+                  focal: 1000;
+               }
+            }
+         }
+         part { name: "persp1";
+            type: RECT;
+            description { state: "default" 0.0;
+               min: 32 32;
+               max: 32 32;
+               fixed: 1 1;
+               align: 0.5 0.5;
+               color: 0 0 0 0;
+               visible: 1;
+               perspective {
+                  zplane: 0;
+                  focal: 1000;
+               }
+            }
+         }
+         part { name: "bg";
+            type: RECT;
+            scale: 1;
+            description { state: "default" 0.0;
+               color: 0 0 0 0;
+               GENGRID_ITEM_SELECT_VI_EFFECT
+            }
+         }
+         part { name: "top_left_padding";
+            type: SPACER;
+            scale: 1;
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               align: 0.0 0.0;
+               min: GRID_TEXT_ITEM_BG_LEFT_PADDING_INC GRID_TEXT_ITEM_BG_TOP_PADDING_INC;
+               max: GRID_TEXT_ITEM_BG_LEFT_PADDING_INC GRID_TEXT_ITEM_BG_TOP_PADDING_INC;
+               rel1 { relative: 0.0 0.0; to: "bg"; }
+               rel2 { relative: 0.0 0.0; to: "bg"; }
+            }
+         }
+         part { name: "bottom_right_padding";
+            type: SPACER;
+            scale: 1;
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               align: 1.0 1.0;
+               min: GRID_TEXT_ITEM_BG_RIGHT_PADDING_INC GRID_TEXT_ITEM_BG_BOTTOM_PADDING_INC;
+               max: GRID_TEXT_ITEM_BG_RIGHT_PADDING_INC GRID_TEXT_ITEM_BG_BOTTOM_PADDING_INC;
+               rel1 { relative: 1.0 1.0; to: "bg"; }
+               rel2 { relative: 1.0 1.0; to: "bg"; }
+            }
+         }
+         part { name: "item_outer_bg";
+            type: RECT;
+            scale: 1;
+            mouse_events: 1;
+            description { state: "default" 0.0;
+               rel1 { relative: 1.0 1.0; to: "top_left_padding"; }
+               rel2 { relative: 0.0 0.0; to: "bottom_right_padding"; }
+               GENGRID_ITEM_SELECT_VI_EFFECT
+            }
+         }
+         part { name: "item_inner_bg_top_left_padding";
+            type: SPACER;
+            scale: 1;
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               align: 0.0 0.0;
+               min: GRID_ITEM_OUTER_LINE_SIZE_INC GRID_ITEM_OUTER_LINE_SIZE_INC;
+               max: GRID_ITEM_OUTER_LINE_SIZE_INC GRID_ITEM_OUTER_LINE_SIZE_INC;
+               rel1 { relative: 0.0 0.0; to: "item_outer_bg"; }
+               rel2 { relative: 0.0 0.0; to: "item_outer_bg"; }
+            }
+         }
+         part { name: "item_inner_bg_bottom_right_padding";
+            type: SPACER;
+            scale: 1;
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               align: 1.0 1.0;
+               min: GRID_ITEM_OUTER_LINE_SIZE_INC GRID_ITEM_OUTER_LINE_SIZE_INC;
+               max: GRID_ITEM_OUTER_LINE_SIZE_INC GRID_ITEM_OUTER_LINE_SIZE_INC;
+               rel1 { relative: 1.0 1.0; to: "item_outer_bg"; }
+               rel2 { relative: 1.0 1.0; to: "item_outer_bg"; }
+            }
+         }
+         part { name: "item_inner_bg";
+            type: RECT;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               rel1 { relative: 1.0 1.0; to: "item_inner_bg_top_left_padding"; }
+               rel2 { relative: 0.0 0.0; to: "item_inner_bg_bottom_right_padding"; }
+               color: 250 250 250 255;
+               GENGRID_ITEM_SELECT_VI_EFFECT
+            }
+         }
+         part { name: "item_bg_top_left_padding";
+            type: SPACER;
+            scale: 1;
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               align: 0.0 0.0;
+               min: GRID_TEXT_ITEM_INNER_LINE_SIZE_INC GRID_TEXT_ITEM_INNER_LINE_SIZE_INC;
+               max: GRID_TEXT_ITEM_INNER_LINE_SIZE_INC GRID_TEXT_ITEM_INNER_LINE_SIZE_INC;
+               rel1 { relative: 0.0 0.0; to: "item_inner_bg"; }
+               rel2 { relative: 0.0 0.0; to: "item_inner_bg"; }
+            }
+         }
+         part { name: "item_bg_bottom_right_padding";
+            type: SPACER;
+            scale: 1;
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               align: 1.0 1.0;
+               min: GRID_TEXT_ITEM_INNER_LINE_SIZE_INC GRID_TEXT_ITEM_INNER_LINE_SIZE_INC;
+               max: GRID_TEXT_ITEM_INNER_LINE_SIZE_INC GRID_TEXT_ITEM_INNER_LINE_SIZE_INC;
+               rel1 { relative: 1.0 1.0; to: "item_inner_bg"; }
+               rel2 { relative: 1.0 1.0; to: "item_inner_bg"; }
+            }
+         }
+         part { name: "item_bg";
+            scale: 1;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               rel1 { relative: 1.0 0.0; to: "item_bg_top_left_padding"; }
+               rel2 { relative: 0.0 0.0; to: "item_bg_bottom_right_padding"; }
+               color_class: "AO002L1";
+               image.normal: "B12_memo_bg.#.png";
+               GENGRID_ITEM_SELECT_VI_EFFECT
+            }
+         }
+         part { name: "text_top_left_padding";
+            type: SPACER;
+            scale: 1;
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               align: 0.0 0.0;
+               min: GRID_TEXT_ITEM_LEFT_PADDING_INC GRID_TEXT_ITEM_TOP_PADDING_INC;
+               max: GRID_TEXT_ITEM_LEFT_PADDING_INC GRID_TEXT_ITEM_TOP_PADDING_INC;
+               rel1 { relative: 0.0 0.0; to: "item_outer_bg"; }
+               rel2 { relative: 0.0 0.0; to: "item_outer_bg"; }
+            }
+         }
+         part { name: "text_bottom_right_padding";
+            type: SPACER;
+            scale: 1;
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               align: 1.0 1.0;
+               min: GRID_TEXT_ITEM_LEFT_PADDING_INC GRID_TEXT_ITEM_TOP_PADDING_INC;
+               max: GRID_TEXT_ITEM_LEFT_PADDING_INC GRID_TEXT_ITEM_TOP_PADDING_INC;
+               rel1 { relative: 1.0 1.0; to: "item_outer_bg"; }
+               rel2 { relative: 1.0 1.0; to: "item_outer_bg"; }
+            }
+         }
+         part { name: "elm.text";
+            type: TEXTBLOCK;
+            scale: 1;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               text {
+                  style: "clipboard_01_style";
+                  align: 0.0 0.0;
+               }
+               rel1 { relative: 1.0 1.0; to: "text_top_left_padding"; }
+               rel2 { relative: 0.0 0.0; to: "text_bottom_right_padding"; }
+            }
+            description { state: "pressed" 0.0;
+               inherit: "default" 0.0;
+               text {
+                  style: "clipboard_01_style_pressed";
+                  align: 0.0 0.0;
+               }
+               GENGRID_ITEM_SELECT_VI_EFFECT
+            }
+         }
+         part { name: "elm.rect.dim";
+            type: RECT;
+            scale: 1;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               visible: 0;
+               color: 0 0 0 200;
+               rel1.to: "item_bg";
+               rel2.to: "item_bg";
+            }
+            description { state: "show" 0.0;
+               inherit: "default" 0.0;
+               visible: 1;
+            }
+         }
+         part { name: "icon_lock/img";
+            scale: 1;
+            mouse_events: 1;
+            description { state: "default" 0.0;
+               rel1 { relative: 0.5 0.5; to: "item_bg"; }
+               rel2 { relative: 0.5 0.5; to: "item_bg"; }
+               align: 0.5 0.5;
+               fixed: 1 1;
+               min: GRID_ITEM_LOCK_BTN_SIZE_INC;
+               max: GRID_ITEM_LOCK_BTN_SIZE_INC;
+               visible: 0;
+            }
+            description { state: "show" 0.0;
+               inherit: "default" 0.0;
+               visible: 1;
+               image {
+                  normal: "B12_icon_lock.png";
+               }
+            }
+         }
+         part { name: "delbtn_top_left_padding";
+            type: SPACER;
+            scale: 1;
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               align: 1.0 1.0;
+               min: GRID_ITEM_DELETE_BTN_TOP_PADDING_INC GRID_ITEM_DELETE_BTN_TOP_PADDING_INC;
+               max: GRID_ITEM_DELETE_BTN_TOP_PADDING_INC GRID_ITEM_DELETE_BTN_TOP_PADDING_INC;
+               rel1 { relative: 0.0 0.0; to: "item_outer_bg"; }
+               rel2 { relative: 0.0 0.0; to: "item_outer_bg"; }
+            }
+         }
+         part { name: "delbtn";
+            type: SPACER;
+            scale: 1;
+            description { state: "default" 0.0;
+               rel1 { relative: 0.0 0.0; to: "delbtn_top_left_padding"; }
+               rel2 { relative: 0.0 0.0; to: "delbtn_top_left_padding"; }
+               align: 0.0 0.0;
+               fixed: 1 1;
+               min: GRID_ITEM_DELETE_BTN_SIZE_INC;
+               max: GRID_ITEM_DELETE_BTN_SIZE_INC;
+            }
+         }
+         part { name: "delbtn/img";
+            scale: 1;
+            mouse_events: 1;
+            description { state: "default" 0.0;
+               rel1.to: "delbtn";
+               rel2.to: "delbtn";
+               visible: 0;
+            }
+            description { state: "show" 0.0;
+               inherit: "default" 0.0;
+               visible: 1;
+               image {
+                  normal: "B12_button_delete.png";
+               }
+            }
+            description { state: "pressed" 0.0;
+               inherit: "default" 0.0;
+               visible: 1;
+               image {
+                  normal: "B12_button_delete_press.png";
+               }
+            }
+         }
+      }
+      programs {
+         program { name: "selected";
+            signal: "elm,state,selected";
+            source: "elm";
+            script {
+               new st[31];
+               new Float:vl;
+               get_state(PART:"delbtn/img", st, 30, vl);
+               if (!strcmp(st, "default"))
+                  run_program(PROGRAM:"vi_pressed");
+            }
+         }
+         program { name: "unselected";
+            signal: "elm,state,unselected";
+            source: "elm";
+            script {
+               new st[31];
+               new Float:vl;
+               get_state(PART:"delbtn/img", st, 30, vl);
+               if (!strcmp(st, "default"))
+                  run_program(PROGRAM:"vi_zoom_out");
+            }
+         }
+         GENGRID_PROGRAM_ITEM_SELECT_VI_EFFECT(
+            target: "bg";
+            target: "item_outer_bg";
+            target: "item_inner_bg";
+            target: "item_bg";
+            target: "elm.text";
+         )
+         program { name: "mouse_down";
+            signal: "mouse,down,1";
+            source: "delbtn/img";
+            script {
+               new st[31];
+               new Float:vl;
+               get_state(PART:"delbtn/img", st, 30, vl);
+               if (!strcmp(st, "show"))
+                  set_state(PART:"delbtn/img", "pressed", 0.0);
+            }
+         }
+         program { name: "mouse_out";
+            signal: "mouse,out";
+            source: "delbtn/img";
+            script {
+               new st[31];
+               new Float:vl;
+               get_state(PART:"delbtn/img", st, 30, vl);
+               if (!strcmp(st, "pressed"))
+                  set_state(PART:"delbtn/img", "show", 0.0);
+            }
+         }
+         program { name: "mouse_up";
+            signal: "mouse,up,1";
+            source: "delbtn/img";
+            script {
+               new st[31];
+               new Float:vl;
+               get_state(PART:"delbtn/img", st, 30, vl);
+               if (!strcmp(st, "pressed"))
+                  set_state(PART:"delbtn/img", "show", 0.0);
+            }
+         }
+         program { name: "play_sound_delbtn";
+            signal: "mouse,clicked,1";
+            source: "delbtn/img";
+            action: PLAY_SAMPLE "touch_sound" 1.0;
+         }
+         program { name: "play_sound_item";
+            signal: "mouse,clicked,1";
+            source: "item_outer_bg";
+            script {
+               new st[31], st2[31];
+               new Float:vl, Float:vl2;
+               get_state(PART:"delbtn/img", st, 30, vl);
+               get_state(PART:"elm.rect.dim", st2, 30, vl2);
+               if (!strcmp(st, "default") && !strcmp(st2, "default"))
+                  play_sample("touch_sound", 1.0);
+            }
+         }
+         program { name: "show_lock_icon";
+            source: "elm";
+            signal: "elm,state,show,lockicon";
+            script {
+               set_state(PART:"icon_lock/img", "show", 0.0);
+            }
+         }
+         program { name: "hide_lock_icon";
+            source: "elm";
+            signal: "elm,state,hide,lockicon";
+            script {
+               set_state(PART:"icon_lock/img", "hide", 0.0);
+            }
+         }
+         program { name: "show_delbtn";
+            source: "elm";
+            signal: "elm,state,show,delbtn";
+            script {
+               set_state(PART:"delbtn/img", "show", 0.0);
+            }
+         }
+         program { name: "hide_delbtn";
+            source: "elm";
+            signal: "elm,state,hide,delbtn";
+            script {
+               set_state(PART:"delbtn/img", "default", 0.0);
+            }
+         }
+         program { name: "show_dim";
+            source: "elm";
+            signal: "elm,state,show,dim";
+            action: STATE_SET "show" 0.0;
+            target: "elm.rect.dim";
+         }
+         program { name: "hide_dim";
+            source: "elm";
+            signal: "elm,state,hide,dim";
+            action: STATE_SET "default" 0.0;
+            target: "elm.rect.dim";
+         }
+      }
+   }
+
+   group { name: "elm/gengrid/item/clipboard/combined_style/default";
+      data.item: "texts" "elm.text";
+      data.item: "contents" "elm.swallow.content";
+
+      images {
+         image: "B12_memo_bg.#.png" COMP;
+         image: "B12_memo_bg_line.#.png" COMP;
+         image: "B12_button_delete.png" COMP;
+         image: "B12_button_delete_press.png" COMP;
+         image: "B12_icon_lock.png" COMP;
+      }
+
+      styles {
+         style { name: "clipboard_02_style";
+            base: "font=Tizen:style=Regular font_size="GRID_COMBINED_ITEM_FONT_SIZE_INC" color=#000000FF color_class=ATO002 align=left wrap=mixed text_class=ATO002";
+            tag: "br" "\n";
+            tag: "ps" "ps";
+            tag: "tab" "\t";
+         }
+         style { name: "clipboard_02_style_pressed";
+            base: "font=Tizen:style=Regular font_size="GRID_COMBINED_ITEM_FONT_SIZE_INC" color=#FAFAFAFF color_class-ATO002 align=left wrap=mixed text_class=ATO002";
+            tag: "br" "\n";
+            tag: "ps" "ps";
+            tag: "tab" "\t";
+         }
+      }
+
+      parts {
+         part { name: "persp";
+            type: RECT;
+            description { state: "default" 0.0;
+               min: 32 32;
+               max: 32 32;
+               fixed: 1 1;
+               align: 0.5 0.5;
+               color: 0 0 0 0;
+               visible: 1;
+               perspective {
+                  zplane: -70;
+                  focal: 1000;
+               }
+            }
+         }
+         part { name: "persp1";
+            type: RECT;
+            description { state: "default" 0.0;
+               min: 32 32;
+               max: 32 32;
+               fixed: 1 1;
+               align: 0.5 0.5;
+               color: 0 0 0 0;
+               visible: 1;
+               perspective {
+                  zplane: 0;
+                  focal: 1000;
+               }
+            }
+         }
+         part { name: "bg";
+            type: RECT;
+            scale: 1;
+            description { state: "default" 0.0;
+               color: 0 0 0 0;
+               GENGRID_ITEM_SELECT_VI_EFFECT
+            }
+         }
+         part { name: "top_left_padding";
+            type: SPACER;
+            scale: 1;
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               align: 0.0 0.0;
+               min: GRID_TEXT_ITEM_BG_LEFT_PADDING_INC GRID_TEXT_ITEM_BG_TOP_PADDING_INC;
+               max: GRID_TEXT_ITEM_BG_LEFT_PADDING_INC GRID_TEXT_ITEM_BG_TOP_PADDING_INC;
+               rel1 { relative: 0.0 0.0; to: "bg"; }
+               rel2 { relative: 0.0 0.0; to: "bg"; }
+            }
+         }
+         part { name: "bottom_right_padding";
+            type: SPACER;
+            scale: 1;
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               align: 1.0 1.0;
+               min: GRID_TEXT_ITEM_BG_RIGHT_PADDING_INC GRID_TEXT_ITEM_BG_BOTTOM_PADDING_INC;
+               max: GRID_TEXT_ITEM_BG_RIGHT_PADDING_INC GRID_TEXT_ITEM_BG_BOTTOM_PADDING_INC;
+               rel1 { relative: 1.0 1.0; to: "bg"; }
+               rel2 { relative: 1.0 1.0; to: "bg"; }
+            }
+         }
+         part { name: "item_outer_bg";
+            type: RECT;
+            scale: 1;
+            mouse_events: 1;
+            description { state: "default" 0.0;
+               rel1 { relative: 1.0 1.0; to: "top_left_padding"; }
+               rel2 { relative: 0.0 0.0; to: "bottom_right_padding"; }
+               GENGRID_ITEM_SELECT_VI_EFFECT
+            }
+         }
+         part { name: "item_inner_bg_top_left_padding";
+            type: SPACER;
+            scale: 1;
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               align: 0.0 0.0;
+               min: GRID_ITEM_OUTER_LINE_SIZE_INC GRID_ITEM_OUTER_LINE_SIZE_INC;
+               max: GRID_ITEM_OUTER_LINE_SIZE_INC GRID_ITEM_OUTER_LINE_SIZE_INC;
+               rel1 { relative: 0.0 0.0; to: "item_outer_bg"; }
+               rel2 { relative: 0.0 0.0; to: "item_outer_bg"; }
+            }
+         }
+         part { name: "item_inner_bg_bottom_right_padding";
+            type: SPACER;
+            scale: 1;
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               align: 1.0 1.0;
+               min: GRID_ITEM_OUTER_LINE_SIZE_INC GRID_ITEM_OUTER_LINE_SIZE_INC;
+               max: GRID_ITEM_OUTER_LINE_SIZE_INC GRID_ITEM_OUTER_LINE_SIZE_INC;
+               rel1 { relative: 1.0 1.0; to: "item_outer_bg"; }
+               rel2 { relative: 1.0 1.0; to: "item_outer_bg"; }
+            }
+         }
+         part { name: "item_inner_bg";
+            type: RECT;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               rel1 { relative: 1.0 1.0; to: "item_inner_bg_top_left_padding"; }
+               rel2 { relative: 0.0 0.0; to: "item_inner_bg_bottom_right_padding"; }
+               color: 250 250 250 255;
+               GENGRID_ITEM_SELECT_VI_EFFECT
+            }
+         }
+         part { name: "item_bg_top_left_padding";
+            type: SPACER;
+            scale: 1;
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               align: 0.0 0.0;
+               min: GRID_TEXT_ITEM_INNER_LINE_SIZE_INC GRID_TEXT_ITEM_INNER_LINE_SIZE_INC;
+               max: GRID_TEXT_ITEM_INNER_LINE_SIZE_INC GRID_TEXT_ITEM_INNER_LINE_SIZE_INC;
+               rel1 { relative: 0.0 0.0; to: "item_inner_bg"; }
+               rel2 { relative: 0.0 0.0; to: "item_inner_bg"; }
+            }
+         }
+         part { name: "item_bg_bottom_right_padding";
+            type: SPACER;
+            scale: 1;
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               align: 1.0 1.0;
+               min: GRID_TEXT_ITEM_INNER_LINE_SIZE_INC GRID_TEXT_ITEM_INNER_LINE_SIZE_INC;
+               max: GRID_TEXT_ITEM_INNER_LINE_SIZE_INC GRID_TEXT_ITEM_INNER_LINE_SIZE_INC;
+               rel1 { relative: 1.0 1.0; to: "item_inner_bg"; }
+               rel2 { relative: 1.0 1.0; to: "item_inner_bg"; }
+            }
+         }
+         part { name: "item_bg";
+            scale: 1;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               rel1 { relative: 1.0 0.0; to: "item_bg_top_left_padding"; }
+               rel2 { relative: 0.0 0.0; to: "item_bg_bottom_right_padding"; }
+               color_class: "AO002L1";
+               image.normal: "B12_memo_bg.#.png";
+               GENGRID_ITEM_SELECT_VI_EFFECT
+            }
+         }
+         part { name: "content_top_left_padding";
+            type: SPACER;
+            scale: 1;
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               align: 0.0 0.0;
+               min: GRID_COMBINED_ITEM_LEFT_PADDING_INC GRID_COMBINED_ITEM_TOP_PADDING_INC;
+               max: GRID_COMBINED_ITEM_LEFT_PADDING_INC GRID_COMBINED_ITEM_TOP_PADDING_INC;
+               rel1 { relative: 0.0 0.0; to: "item_outer_bg"; }
+               rel2 { relative: 0.0 0.0; to: "item_outer_bg"; }
+            }
+         }
+         part { name: "text_bottom_right_padding";
+            type: SPACER;
+            scale: 1;
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               align: 1.0 1.0;
+               min: GRID_COMBINED_ITEM_LEFT_PADDING_INC GRID_COMBINED_ITEM_TOP_PADDING_INC;
+               max: GRID_COMBINED_ITEM_LEFT_PADDING_INC GRID_COMBINED_ITEM_TOP_PADDING_INC;
+               rel1 { relative: 1.0 1.0; to: "item_outer_bg"; }
+               rel2 { relative: 1.0 1.0; to: "item_outer_bg"; }
+            }
+         }
+         part { name: "elm.swallow.content";
+            type: SWALLOW;
+            scale: 1;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               align: 0.0 0.0;
+               max: GRID_COMBINED_ITEM_W_INC GRID_COMBINED_ITEM_IMAGE_H_INC;
+               rel1 { relative: 1.0 1.0; to: "content_top_left_padding"; }
+               rel2 { relative: 1.0 1.0; to: "content_top_left_padding"; }
+               GENGRID_ITEM_SELECT_VI_EFFECT
+            }
+         }
+         part { name: "separator_padding";
+            type: SPACER;
+            scale: 1;
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               align: 0.5 0.0;
+               min: 0 GRID_COMBINED_ITEM_PADDING_INC;
+               max: -1 GRID_COMBINED_ITEM_PADDING_INC;
+               rel1 { relative: 0.0 1.0; to: "elm.swallow.content"; }
+               rel2 { relative: 0.0 1.0; to_x: "text_bottom_right_padding";  to_y: "elm.swallow.content"; }
+            }
+         }
+         part { name: "elm.text";
+            type: TEXTBLOCK;
+            scale: 1;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               text {
+                  style: "clipboard_02_style";
+                  align: 0.0 0.0;
+               }
+               rel1 { relative: 0.0 1.0; to: "separator_padding"; }
+               rel2 { relative: 0.0 0.0; to: "text_bottom_right_padding"; }
+            }
+            description { state: "pressed" 0.0;
+               inherit: "default" 0.0;
+               text {
+                  style: "clipboard_02_style_pressed";
+                  align: 0.0 0.0;
+               }
+               GENGRID_ITEM_SELECT_VI_EFFECT
+            }
+         }
+         part { name: "elm.rect.dim";
+            type: RECT;
+            scale: 1;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               visible: 0;
+               color: 0 0 0 200;
+               rel1.to: "item_bg";
+               rel2.to: "item_bg";
+            }
+            description { state: "show" 0.0;
+               inherit: "default" 0.0;
+               visible: 1;
+            }
+         }
+         part { name: "icon_lock/img";
+            scale: 1;
+            mouse_events: 1;
+            description { state: "default" 0.0;
+               rel1 { relative: 0.5 0.5; to: "item_bg"; }
+               rel2 { relative: 0.5 0.5; to: "item_bg"; }
+               align: 0.5 0.5;
+               fixed: 1 1;
+               min: GRID_ITEM_LOCK_BTN_SIZE_INC;
+               max: GRID_ITEM_LOCK_BTN_SIZE_INC;
+               visible: 0;
+            }
+           description { state: "show" 0.0;
+               inherit: "default" 0.0;
+               visible: 1;
+               image {
+                  normal: "B12_icon_lock.png";
+               }
+           }
+         }
+         part { name: "delbtn_top_left_padding";
+            type: SPACER;
+            scale: 1;
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               align: 1.0 1.0;
+               min: GRID_ITEM_DELETE_BTN_TOP_PADDING_INC GRID_ITEM_DELETE_BTN_TOP_PADDING_INC;
+               max: GRID_ITEM_DELETE_BTN_TOP_PADDING_INC GRID_ITEM_DELETE_BTN_TOP_PADDING_INC;
+               rel1 { relative: 0.0 0.0; to: "item_outer_bg"; }
+               rel2 { relative: 0.0 0.0; to: "item_outer_bg"; }
+            }
+         }
+         part { name: "delbtn";
+            type: SPACER;
+            scale: 1;
+            description { state: "default" 0.0;
+               rel1 { relative: 0.0 1.0; to: "delbtn_top_left_padding"; }
+               rel2 { relative: 0.0 1.0; to: "delbtn_top_left_padding"; }
+               align: 0.0 0.0;
+               fixed: 1 1;
+               min: GRID_ITEM_DELETE_BTN_SIZE_INC;
+               max: GRID_ITEM_DELETE_BTN_SIZE_INC;
+            }
+         }
+         part { name: "delbtn/img";
+            scale: 1;
+            mouse_events: 1;
+            description { state: "default" 0.0;
+               rel1.to: "delbtn";
+               rel2.to: "delbtn";
+               visible: 0;
+            }
+            description { state: "show" 0.0;
+               inherit: "default" 0.0;
+               visible: 1;
+               image {
+                  normal: "B12_button_delete.png";
+               }
+            }
+            description { state: "pressed" 0.0;
+               inherit: "default" 0.0;
+               visible: 1;
+               image {
+                  normal: "B12_button_delete_press.png";
+               }
+            }
+         }
+      }
+      programs {
+         program { name: "selected";
+            signal: "elm,state,selected";
+            source: "elm";
+            script {
+               new st[31], st2[31];
+               new Float:vl, Float:vl2;
+               get_state(PART:"delbtn/img", st, 30, vl);
+               get_state(PART:"elm.rect.dim", st2, 30, vl2);
+               if (!strcmp(st, "default") && !strcmp(st2, "default"))
+                  run_program(PROGRAM:"vi_pressed");
+            }
+         }
+         program { name: "unselected";
+            signal: "elm,state,unselected";
+            source: "elm";
+            script {
+               new st[31], st2[31];
+               new Float:vl, Float:vl2;
+               get_state(PART:"delbtn/img", st, 30, vl);
+               get_state(PART:"elm.rect.dim", st2, 30, vl2);
+               if (!strcmp(st, "default") && !strcmp(st2, "default"))
+                  run_program(PROGRAM:"vi_zoom_out");
+            }
+         }
+         GENGRID_PROGRAM_ITEM_SELECT_VI_EFFECT(
+            target: "bg";
+            target: "item_outer_bg";
+            target: "item_inner_bg";
+            target: "item_bg";
+            target: "elm.swallow.content";
+            target: "elm.text";
+         )
+         program { name: "mouse_down";
+            signal: "mouse,down,1";
+            source: "delbtn/img";
+            script {
+               new st[31];
+               new Float:vl;
+               get_state(PART:"delbtn/img", st, 30, vl);
+               if (!strcmp(st, "show"))
+                  set_state(PART:"delbtn/img", "pressed", 0.0);
+            }
+         }
+         program { name: "mouse_out";
+            signal: "mouse,out";
+            source: "delbtn/img";
+            script {
+               new st[31];
+               new Float:vl;
+               get_state(PART:"delbtn/img", st, 30, vl);
+               if (!strcmp(st, "pressed"))
+                  set_state(PART:"delbtn/img", "show", 0.0);
+            }
+         }
+         program { name: "mouse_up";
+            signal: "mouse,up,1";
+            source: "delbtn/img";
+            script {
+               new st[31];
+               new Float:vl;
+               get_state(PART:"delbtn/img", st, 30, vl);
+               if (!strcmp(st, "pressed"))
+                  set_state(PART:"delbtn/img", "show", 0.0);
+            }
+         }
+         program { name: "play_sound_delbtn";
+            signal: "mouse,clicked,1";
+            source: "delbtn/img";
+            action: PLAY_SAMPLE "touch_sound" 1.0;
+         }
+         program { name: "play_sound_item";
+            signal: "mouse,clicked,1";
+            source: "item_outer_bg";
+            script {
+               new st[31], st2[31];
+               new Float:vl, Float:vl2;
+               get_state(PART:"delbtn/img", st, 30, vl);
+               get_state(PART:"elm.rect.dim", st2, 30, vl2);
+               if (!strcmp(st, "default") && !strcmp(st2, "default"))
+                  play_sample("touch_sound", 1.0);
+            }
+         }
+         program { name: "show_lock_icon";
+            source: "elm";
+            signal: "elm,state,show,lockicon";
+            script {
+               set_state(PART:"icon_lock/img", "show", 0.0);
+            }
+         }
+         program { name: "hide_lock_icon";
+            source: "elm";
+            signal: "elm,state,hide,lockicon";
+            script {
+               set_state(PART:"icon_lock/img", "hide", 0.0);
+            }
+         }
+         program { name: "show_delbtn";
+            source: "elm";
+            signal: "elm,state,show,delbtn";
+            script {
+               set_state(PART:"delbtn/img", "show", 0.0);
+            }
+         }
+         program { name: "hide_delbtn";
+            source: "elm";
+            signal: "elm,state,hide,delbtn";
+            script {
+               set_state(PART:"delbtn/img", "default", 0.0);
+            }
+         }
+         program { name: "show_dim";
+            source: "elm";
+            signal: "elm,state,show,dim";
+            action: STATE_SET "show" 0.0;
+            target: "elm.rect.dim";
+         }
+         program { name: "hide_dim";
+            source: "elm";
+            signal: "elm,state,hide,dim";
+            action: STATE_SET "default" 0.0;
+            target: "elm.rect.dim";
+         }
+      }
+   }
+}
diff --git a/2.2/data/themes/popup_layout.edc b/2.2/data/themes/popup_layout.edc
new file mode 100644 (file)
index 0000000..e51dc72
--- /dev/null
@@ -0,0 +1,15 @@
+#define DEMO_POPUP_CONTENT_LISTSTYLE_CONTENT_DEFAULT_MIN_INC 0 112
+
+group { name: "elm/layout/content/menustyle";
+   parts{
+      part{ name:"elm.swallow.content";
+         type: SWALLOW;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: DEMO_POPUP_CONTENT_LISTSTYLE_CONTENT_DEFAULT_MIN_INC;
+            align: 0.5 0.5;
+            fixed: 1 0;
+         }
+      }
+   }
+}
diff --git a/2.2/data/themes/scroller.edc b/2.2/data/themes/scroller.edc
new file mode 100644 (file)
index 0000000..ba812e8
--- /dev/null
@@ -0,0 +1,1392 @@
+/*
+ * Copyright (c) 2010 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php)
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ *   1. Redistributions of source code must retain the above copyright notice, this
+ *      list of conditions and the following disclaimer.
+ *   2. Redistributions in binary form must reproduce the above copyright notice,
+ *      this list of conditions and the following disclaimer in the documentation
+ *      and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * vim:ts=3
+*/
+
+#define SCROLLER_DEFAULT_SCROLLBAR_VBAR_IMAGE "B12_panel_scroll_bar.png"
+#define SCROLLER_DEFAULT_SCROLLBAR_HBAR_IMAGE "B12_panel_scroll_bar.png"
+#define SCROLLER_DEFAULT_SCROLLBAR_VBAR_IMAGE_BORDER 0 0 12 14
+#define SCROLLER_DEFAULT_SCROLLBAR_HBAR_IMAGE_BORDER 12 14 0 0
+#define SCROLLER_DEFAULT_SCROLLBAR_VBAR_MIN_SIZE_INC 18 72
+#define SCROLLER_DEFAULT_SCROLLBAR_VBAR_MAX_SIZE_INC 18 99999
+#define SCROLLER_DEFAULT_SCROLLBAR_HBAR_MIN_SIZE_INC 72 18
+#define SCROLLER_DEFAULT_SCROLLBAR_HBAR_MAX_SIZE_INC 99999 18
+#define SCROLLER_DEFAULT_SCROLLBAR_VBAR_PADDING_SIZE 6
+#define SCROLLER_DEFAULT_SCROLLBAR_HBAR_PADDING_SIZE 0
+#define SCROLLER_MATCHLIST_SCROLLBAR_VBAR_IMAGE "B12_panel_scroll_bar.png"
+#define SCROLLER_MATCHLIST_SCROLLBAR_HBAR_IMAGE "B12_panel_scroll_bar.png"
+#define SCROLLER_MATCHLIST_SCROLLBAR_BG_IMAGE_BORDER 13 13 10 15
+#define SCROLLER_MATCHLIST_SCROLLBAR_VBAR_PADDING_SIZE 6
+#define SCROLLER_MATCHLIST_SCROLLBAR_HBAR_PADDING_SIZE 16
+#define SCROLLER_MATCHLIST_SCROLLBAR_VBAR_MIN_SIZE_INC 16 238
+#define SCROLLER_MATCHLIST_SCROLLBAR_VBAR_MAX_SIZE_INC 16 99999
+#define SCROLLER_MATCHLIST_SCROLLBAR_HBAR_MIN_SIZE_INC 180 16
+#define SCROLLER_MATCHLIST_SCROLLBAR_HBAR_MAX_SIZE_INC 99999 16
+#define SCROLLER_MATCHLIST_SCROLLBAR_VBAR_RUNNER_BORDER 0 0 4 4
+#define SCROLLER_MATCHLIST_SCROLLBAR_HBAR_RUNNER_BORDER 4 4 0 0
+#define SCROLLER_MATCHLIST_SCROLLBAR_VBAR_IMAGE_BORDER 0 0 12 14
+#define SCROLLER_MATCHLIST_SCROLLBAR_HBAR_IMAGE_BORDER 12 14 0 0
+#define SCROLLER_MATCHLIST_SCROLLBAR_VBAR_OVER1 6 6 6 0
+#define SCROLLER_MATCHLIST_SCROLLBAR_VBAR_OVER2 6 6 6 0
+#define SCROLLER_MATCHLIST_SCROLLBAR_HBAR_OVER1 6 6 6 0
+#define SCROLLER_MATCHLIST_SCROLLBAR_HBAR_OVER2 6 6 6 0
+#define SCROLLER_PHOTOCAM_SCROLLBAR_VBAR_IMAGE "B12_panel_scroll_bar.png"
+#define SCROLLER_PHOTOCAM_SCROLLBAR_HBAR_IMAGE "B12_panel_scroll_bar.png"
+#define SCROLLER_PHOTOCAM_SCROLLBAR_VBAR_PADDING_SIZE 6
+#define SCROLLER_PHOTOCAM_SCROLLBAR_HBAR_PADDING_SIZE 16
+#define SCROLLER_PHOTOCAM_SCROLLBAR_VBAR_MIN_SIZE_INC 16 238
+#define SCROLLER_PHOTOCAM_SCROLLBAR_VBAR_MAX_SIZE_INC 16 99999
+#define SCROLLER_PHOTOCAM_SCROLLBAR_HBAR_MIN_SIZE_INC 180 16
+#define SCROLLER_PHOTOCAM_SCROLLBAR_HBAR_MAX_SIZE_INC 99999 16
+#define SCROLLER_PHOTOCAM_SCROLLBAR_VBAR_RUNNER_BORDER 0 0 4 4
+#define SCROLLER_PHOTOCAM_SCROLLBAR_HBAR_RUNNER_BORDER 4 4 0 0
+#define SCROLLER_PHOTOCAM_SCROLLBAR_VBAR_IMAGE_BORDER 0 0 12 14
+#define SCROLLER_PHOTOCAM_SCROLLBAR_HBAR_IMAGE_BORDER 12 14 0 0
+#define SCROLLER_PHOTOCAM_SCROLLBAR_VBAR_OVER1 6 6 6 0
+#define SCROLLER_PHOTOCAM_SCROLLBAR_VBAR_OVER2 6 6 6 0
+#define SCROLLER_PHOTOCAM_SCROLLBAR_HBAR_OVER1 6 6 6 0
+#define SCROLLER_PHOTOCAM_SCROLLBAR_HBAR_OVER2 6 6 6 0
+#define SCROLLER_HANDLER_SCROLLBAR_VBAR_MIN_SIZE_INC 36 234
+#define SCROLLER_HANDLER_SCROLLBAR_HBAR_MIN_SIZE_INC 234 36
+#define SCROLLER_HANDLER_SCROLLBAR_VBAR_MIDDLE_MIN_SIZE_INC 36 37
+#define SCROLLER_HANDLER_SCROLLBAR_HBAR_MIDDLE_MIN_SIZE_INC 37 36
+#define SCROLLER_HANDLER_SCROLLBAR_VBAR_BOTTOM_BORDER 10 10 0 10
+#define SCROLLER_HANDLER_SCROLLBAR_VBAR_RIGHT_BORDER 0 10 10 10
+
+#define BUTTON_JUMP_TOP_PADDING_TO_SCROLLER_MIN_MAX_INC 26 18
+#define BUTTON_JUMP_LEFT_PADDING_TO_SCROLLER_MIN_MAX_INC 26 18
+
+#define GENGRID_POPUP_CONTENT_TOP_PADDING 26
+#define GENGRID_POPUP_CONTENT_BOTTOM_PADDING 26
+
+#define OVERSCROLL_EFFECT_IMAGES\
+      image: "bouncing_left_00.png" COMP;\
+      image: "bouncing_left_01.png" COMP;\
+      image: "bouncing_left_02.png" COMP;\
+      image: "bouncing_left_03.png" COMP;\
+      image: "bouncing_left_04.png" COMP;\
+      image: "bouncing_left_05.png" COMP;\
+      image: "bouncing_left_06.png" COMP;\
+      image: "bouncing_left_07.png" COMP;\
+      image: "bouncing_left_08.png" COMP;\
+      image: "bouncing_left_09.png" COMP;\
+      image: "bouncing_left_10.png" COMP;\
+      image: "bouncing_left_11.png" COMP;\
+      image: "bouncing_left_12.png" COMP;\
+      image: "bouncing_left_13.png" COMP;\
+      image: "bouncing_left_14.png" COMP;\
+      image: "bouncing_left_15.png" COMP;\
+      image: "bouncing_left_16.png" COMP;\
+      image: "bouncing_left_17.png" COMP;\
+      image: "bouncing_left_18.png" COMP;\
+      image: "bouncing_left_19.png" COMP;\
+      image: "bouncing_right_00.png" COMP;\
+      image: "bouncing_right_01.png" COMP;\
+      image: "bouncing_right_02.png" COMP;\
+      image: "bouncing_right_03.png" COMP;\
+      image: "bouncing_right_04.png" COMP;\
+      image: "bouncing_right_05.png" COMP;\
+      image: "bouncing_right_06.png" COMP;\
+      image: "bouncing_right_07.png" COMP;\
+      image: "bouncing_right_08.png" COMP;\
+      image: "bouncing_right_09.png" COMP;\
+      image: "bouncing_right_10.png" COMP;\
+      image: "bouncing_right_11.png" COMP;\
+      image: "bouncing_right_12.png" COMP;\
+      image: "bouncing_right_13.png" COMP;\
+      image: "bouncing_right_14.png" COMP;\
+      image: "bouncing_right_15.png" COMP;\
+      image: "bouncing_right_16.png" COMP;\
+      image: "bouncing_right_17.png" COMP;\
+      image: "bouncing_right_18.png" COMP;\
+      image: "bouncing_right_19.png" COMP;
+
+#define OVERSCROLL_EFFECT_DESCRIPTIONS(NAME)\
+         OVERSCROLL_EFFECT_DESCRIPTION(00, NAME)\
+         OVERSCROLL_EFFECT_DESCRIPTION(01, NAME)\
+         OVERSCROLL_EFFECT_DESCRIPTION(02, NAME)\
+         OVERSCROLL_EFFECT_DESCRIPTION(03, NAME)\
+         OVERSCROLL_EFFECT_DESCRIPTION(04, NAME)\
+         OVERSCROLL_EFFECT_DESCRIPTION(05, NAME)\
+         OVERSCROLL_EFFECT_DESCRIPTION(06, NAME)\
+         OVERSCROLL_EFFECT_DESCRIPTION(07, NAME)\
+         OVERSCROLL_EFFECT_DESCRIPTION(08, NAME)\
+         OVERSCROLL_EFFECT_DESCRIPTION(09, NAME)\
+         OVERSCROLL_EFFECT_DESCRIPTION(10, NAME)\
+         OVERSCROLL_EFFECT_DESCRIPTION(11, NAME)\
+         OVERSCROLL_EFFECT_DESCRIPTION(12, NAME)\
+         OVERSCROLL_EFFECT_DESCRIPTION(13, NAME)\
+         OVERSCROLL_EFFECT_DESCRIPTION(14, NAME)\
+         OVERSCROLL_EFFECT_DESCRIPTION(15, NAME)\
+         OVERSCROLL_EFFECT_DESCRIPTION(16, NAME)\
+         OVERSCROLL_EFFECT_DESCRIPTION(17, NAME)\
+         OVERSCROLL_EFFECT_DESCRIPTION(18, NAME)\
+         OVERSCROLL_EFFECT_DESCRIPTION(19, NAME)
+
+#define OVERSCROLL_EFFECT_DESCRIPTION(NUMBER, NAME)\
+         description { state: "show_effect" "0."NUMBER"";\
+            inherit: "default" 0.0;\
+            visible: 1;\
+            image {\
+               normal: "bouncing_"NAME"_"NUMBER".png";\
+            }\
+         }
+
+#define OVERSCROLL_EFFECT_FUNCTION(NAME, SRC)\
+      program { name: "start_effect_"NAME;\
+          script {\
+              new st[31];\
+              new Float:state;\
+              get_state(PART:SRC, st, 30, state);\
+              if (state < 0.09)\
+              {\
+                state += 0.01;\
+                set_state(PART:SRC, "show_effect", state);\
+                run_program(PROGRAM:"delay_"NAME);\
+              }\
+              else if ((state < 0.19 && state >= 0.09) && !get_int(effect_hold))\
+              {\
+                state += 0.01;\
+                set_state(PART:SRC, "show_effect", state);\
+                run_program(PROGRAM:"delay_"NAME);\
+              }\
+              else if (state >= 0.19 && !get_int(effect_hold))\
+              {\
+                set_int(effect_on, 0);\
+                set_state(PART:SRC, "hidden", 0.0);\
+                run_program(PROGRAM:"end_action_"NAME);\
+              }\
+              else\
+              {\
+                run_program(PROGRAM:"delay_"NAME);\
+              }\
+          }\
+      }\
+      program { name: "content_move_"NAME;\
+         signal: "elm,action,scroll";\
+         source: "elm";\
+         script {\
+            new st[31];\
+            new Float:state;\
+            get_state(PART:SRC, st, 30, state);\
+            if (!strcmp(st, "show_effect"))\
+              {\
+                set_int(effect_on, 0);\
+                set_state(PART:SRC, "hidden", 0.0);\
+                run_program(PROGRAM:"end_action_"NAME);\
+              }\
+         }\
+      }\
+      program { name: "delay_"NAME;\
+          in: 0.033 0.0;\
+          after: "start_effect_"NAME;\
+      }\
+      program { name: "end_action_"NAME;\
+         action: ACTION_STOP;\
+         target: "start_effect_"NAME;\
+         target: "delay_"NAME;\
+      }\
+      program { name: "edge_"NAME;\
+         signal: "elm,edge,"NAME;\
+         source: "elm";\
+         script {\
+             if (!get_int(effect_on)) {\
+                 set_int(effect_on, 1);\
+                 if (get_int(mouse_down))\
+                   set_int(effect_hold, 1);\
+                 set_state(PART:SRC, "show_effect", 0.0);\
+                 run_program(PROGRAM:"start_effect_"NAME);\
+             }\
+         }\
+      }
+
+group { name: "elm/scroller/base/default";
+   alias: "elm/carousel/base/default";
+   alias: "elm/scroller/base/map_bubble";
+   alias: "elm/gengrid/base/no_effect";
+   alias: "elm/genlist/base/no_effect";
+
+   data {
+      item: "focus_highlight" "on";
+   }
+
+   script {
+      public g_landscape = 0; //Flag for landscape mode
+      public sbvis_v, sbvis_h, sbalways_v, sbalways_h, sbvis_timer;
+      public sh_v, sh_h;
+      public effect_on, effect_hold, mouse_down;
+      public timer0(val) {
+         new v;
+         v = get_int(sbvis_v);
+         if (v) {
+            v = get_int(sbalways_v);
+            if (!v) {
+               emit("do-hide-vbar", "");
+               set_int(sbvis_v, 0);
+            }
+         }
+         v = get_int(sbvis_h);
+         if (v) {
+            v = get_int(sbalways_h);
+            if (!v) {
+               emit("do-hide-hbar", "");
+               set_int(sbvis_h, 0);
+            }
+         }
+         set_int(sbvis_timer, 0);
+         return 0;
+      }
+   }
+   images {
+      image: SCROLLER_DEFAULT_SCROLLBAR_VBAR_IMAGE COMP;
+      image: SCROLLER_DEFAULT_SCROLLBAR_HBAR_IMAGE COMP;
+   }
+   parts {
+      part { name: "bg";
+         type: RECT;
+         scale: 1;
+         description { state: "default" 0.0;
+            rel1.offset: 0 0;
+            rel2.offset: -1 -1;
+            color: 255 255 255 0;
+         }
+      }
+      part { name: "clipper";
+         type: RECT;
+         mouse_events: 0;
+         scale: 1;
+         description { state: "default" 0.0;
+            rel1.to: "bg";
+            rel2.to: "bg";
+            rel1.offset: 0 0;
+            rel2.offset: -1 -1;
+         }
+      }
+      part { name: "elm.swallow.content";
+         clip_to: "clipper";
+         type: SWALLOW;
+         scale: 1;
+         description { state: "default" 0.0;
+            rel1.to: "bg";
+            rel2.to: "bg";
+            rel1.offset: 0 0;
+            rel2.offset: -1 -1;
+         }
+      }
+      part { name: "sb_vbar_clip_master";
+         type: RECT;
+         mouse_events: 0;
+         scale: 1;
+         description { state: "default" 0.0;
+         }
+         description { state: "hidden" 0.0;
+            visible: 0;
+            color: 255 255 255 0;
+         }
+      }
+      part { name: "sb_vbar_clip";
+         clip_to: "sb_vbar_clip_master";
+         type: RECT;
+         mouse_events: 0;
+         scale: 1;
+         description { state: "default" 0.0;
+         }
+         description { state: "hidden" 0.0;
+            visible: 0;
+            color: 255 255 255 0;
+         }
+      }
+      part { name: "sb_vbar_top_padding";
+         type: SPACER;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: 0 SCROLLER_DEFAULT_SCROLLBAR_VBAR_PADDING_SIZE;
+            max: 0 SCROLLER_DEFAULT_SCROLLBAR_VBAR_PADDING_SIZE;
+            rel1.relative: 1.0 0.0;
+            rel2.relative: 1.0 0.0;
+            rel1.to: "elm.swallow.content";
+            rel2.to: "elm.swallow.content";
+            fixed: 1 1;
+            align: 1.0 0.0;
+         }
+      }
+      part { name: "sb_vbar_bottom_padding";
+         type: SPACER;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: 0 SCROLLER_DEFAULT_SCROLLBAR_VBAR_PADDING_SIZE;
+            max: 0 SCROLLER_DEFAULT_SCROLLBAR_VBAR_PADDING_SIZE;
+            rel1.relative: 1.0 1.0;
+            rel2.relative: 1.0 1.0;
+            rel1.to: "elm.swallow.content";
+            rel2.to: "elm.swallow.content";
+            fixed: 1 1;
+            align: 1.0 1.0;
+         }
+      }
+      part { name: "sb_vbar_right_padding";
+         type: SPACER;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: SCROLLER_DEFAULT_SCROLLBAR_VBAR_PADDING_SIZE 0;
+            max: SCROLLER_DEFAULT_SCROLLBAR_VBAR_PADDING_SIZE 0;
+            rel1.relative: 1.0 1.0;
+            rel2.relative: 1.0 1.0;
+            rel1.to: "elm.swallow.content";
+            rel2.to: "elm.swallow.content";
+            fixed: 1 1;
+            align: 1.0 1.0;
+         }
+      }
+      part { name: "sb_vbar";
+         type: RECT;
+         mouse_events: 0;
+         scale: 1;
+         description { state: "default" 0.0;
+            fixed: 1 1;
+            visible: 0;
+            min: SCROLLER_DEFAULT_SCROLLBAR_VBAR_MIN_SIZE_INC;
+            align: 1.0 0.0;
+            rel1 {
+               relative: 0.0 1.0;
+               offset:   0 0;
+               to_x:     "sb_vbar_right_padding";
+               to_y:     "sb_vbar_top_padding";
+            }
+            rel2 {
+               relative: 0.0 0.0;
+               offset:   -1 1;
+               to_x:     "sb_vbar_right_padding";
+               to_y:     "sb_vbar_bottom_padding";
+            }
+         }
+      }
+      part { name: "elm.dragable.vbar";
+         clip_to: "sb_vbar_clip";
+         mouse_events: 0;
+         scale: 1;
+         dragable {
+            x: 0 0 0;
+            y: 1 1 0;
+            confine: "sb_vbar";
+         }
+         description { state: "default" 0.0;
+            fixed: 1 1;
+            min: SCROLLER_DEFAULT_SCROLLBAR_VBAR_MIN_SIZE_INC;
+            max: SCROLLER_DEFAULT_SCROLLBAR_VBAR_MAX_SIZE_INC;
+            rel1 {
+               relative: 0.5 0.5;
+               offset:   0 0;
+               to: "sb_vbar";
+            }
+            rel2 {
+               relative: 0.5 0.5;
+               offset:   0 0;
+               to: "sb_vbar";
+            }
+            image {
+               normal: SCROLLER_DEFAULT_SCROLLBAR_VBAR_IMAGE;
+               border: SCROLLER_DEFAULT_SCROLLBAR_VBAR_IMAGE_BORDER;
+               border_scale: 1;
+               middle: DEFAULT;
+            }
+         }
+      }
+      part { name: "sb_hbar_clip_master";
+         type: RECT;
+         mouse_events: 0;
+         scale: 1;
+         description { state: "default" 0.0;
+         }
+         description { state: "hidden" 0.0;
+            visible: 0;
+            color: 255 255 255 0;
+         }
+      }
+      part { name: "sb_hbar_clip";
+         clip_to: "sb_hbar_clip_master";
+         type: RECT;
+         mouse_events: 0;
+         scale: 1;
+         description { state: "default" 0.0;
+         }
+         description { state: "hidden" 0.0;
+            visible: 0;
+            color: 255 255 255 0;
+         }
+      }
+      part { name: "sb_hbar_bottom_padding";
+         type: SPACER;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: 0 SCROLLER_DEFAULT_SCROLLBAR_HBAR_PADDING_SIZE;
+            max: 0 SCROLLER_DEFAULT_SCROLLBAR_HBAR_PADDING_SIZE;
+            rel1.relative: 1.0 1.0;
+            rel2.relative: 1.0 1.0;
+            rel1.to: "elm.swallow.content";
+            rel2.to: "elm.swallow.content";
+            fixed: 1 1;
+            align: 1.0 1.0;
+         }
+      }
+      part { name: "sb_hbar_left_padding";
+         type: SPACER;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: SCROLLER_DEFAULT_SCROLLBAR_HBAR_PADDING_SIZE 0;
+            max: SCROLLER_DEFAULT_SCROLLBAR_HBAR_PADDING_SIZE 0;
+            rel1.relative: 0.0 1.0;
+            rel2.relative: 0.0 1.0;
+            rel1.to: "elm.swallow.content";
+            rel2.to: "elm.swallow.content";
+            fixed: 1 1;
+            align: 0.0 1.0;
+         }
+      }
+      part { name: "sb_hbar_right_padding";
+         type: SPACER;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: SCROLLER_DEFAULT_SCROLLBAR_HBAR_PADDING_SIZE 0;
+            max: SCROLLER_DEFAULT_SCROLLBAR_HBAR_PADDING_SIZE 0;
+            rel1.relative: 1.0 1.0;
+            rel2.relative: 1.0 1.0;
+            rel1.to: "elm.swallow.content";
+            rel2.to: "elm.swallow.content";
+            fixed: 1 1;
+            align: 1.0 1.0;
+         }
+      }
+      part { name: "sb_hbar";
+         type: RECT;
+         mouse_events: 0;
+         scale: 1;
+         description { state: "default" 0.0;
+            fixed: 1 1;
+            visible: 0;
+            min: SCROLLER_DEFAULT_SCROLLBAR_HBAR_MIN_SIZE_INC;
+            align: 0.0 1.0;
+            rel1 {
+               relative: 1.0 0.0;
+               offset:   0 0;
+               to_x:     "sb_hbar_left_padding";
+               to_y:     "sb_hbar_bottom_padding";
+            }
+            rel2 {
+               relative: 0.0 0.0;
+               offset:   -1 -1;
+               to_x:     "sb_hbar_right_padding";
+               to_y:     "sb_hbar_bottom_padding";
+            }
+         }
+      }
+      part { name: "elm.dragable.hbar";
+         clip_to: "sb_hbar_clip";
+         mouse_events: 0;
+         scale: 1;
+         dragable {
+            x: 1 1 0;
+            y: 0 0 0;
+            confine: "sb_hbar";
+         }
+         description { state: "default" 0.0;
+            fixed: 1 1;
+            min: SCROLLER_DEFAULT_SCROLLBAR_HBAR_MIN_SIZE_INC;
+            max: SCROLLER_DEFAULT_SCROLLBAR_HBAR_MAX_SIZE_INC;
+            rel1 {
+               relative: 0.5  0.0;
+               offset:   0    0;
+               to: "sb_hbar";
+            }
+            rel2 {
+               relative: 0.5  0.0;
+               offset:   0    0;
+               to: "sb_hbar";
+            }
+            image {
+               normal: SCROLLER_DEFAULT_SCROLLBAR_HBAR_IMAGE;
+               border: SCROLLER_DEFAULT_SCROLLBAR_HBAR_IMAGE_BORDER;
+               border_scale: 1;
+               middle: DEFAULT;
+            }
+         }
+      }
+      part { name: "disabler";
+         type: RECT;
+         scale: 1;
+         description { state: "default" 0.0;
+            rel1.to: "clipper";
+            rel2.to: "clipper";
+            color: 0 0 0 0;
+            visible: 0;
+         }
+         description { state: "disabled" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+         }
+      }
+   }
+   programs {
+      program { name: "load";
+         signal: "load";
+         source: "";
+         script {
+            set_state(PART:"sb_hbar_clip", "hidden", 0.0);
+            set_state(PART:"sb_vbar_clip", "hidden", 0.0);
+            set_int(sbvis_h, 0);
+            set_int(sbvis_v, 0);
+            set_int(sbalways_v, 0);
+            set_int(sbalways_h, 0);
+            set_int(sbvis_timer, 0);
+            emit("reload", "elm");
+         }
+      }
+
+      program { name: "vbar_show";
+         signal: "elm,action,show,vbar";
+         source: "elm";
+         action:  STATE_SET "default" 0.0;
+         target: "sb_vbar_clip_master";
+      }
+      program { name: "vbar_hide";
+         signal: "elm,action,hide,vbar";
+         source: "elm";
+         action:  STATE_SET "hidden" 0.0;
+         target: "sb_vbar_clip_master";
+      }
+      program { name: "vbar_show_always";
+         signal: "elm,action,show_always,vbar";
+         source: "elm";
+         script {
+            new v;
+            v = get_int(sbalways_v);
+            if (!v) {
+               set_int(sbalways_v, 1);
+               v = get_int(sbvis_v);
+               if (!v) {
+                  emit("do-show-vbar", "");
+                  set_int(sbvis_v, 1);
+               }
+            }
+         }
+      }
+      program { name: "vbar_show_notalways";
+         signal: "elm,action,show_notalways,vbar";
+         source: "elm";
+         script {
+            new v;
+            v = get_int(sbalways_v);
+            if (v) {
+               set_int(sbalways_v, 0);
+               v = get_int(sbvis_v);
+               if (!v) {
+                  emit("do-hide-vbar", "");
+                  set_int(sbvis_v, 0);
+               }
+            }
+         }
+      }
+      program { name: "sb_vbar_show";
+         signal: "do-show-vbar";
+         source: "";
+         action:  STATE_SET "default" 0.0;
+         transition: LINEAR 0.5;
+         target: "sb_vbar_clip";
+      }
+      program { name: "sb_vbar_hide";
+         signal: "do-hide-vbar";
+         source: "";
+         action:  STATE_SET "hidden" 0.0;
+         transition: LINEAR 0.5;
+         target: "sb_vbar_clip";
+      }
+
+      program { name: "hbar_show";
+         signal: "elm,action,show,hbar";
+         source: "elm";
+         action:  STATE_SET "default" 0.0;
+         target: "sb_hbar_clip_master";
+      }
+      program { name: "hbar_hide";
+         signal: "elm,action,hide,hbar";
+         source: "elm";
+         action:  STATE_SET "hidden" 0.0;
+         target: "sb_hbar_clip_master";
+      }
+      program { name: "hbar_show_always";
+         signal: "elm,action,show_always,hbar";
+         source: "elm";
+         script {
+            new v;
+            v = get_int(sbalways_h);
+            if (!v) {
+               set_int(sbalways_h, 1);
+               v = get_int(sbvis_h);
+               if (!v) {
+                  emit("do-show-hbar", "");
+                  set_int(sbvis_h, 1);
+               }
+            }
+         }
+      }
+      program { name: "hbar_show_notalways";
+         signal: "elm,action,show_notalways,hbar";
+         source: "elm";
+         script {
+            new v;
+            v = get_int(sbalways_h);
+            if (v) {
+               set_int(sbalways_h, 0);
+               v = get_int(sbvis_h);
+               if (!v) {
+                  emit("do-hide-hbar", "");
+                  set_int(sbvis_h, 0);
+               }
+            }
+         }
+      }
+      program { name: "sb_hbar_show";
+         signal: "do-show-hbar";
+         source: "";
+         action:  STATE_SET "default" 0.0;
+         transition: LINEAR 0.5;
+         target: "sb_hbar_clip";
+      }
+      program { name: "sb_hbar_hide";
+         signal: "do-hide-hbar";
+         source: "";
+         action:  STATE_SET "hidden" 0.0;
+         transition: LINEAR 0.5;
+         target: "sb_hbar_clip";
+      }
+
+      program { name: "scroll";
+         signal: "elm,action,scroll";
+         source: "elm";
+         script {
+            new v;
+            v = get_int(sbvis_v);
+            v |= get_int(sbalways_v);
+            if (!v) {
+               emit("do-show-vbar", "");
+               set_int(sbvis_v, 1);
+            }
+            v = get_int(sbvis_h);
+            v |= get_int(sbalways_h);
+            if (!v) {
+               emit("do-show-hbar", "");
+               set_int(sbvis_h, 1);
+            }
+            v = get_int(sbvis_timer);
+            if (v > 0) cancel_timer(v);
+            v = timer(1.0, "timer0", 0);
+            set_int(sbvis_timer, v);
+         }
+      }
+      program { name: "disable";
+         signal: "elm,state,disabled";
+         source: "elm";
+         action: STATE_SET "disabled" 0.0;
+         target: "disabler";
+      }
+      program { name: "enable";
+         signal: "elm,state,enabled";
+         source: "elm";
+         action: STATE_SET "default" 0.0;
+         target: "disabler";
+      }
+      program { name: "show";
+         signal: "show";
+         source: "";
+         script {
+            new v;
+            emit("do-show-vbar", "");
+            set_int(sbvis_v, 1);
+            v = get_int(sbalways_v);
+            if (!v) {
+              v = get_int(sbvis_timer);
+              if (v > 0) cancel_timer(v);
+              v = timer(1.0, "timer0", 0);
+              set_int(sbvis_timer, v);
+            }
+            emit("do-show-hbar", "");
+            set_int(sbvis_h, 1);
+            v = get_int(sbalways_h);
+            if (!v) {
+              v = get_int(sbvis_timer);
+              if (v > 0) cancel_timer(v);
+              v = timer(1.0, "timer0", 0);
+              set_int(sbvis_timer, v);
+            }
+         }
+      }
+   }
+}
+
+group { name: "elm/scroller/base/handler";
+   alias: "elm/carousel/base/handler";
+
+   data {
+      item: "focus_highlight" "on";
+   }
+   script {
+      public sbvis_v, sbvis_h, sbalways_v, sbalways_h, sbvis_timer;
+      public effect_on, effect_hold, mouse_down;
+      public timer0(val) {
+         new v;
+         v = get_int(sbvis_v);
+         if (v) {
+            v = get_int(sbalways_v);
+            if (!v) {
+               emit("do-hide-vbar", "");
+               set_int(sbvis_v, 0);
+            }
+         }
+         v = get_int(sbvis_h);
+         if (v) {
+            v = get_int(sbalways_h);
+            if (!v) {
+               emit("do-hide-hbar", "");
+               set_int(sbvis_h, 0);
+            }
+         }
+         set_int(sbvis_timer, 0);
+         return 0;
+      }
+   }
+   images {
+      image: "00_fast_scroll_handler_top.png" COMP;
+      image: "00_fast_scroll_handler_center.png" COMP;
+      image: "00_fast_scroll_handler_bottom.png" COMP;
+      image: "00_fast_scroll_handler_left_h.png" COMP;
+      image: "00_fast_scroll_handler_center_h.png" COMP;
+      image: "00_fast_scroll_handler_right_h.png" COMP;
+   }
+   parts {
+      part { name: "bg";
+         type: RECT;
+         scale: 1;
+         description { state: "default" 0.0;
+            rel1.offset: 0 0;
+            rel2.offset: -1 -1;
+            color: 255 255 255 0;
+         }
+      }
+      part { name: "clipper";
+         type: RECT;
+         mouse_events: 0;
+         scale: 1;
+         description { state: "default" 0.0;
+            rel1.to: "bg";
+            rel2.to: "bg";
+            rel1.offset: 0 0;
+            rel2.offset: -1 -1;
+         }
+      }
+      part { name: "elm.swallow.content";
+         clip_to: "clipper";
+         type: SWALLOW;
+         scale: 1;
+         description { state: "default" 0.0;
+            rel1.to: "bg";
+            rel2.to: "bg";
+            rel1.offset: 0 0;
+            rel2.offset: -1 -1;
+         }
+      }
+      part { name: "sb_vbar_clip_master";
+         type: RECT;
+         mouse_events: 0;
+         scale: 1;
+         description { state: "default" 0.0;
+         }
+         description { state: "hidden" 0.0;
+            visible: 0;
+            color: 255 255 255 0;
+         }
+      }
+      part { name: "sb_vbar_clip";
+         clip_to: "sb_vbar_clip_master";
+         type: RECT;
+         mouse_events: 0;
+         scale: 1;
+         description { state: "default" 0.0;
+         }
+         description { state: "hidden" 0.0;
+            visible: 0;
+            color: 255 255 255 0;
+         }
+      }
+      part { name: "sb_vbar";
+         type: RECT;
+         mouse_events: 0;
+         scale: 1;
+         description { state: "default" 0.0;
+            fixed: 1 1;
+            visible: 0;
+            min: SCROLLER_HANDLER_SCROLLBAR_VBAR_MIN_SIZE_INC;
+            align: 1.0 0.0;
+            rel1 {
+               relative: 1.0 0.0;
+               to_y:     "bg";
+               to_x:     "bg";
+            }
+            rel2 {
+               relative: 1.0 1.0;
+               to_y:     "sb_hbar";
+               to_x:     "bg";
+            }
+         }
+      }
+      part { name: "elm.dragable.vbar";
+         type: RECT;
+         clip_to: "sb_vbar_clip";
+         mouse_events: 1;
+         scale: 1;
+         dragable {
+            x: 0 0 0;
+            y: 1 1 0;
+            confine: "sb_vbar";
+         }
+         description { state: "default" 0.0;
+            fixed: 1 1;
+            color: 0 0 0 0;
+            min: SCROLLER_HANDLER_SCROLLBAR_VBAR_MIN_SIZE_INC;
+            max: 30 99999;
+            rel1 {
+               relative: 0.5  0.5;
+               offset:   0    0;
+               to: "sb_vbar";
+            }
+            rel2 {
+               relative: 0.5  0.5;
+               offset:   0    0;
+               to: "sb_vbar";
+            }
+         }
+      }
+      part { name: "sb_hbar_clip_master";
+         type: RECT;
+         mouse_events: 0;
+         scale: 1;
+         description { state: "default" 0.0;
+         }
+         description { state: "hidden" 0.0;
+            visible: 0;
+            color: 255 255 255 0;
+         }
+      }
+      part { name: "sb_hbar_clip";
+         clip_to: "sb_hbar_clip_master";
+         type: RECT;
+         mouse_events: 0;
+         scale: 1;
+         description { state: "default" 0.0;
+         }
+         description { state: "hidden" 0.0;
+            visible: 0;
+            color: 255 255 255 0;
+         }
+      }
+      part { name: "sb_hbar";
+         type: RECT;
+         mouse_events: 0;
+         scale: 1;
+         description { state: "default" 0.0;
+            fixed: 1 1;
+            visible: 0;
+            min: SCROLLER_HANDLER_SCROLLBAR_HBAR_MIN_SIZE_INC;
+            align: 0.0 1.0;
+            rel1 {
+               relative: 0.0 1.0;
+               to_x:     "bg";
+               to_y:     "bg";
+            }
+            rel2 {
+               relative: 0.0 1.0;
+               offset: -1 -1;
+               to_x:     "sb_vbar";
+               to_y:     "bg";
+            }
+         }
+      }
+      part { name: "elm.dragable.hbar";
+         type: RECT;
+         clip_to: "sb_hbar_clip";
+         mouse_events: 1;
+         scale: 1;
+         dragable {
+            x: 1 1 0;
+            y: 0 0 0;
+            confine: "sb_hbar";
+         }
+         description { state: "default" 0.0;
+            fixed: 1 1;
+            color: 0 0 0 0;
+            min: SCROLLER_HANDLER_SCROLLBAR_HBAR_MIN_SIZE_INC;
+            max: 99999 30;
+            rel1 {
+               relative: 0.5  0.5;
+               offset:   0    0;
+               to: "sb_hbar";
+            }
+            rel2 {
+               relative: 0.5  0.5;
+               offset:   0    0;
+               to: "sb_hbar";
+            }
+         }
+      }
+      part { name: "disabler";
+         type: RECT;
+         scale: 1;
+         description { state: "default" 0.0;
+            rel1.to: "clipper";
+            rel2.to: "clipper";
+            color: 0 0 0 0;
+            visible: 0;
+         }
+         description { state: "disabled" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+         }
+      }
+   }
+   programs {
+      program { name: "load";
+         signal: "load";
+         source: "";
+         script {
+            set_state(PART:"sb_hbar_clip", "hidden", 0.0);
+            set_state(PART:"sb_vbar_clip", "hidden", 0.0);
+            set_int(sbvis_h, 0);
+            set_int(sbvis_v, 0);
+            set_int(sbalways_v, 0);
+            set_int(sbalways_h, 0);
+            set_int(sbvis_timer, 0);
+            emit("reload", "elm");
+         }
+      }
+      program { name: "vbar_show";
+         signal: "elm,action,show,vbar";
+         source: "elm";
+         action: STATE_SET "default" 0.0;
+         target: "sb_vbar_clip_master";
+      }
+      program { name: "vbar_hide";
+         signal: "elm,action,hide,vbar";
+         source: "elm";
+         action: STATE_SET "hidden" 0.0;
+         target: "sb_vbar_clip_master";
+      }
+      program { name: "vbar_show_always";
+         signal: "elm,action,show_always,vbar";
+         source: "elm";
+         script {
+            new v;
+            v = get_int(sbalways_v);
+            if (!v) {
+               set_int(sbalways_v, 1);
+               v = get_int(sbvis_v);
+               if (!v) {
+                  emit("do-show-vbar", "");
+                  set_int(sbvis_v, 1);
+               }
+            }
+         }
+      }
+      program { name: "vbar_show_notalways";
+         signal: "elm,action,show_notalways,vbar";
+         source: "elm";
+         script {
+            new v;
+            v = get_int(sbalways_v);
+            if (v) {
+               set_int(sbalways_v, 0);
+               v = get_int(sbvis_v);
+               if (!v) {
+                  emit("do-hide-vbar", "");
+                  set_int(sbvis_v, 0);
+               }
+            }
+         }
+      }
+      program { name: "vbar_press";
+         signal: "mouse,down,1";
+         source: "elm.dragable.vbar";
+         action:  SIGNAL_EMIT "elm,vbar,press" "elm";
+      }
+      program { name: "vbar_unpress";
+         signal: "mouse,up,1";
+         source: "elm.dragable.vbar";
+         action:  SIGNAL_EMIT "elm,vbar,unpress" "elm";
+      }
+      program { name: "sb_vbar_show";
+         signal: "do-show-vbar";
+         source: "";
+         action: STATE_SET "default" 0.0;
+         transition: LINEAR 0.5;
+         target: "sb_vbar_clip";
+      }
+      program { name: "sb_vbar_hide";
+         signal: "do-hide-vbar";
+         source: "";
+         action: STATE_SET "hidden" 0.0;
+         transition: LINEAR 0.5;
+         target: "sb_vbar_clip";
+      }
+      program { name: "hbar_show";
+         signal: "elm,action,show,hbar";
+         source: "elm";
+         action: STATE_SET "default" 0.0;
+         target: "sb_hbar_clip_master";
+      }
+      program { name: "hbar_hide";
+         signal: "elm,action,hide,hbar";
+         source: "elm";
+         action:  STATE_SET "hidden" 0.0;
+         target: "sb_hbar_clip_master";
+      }
+      program { name: "hbar_show_always";
+         signal: "elm,action,show_always,hbar";
+         source: "elm";
+         script {
+            new v;
+            v = get_int(sbalways_h);
+            if (!v) {
+               set_int(sbalways_h, 1);
+               v = get_int(sbvis_h);
+               if (!v) {
+                  emit("do-show-hbar", "");
+                  set_int(sbvis_h, 1);
+               }
+            }
+         }
+      }
+      program { name: "hbar_show_notalways";
+         signal: "elm,action,show_notalways,hbar";
+         source: "elm";
+         script {
+            new v;
+            v = get_int(sbalways_h);
+            if (v) {
+               set_int(sbalways_h, 0);
+               v = get_int(sbvis_h);
+               if (!v) {
+                  emit("do-hide-hbar", "");
+                  set_int(sbvis_h, 0);
+               }
+            }
+         }
+      }
+      program { name: "hbar_press";
+         signal: "mouse,down,1";
+         source: "elm.dragable.hbar";
+         action:  SIGNAL_EMIT "elm,hbar,press" "elm";
+      }
+      program { name: "hbar_unpress";
+         signal: "mouse,up,1";
+         source: "elm.dragable.hbar";
+         action:  SIGNAL_EMIT "elm,hbar,unpress" "elm";
+      }
+      program { name: "sb_hbar_show";
+         signal: "do-show-hbar";
+         source: "";
+         action: STATE_SET "default" 0.0;
+         transition: LINEAR 0.5;
+         target: "sb_hbar_clip";
+      }
+      program { name: "sb_hbar_hide";
+         signal: "do-hide-hbar";
+         source: "";
+         action: STATE_SET "hidden" 0.0;
+         transition: LINEAR 0.5;
+         target: "sb_hbar_clip";
+      }
+
+      program { name: "scroll";
+         signal: "elm,action,scroll";
+         source: "elm";
+         script {
+            new v;
+            v = get_int(sbvis_v);
+            v |= get_int(sbalways_v);
+            if (!v) {
+               emit("do-show-vbar", "");
+               set_int(sbvis_v, 1);
+            }
+            v = get_int(sbvis_h);
+            v |= get_int(sbalways_h);
+            if (!v) {
+               emit("do-show-hbar", "");
+               set_int(sbvis_h, 1);
+            }
+            v = get_int(sbvis_timer);
+            if (v > 0) cancel_timer(v);
+            v = timer(1.0, "timer0", 0);
+            set_int(sbvis_timer, v);
+         }
+      }
+      program { name: "disable";
+         signal: "elm,state,disabled";
+         source: "elm";
+         action: STATE_SET "disabled" 0.0;
+         target: "disabler";
+      }
+      program { name: "enable";
+         signal: "elm,state,enabled";
+         source: "elm";
+         action: STATE_SET "default" 0.0;
+         target: "disabler";
+      }
+      program { name: "show";
+         signal: "show";
+         source: "";
+         script {
+            new v;
+            emit("do-show-vbar", "");
+            set_int(sbvis_v, 1);
+            v = get_int(sbalways_v);
+            if (!v) {
+              v = get_int(sbvis_timer);
+              if (v > 0) cancel_timer(v);
+              v = timer(1.0, "timer0", 0);
+              set_int(sbvis_timer, v);
+            }
+            emit("do-show-hbar", "");
+            set_int(sbvis_h, 1);
+            v = get_int(sbalways_h);
+            if (!v) {
+              v = get_int(sbvis_timer);
+              if (v > 0) cancel_timer(v);
+              v = timer(1.0, "timer0", 0);
+              set_int(sbvis_timer, v);
+            }
+         }
+      }
+   }
+}
+
+group { name: "elm/scroller/base/list_effect";
+   alias: "elm/genlist/base/default";
+   alias: "elm/genscroller/base/default";
+   alias: "elm/list/base/default";
+   inherit: "elm/scroller/base/default";
+
+   images {
+      OVERSCROLL_EFFECT_IMAGES
+   }
+
+   parts {
+      part { name: "shadow_left";
+         type: IMAGE;
+         scale: 1;
+         mouse_events: 0;
+         description { state: "default" 0.0;
+            min: 58 0;
+            fixed: 1 1;
+            align: 0.0 0.5;
+            rel1.relative: 0.0 0.0;
+            rel2.relative: 0.0 1.0;
+            rel1.to: "bg";
+            rel2.to: "bg";
+            rel1.offset: 0 0;
+            rel2.offset: -1 -1;
+            visible: 0;
+            image {
+               normal: "bouncing_left_00.png";
+            }
+         }
+         OVERSCROLL_EFFECT_DESCRIPTIONS("left")
+         description { state: "hidden" 0.0;
+            visible: 0;
+            color: 255 255 255 0;
+         }
+      }
+      part { name: "shadow_right";
+         type: IMAGE;
+         scale: 1;
+         mouse_events: 0;
+         description { state: "default" 0.0;
+            min: 58 0;
+            fixed: 1 1;
+            align: 1.0 0.5;
+            rel1.relative: 1.0 0.0;
+            rel2.relative: 1.0 1.0;
+            rel1.to: "bg";
+            rel2.to: "bg";
+            rel1.offset: 0 0;
+            rel2.offset: -1 -1;
+            visible: 0;
+            image {
+               normal: "bouncing_right_00.png";
+            }
+         }
+         OVERSCROLL_EFFECT_DESCRIPTIONS("right")
+         description { state: "hidden" 0.0;
+            visible: 0;
+            color: 255 255 255 0;
+         }
+      }
+      part { name: "padding_jump_to_top";
+         type: SPACER;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: BUTTON_JUMP_TOP_PADDING_TO_SCROLLER_MIN_MAX_INC;
+            max: BUTTON_JUMP_TOP_PADDING_TO_SCROLLER_MIN_MAX_INC;
+            rel1.relative: 1.0 0.0;
+            rel2.relative: 1.0 0.0;
+            rel1.to: "bg";
+            rel2.to: "bg";
+            fixed: 1 1;
+            align: 1.0 0.0;
+         }
+      }
+      part { name: "elm.swallow.jump_to_top";
+         type: SWALLOW;
+         scale: 1;
+         description { state: "default" 0.0;
+            rel1 {
+               to: "padding_jump_to_top";
+               relative: 0.0 1.0;
+            }
+            rel2 {
+               to: "padding_jump_to_top";
+               relative: 0.0 1.0;
+            }
+            fixed: 1 1;
+            align: 1.0 0.0;
+         }
+      }
+      part { name: "padding_jump_to_left";
+         type: SPACER;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: BUTTON_JUMP_LEFT_PADDING_TO_SCROLLER_MIN_MAX_INC;
+            max: BUTTON_JUMP_LEFT_PADDING_TO_SCROLLER_MIN_MAX_INC;
+            rel1.relative: 0.0 1.0;
+            rel2.relative: 0.0 1.0;
+            rel1.to: "bg";
+            rel2.to: "bg";
+            fixed: 1 1;
+            align: 0.0 1.0;
+         }
+      }
+      part { name: "elm.swallow.jump_to_left";
+         type: SWALLOW;
+         scale: 1;
+         description { state: "default" 0.0;
+            rel1 {
+               to: "padding_jump_to_left";
+               relative: 1.0 0.0;
+            }
+            rel2 {
+               to: "padding_jump_to_left";
+               relative: 1.0 0.0;
+            }
+            fixed: 1 1;
+            align: 0.0 1.0;
+         }
+      }
+      part { name: "event";
+         type: RECT;
+         mouse_events: 1;
+         repeat_events: 1;
+         description { state: "default" 0.0;
+            color: 0 0 0 0;
+         }
+      }
+   }
+   programs {
+      program { name: "load";
+         script {
+            set_state(PART:"sb_hbar_clip", "hidden", 0.0);
+            set_state(PART:"sb_vbar_clip", "hidden", 0.0);
+            set_state(PART:"shadow_left", "hidden", 0.0);
+            set_state(PART:"shadow_right", "hidden", 0.0);
+            set_int(sbvis_h, 0);
+            set_int(sbvis_v, 0);
+            set_int(sbalways_v, 0);
+            set_int(sbalways_h, 0);
+            set_int(sbvis_timer, 0);
+            set_int(sh_v, 0);
+            emit("reload", "elm");
+         }
+      }
+      program { name: "scroll";
+         signal: "elm,action,scroll";
+         source: "elm";
+         script {
+            new v;
+            v = get_int(sbvis_v);
+            v |= get_int(sbalways_v);
+            if (!v) {
+               emit("do-show-vbar", "");
+               set_int(sbvis_v, 1);
+            }
+            v = get_int(sbvis_h);
+            v |= get_int(sbalways_h);
+            if (!v) {
+               emit("do-show-hbar", "");
+               set_int(sbvis_h, 1);
+            }
+            v = get_int(sbvis_timer);
+            if (v > 0) cancel_timer(v);
+            v = timer(1, "timer0", 0);
+            set_int(sbvis_timer, v);
+         }
+      }
+      OVERSCROLL_EFFECT_FUNCTION("left", "shadow_left")
+      OVERSCROLL_EFFECT_FUNCTION("right", "shadow_right")
+      program { name: "content_move";
+         signal: "elm,state,mouse,move";
+         source: "elm";
+         script {
+              set_int(mouse_down, 1);
+            }
+      }
+      program { name: "content_press";
+         signal: "elm,state,mouse,down";
+         source: "elm";
+         script {
+              set_int(mouse_down, 1);
+            }
+      }
+      program { name: "content_unpress";
+         signal: "elm,state,mouse,up";
+         source: "elm";
+         script {
+              set_int(mouse_down, 0);
+              set_int(effect_hold, 0);
+         }
+      }
+   }
+}
+
+
+
diff --git a/2.2/po/CMakeLists.txt b/2.2/po/CMakeLists.txt
new file mode 100755 (executable)
index 0000000..45a9c01
--- /dev/null
@@ -0,0 +1,68 @@
+# for i18n
+
+SET(POFILES
+       az.po
+       bg.po
+       ca.po
+       cs.po
+       da.po
+       de.po
+       el_GR.po
+       en.po
+       en_US.po
+       es_ES.po
+       es_US.po
+       et.po
+       eu.po
+       fi.po
+       fr_CA.po
+       fr.po
+       gl.po
+       hr.po
+       hu.po
+       hy.po
+       is.po
+       it_IT.po
+       ka.po
+       kk.po
+       ko_KR.po
+       lt.po
+       lv.po
+       mn_MN.po
+       nb.po
+       nl.po
+       pl.po
+       pt_BR.po
+       pt_PT.po
+       ro.po
+       ru_RU.po
+       sk.po
+       sl.po
+       sr.po
+       sv.po
+       tr_TR.po
+       uk.po
+       uz.po
+)
+
+SET(MSGFMT "/usr/bin/msgfmt")
+
+FOREACH(pofile ${POFILES})
+       SET(pofile ${CMAKE_CURRENT_SOURCE_DIR}/${pofile})
+       MESSAGE(STATUS "  ${pofile}")
+       GET_FILENAME_COMPONENT(absPofile ${pofile} ABSOLUTE)
+       GET_FILENAME_COMPONENT(lang ${absPofile} NAME_WE)
+       SET(moFile ${CMAKE_CURRENT_BINARY_DIR}/${lang}.mo)
+       ADD_CUSTOM_COMMAND(
+                       OUTPUT ${moFile}
+                       COMMAND ${MSGFMT} -o ${moFile} ${absPofile}
+                       DEPENDS ${absPofile}
+       )
+
+       INSTALL(FILES ${moFile}
+                       DESTINATION ${LOCALEDIR}/${lang}/LC_MESSAGES RENAME CBHM.mo)
+       SET(moFiles ${moFiles} ${moFile})
+ENDFOREACH(pofile)
+
+MESSAGE(".mo files: ${moFiles}")
+ADD_CUSTOM_TARGET(po ALL DEPENDS ${moFiles})
diff --git a/2.2/po/az.po b/2.2/po/az.po
new file mode 100644 (file)
index 0000000..d3a4fba
--- /dev/null
@@ -0,0 +1,39 @@
+msgid "IDS_COM_BODY_DONE"
+msgstr "Yerinə yetirildi"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Bağla"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Sil"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Hamısı silindi"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "Mübadilə buferinə köçürüldü."
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Mübadilə buferi"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Ləğv et"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Artıq mövcuddur."
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Hamısı silinsin?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Mübadilə buferindən sil"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Mübadilə buferinə bərkit"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Mübadilə buferindən çıxart"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Mübadilə buferi seçimləri"
+
diff --git a/2.2/po/bg.po b/2.2/po/bg.po
new file mode 100644 (file)
index 0000000..97cdc2f
--- /dev/null
@@ -0,0 +1,39 @@
+msgid "IDS_COM_BODY_DONE"
+msgstr "Готово"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Затваряне"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Изтриване"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Изтриване на всички"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "Копирано в системния буфер."
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Системен буфер"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Отказ"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Вече съществува."
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Изтриване на всички?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Изтриване от системния буфер"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Заключване в клипборда"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Отключване от клипборда"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Опции за системния буфер"
+
diff --git a/2.2/po/ca.po b/2.2/po/ca.po
new file mode 100644 (file)
index 0000000..59b0f37
--- /dev/null
@@ -0,0 +1,39 @@
+msgid "IDS_COM_BODY_DONE"
+msgstr "Finalitzat"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Tancar"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Esborra"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Esborra tot"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "S'ha copiat al porta-retalls"
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Porta-retalls"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Cancel·la"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Ja existeix"
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Esborrar-ho tot?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Esborrar del porta-retalls"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Bloquejar al porta-retalls"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Desbloquejar del porta-retalls"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Opcions del porta-retalls"
+
diff --git a/2.2/po/cs.po b/2.2/po/cs.po
new file mode 100644 (file)
index 0000000..13b8dab
--- /dev/null
@@ -0,0 +1,39 @@
+msgid "IDS_COM_BODY_DONE"
+msgstr "Hotovo"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Zavřít"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Odstranit"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Odstranit vše"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "Zkopírováno do schránky."
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Schránka"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Storno"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Již existuje."
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Odstranit vše?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Odstranit ze schránky"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Zamknout do schránky"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Odemknout ze schránky"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Možnosti schránky"
+
diff --git a/2.2/po/da.po b/2.2/po/da.po
new file mode 100644 (file)
index 0000000..c10397e
--- /dev/null
@@ -0,0 +1,39 @@
+msgid "IDS_COM_BODY_DONE"
+msgstr "Udført"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Luk"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Slet"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Slet alle"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "Kopieret til udklipsholder."
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Udklipsholder"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Annullér"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Findes allerede."
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Slet alle?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Slet fra udklipsholder"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Lås til udklipsholder"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Lås op fra udklipsholder"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Indstillinger for udklipsholder"
+
diff --git a/2.2/po/de.po b/2.2/po/de.po
new file mode 100644 (file)
index 0000000..4a5ea24
--- /dev/null
@@ -0,0 +1,39 @@
+msgid "IDS_COM_BODY_DONE"
+msgstr "OK"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Schließen"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Löschen"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Alle löschen"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "In Zwischenablage kopiert"
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Zwischenablage"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Abbruch"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Bereits vorhanden"
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Alle löschen?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Aus der Zwischenablage löschen"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "In Zwischenablage sperren"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Aus der Zwischenablage löschen"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Zwischenablage-Optionen"
+
diff --git a/2.2/po/el_GR.po b/2.2/po/el_GR.po
new file mode 100644 (file)
index 0000000..c515b8d
--- /dev/null
@@ -0,0 +1,39 @@
+msgid "IDS_COM_BODY_DONE"
+msgstr "Τέλος"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Κλείσιμο"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Διαγραφή"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Διαγραφή όλων"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "Αντιγράφηκε στο πρόχειρο."
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Πρόχειρο"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Ακύρωση"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Υπάρχει ήδη."
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Διαγραφή όλων;"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Διαγραφή από το πρόχειρο"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Κλείδωμα στο πρόχειρο"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Ξεκλείδωμα από το πρόχειρο"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Επιλογές προχείρου"
+
diff --git a/2.2/po/en.po b/2.2/po/en.po
new file mode 100644 (file)
index 0000000..61ea776
--- /dev/null
@@ -0,0 +1,39 @@
+msgid "IDS_COM_BODY_DONE"
+msgstr "Done"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Close"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Delete"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Delete all"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "Copied to clipboard."
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Clipboard"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Cancel"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Already exists."
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Delete all?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Delete from clipboard"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Lock to clipboard"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Unlock from clipboard"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Clipboard options"
+
diff --git a/2.2/po/en_US.po b/2.2/po/en_US.po
new file mode 100644 (file)
index 0000000..61ea776
--- /dev/null
@@ -0,0 +1,39 @@
+msgid "IDS_COM_BODY_DONE"
+msgstr "Done"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Close"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Delete"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Delete all"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "Copied to clipboard."
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Clipboard"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Cancel"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Already exists."
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Delete all?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Delete from clipboard"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Lock to clipboard"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Unlock from clipboard"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Clipboard options"
+
diff --git a/2.2/po/es_ES.po b/2.2/po/es_ES.po
new file mode 100644 (file)
index 0000000..3f0b800
--- /dev/null
@@ -0,0 +1,39 @@
+msgid "IDS_COM_BODY_DONE"
+msgstr "Finalizado"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Cerrar"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Eliminar"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Eliminar todo"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "Copiado al portapapeles"
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Portapapeles"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Cancelar"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Ya existe"
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "¿Eliminar todo?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Eliminar del portapapeles"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Bloquear en el portapapeles"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Desbloquear del portapapeles"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Opciones de portapapeles"
+
diff --git a/2.2/po/es_US.po b/2.2/po/es_US.po
new file mode 100644 (file)
index 0000000..f07ac88
--- /dev/null
@@ -0,0 +1,39 @@
+msgid "IDS_COM_BODY_DONE"
+msgstr "Realizar"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Cerrar"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Eliminar"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Eliminar todo"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "Copiado al portapapeles."
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Portapapeles"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Cancelar"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Ya existe."
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "¿Eliminar todo?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Eliminar del portapapeles"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Bloquear en portapapeles"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Desbloquear desde el portapapeles"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Opciones de portapapeles"
+
diff --git a/2.2/po/et.po b/2.2/po/et.po
new file mode 100644 (file)
index 0000000..afc16d9
--- /dev/null
@@ -0,0 +1,39 @@
+msgid "IDS_COM_BODY_DONE"
+msgstr "Valmis"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Sulge"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Kustuta"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Kustuta kõik"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "Kopeeritud lõikelauale."
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Lõikelaud"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Tühista"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Juba olemas."
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Kustutada kõik?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Kustuta lõikelaualt"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Lukusta lõikelauale"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Ava lõikelaualt"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Lõikelaua valikud"
+
diff --git a/2.2/po/eu.po b/2.2/po/eu.po
new file mode 100644 (file)
index 0000000..0bb807f
--- /dev/null
@@ -0,0 +1,39 @@
+msgid "IDS_COM_BODY_DONE"
+msgstr "Amaituta"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Itxi"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Ezabatu"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Dena(k) ezabatu"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "Arbelera kopiatu da"
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Arbela"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Ezeztatu"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Dagoeneko badago"
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Dena ezabatu?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Arbeletik ezabatu"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Blokeatu arbelean"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Desblokeatu arbeletik"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Arbelaren aukerak"
+
diff --git a/2.2/po/fi.po b/2.2/po/fi.po
new file mode 100644 (file)
index 0000000..6406e4c
--- /dev/null
@@ -0,0 +1,39 @@
+msgid "IDS_COM_BODY_DONE"
+msgstr "Valmis"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Sulje"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Poista"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Poista kaikki"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "Kopioitu leikepöydälle."
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Leikepöytä"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Peruuta"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "On jo olemassa."
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Poistetaanko kaikki?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Poista leikepöydältä"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Lukitse leikepöydälle"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Poista lukitus leikepöydältä"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Leikepöydän asetukset"
+
diff --git a/2.2/po/fr.po b/2.2/po/fr.po
new file mode 100644 (file)
index 0000000..8043350
--- /dev/null
@@ -0,0 +1,39 @@
+msgid "IDS_COM_BODY_DONE"
+msgstr "Effectué"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Fermer"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Supprimer"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Tout supprimer"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "Copié dans le Presse-papier"
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Presse-papier"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Annuler"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Existe déjà"
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Tout supprimer ?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Supprimer du Presse-papier"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Verrouiller dans le Presse-papier"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Déverrouiller du Presse-papier"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Options du Presse-papier"
+
diff --git a/2.2/po/fr_CA.po b/2.2/po/fr_CA.po
new file mode 100644 (file)
index 0000000..e7ac328
--- /dev/null
@@ -0,0 +1,39 @@
+msgid "IDS_COM_BODY_DONE"
+msgstr "OK"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Fermer"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Supprimer"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Tout supprimer"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "Copié dans le presse-papier"
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Presse-papier"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Annuler"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Existe déjà."
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Tout supprimer ?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Supprimer du presse-papier"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Verrouiller dans le presse-papier"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Déverrouiller du presse-papier"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Options du presse-papier"
+
diff --git a/2.2/po/gl.po b/2.2/po/gl.po
new file mode 100644 (file)
index 0000000..1246ae6
--- /dev/null
@@ -0,0 +1,39 @@
+msgid "IDS_COM_BODY_DONE"
+msgstr "Finalizado"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Pechar"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Eliminar"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Eliminar todo"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "Copiado no portapapeis"
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Portapapeis"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Cancelar"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Xa existe"
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Eliminar todo?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Eliminar do portapapeis"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Bloquear no portapapeis"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Desbloquear do portapapeis"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Opcións de portapapeis"
+
diff --git a/2.2/po/hr.po b/2.2/po/hr.po
new file mode 100644 (file)
index 0000000..0807e6e
--- /dev/null
@@ -0,0 +1,39 @@
+msgid "IDS_COM_BODY_DONE"
+msgstr "OK"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Prekid"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Obriši"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Obriši sve"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "Kopirano u međuspremnik."
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Međuspremnik"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Prekid"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Već postoji."
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Obrisati sve?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Obrisati iz međuspremnika"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Zaključaj na međuspremnik"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Otključaj iz međuspremnika"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Opcije međuspremnika"
+
diff --git a/2.2/po/hu.po b/2.2/po/hu.po
new file mode 100644 (file)
index 0000000..1a4057f
--- /dev/null
@@ -0,0 +1,39 @@
+msgid "IDS_COM_BODY_DONE"
+msgstr "Kész"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Bezárás"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Töröl"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Összes törlése"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "A vágólapra másolva."
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Vágólap"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Mégse"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Már létezik."
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Törli az összeset?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Törlés a vágólapról"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Rögzítés a vágólapon"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Leoldás a vágólapról"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Vágólap opciói"
+
diff --git a/2.2/po/hy.po b/2.2/po/hy.po
new file mode 100644 (file)
index 0000000..39f20c2
--- /dev/null
@@ -0,0 +1,39 @@
+msgid "IDS_COM_BODY_DONE"
+msgstr "Կատարված է"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Փակել"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Ջնջել"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Ջնջել բոլորը"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "Պատճենվել է գզրոցի մեջ:"
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Գզրոց"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Չեղարկել"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Արդեն գոյություն ունի:"
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Ջնջե՞լ բոլորը"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Վերացնել գզրոցից"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Կողպել գզրոցում"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Արգելաբացել գզրոցից"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Գզրոցի ընտրանքներ"
+
diff --git a/2.2/po/is.po b/2.2/po/is.po
new file mode 100644 (file)
index 0000000..ce4a58a
--- /dev/null
@@ -0,0 +1,39 @@
+msgid "IDS_COM_BODY_DONE"
+msgstr "Lokið"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Loka"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Eyða"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Eyða öllu"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "Afritað á klemmuspjald."
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Klippiborð"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Hætta v."
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Er þegar til."
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Eyða öllu?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Eyða af klippiborði"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Læsa á klemmuspjald"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Opna af klippiborði"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Valkostir klemmuspjalds"
+
diff --git a/2.2/po/it_IT.po b/2.2/po/it_IT.po
new file mode 100644 (file)
index 0000000..b7d9da3
--- /dev/null
@@ -0,0 +1,39 @@
+msgid "IDS_COM_BODY_DONE"
+msgstr "Fatto"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Chiudi"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Elimina"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Elimina tutto"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "Elemento copiato negli appunti"
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Appunti"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Annulla"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Già esiste."
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Eliminare tutto?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Eliminare dagli appunti"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Blocca negli appunti"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Sblocca dagli appunti"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Opzioni appunti"
+
diff --git a/2.2/po/ka.po b/2.2/po/ka.po
new file mode 100644 (file)
index 0000000..55d3dab
--- /dev/null
@@ -0,0 +1,39 @@
+msgid "IDS_COM_BODY_DONE"
+msgstr "შესრულებულია"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "დახურვა"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "წაშლა"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "ყველას წაშლა"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "ასლი შენახულია ბუფერში."
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "ბუფერული მეხს."
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "გაუქმება"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "უკვე არის."
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "ყველა წაიშალოს?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "ბუფერული მეხსიერებიდან წაშლა"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "ბუფერულ მეხსიერებაში ჩაკეტვა"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "ბუფერული მეხსიერებიდან გახსნა"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "ბუფერული მეხსიერების პარამეტრები"
+
diff --git a/2.2/po/kk.po b/2.2/po/kk.po
new file mode 100644 (file)
index 0000000..9f0e9e3
--- /dev/null
@@ -0,0 +1,39 @@
+msgid "IDS_COM_BODY_DONE"
+msgstr "Аяқталды"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Жабу"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Жою"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Барлық жойылды"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "Буферге көшірілді."
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Буфер"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Тоқтату"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Қолданыста бар."
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Бәрін жоясыз ба?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Буферден жою"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Буферге құлыптау"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Буфер құлпынан шешу"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Буфер параметрлері"
+
diff --git a/2.2/po/ko_KR.po b/2.2/po/ko_KR.po
new file mode 100644 (file)
index 0000000..c230c2a
--- /dev/null
@@ -0,0 +1,39 @@
+msgid "IDS_COM_BODY_DONE"
+msgstr "완료"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "종료"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "삭제"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "모두 삭제"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "클립보드에 복사하였습니다."
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "클립보드"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "취소"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "동일한 항목이 있습니다."
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "모두 삭제할까요?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "클립보드에서 삭제"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "클립보드에서 잠금"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "클립보드에서 잠금해제"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "클립보드 옵션"
+
diff --git a/2.2/po/lt.po b/2.2/po/lt.po
new file mode 100644 (file)
index 0000000..dd3dcc1
--- /dev/null
@@ -0,0 +1,39 @@
+msgid "IDS_COM_BODY_DONE"
+msgstr "Atlikta"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Uždaryti"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Trinti"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Trinti viską"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "Nukopijuota į iškarpinę."
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Iškarpinė"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Atšaukti"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Jau yra."
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Ar trinti viską?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Trinti iš iškarpinės"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Užrakinti iškarpinėje"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Atrakinti iš iškarpinės"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Iškarpinės parinktys"
+
diff --git a/2.2/po/lv.po b/2.2/po/lv.po
new file mode 100644 (file)
index 0000000..5576ae5
--- /dev/null
@@ -0,0 +1,39 @@
+msgid "IDS_COM_BODY_DONE"
+msgstr "Gatavs"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Aizvērt"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Dzēst"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Dzēst visu"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "Kopēts starpliktuvē."
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Starpliktuve"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Atcelt"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Jau pastāv."
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Vai dzēst visu?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Dzēst no starpliktuves"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Bloķēt starpliktuvē"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Atbloķēt no starpliktuves"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Starpliktuves iespējas"
+
diff --git a/2.2/po/mn_MN.po b/2.2/po/mn_MN.po
new file mode 100644 (file)
index 0000000..a5ad401
--- /dev/null
@@ -0,0 +1,39 @@
+msgid "IDS_COM_BODY_DONE"
+msgstr "Дууслаа"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Хаах"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Устгах"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Бүгдийг устгах"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "Түр санах ой руу хуулсан"
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Түр санах ой"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Цуцлах"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Хэдийн оршиж байна"
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Бүгдийг устгах уу?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Түр санах ойноос устгах"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Түр санах ой руу түгжих"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Түр санах ойгоос нээх"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Түр санах ойн сонголтууд"
+
diff --git a/2.2/po/nb.po b/2.2/po/nb.po
new file mode 100644 (file)
index 0000000..94b66ba
--- /dev/null
@@ -0,0 +1,39 @@
+msgid "IDS_COM_BODY_DONE"
+msgstr "Utført"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Lukk"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Slett"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Slett alle"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "Kopiert til utklippstavle."
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Utklippstavle"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Avbryt"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Finnes allerede."
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Slette alle?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Slette fra utklippstavle"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Lås til utklippstavle"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Lås opp fra utklippstavle"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Alternativer for utklippstavle"
+
diff --git a/2.2/po/nl.po b/2.2/po/nl.po
new file mode 100644 (file)
index 0000000..ecd7bf4
--- /dev/null
@@ -0,0 +1,39 @@
+msgid "IDS_COM_BODY_DONE"
+msgstr "Gereed"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Sluiten"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Verwijderen"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Alles verwijderen"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "Gekopieerd naar klembord."
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Klembord"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Annuleer"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Bestaat al."
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Alles verwijderen?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Verwijderen van klembord"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Vergrendelen op klembord"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Ontgrendelen van klembord"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Klembordopties"
+
diff --git a/2.2/po/pl.po b/2.2/po/pl.po
new file mode 100644 (file)
index 0000000..f8919d6
--- /dev/null
@@ -0,0 +1,39 @@
+msgid "IDS_COM_BODY_DONE"
+msgstr "Gotowe"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Zamknij"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Usuń"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Usuń wszystko"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "Skopiowane do schowka."
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Schowek"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Anuluj"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Już istnieje."
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Usunąć wszystko?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Usuń ze schowka"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Zablokuj do schowka"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Odblokuj ze schowka"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Opcje schowka"
+
diff --git a/2.2/po/pt_BR.po b/2.2/po/pt_BR.po
new file mode 100644 (file)
index 0000000..d87af18
--- /dev/null
@@ -0,0 +1,39 @@
+msgid "IDS_COM_BODY_DONE"
+msgstr "Concluído"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Fechar"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Excluir"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Apagar tudo"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "Copiado para a área de transferência."
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Área de transferência"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Cancelar"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Já existe."
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Apagar tudo?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Apagar da área de transferência"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Bloquear na área de transferência"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Desbloquear da área de transferência"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Opções de área de transferência"
+
diff --git a/2.2/po/pt_PT.po b/2.2/po/pt_PT.po
new file mode 100644 (file)
index 0000000..621e275
--- /dev/null
@@ -0,0 +1,39 @@
+msgid "IDS_COM_BODY_DONE"
+msgstr "Concluído"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Fechar"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Eliminar"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Eliminar tudo"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "Copiado para a área de transferência."
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Área transferência"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Cancelar"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Já existe."
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Eliminar tudo?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Eliminar da área de transferência"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Bloquear na área de transferência"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Desbloquear na área de transferência"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Opções de área de transferência"
+
diff --git a/2.2/po/ro.po b/2.2/po/ro.po
new file mode 100644 (file)
index 0000000..279c862
--- /dev/null
@@ -0,0 +1,39 @@
+msgid "IDS_COM_BODY_DONE"
+msgstr "Efectuat"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Închidere"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Ştergere"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Ştergere toate"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "Copiat în clipboard"
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Clipboard"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Anulare"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Există deja."
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Ştergeţi tot?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Ştergere din clipboard"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Blocare în clipboard"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Deblocare din clipboard"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Opţiuni clipboard"
+
diff --git a/2.2/po/ru_RU.po b/2.2/po/ru_RU.po
new file mode 100644 (file)
index 0000000..b8f0f09
--- /dev/null
@@ -0,0 +1,39 @@
+msgid "IDS_COM_BODY_DONE"
+msgstr "Готово"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Закрыть"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Удалить"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Удалить все"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "Скопировано в буфер обмена."
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Буфер обмена"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Отмена"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Уже существует."
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Удалить все?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Удалить из буфера обмена"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Заблокировать в буфере обмена"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Разблокировать"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Параметры буфера обмена"
+
diff --git a/2.2/po/sk.po b/2.2/po/sk.po
new file mode 100644 (file)
index 0000000..0a028a9
--- /dev/null
@@ -0,0 +1,39 @@
+msgid "IDS_COM_BODY_DONE"
+msgstr "Hotovo"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Zavrieť"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Odstrániť"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Odstrániť všetko"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "Skopírované do schránky."
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Schránka"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Zrušiť"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Už existuje."
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Odstrániť všetko?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Odstrániť zo schránky"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Zamknúť k schránke"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Odomknúť od schránky"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Možnosti schránky"
+
diff --git a/2.2/po/sl.po b/2.2/po/sl.po
new file mode 100644 (file)
index 0000000..e890051
--- /dev/null
@@ -0,0 +1,39 @@
+msgid "IDS_COM_BODY_DONE"
+msgstr "Končano"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Zapri"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Izbriši"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Izbriši vse"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "Kopirano v odložišče."
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Odložišče"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Prekliči"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Že obstaja."
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Brišem vse?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Izbriši iz odložišča"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Zakleni v odložišče"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Odkleni iz odložišča"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Možnosti odložišča"
+
diff --git a/2.2/po/sr.po b/2.2/po/sr.po
new file mode 100644 (file)
index 0000000..5e6ad78
--- /dev/null
@@ -0,0 +1,39 @@
+msgid "IDS_COM_BODY_DONE"
+msgstr "Gotovo"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Zatvori"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Izbriši"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Obriši sve"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "Iskopirano u privremenu memoriju."
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Privremena memorija"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Otkaži"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Već postoji."
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Obriši sve?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Izbriši iz privremene memorije"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Zaključaj u privremenu memoriju"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Otključaj iz privremene memorije"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Opcije privremene memorije"
+
diff --git a/2.2/po/sv.po b/2.2/po/sv.po
new file mode 100644 (file)
index 0000000..8ca6c76
--- /dev/null
@@ -0,0 +1,39 @@
+msgid "IDS_COM_BODY_DONE"
+msgstr "Klar"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Stäng"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Ta bort"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Ta bort alla"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "Kopierat till Urklipp."
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Urklipp"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Avbryt"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Finns redan."
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Radera alla?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Ta bort från urklipp"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Lås till Urklipp"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Lås upp från Urklipp"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Urklippsalternativ"
+
diff --git a/2.2/po/tr_TR.po b/2.2/po/tr_TR.po
new file mode 100644 (file)
index 0000000..8c5ef17
--- /dev/null
@@ -0,0 +1,39 @@
+msgid "IDS_COM_BODY_DONE"
+msgstr "Tamamlandı"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Kapat"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Sil"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Tümünü sil"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "Panoya kopyalandı."
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Pano"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "İptal"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Zaten var."
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Tümü silinsin mi?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Panodan sil"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Panoya kilitle"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Panodan kaldır"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Pano seçenekleri"
+
diff --git a/2.2/po/uk.po b/2.2/po/uk.po
new file mode 100644 (file)
index 0000000..ffdb7b8
--- /dev/null
@@ -0,0 +1,39 @@
+msgid "IDS_COM_BODY_DONE"
+msgstr "Готово"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Закрити"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "Видалити"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Видалити всі"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "Скопійовано в буфер обміну."
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Буфер обміну"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Скасувати"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Вже існує."
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Видалити всі?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Видалити з буфера обміну"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Заблокувати в буфері обміну"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Розблокувати в буфері обміну"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Опції буфера обміну"
+
diff --git a/2.2/po/uz.po b/2.2/po/uz.po
new file mode 100644 (file)
index 0000000..59b8a43
--- /dev/null
@@ -0,0 +1,39 @@
+msgid "IDS_COM_BODY_DONE"
+msgstr "Bajarildi"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "Yopish"
+
+msgid "IDS_COM_BODY_DELETE"
+msgstr "O'chirish"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "Barchasi o'chirish"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "Buferga nusxa olindi."
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "Bufer"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "Bekor q."
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "Avvaldan mavjud."
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "Barchasi o'chirilsinmi?"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "Buferdan olib tashlash"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "Buferga bloklash"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "Buferdan blokdan chiqarish"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "Bufer opsiyalari"
+
diff --git a/2.2/src/cbhm.h b/2.2/src/cbhm.h
new file mode 100644 (file)
index 0000000..01afe89
--- /dev/null
@@ -0,0 +1,114 @@
+/*
+ * 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 _CBHM_H_
+#define _CBHM_H_
+
+#include <Elementary.h>
+#include <Ecore_X.h>
+
+#if !defined(PACKAGE)
+#  define PACKAGE "CBHM"
+#endif
+
+#if !defined(APPNAME)
+#  define APPNAME "Clipboard History Manager"
+#endif
+
+#if !defined(LOCALEDIR)
+#  define LOCALEDIR "/usr/share/locale"
+#endif
+
+#define CBHM_MAGIC 0xad960009
+
+typedef struct _TargetHandler TargetHandler;
+typedef struct _AppData AppData;
+typedef struct _ClipdrawerData ClipdrawerData;
+typedef struct _CNP_ITEM CNP_ITEM;
+typedef struct _XHandlerData XHandlerData;
+typedef struct _StorageData StorageData;
+typedef char *(*text_converter_func)(AppData *ad, int type_index, const char *str);
+
+#define ITEM_CNT_MAX 20
+#define COPIED_DATA_STORAGE_DIR "/opt/var/.cbhm_files"
+
+#include "clipdrawer.h"
+#include "item_manager.h"
+#include "xhandler.h"
+#include "xconverter.h"
+#include "storage.h"
+
+struct _TargetHandler {
+       Ecore_X_Atom *atom;
+       char **name;
+       int atom_cnt;
+       text_converter_func convert_to_entry;
+       text_converter_func convert_to_target[ATOM_INDEX_MAX];
+};
+
+struct _AppData {
+       int magic;
+       Ecore_X_Display *x_disp;
+       Ecore_X_Window x_root_win;
+       Ecore_X_Window x_event_win;
+       Ecore_X_Window x_active_win;
+       Eina_List *item_list;
+
+       Eina_Bool (*draw_item_add)(AppData *ad, CNP_ITEM *item);
+       Eina_Bool (*draw_item_del)(AppData *ad, CNP_ITEM *item);
+       Eina_Bool (*storage_item_add)(AppData *ad, CNP_ITEM *item);
+       Eina_Bool (*storage_item_del)(AppData *ad, CNP_ITEM *item);
+       Eina_Bool (*storage_item_update)(AppData *ad, CNP_ITEM *item);
+       CNP_ITEM *(*storage_item_load)(StorageData *sd, int index);
+
+       ClipdrawerData *clipdrawer;
+       XHandlerData *xhandler;
+       StorageData *storage;
+
+       CNP_ITEM *clip_selected_item;
+       TargetHandler targetAtoms[ATOM_INDEX_MAX];
+};
+
+void *d_malloc(const char *func, int line, size_t size);
+void *d_calloc(const char *func, int line, size_t n, size_t size);
+void d_free(const char *func, int line, void *m);
+
+extern int _log_domain;
+#define CRITICAL(...) EINA_LOG_DOM_CRIT(_log_domain, __VA_ARGS__)
+#define ERR(...)      EINA_LOG_DOM_ERR(_log_domain, __VA_ARGS__)
+#define WRN(...)      EINA_LOG_DOM_WARN(_log_domain, __VA_ARGS__)
+#define INF(...)      EINA_LOG_DOM_INFO(_log_domain, __VA_ARGS__)
+#define DBG(...)      EINA_LOG_DOM_DBG(_log_domain, __VA_ARGS__)
+#define CALLED() DBG("called %s, %s", __FILE__, __func__);
+#define MALLOC(size) d_malloc(__func__, __LINE__, size)
+#define CALLOC(n, size) d_calloc(__func__, __LINE__, n, size)
+#define FREE(p) d_free(__func__, __LINE__, p)
+
+// Define memory-safe string functions
+#define SAFE_STRCMP(s1, s2) ((s1 && s2) ? strcmp(s1, s2) : (s1 ? 1 : -1))
+#define SAFE_STRNCMP(s1, s2, n) ((s1 && s2) ? strncmp(s1, s2, n) : (s1 ? 1 : -1))
+#define SAFE_STRDUP(s) (s ? strdup(s) : NULL)
+#define SAFE_STRNDUP(s, n) (s ? strndup(s, n) : NULL)
+#define SAFE_STRCPY(dest, src) (src ? strcpy(dest, src) : NULL)
+#define SAFE_STRNCPY(dest, src, n) (src ? strncpy(dest, src, n) : NULL)
+#define SAFE_STRCAT(dest, src) ((dest && src) ? strcat(dest, src) : NULL)
+#define SAFE_STRNCAT(dest, src, n) ((dest && src) ? strncat(dest, src, n) : NULL)
+#define SAFE_STRCHR(s, c) (s ? strchr(s, c) : NULL)
+#define SAFE_STRSTR(haystack, needle) (haystack ? strstr(haystack, needle) : NULL)
+#define SAFE_STRLEN(s) (s ? strlen(s) : 0)
+
+#endif // _CBHM_H_
diff --git a/2.2/src/clipdrawer.c b/2.2/src/clipdrawer.c
new file mode 100644 (file)
index 0000000..1e7c192
--- /dev/null
@@ -0,0 +1,1386 @@
+/*
+ * 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.
+ *
+ */
+
+#include <utilX.h>
+#include "clipdrawer.h"
+#include "item_manager.h"
+#include "xconverter.h"
+
+#define EDJ_PATH "/usr/share/edje"
+#define APP_EDJ_FILE EDJ_PATH"/cbhmdrawer.edj"
+#define GRP_MAIN "cbhmdrawer"
+
+#define ANIM_DURATION 30 // 1 seconds
+#define ANIM_FLOPS (0.5/30)
+#define DEFAULT_WIDTH 720
+#define COMBINED_ITEM_IMAGE_HEIGHT 120
+#define BUFF (int)1024 //limited gengrid text buffer
+
+#define EDJE_CLOSE_PART_PREFIX "background/title/close/bg"
+#define EDJE_DELETE_MODE_PREFIX "background/title/delete/image"
+#define EDJE_DELETE_ALL_BTN_PART_PREFIX "background/title/delete_all/image"
+
+#define TIME_DELAY_LOWER_VIEW 0.1 //Time to delay lower view
+
+static Evas_Object *create_win(ClipdrawerData *cd, const char *name);
+static Evas_Object *_grid_image_content_get(void *data, Evas_Object *obj, const char *part);
+static Evas_Object *_grid_combined_content_get(void *data, Evas_Object *obj, const char *part);
+static char *_grid_text_get(void *data, Evas_Object *obj, const char *part);
+static void _grid_realized(void *data, Evas_Object *obj, void *event_info);
+static void _grid_unrealized(void *data, Evas_Object *obj, void *event_info);
+static void _grid_longpressed(void *data, Evas_Object *obj, void *event_info);
+static Eina_Bool clipdrawer_add_item(AppData *ad, CNP_ITEM *item);
+static Eina_Bool clipdrawer_del_item(AppData *ad, CNP_ITEM *item);
+static void _ok_btn_cb(void *data, Evas_Object *obj, void *event_info);
+static void _cancel_btn_cb(void *data, Evas_Object *obj, void *event_info);
+static void _create_cbhm_popup(AppData *ad, PopupStyle popup_style, Elm_Object_Item *gitem);
+static void clipdrawer_ly_clicked(void *data, Evas_Object *obj, const char *emission, const char *source);
+static void _grid_item_ly_clicked(void *data, Elm_Object_Item *it, const char *emission, const char *source);
+static void setting_win(Ecore_X_Display *x_disp, Ecore_X_Window x_root_win, Ecore_X_Window x_main_win);
+static Ecore_X_Window isf_ise_window_get();
+static void set_transient_for(Ecore_X_Window x_main_win, Ecore_X_Window x_active_win);
+static void unset_transient_for(Ecore_X_Window x_main_win);
+static void set_focus_for_app_window(Ecore_X_Window x_main_win, Eina_Bool enable);
+
+static void _change_gengrid_paste_textonly_mode(ClipdrawerData *cd)
+{
+       CNP_ITEM *item = NULL;
+
+       Elm_Object_Item *gitem = elm_gengrid_first_item_get(cd->gengrid);
+
+       while (gitem)
+       {
+               item = elm_object_item_data_get(gitem);
+               if(!item)
+                       return;
+               if ((item->type_index == ATOM_INDEX_IMAGE))
+               {
+                       if (cd->paste_text_only)
+                               elm_object_item_signal_emit(gitem, "elm,state,show,dim", "elm");
+                       else
+                               elm_object_item_signal_emit(gitem, "elm,state,hide,dim", "elm");
+               }
+               gitem = elm_gengrid_item_next_get(gitem);
+       }
+}
+
+void clipdrawer_paste_textonly_set(AppData *ad, Eina_Bool textonly)
+{
+       ClipdrawerData *cd = ad->clipdrawer;
+       if (cd->paste_text_only != textonly)
+               cd->paste_text_only = textonly;
+       DBG("paste textonly mode = %d", textonly);
+
+       _change_gengrid_paste_textonly_mode(cd);
+}
+
+Eina_Bool clipdrawer_paste_textonly_get(AppData *ad)
+{
+       ClipdrawerData *cd = ad->clipdrawer;
+       return cd->paste_text_only;
+}
+
+static Evas_Object *_load_edj(Evas_Object* win, const char *file, const char *group)
+{
+       Evas_Object *layout = elm_layout_add(win);
+       if (!layout)
+       {
+               ERR("elm_layout_add return NULL");
+               return NULL;
+       }
+
+       if (!elm_layout_file_set(layout, file, group))
+       {
+               ERR("elm_layout_file_set return FALSE");
+               evas_object_del(layout);
+               return NULL;
+       }
+
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_win_resize_object_add(win, layout);
+
+       evas_object_show(layout);
+       return layout;
+}
+
+static Eina_Bool keydown_cb(void *data, int type, void *event)
+{
+       if (!data || !event) return ECORE_CALLBACK_DONE;
+
+       AppData *ad = data;
+       ClipdrawerData *cd = ad->clipdrawer;
+       Ecore_Event_Key *ev = event;
+
+       if (!SAFE_STRCMP(ev->keyname, KEY_END))
+       {
+               if (cd->popup_activate)
+               {
+                       cd->popup_activate = EINA_FALSE;
+                       evas_object_del(cd->popup_conform);
+                       evas_object_del(cd->popup_win);
+               }
+               else if (delete_mode)
+                       _delete_mode_set(ad, EINA_FALSE);
+               else
+                       clipdrawer_lower_view(ad);
+       }
+       else if(!SAFE_STRCMP(ev->keyname, KEY_HOME))
+       {
+               clipdrawer_lower_view(ad);
+               return ECORE_CALLBACK_PASS_ON;
+       }
+
+       return ECORE_CALLBACK_DONE;
+}
+
+// Access type callback for title close button
+static char *
+_title_close_btn_access_type_cb(void *data,
+                                                                                 Evas_Object *obj)
+{
+       AppData *ad = (AppData *)data;
+       if (!ad) return NULL;
+
+       return strdup("Button");
+}
+
+// Access information callback for title close button
+static char *
+_title_close_btn_access_info_cb(void *data,
+                                                                                 Evas_Object *obj)
+{
+       AppData *ad = (AppData *)data;
+       if (!ad) return NULL;
+
+       return strdup(S_CLOSE);
+}
+
+// Access type callback for title delete button
+static char *
+_title_delete_btn_access_type_cb(void *data,
+                                                                                       Evas_Object *obj)
+{
+       AppData *ad = (AppData *)data;
+       if (!ad) return NULL;
+
+       return strdup("Button");
+}
+
+
+// Access information callback for title delete button
+static char *
+_title_delete_btn_access_info_cb(void *data,
+                                                                                       Evas_Object *obj)
+{
+       AppData *ad = (AppData *)data;
+       if (!ad) return NULL;
+
+       if (delete_mode)
+         return strdup(S_DONE);
+       else
+         return strdup(S_DELETE);
+}
+
+// Access type callback for title delete all button
+static char *
+_title_delete_all_btn_access_type_cb(void *data,
+                                                                                                Evas_Object *obj)
+{
+       AppData *ad = (AppData *)data;
+       if (!ad) return NULL;
+
+       return strdup("Button");
+}
+
+// Access information callback for title delete all button
+static char *
+_title_delete_all_btn_access_info_cb(void *data,
+                                                                                                Evas_Object *obj)
+{
+       AppData *ad = (AppData *)data;
+       if (!ad) return NULL;
+
+       return strdup(S_DELETE_ALL);
+}
+
+// Access activate callback for title close button
+static void
+_title_close_btn_access_activate_cb(void *data,
+                                                                                               Evas_Object *obj,
+                                                                                               Elm_Object_Item *item)
+{
+       AppData *ad = (AppData *)data;
+       if (!ad) return;
+
+       clipdrawer_lower_view(ad);
+}
+
+// Access activate callback for title delete button
+static void
+_title_delete_btn_access_activate_cb(void *data,
+                                                                                                Evas_Object *obj,
+                                                                                                Elm_Object_Item *item)
+{
+       AppData *ad = (AppData *)data;
+       if (!ad) return;
+
+       _delete_mode_set(ad, !delete_mode);
+}
+
+// Access activate callback for title delete all button
+static void
+_title_delete_all_btn_access_activate_cb(void *data,
+                                                                                                         Evas_Object *obj,
+                                                                                                         Elm_Object_Item *item)
+{
+       AppData *ad = (AppData *)data;
+       if (!ad) return;
+       ClipdrawerData *cd = ad->clipdrawer;
+
+       if ((item_count_get(ad, ATOM_INDEX_COUNT_ALL) - cd->locked_item_count) != 0)
+               _create_cbhm_popup(ad, DELETE_ALL_POPUP, NULL);
+}
+
+ClipdrawerData* init_clipdrawer(AppData *ad)
+{
+       ClipdrawerData *cd = calloc(1, sizeof(ClipdrawerData));
+       const char *data;
+       Evas_Object *part_obj, *access_obj;
+
+       /* create and setting window */
+       if (!cd)
+               return NULL;
+       if (!(cd->main_win = create_win(cd, APPNAME)))
+       {
+               free(cd);
+               return NULL;
+       }
+       if (!(cd->x_main_win = elm_win_xwindow_get(cd->main_win)))
+       {
+               free(cd);
+               return NULL;
+       }
+
+       setting_win(ad->x_disp, ad->x_root_win, cd->x_main_win);
+
+       /* edj setting */
+       if (!(cd->main_layout = _load_edj(cd->main_win, APP_EDJ_FILE, GRP_MAIN)))
+       {
+               evas_object_del(cd->main_win);
+               free(cd);
+               return NULL;
+       }
+
+       double scale = elm_config_scale_get();
+       Evas_Object* ly = elm_layout_edje_get(cd->main_layout);
+
+       data = edje_object_data_get(ly, "clipboard_height");
+       cd->height = data ? atoi(data) : 0;
+       cd->height *= scale;
+
+       data = edje_object_data_get(ly, "clipboard_landscape_height");
+       cd->landscape_height = data ? atoi(data) : 0;
+       cd->landscape_height *= scale;
+
+       data = edje_object_data_get(ly, "grid_item_bg_w");
+       cd->grid_item_bg_w = data ? atoi(data) : 0;
+       cd->grid_item_bg_w *= scale;
+
+       data = edje_object_data_get(ly, "grid_item_bg_h");
+       cd->grid_item_bg_h = data ? atoi(data) : 0;
+       cd->grid_item_bg_h *= scale;
+
+       data = edje_object_data_get(ly, "grid_image_item_w");
+       cd->grid_image_item_w = data ? atoi(data) : 0;
+       cd->grid_image_item_w *= scale;
+
+       data = edje_object_data_get(ly, "grid_image_item_h");
+       cd->grid_image_item_h = data ? atoi(data) : 0;
+       cd->grid_image_item_h *= scale;
+
+       /* create and setting gengrid */
+       elm_theme_extension_add(NULL, APP_EDJ_FILE);
+       elm_object_signal_callback_add(cd->main_layout,
+                       "mouse,clicked,1", "*", clipdrawer_ly_clicked, ad);
+
+       // Set accessibility function for title close button
+       part_obj = (Evas_Object *)edje_object_part_object_get
+               (elm_layout_edje_get(cd->main_layout), EDJE_CLOSE_PART_PREFIX);
+       access_obj = elm_access_object_register(part_obj, cd->main_layout);
+
+       elm_access_info_cb_set(access_obj, ELM_ACCESS_TYPE, _title_close_btn_access_type_cb, ad);
+       elm_access_info_cb_set(access_obj, ELM_ACCESS_INFO, _title_close_btn_access_info_cb, ad);
+       elm_access_activate_cb_set(access_obj, _title_close_btn_access_activate_cb, ad);
+
+       // Set access function for title delete button
+       part_obj = (Evas_Object *)edje_object_part_object_get
+               (elm_layout_edje_get(cd->main_layout), EDJE_DELETE_MODE_PREFIX);
+       access_obj = elm_access_object_register(part_obj, cd->main_layout);
+
+       elm_access_info_cb_set(access_obj, ELM_ACCESS_TYPE, _title_delete_btn_access_type_cb, ad);
+       elm_access_info_cb_set(access_obj, ELM_ACCESS_INFO, _title_delete_btn_access_info_cb, ad);
+       elm_access_activate_cb_set(access_obj, _title_delete_btn_access_activate_cb, ad);
+
+       // Set access function for title delete all button
+       part_obj = (Evas_Object *)edje_object_part_object_get
+               (elm_layout_edje_get(cd->main_layout), EDJE_DELETE_ALL_BTN_PART_PREFIX);
+       access_obj = elm_access_object_register(part_obj, cd->main_layout);
+
+       elm_access_info_cb_set(access_obj, ELM_ACCESS_TYPE, _title_delete_all_btn_access_type_cb, ad);
+       elm_access_info_cb_set(access_obj, ELM_ACCESS_INFO, _title_delete_all_btn_access_info_cb, ad);
+       elm_access_activate_cb_set(access_obj, _title_delete_all_btn_access_activate_cb, ad);
+
+       cd->gengrid = elm_gengrid_add(cd->main_win);
+       elm_object_style_set(cd->gengrid, "cbhm");
+       elm_object_part_content_set(cd->main_layout, "historyitems", cd->gengrid);
+       elm_gengrid_item_size_set(cd->gengrid, cd->grid_item_bg_w, cd->grid_item_bg_h);
+       elm_gengrid_align_set(cd->gengrid, 0.0, 0.0);
+       elm_gengrid_horizontal_set(cd->gengrid, EINA_TRUE);
+//     elm_gengrid_bounce_set(cd->gengrid, EINA_TRUE, EINA_FALSE);
+       elm_gengrid_multi_select_set(cd->gengrid, EINA_FALSE);
+//     evas_object_smart_callback_add(cd->gengrid, "selected", _grid_click_paste, ad);
+       evas_object_size_hint_weight_set(cd->gengrid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       elm_gengrid_clear(cd->gengrid);
+
+       evas_object_smart_callback_add(cd->gengrid, "realized", _grid_realized, NULL);
+       evas_object_smart_callback_add(cd->gengrid, "unrealized", _grid_unrealized, NULL);
+       evas_object_smart_callback_add(cd->gengrid, "longpressed", _grid_longpressed, ad);
+
+       cd->gic_image.item_style = "clipboard/image_style";
+       cd->gic_image.func.text_get = NULL;
+       cd->gic_image.func.content_get = _grid_image_content_get;
+       cd->gic_image.func.state_get = NULL;
+       cd->gic_image.func.del = NULL;
+
+       cd->gic_text.item_style = "clipboard/text_style";
+       cd->gic_text.func.text_get = _grid_text_get;
+       cd->gic_text.func.content_get = NULL;
+       cd->gic_text.func.state_get = NULL;
+       cd->gic_text.func.del = NULL;
+
+       cd->gic_combined.item_style = "clipboard/combined_style";
+       cd->gic_combined.func.text_get = _grid_text_get;
+       cd->gic_combined.func.content_get = _grid_combined_content_get;
+       cd->gic_combined.func.state_get = NULL;
+       cd->gic_combined.func.del = NULL;
+
+       evas_object_show(cd->gengrid);
+
+       ad->draw_item_add = clipdrawer_add_item;
+       ad->draw_item_del = clipdrawer_del_item;
+//     ad->x_main_win = cd->x_main_win;
+
+       cd->keydown_handler = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, keydown_cb, ad);
+       cd->evas = evas_object_evas_get(cd->main_win);
+
+       delete_mode = EINA_FALSE;
+       cd->popup_activate = EINA_FALSE;
+       cd->item_clicked = EINA_FALSE;
+       cd->delbtn_clicked = EINA_FALSE;
+
+       cd->lower_view_timer = NULL;
+
+       return cd;
+}
+
+void depose_clipdrawer(ClipdrawerData *cd)
+{
+       utilx_ungrab_key(ecore_x_display_get(), cd->x_main_win, KEY_END);
+       utilx_ungrab_key(ecore_x_display_get(), cd->x_main_win, KEY_HOME);
+       evas_object_del(cd->main_win);
+       if (cd->anim_timer)
+               ecore_timer_del(cd->anim_timer);
+       if (cd->keydown_handler)
+               ecore_event_handler_del(cd->keydown_handler);
+       free(cd);
+}
+static void _gengrid_select_cb(void *data, Evas_Object *obj, void *event)
+{
+       CNP_ITEM *item = data;
+       AppData *ad = item->ad;
+       ClipdrawerData *cd = ad->clipdrawer;
+
+       elm_gengrid_item_selected_set(event, EINA_FALSE);
+       if (cd->delbtn_clicked)
+       {
+               item_delete_by_CNP_ITEM(ad, item);
+               cd->delbtn_clicked = EINA_FALSE;
+       }
+       else
+       {
+               if (delete_mode)
+                       return;
+
+               if (cd->popup_activate)
+                       return;
+
+               if (item->type_index != ATOM_INDEX_IMAGE || !cd->paste_text_only)
+               {
+                       ad->clip_selected_item = item;
+                       if (is_cbhm_selection_owner(ad, ECORE_X_SELECTION_SECONDARY))
+                               cd->item_clicked = EINA_TRUE;
+                       else
+                               set_selection_owner(ad, ECORE_X_SELECTION_SECONDARY, NULL);
+               }
+       }
+}
+
+
+static Eina_Bool clipdrawer_add_item(AppData *ad, CNP_ITEM *item)
+{
+       Eina_Bool duplicated = EINA_FALSE;
+       ClipdrawerData *cd = ad->clipdrawer;
+       Elm_Object_Item *gitem = elm_gengrid_first_item_get(cd->gengrid);
+
+       if (!item) return EINA_FALSE;
+
+       while (gitem)
+       {
+               CNP_ITEM *gitem_data = elm_object_item_data_get(gitem);
+               gitem = elm_gengrid_item_next_get(gitem);
+               if (!gitem_data) continue;
+
+               if ((gitem_data->type_index == item->type_index) && (!SAFE_STRCMP(item->data, gitem_data->data)))
+               {
+                       DBG("duplicated data = %s", (char *)item->data);
+                       item_delete_by_CNP_ITEM(ad, gitem_data);
+                       duplicated = EINA_TRUE;
+               }
+       }
+
+       if(item->locked)
+               cd->locked_item_count++;
+
+       if (item->gitem_style == GRID_ITEM_STYLE_TEXT)
+               item->gitem = elm_gengrid_item_prepend(cd->gengrid, &cd->gic_text, item, _gengrid_select_cb, item);
+       else if (item->gitem_style == GRID_ITEM_STYLE_IMAGE)
+               item->gitem = elm_gengrid_item_prepend(cd->gengrid, &cd->gic_image, item, _gengrid_select_cb, item);
+       else
+               item->gitem = elm_gengrid_item_prepend(cd->gengrid, &cd->gic_combined, item, _gengrid_select_cb, item);
+
+       return duplicated;
+}
+
+static Eina_Bool clipdrawer_del_item(AppData *ad, CNP_ITEM *item)
+{
+       if (item->gitem)
+               elm_object_item_del(item->gitem);
+       return EINA_TRUE;
+}
+
+static char *_grid_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       CNP_ITEM *item = data;
+       Elm_Object_Item *gitem;
+       char text_to_show[BUFF];
+       if (!item)
+               return NULL;
+
+       gitem = item->gitem;
+
+       if (!SAFE_STRCMP(part, "elm.text")) /* text */
+       {
+               char *entry_text = string_for_entry_get(item->ad, item->type_index, item->data);
+
+               /* limiting the grid text to show to avoid UI blockage in case of large text */
+               if (entry_text)
+               {
+                       SAFE_STRNCPY(text_to_show, entry_text, (BUFF - 1));
+                       strcat(text_to_show, "\0");
+               }
+               if (delete_mode)
+                       elm_object_item_signal_emit(gitem, "elm,state,show,delbtn", "elm");
+               else
+                       elm_object_item_signal_emit(gitem, "elm,state,hide,delbtn", "elm");
+
+               if (item->locked)
+                       elm_object_item_signal_emit(gitem, "elm,state,show,lockicon", "elm");
+
+               if (entry_text)
+                       return strdup(text_to_show);
+               else
+                       return SAFE_STRDUP(item->data);
+       }
+
+       return NULL;
+}
+
+static Evas_Object *_grid_image_content_get(void *data, Evas_Object *obj, const char *part)
+{
+       CNP_ITEM *item = data;
+       AppData *ad;
+       ClipdrawerData *cd;
+       Elm_Object_Item *gitem;
+       Evas_Object *sicon;
+
+       if (!item)
+               return NULL;
+
+       ad = item->ad;
+       cd = ad->clipdrawer;
+       gitem = item->gitem;
+
+       if (!SAFE_STRCMP(part, "elm.swallow.content")) /* uri */
+       {
+               int w, h, iw, ih;
+               int grid_image_real_w = cd->grid_image_item_w;
+               int grid_image_real_h = cd->grid_image_item_h;
+               double scale;
+
+               sicon = evas_object_image_filled_add(evas_object_evas_get(obj));
+               evas_object_image_load_size_set(sicon, grid_image_real_w, grid_image_real_h);
+               evas_object_image_file_set(sicon, item->file, NULL);
+               evas_object_image_preload(sicon, EINA_FALSE);
+               evas_object_image_size_get(sicon, &w, &h);
+
+               scale = elm_config_scale_get();
+
+               if (w <= 0 || h <= 0)
+                       return NULL;
+
+               if (w > grid_image_real_w || h > grid_image_real_h)
+               {
+                       if (w >= h)
+                       {
+                               iw = 190 * scale;
+                               ih = 150 * scale;
+                       }
+                       else
+                       {
+                               iw = 150 * scale;
+                               ih = 190 * scale;
+                       }
+               }
+               else
+               {
+                       iw = w;
+                       ih = h;
+               }
+
+               evas_object_resize(sicon, iw, ih);
+               evas_object_size_hint_min_set(sicon, iw, ih);
+
+               if (cd->paste_text_only)
+                       elm_object_item_signal_emit(gitem, "elm,state,show,dim", "elm");
+               else
+                       elm_object_item_signal_emit(gitem, "elm,state,hide,dim", "elm");
+       }
+       else
+               return NULL;
+
+       if (delete_mode)
+               elm_object_item_signal_emit(gitem, "elm,state,show,delbtn", "elm");
+       else
+               elm_object_item_signal_emit(gitem, "elm,state,hide,delbtn", "elm");
+
+       if (item->locked)
+               elm_object_item_signal_emit(gitem, "elm,state,show,lockicon", "elm");
+
+       return sicon;
+}
+
+static Evas_Object *_grid_combined_content_get(void *data, Evas_Object *obj, const char *part)
+{
+       CNP_ITEM *item = data;
+       AppData *ad;
+       ClipdrawerData *cd;
+       Elm_Object_Item *gitem;
+       Evas_Object *sicon;
+
+       if (!item)
+               return NULL;
+
+       ad = item->ad;
+       cd = ad->clipdrawer;
+       gitem = item->gitem;
+
+       if (!SAFE_STRCMP(part, "elm.swallow.content")) /* uri */
+       {
+               int w, h, iw, ih;
+               int grid_image_real_w = cd->grid_image_item_w;
+               int grid_image_real_h = cd->grid_image_item_h;
+
+               sicon = evas_object_image_filled_add(evas_object_evas_get(obj));
+               evas_object_image_load_size_set(sicon, grid_image_real_w, grid_image_real_h);
+               evas_object_image_file_set(sicon, item->file, NULL);
+               evas_object_image_preload(sicon, EINA_FALSE);
+               evas_object_image_size_get(sicon, &w, &h);
+
+               if (w <= 0 || h <= 0)
+                       return NULL;
+
+               if (w > grid_image_real_w || h > COMBINED_ITEM_IMAGE_HEIGHT)
+               {
+                       if (w >= h)
+                       {
+                               ih = (float)grid_image_real_w / w * h;
+                               if (ih > COMBINED_ITEM_IMAGE_HEIGHT)
+                               {
+                                       iw = (float)COMBINED_ITEM_IMAGE_HEIGHT / h * w;
+                                       ih = COMBINED_ITEM_IMAGE_HEIGHT;
+                               }
+                               else
+                               {
+                                       iw = grid_image_real_w;
+                               }
+                       }
+                       else
+                       {
+                               iw = (float)COMBINED_ITEM_IMAGE_HEIGHT / h * w;
+                               ih = COMBINED_ITEM_IMAGE_HEIGHT;
+                       }
+               }
+               else
+               {
+                       iw = w;
+                       ih = h;
+               }
+
+               evas_object_resize(sicon, iw, ih);
+               evas_object_size_hint_min_set(sicon, iw, ih);
+
+               if (cd->paste_text_only)
+                       elm_object_item_signal_emit(gitem, "elm,state,show,dim", "elm");
+               else
+                       elm_object_item_signal_emit(gitem, "elm,state,hide,dim", "elm");
+       }
+       else
+               return NULL;
+
+       if (delete_mode)
+               elm_object_item_signal_emit(gitem, "elm,state,show,delbtn", "elm");
+       else
+               elm_object_item_signal_emit(gitem, "elm,state,hide,delbtn", "elm");
+
+       if (item->locked)
+               elm_object_item_signal_emit(gitem, "elm,state,show,lockicon", "elm");
+
+       return sicon;
+}
+
+static void _grid_realized(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Object_Item *gitem = (Elm_Object_Item *) event_info;
+       CNP_ITEM *item;
+
+       if (gitem)
+       {
+               item = elm_object_item_data_get(gitem);
+               if (item)
+                       elm_object_item_signal_callback_add(gitem, "mouse,clicked,1", "*", _grid_item_ly_clicked, item);
+       }
+}
+
+static void list_selected_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Object_Item *gitem = (Elm_Object_Item *) data;
+       CNP_ITEM *item = elm_object_item_data_get(gitem);
+       AppData *ad = item->ad;
+       ClipdrawerData *cd = ad->clipdrawer;
+
+       if (delete_mode) return;
+
+       if (!item->locked)
+       {
+               item->locked = EINA_TRUE;
+               cd->locked_item_count++;
+
+               if ((item_count_get(ad, ATOM_INDEX_COUNT_ALL) - cd->locked_item_count) == 0)
+                  elm_object_signal_emit(cd->main_layout, "elm,state,disable,del", "elm");
+
+               elm_object_item_signal_emit(gitem, "elm,state,show,lockicon", "elm");
+               ad->storage_item_update(ad, item);
+       }
+       else
+       {
+               item->locked = EINA_FALSE;
+               cd->locked_item_count--;
+
+               if ((item_count_get(ad, ATOM_INDEX_COUNT_ALL) - cd->locked_item_count) != 0)
+                  elm_object_signal_emit(cd->main_layout, "elm,state,enable,del", "elm");
+
+               elm_object_item_signal_emit(gitem, "elm,state,hide,lockicon", "elm");
+               ad->storage_item_update(ad, item);
+       }
+
+       cd->popup_activate = EINA_FALSE;
+       evas_object_del(cd->popup_conform);
+       evas_object_del(cd->popup_win);
+}
+
+static void _create_cbhm_popup(AppData *ad, PopupStyle popup_style, Elm_Object_Item *gitem)
+{
+       if (ad == NULL) return;
+
+       ClipdrawerData *cd = ad->clipdrawer;
+       Evas_Object *list;
+       Evas_Object *layout;
+       Evas_Object *btn1;
+       Evas_Object *btn2;
+       int w,h;
+       int rotations[4] = { 0, 90, 180, 270 };
+
+       if (cd->popup_activate == EINA_TRUE)
+               return;
+
+       cd->popup_activate = EINA_TRUE;
+
+       cd->popup_win = elm_win_add(NULL, "delete popup", ELM_WIN_MENU);
+       ecore_x_window_size_get(ecore_x_window_root_first_get(), &w, &h);
+       evas_object_resize(cd->popup_win, w, h);
+       elm_win_alpha_set(cd->popup_win, EINA_TRUE);
+       ecore_x_icccm_name_class_set(elm_win_xwindow_get(cd->popup_win),"APP_POPUP", "APP_POPUP");
+       set_focus_for_app_window(elm_win_xwindow_get(cd->popup_win) , EINA_FALSE);
+       set_transient_for(elm_win_xwindow_get(cd->popup_win), cd->x_main_win);
+       elm_win_wm_rotation_available_rotations_set(cd->popup_win, rotations, 4);
+       evas_object_show(cd->popup_win);
+
+       cd->popup_conform = elm_conformant_add(cd->popup_win);
+       evas_object_size_hint_weight_set(cd->popup_conform, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_win_resize_object_add(cd->popup_win, cd->popup_conform);
+       evas_object_show(cd->popup_conform);
+
+       elm_win_conformant_set(cd->popup_win, EINA_TRUE);
+
+       cd->cbhm_popup = elm_popup_add(cd->popup_win);
+       if (popup_style != DELETE_ALL_POPUP)
+       {
+               elm_object_part_text_set(cd->cbhm_popup, "title,text", S_CLIPBOARD_OPTION);
+               evas_object_size_hint_weight_set(cd->cbhm_popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+               layout = elm_layout_add(cd->cbhm_popup);
+               elm_layout_theme_set(layout, "layout", "content", "menustyle");
+               evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+
+               list = elm_list_add(layout);
+               elm_object_style_set(list, "popup");
+               evas_object_size_hint_weight_set(list, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+               evas_object_size_hint_align_set(list, EVAS_HINT_FILL, EVAS_HINT_FILL);
+               evas_object_smart_callback_add(list, "selected", list_selected_cb, gitem);
+
+               if (popup_style == LOCK_POPUP)
+                       elm_list_item_append(list, S_LOCK_TO_CLIPBOARD, NULL, NULL, NULL, NULL);
+               else
+                       elm_list_item_append(list, S_UNLOCK_TO_CLIPBOARD, NULL, NULL, NULL, NULL);
+
+               elm_object_part_content_set(layout, "elm.swallow.content" , list);
+               elm_object_content_set(cd->cbhm_popup, layout);
+       }
+       else
+       {
+               elm_object_part_text_set(cd->cbhm_popup, "title,text", S_CLIPBOARD);
+               elm_object_text_set(cd->cbhm_popup, S_DELETE_ALL_Q);
+
+               btn1 = elm_button_add(cd->cbhm_popup);
+               elm_object_style_set(btn1, "popup_button/default");
+               elm_object_text_set(btn1, S_CANCEL);
+               elm_object_part_content_set(cd->cbhm_popup, "button1", btn1);
+               evas_object_smart_callback_add(btn1, "clicked", _cancel_btn_cb, ad);
+
+               btn2 = elm_button_add(cd->cbhm_popup);
+               elm_object_style_set(btn2, "popup_button/default");
+               elm_object_text_set(btn2, S_DELETE);
+               elm_object_part_content_set(cd->cbhm_popup, "button2", btn2);
+               evas_object_smart_callback_add(btn2, "clicked", _ok_btn_cb, ad);
+       }
+
+       evas_object_show(cd->cbhm_popup);
+}
+
+static void _grid_unrealized(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Object_Item *gitem = (Elm_Object_Item *) event_info;
+
+       if (gitem)
+               elm_object_item_signal_callback_del(gitem, "mouse,clicked,1", "*", _grid_item_ly_clicked);
+}
+
+static void _grid_longpressed(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Object_Item *gitem = (Elm_Object_Item *) event_info;
+       CNP_ITEM *item = elm_object_item_data_get(gitem);
+
+       if (!item->locked)
+               _create_cbhm_popup(data, LOCK_POPUP, gitem);
+       else
+               _create_cbhm_popup(data, UNLOCK_POPUP, gitem);
+}
+
+static void clipdrawer_ly_clicked(void *data, Evas_Object *obj, const char *emission, const char *source)
+{
+       AppData *ad = data;
+       ClipdrawerData *cd = ad->clipdrawer;
+
+       if (ad->clipdrawer->anim_status != STATUS_NONE)
+               return;
+
+       if (!SAFE_STRNCMP(source, EDJE_CLOSE_PART_PREFIX, SAFE_STRLEN(EDJE_CLOSE_PART_PREFIX)))
+       {
+               clipdrawer_lower_view(ad);
+       }
+       else if (!SAFE_STRNCMP(source, EDJE_DELETE_MODE_PREFIX, SAFE_STRLEN(EDJE_DELETE_MODE_PREFIX)))
+       {
+               _delete_mode_set(ad, !delete_mode);
+       }
+       else if (!SAFE_STRNCMP(source, EDJE_DELETE_ALL_BTN_PART_PREFIX, SAFE_STRLEN(EDJE_DELETE_ALL_BTN_PART_PREFIX)))
+       {
+               if ((item_count_get(ad, ATOM_INDEX_COUNT_ALL) - cd->locked_item_count) != 0)
+                  _create_cbhm_popup(ad, DELETE_ALL_POPUP, NULL);
+       }
+       else
+               return;
+}
+static void set_focus_for_app_window(Ecore_X_Window x_main_win, Eina_Bool enable)
+{
+           CALLED();
+           Eina_Bool accepts_focus;
+           Ecore_X_Window_State_Hint initial_state;
+           Ecore_X_Pixmap icon_pixmap;
+           Ecore_X_Pixmap icon_mask;
+           Ecore_X_Window icon_window;
+           Ecore_X_Window window_group;
+           Eina_Bool is_urgent;
+
+           ecore_x_icccm_hints_get (x_main_win,
+        &accepts_focus, &initial_state, &icon_pixmap, &icon_mask, &icon_window, &window_group, &is_urgent);
+           ecore_x_icccm_hints_set (x_main_win,
+        enable, initial_state, icon_pixmap, icon_mask, icon_window, window_group, is_urgent);
+           DBG("set focus mode = %d", enable);
+}
+
+
+static void _ok_btn_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       AppData *ad = data;
+       ClipdrawerData *cd = ad->clipdrawer;
+
+       Elm_Object_Item *gitem = elm_gengrid_first_item_get(cd->gengrid);
+       while (gitem)
+       {
+               CNP_ITEM *gitem_data = elm_object_item_data_get(gitem);
+               gitem = elm_gengrid_item_next_get(gitem);
+
+               if(!gitem_data->locked)
+                       item_delete_by_CNP_ITEM(ad, gitem_data);
+       }
+       if (item_count_get(ad, ATOM_INDEX_COUNT_ALL) == 0)
+               clipdrawer_lower_view(ad);
+       else
+       {
+               cd->popup_activate = EINA_FALSE;
+               evas_object_del(cd->popup_conform);
+               evas_object_del(cd->popup_win);
+       }
+
+}
+
+static void _cancel_btn_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       AppData *ad = data;
+       ClipdrawerData *cd = ad->clipdrawer;
+
+       cd->popup_activate = EINA_FALSE;
+       evas_object_del(cd->popup_conform);
+       evas_object_del(cd->popup_win);
+}
+
+static void _grid_item_ly_clicked(void *data, Elm_Object_Item *it, const char *emission, const char *source)
+{
+       CNP_ITEM *item = data;
+       AppData *ad = item->ad;
+       ClipdrawerData *cd = ad->clipdrawer;
+
+       if (cd->anim_status != STATUS_NONE)
+               return;
+
+       #define EDJE_DELBTN_PART_PREFIX "delbtn/img"
+       if (!SAFE_STRNCMP(source, EDJE_DELBTN_PART_PREFIX, SAFE_STRLEN(EDJE_DELBTN_PART_PREFIX)))
+               cd->delbtn_clicked = EINA_TRUE;
+}
+
+static Ecore_X_Window isf_ise_window_get()
+{
+       Ecore_X_Atom   x_atom_isf_control = ecore_x_atom_get("_ISF_CONTROL_WINDOW");
+       Ecore_X_Atom   x_atom_isf_ise     = ecore_x_atom_get("_ISF_ISE_WINDOW");
+       Ecore_X_Window x_isf_control_win = 0;
+       Ecore_X_Window x_isf_ise_win     = 0;
+       unsigned char *buf = NULL;
+       int            num = 0;
+       int            ret;
+
+       ret = ecore_x_window_prop_property_get(0, x_atom_isf_control, ECORE_X_ATOM_WINDOW, 0, &buf, &num);
+       if (ret && num)
+               memcpy(&x_isf_control_win, buf, sizeof(Ecore_X_Window));
+       if (buf)
+               free(buf);
+       if (!x_isf_control_win)
+               return 0;
+
+       ret = ecore_x_window_prop_property_get(x_isf_control_win, x_atom_isf_ise, ECORE_X_ATOM_WINDOW, 0, &buf, &num);
+       if (ret && num)
+               memcpy(&x_isf_ise_win, buf, sizeof(Ecore_X_Window));
+       if (buf)
+               free(buf);
+
+       return x_isf_ise_win;
+}
+
+void set_transient_for(Ecore_X_Window x_main_win, Ecore_X_Window x_active_win)
+{
+       ecore_x_icccm_transient_for_set(x_main_win, x_active_win);
+       ecore_x_event_mask_set(x_active_win,
+                                                                 ECORE_X_EVENT_MASK_WINDOW_PROPERTY |
+                                                                 ECORE_X_EVENT_MASK_WINDOW_CONFIGURE);
+}
+
+void unset_transient_for(Ecore_X_Window x_main_win)
+{
+       Ecore_X_Window x_transient_win = ecore_x_icccm_transient_for_get(x_main_win);
+
+       if (x_transient_win) {
+               ecore_x_event_mask_unset(x_transient_win,
+                                                                                ECORE_X_EVENT_MASK_WINDOW_PROPERTY |
+                                                                                ECORE_X_EVENT_MASK_WINDOW_CONFIGURE);
+               ecore_x_icccm_transient_for_unset(x_main_win);
+       }
+}
+
+void setting_win(Ecore_X_Display *x_disp, Ecore_X_Window x_root_win, Ecore_X_Window x_main_win)
+{
+       CALLED();
+
+       Ecore_X_Atom ATOM_WINDOW_EFFECT_ENABLE = 0;
+       unsigned int effect_state = 0; // 0 : disabled effect // 1: enable effect
+
+       // disable window effect
+       ATOM_WINDOW_EFFECT_ENABLE = ecore_x_atom_get("_NET_CM_WINDOW_EFFECT_ENABLE");
+       if (ATOM_WINDOW_EFFECT_ENABLE)
+       {
+               ecore_x_window_prop_card32_set(x_main_win, ATOM_WINDOW_EFFECT_ENABLE, &effect_state, 1);
+       }
+       else
+       {
+               // error case
+               ERR("Could not get _NET_CM_WINDOW_EFFECT_ENABLE ATOM");
+       }
+
+       ecore_x_icccm_name_class_set(x_main_win, "NORMAL_WINDOW", "NORMAL_WINDOW");
+
+       set_focus_for_app_window(x_main_win, EINA_FALSE);
+       ecore_x_window_prop_property_set(
+                       x_root_win, ecore_x_atom_get("CBHM_ELM_WIN"),
+                       ECORE_X_ATOM_WINDOW, 32, &x_main_win, 1);
+       ecore_x_flush();
+}
+
+Evas_Object *create_win(ClipdrawerData *cd, const char *name)
+{
+       CALLED();
+
+       Evas_Object *win = elm_win_add(NULL, name, ELM_WIN_UTILITY);
+       if (!win)
+       {
+               ERR("elm_win_add return NULL");
+               return NULL;
+       }
+       elm_win_title_set(win, name);
+       elm_win_borderless_set(win, EINA_TRUE);
+       ecore_x_window_size_get(ecore_x_window_root_first_get(), &cd->root_w, &cd->root_h);
+       DBG("root_w: %d, root_h: %d", cd->root_w, cd->root_h);
+       //evas_object_resize(win, cd->root_w, cd->root_h);
+
+       elm_config_scale_set((double)cd->root_w/DEFAULT_WIDTH);
+       return win;
+}
+
+static void set_sliding_win_geometry(AppData *ad)
+{
+       CALLED();
+       ClipdrawerData *cd = ad->clipdrawer;
+       Evas_Coord x, y, w, h;
+       int angle = elm_win_rotation_get(cd->main_win);
+
+       if (!ad->x_active_win)
+       {
+               ERR("x_active_win is NULL");
+               return;
+       }
+
+       if (angle == 90 || angle == 270)
+       {
+               h = cd->landscape_height;
+               x = 0;
+               y = cd->root_w - h;
+               w = cd->root_h;
+       }
+       else
+       {
+               h = cd->height;
+               x = 0;
+               y = cd->root_h - h;
+               w = cd->root_w;
+       }
+
+       if (!h)
+               w = 0;
+
+       DBG("[CBHM] change degree geometry... (%d, %d, %d x %d)", x, y, w, h);
+
+       ecore_x_e_illume_clipboard_geometry_set(ad->x_active_win, x, y, w, h);
+}
+
+void set_rotation_to_clipdrawer(AppData *ad)
+{
+       CALLED();
+       ClipdrawerData *cd = ad->clipdrawer;
+       int angle = elm_win_rotation_get(cd->main_win);
+       int x, y, w, h;
+
+       if (angle == 180) // reverse
+       {
+               h = cd->height;
+               x = 0;
+               y = 0;
+               w = cd->root_w;
+       }
+       else if (angle == 90) // right rotate
+       {
+               h = cd->landscape_height;
+               x = cd->root_w - h;
+               y = 0;
+               w = cd->root_h;
+       }
+       else if (angle == 270) // left rotate
+       {
+               h = cd->landscape_height;
+               x = 0;
+               y = 0;
+               w = cd->root_h;
+       }
+       else // angle == 0
+       {
+               h = cd->height;
+               x = 0;
+               y = cd->root_h - h;
+               w = cd->root_w;
+       }
+
+       evas_object_resize(cd->main_win, w, h);
+       evas_object_move(cd->main_win, x, y);
+       set_sliding_win_geometry(ad);
+}
+/*
+static Eina_Bool _get_anim_pos(ClipdrawerData *cd, int *sp, int *ep)
+{
+       if (!sp || !ep)
+               return EINA_FALSE;
+
+       int angle = cd->o_degree;
+       int anim_start, anim_end;
+
+       if (angle == 180) // reverse
+       {
+               anim_start = -(cd->root_h - cd->height);
+               anim_end = 0;
+       }
+       else if (angle == 90) // right rotate
+       {
+               anim_start = cd->root_w;
+               anim_end = anim_start - cd->landscape_height;
+       }
+       else if (angle == 270) // left rotate
+       {
+               anim_start = -(cd->root_w - cd->landscape_height);
+               anim_end = 0;
+       }
+       else // angle == 0
+       {
+               anim_start = cd->root_h;
+               anim_end = anim_start - cd->height;
+       }
+
+       *sp = anim_start;
+       *ep = anim_end;
+       return EINA_TRUE;
+}
+
+static Eina_Bool _do_anim_delta_pos(ClipdrawerData *cd, int sp, int ep, int ac, int *dp)
+{
+       if (!dp)
+               return EINA_FALSE;
+
+       int angle = cd->o_degree;
+       int delta;
+       double posprop;
+       posprop = 1.0*ac/ANIM_DURATION;
+
+       if (angle == 180) // reverse
+       {
+               delta = (int)((ep-sp)*posprop);
+               evas_object_move(cd->main_win, 0, sp+delta);
+       }
+       else if (angle == 90) // right rotate
+       {
+               delta = (int)((ep-sp)*posprop);
+               evas_object_move(cd->main_win, sp+delta, 0);
+       }
+       else if (angle == 270) // left rotate
+       {
+               delta = (int)((ep-sp)*posprop);
+               evas_object_move(cd->main_win, sp+delta, 0);
+       }
+       else // angle == 0
+       {
+               delta = (int)((sp-ep)*posprop);
+               evas_object_move(cd->main_win, 0, sp-delta);
+       }
+       
+       *dp = delta;
+
+       return EINA_TRUE;
+}
+
+static void stop_animation(AppData *ad)
+{
+       CALLED();
+       ClipdrawerData *cd = ad->clipdrawer;
+       cd->anim_status = STATUS_NONE;
+       if (cd->anim_timer)
+       {
+               ecore_timer_del(cd->anim_timer);
+               cd->anim_timer = NULL;
+       }
+
+       set_sliding_win_geometry(ad);
+}
+
+static Eina_Bool anim_pos_calc_cb(void *data)
+{
+       AppData *ad = data;
+       ClipdrawerData *cd = ad->clipdrawer;
+       int anim_start, anim_end, delta;
+
+       _get_anim_pos(cd, &anim_start, &anim_end);
+
+       if (cd->anim_status == SHOW_ANIM)
+       {
+               if (cd->anim_count > ANIM_DURATION)
+               {
+                       cd->anim_count = ANIM_DURATION;
+                       stop_animation(ad);
+                       return EINA_FALSE;
+               }
+               _do_anim_delta_pos(cd, anim_start, anim_end, cd->anim_count, &delta);
+               if (cd->anim_count == 1)
+                       evas_object_show(cd->main_win);
+               cd->anim_count++;
+       }
+       else if (cd->anim_status == HIDE_ANIM)
+       {
+               if (cd->anim_count < 0)
+               {
+                       cd->anim_count = 0;
+                       elm_object_signal_emit(cd->main_layout, "elm,state,hide,historyitems", "elm");
+                       edje_object_message_signal_process(elm_layout_edje_get(cd->main_layout));
+                       evas_object_hide(cd->main_win);
+                       elm_win_lower(cd->main_win);
+                       unset_transient_for(cd->x_main_win);
+                       stop_animation(ad);
+                       _delete_mode_set(ad, EINA_FALSE);
+                       return EINA_FALSE;
+               }
+               _do_anim_delta_pos(cd, anim_start, anim_end, cd->anim_count, &delta);
+               cd->anim_count--;
+       }
+       else
+       {
+               stop_animation(ad);
+               return EINA_FALSE;
+       }
+
+       return EINA_TRUE;
+}
+
+static Eina_Bool clipdrawer_anim_effect(AppData *ad, AnimStatus atype)
+{
+       CALLED();
+       ClipdrawerData *cd = ad->clipdrawer;
+       if (atype == cd->anim_status)
+       {
+               WRN("Warning: Animation effect is already in progress.");
+               return EINA_FALSE;
+       }
+
+       cd->anim_status = atype;
+
+       if (cd->anim_timer)
+               ecore_timer_del(cd->anim_timer);
+       cd->anim_timer = ecore_timer_add(ANIM_FLOPS, anim_pos_calc_cb, ad);
+
+       return EINA_TRUE;
+}
+*/
+static Eina_Bool timer_cb(void *data)
+{
+       ClipdrawerData *cd = data;
+       /* If the gengrid has some images, evas would have some heavy works for image drawings.
+               In this case, window would be delayed in showing up.
+               In order to avoid this problem,
+               we show the gengrid after window is shown.
+        */
+       elm_object_signal_emit(cd->main_layout, "elm,state,show,historyitems", "elm");
+       return ECORE_CALLBACK_CANCEL;
+}
+
+void rotate_cb(void *data, Evas_Object * obj, void *event)
+{
+       if (!data) return;
+
+       AppData *ad= data;
+
+       set_rotation_to_clipdrawer(ad);
+}
+
+void clipdrawer_activate_view(AppData* ad)
+{
+       CALLED();
+       ClipdrawerData                *cd = ad->clipdrawer;
+       Ecore_X_Window                 x_transient_win = ad->x_active_win;
+       Ecore_X_Window                 x_isf_ise_win;
+       Ecore_X_Virtual_Keyboard_State isf_ise_state;
+       int rotations[4] = { 0, 90, 180, 270 };
+
+       if(cd->main_layout)
+       {
+               if ((item_count_get(ad, ATOM_INDEX_COUNT_ALL) - cd->locked_item_count) == 0)
+                       elm_object_signal_emit(cd->main_layout, "elm,state,disable,del", "elm");
+
+               elm_object_part_text_set(cd->main_layout, "panel_title", S_CLIPBOARD);
+               elm_object_part_text_set(cd->main_layout, "panel_function_delete_all", S_DELETE_ALL);
+               elm_object_part_text_set(cd->main_layout, "panel_function_delete", S_DELETE);
+       }
+
+       if (cd->main_win)
+       {
+               isf_ise_state = ecore_x_e_virtual_keyboard_state_get(ad->x_active_win);
+               if (isf_ise_state == ECORE_X_VIRTUAL_KEYBOARD_STATE_ON) {
+                       x_isf_ise_win = isf_ise_window_get();
+                       if (x_isf_ise_win)
+                               x_transient_win = x_isf_ise_win;
+               }
+               set_transient_for(cd->x_main_win, x_transient_win);
+
+               elm_win_wm_rotation_available_rotations_set(cd->main_win, rotations, 4);
+               evas_object_smart_callback_add(cd->main_win, "wm,rotation,changed", rotate_cb, ad);
+               _delete_mode_set(ad, EINA_FALSE);
+               set_rotation_to_clipdrawer(ad);
+               evas_object_show(cd->main_win);
+               elm_win_activate(cd->main_win);
+               ecore_x_e_illume_clipboard_state_set(ad->x_active_win, ECORE_X_ILLUME_CLIPBOARD_STATE_ON);
+               utilx_grab_key(ad->x_disp, cd->x_main_win, KEY_END, TOP_POSITION_GRAB);
+               utilx_grab_key(ad->x_disp, cd->x_main_win, KEY_HOME, SHARED_GRAB);
+               ecore_timer_add(0.125, timer_cb, cd);  //0.125 is experimentally decided.
+       }
+}
+
+static Eina_Bool clipdrawer_lower_view_timer_cb(void *data)
+{
+       CALLED();
+       AppData *ad = (AppData *)data;
+       ClipdrawerData *cd = ad->clipdrawer;
+
+       cd->lower_view_timer = NULL;
+
+       if (cd->main_win)
+       {
+               elm_object_signal_emit(cd->main_layout, "elm,state,hide,historyitems", "elm");
+               edje_object_message_signal_process(elm_layout_edje_get(cd->main_layout));
+               evas_object_hide(cd->main_win);
+               elm_win_lower(cd->main_win);
+               unset_transient_for(cd->x_main_win);
+               _delete_mode_set(ad, EINA_FALSE);
+       }
+
+       return ECORE_CALLBACK_CANCEL;
+}
+
+void clipdrawer_lower_view(AppData* ad)
+{
+       CALLED();
+       ClipdrawerData *cd = ad->clipdrawer;
+
+       if (cd->lower_view_timer) return;
+
+       if (cd->main_win)
+       {
+               ecore_x_e_illume_clipboard_state_set(ad->x_active_win, ECORE_X_ILLUME_CLIPBOARD_STATE_OFF);
+               ecore_x_e_illume_clipboard_geometry_set(ad->x_active_win, 0, 0, 0, 0);
+               utilx_ungrab_key(ad->x_disp, cd->x_main_win, KEY_END);
+               utilx_ungrab_key(ad->x_disp, cd->x_main_win, KEY_HOME);
+
+               if(cd->popup_activate)
+               {
+                       cd->popup_activate = EINA_FALSE;
+                       evas_object_del(cd->popup_conform);
+                       evas_object_del(cd->popup_win);
+               }
+       }
+
+       cd->lower_view_timer = ecore_timer_add(TIME_DELAY_LOWER_VIEW, clipdrawer_lower_view_timer_cb, ad);
+}
+
+void _delete_mode_set(AppData* ad, Eina_Bool del_mode)
+{
+       ClipdrawerData *cd = ad->clipdrawer;
+       Elm_Object_Item *gitem = elm_gengrid_first_item_get(cd->gengrid);
+       CNP_ITEM *item = NULL;
+
+       if (gitem)
+               delete_mode = del_mode;
+       else
+               delete_mode = EINA_FALSE;
+
+       if(!cd->main_layout)
+               return;
+       if (delete_mode)
+       {
+               elm_object_part_text_set(cd->main_layout, "panel_function_delete", S_DONE);
+       }
+       else
+       {
+               elm_object_part_text_set(cd->main_layout, "panel_function_delete", S_DELETE);
+       }
+
+       while (gitem)
+       {
+               item = elm_object_item_data_get(gitem);
+               if(!item)
+                       return;
+
+               if (!item->locked)
+               {
+                       if (delete_mode)
+                               elm_object_item_signal_emit(gitem, "elm,state,show,delbtn", "elm");
+                       else
+                               elm_object_item_signal_emit(gitem, "elm,state,hide,delbtn", "elm");
+               }
+
+               gitem = elm_gengrid_item_next_get(gitem);
+       }
+}
diff --git a/2.2/src/clipdrawer.h b/2.2/src/clipdrawer.h
new file mode 100644 (file)
index 0000000..6fb28fd
--- /dev/null
@@ -0,0 +1,89 @@
+/*
+ * 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 _CLIPDRAWER_H_
+#define _CLIPDRAWER_H_
+
+#include <Ecore_X.h>
+#include <Elementary.h>
+typedef enum _AnimStatus AnimStatus;
+enum _AnimStatus {
+       STATUS_NONE = 0,
+       SHOW_ANIM,
+       HIDE_ANIM
+};
+
+typedef enum _PopupStyle PopupStyle;
+enum _PopupStyle {
+       DELETE_ALL_POPUP = 0,
+       LOCK_POPUP,
+       UNLOCK_POPUP
+};
+
+struct _ClipdrawerData {
+       Evas_Object *main_win;
+       Evas_Object *gengrid;
+       Evas_Object *main_layout;
+       Elm_Gengrid_Item_Class gic_text;
+       Elm_Gengrid_Item_Class gic_image;
+       Elm_Gengrid_Item_Class gic_combined;
+       Evas_Object *popup;
+       Evas_Object *popup_win;
+       Evas_Object *popup_conform;
+       Evas_Object *cbhm_popup;
+       Evas *evas;
+       Ecore_Event_Handler *keydown_handler;
+       Ecore_Timer *anim_timer;
+       Elm_Gengrid_Item_Class gic;
+       Ecore_Timer *lower_view_timer;
+       int locked_item_count;
+       Ecore_X_Window x_main_win;
+
+       int o_degree;
+
+       int root_w;
+       int root_h;
+
+       int height;
+       int landscape_height;
+       int grid_item_bg_w;
+       int grid_item_bg_h;
+       int grid_image_item_w;
+       int grid_image_item_h;
+
+       AnimStatus anim_status;
+       int anim_count;
+       Eina_Bool popup_activate:1;
+       Eina_Bool paste_text_only:1;
+       Eina_Bool item_clicked:1;
+       Eina_Bool delbtn_clicked:1;
+       Eina_Bool http_path:1;
+};
+
+#include "cbhm.h"
+
+Eina_Bool delete_mode;
+
+void set_rotation_to_clipdrawer(AppData *ad);
+void clipdrawer_activate_view(AppData* ad);
+void clipdrawer_lower_view(AppData* ad);
+ClipdrawerData *init_clipdrawer(AppData *ad);
+void depose_clipdrawer(ClipdrawerData *cd);
+void _delete_mode_set(AppData *ad, Eina_Bool del_mode);
+void clipdrawer_paste_textonly_set(AppData *ad, Eina_Bool textonly);
+
+#endif // _CLIPDRAWER_H_
diff --git a/2.2/src/item_manager.c b/2.2/src/item_manager.c
new file mode 100644 (file)
index 0000000..b820a1b
--- /dev/null
@@ -0,0 +1,446 @@
+/*
+ * 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.
+ *
+ */
+
+#include <notification.h>
+#include <time.h>
+#include "item_manager.h"
+#include "clipdrawer.h"
+
+static void show_notification(CNP_ITEM *item, const char *msg)
+{
+       if (item && item->data && item->len > 0)
+               notification_status_message_post(msg);
+}
+
+static void item_free(CNP_ITEM *item, Eina_Bool storage)
+{
+       CALLED();
+       if (!item)
+       {
+               ERR("WRONG PARAMETER in %s", __func__);
+               return;
+       }
+       // remove gengrid
+       if (item->ad)
+       {
+               if (item->ad->draw_item_del)
+                       item->ad->draw_item_del(item->ad, item);
+               if (storage && item->ad->storage_item_del)
+                       item->ad->storage_item_del(item->ad, item);
+       }
+
+       if (item->data)
+               FREE(item->data);
+
+       if (item->file)
+       {
+               ecore_file_remove(item->file);
+               FREE(item->file);
+       }
+
+       if (item->ad)
+       {
+               if (item->ad->clip_selected_item == item)
+               item->ad->clip_selected_item = NULL;
+       }
+       FREE(item);
+}
+
+CNP_ITEM *item_add_by_CNP_ITEM(AppData *ad, CNP_ITEM *item, Eina_Bool storage, Eina_Bool show_msg)
+{
+       if (!ad || !item)
+       {
+               ERR("WRONG PARAMETER in %s", __func__);
+               return NULL;
+       }
+       ClipdrawerData *cd = ad->clipdrawer;
+       if ((item_count_get(ad, ATOM_INDEX_COUNT_ALL) - cd->locked_item_count) == 0)
+               elm_object_signal_emit(cd->main_layout, "elm,state,enable,del", "elm");
+       if (!item)
+       {
+               ERR("WRONG PARAMETER in %s, ad: 0x%p, item: 0x%p", __func__, ad, item);
+               return NULL;
+       }
+       item->ad = ad;
+
+       Eina_Bool duplicated = EINA_FALSE;
+
+       ad->item_list = eina_list_prepend(ad->item_list, item);
+       if (ad && ad->draw_item_add)
+               duplicated = ad->draw_item_add(ad, item);
+       if (storage && ad && ad->storage_item_add)
+               ad->storage_item_add(ad, item);
+
+       while (ITEM_CNT_MAX < eina_list_count(ad->item_list))
+       {
+               CNP_ITEM *ditem = eina_list_nth(ad->item_list, ITEM_CNT_MAX);
+
+               ad->item_list = eina_list_remove(ad->item_list, ditem);
+               item_free(ditem, EINA_TRUE);
+       }
+
+       slot_property_set(ad, -1);
+       slot_item_count_set(ad);
+
+       if (show_msg)
+       {
+               if (duplicated)
+                       show_notification(item, S_EXIST);
+               else
+                       show_notification(item, S_COPY);
+       }
+
+       return item;
+}
+
+static void downloaded_cb(void *data, const char *file_, int status)
+{
+       CNP_ITEM *item = data;
+
+       if (status == 200)
+       {
+               item->img_from_web = EINA_TRUE;
+               DBG("image download success\n");
+       }
+       else
+       {
+               item->img_from_web = EINA_FALSE;
+               DBG("image download fail\n");
+       }
+}
+
+static Eina_Bool get_network_state()
+{
+       int net_conf;
+       int net_status;
+       vconf_get_int(VCONFKEY_NETWORK_CONFIGURATION_CHANGE_IND, &net_conf);
+       vconf_get_int(VCONFKEY_NETWORK_STATUS, &net_status);
+       DBG("current network configuration (%d), Network status (%d)\n", net_conf, net_status);
+
+       if (net_conf == 0 && net_status == VCONFKEY_NETWORK_OFF)
+       {
+               DBG("No wifi and No 3G\n");
+               return EINA_FALSE;
+       }
+       return EINA_TRUE;
+}
+
+static void image_name_get(char *filename)
+{
+       time_t tim;
+       struct tm *now;
+
+       //file path get
+       tim = time(NULL);
+       now = localtime(&tim);
+
+       sprintf(filename, "fromweb-%d%02d%02d%02d%02d%02d%s",
+                               now->tm_year + 1900, now->tm_mon + 1, now->tm_mday,
+                               now->tm_hour, now->tm_min, now->tm_sec, ".jpg");
+}
+
+char* html_img_save_frm_local(char *copied_path)
+{
+       char *html_img_url = NULL;
+       char html_img_name[PATH_MAX];
+       int size_path = 0;
+
+       size_path = snprintf(NULL, 0, "%s", copied_path) + 1;
+       html_img_url = MALLOC(sizeof(char) * size_path);
+       snprintf(html_img_url, size_path, "%s", copied_path);
+       DBG("html_img_url = %s\n", html_img_url);
+
+       image_name_get(html_img_name);
+       DBG("copied file name = %s\n", html_img_name);
+
+       size_path = snprintf(NULL, 0, COPIED_DATA_STORAGE_DIR"/%s", html_img_name) + 1;
+       copied_path = MALLOC(sizeof(char) * size_path);
+       snprintf(copied_path, size_path, COPIED_DATA_STORAGE_DIR"/%s", html_img_name);
+       DBG("copied path = %s\n", copied_path);
+       ecore_file_cp(html_img_url, copied_path);
+       FREE(html_img_url);
+       return copied_path;
+}
+
+char* html_img_save(char *copied_path, CNP_ITEM *item)
+{
+       char *html_img_url = NULL;
+       char html_img_name[PATH_MAX];
+       int size_path = 0;
+       int ret;
+       Eina_Bool is_network_enable;
+
+       is_network_enable = get_network_state();
+       DBG("network enable = %d\n", is_network_enable);
+       if (is_network_enable)
+       {
+               size_path = snprintf(NULL, 0, "http:/""%s", copied_path) + 1;
+               html_img_url = MALLOC(sizeof(char) * size_path);
+               snprintf(html_img_url, size_path, "http:/""%s", copied_path);
+               DBG("html_img_url = %s\n", html_img_url);
+
+               image_name_get(html_img_name);
+               DBG("copied file name = %s\n", html_img_name);
+
+               size_path = snprintf(NULL, 0, COPIED_DATA_STORAGE_DIR"/%s", html_img_name) + 1;
+               copied_path = MALLOC(sizeof(char) * size_path);
+               snprintf(copied_path, size_path, COPIED_DATA_STORAGE_DIR"/%s", html_img_name);
+               DBG("copied path = %s\n", copied_path);
+               ret = ecore_file_download_full(html_img_url, copied_path, downloaded_cb, NULL, item, NULL, NULL);
+               if(ret)
+                       DBG("Download start");
+
+               FREE(html_img_url);
+               return copied_path;
+       }
+       return NULL;
+}
+
+CNP_ITEM *item_add_by_data(AppData *ad, Ecore_X_Atom type, void *data, int len, Eina_Bool show_msg)
+{
+       char *entry_text = NULL;
+       char *orig_path = NULL;
+       char *copied_path = NULL;
+       const char *file_name = NULL;
+       int size_path = 0;
+
+       if (!ad || !data)
+       {
+               ERR("WRONG PARAMETER in %s", __func__);
+               return NULL;
+       }
+       CNP_ITEM *item;
+       item = CALLOC(1, sizeof(CNP_ITEM));
+
+       if (!item)
+               return NULL;
+
+       item->type_index = atom_type_index_get(ad, type);
+
+       if (item->type_index == ATOM_INDEX_TEXT)
+               item->gitem_style = GRID_ITEM_STYLE_TEXT;
+       else if (item->type_index == ATOM_INDEX_HTML)
+       {
+               copied_path = string_for_image_path_get(ad, ATOM_INDEX_HTML, data);
+               DBG("found img path in html tags = %s\n", copied_path);
+
+               if (copied_path && ad->clipdrawer->http_path)
+                       copied_path = html_img_save(copied_path, item);
+               else if (copied_path)
+                       copied_path = html_img_save_frm_local(copied_path);
+
+               entry_text = string_for_entry_get(ad, ATOM_INDEX_HTML, data);
+               DBG("entry_text = %s\n copied_path = %s\n", entry_text, copied_path);
+       }
+       else if (item->type_index == ATOM_INDEX_EFL)
+       {
+               entry_text = string_for_entry_get(ad, ATOM_INDEX_EFL, data);
+               copied_path = string_for_image_path_get(ad, ATOM_INDEX_EFL, data);
+       }
+       else if (item->type_index == ATOM_INDEX_IMAGE)
+       {
+               orig_path = data;
+               file_name = ecore_file_file_get(orig_path);
+               size_path = snprintf(NULL, 0, COPIED_DATA_STORAGE_DIR"/%s", file_name) + 1;
+               copied_path = MALLOC(sizeof(char) * size_path);
+               if (copied_path)
+               {
+                       snprintf(copied_path, size_path, COPIED_DATA_STORAGE_DIR"/%s", file_name);
+                       data = copied_path;
+                       len = SAFE_STRLEN(copied_path) + 1;
+               }
+               // Reallocate memory for item->file
+               copied_path = MALLOC(sizeof(char) * len);
+               if (copied_path)
+                       snprintf(copied_path, len, "%s", (char *)data);
+       }
+
+       if (copied_path)
+       {
+               item->file = copied_path;
+               item->file_len = SAFE_STRLEN(copied_path) + 1;
+       }
+
+       if (entry_text && copied_path)
+       {
+               item->gitem_style = GRID_ITEM_STYLE_COMBINED;
+               FREE(entry_text);
+       }
+       else if (entry_text)
+       {
+               item->gitem_style = GRID_ITEM_STYLE_TEXT;
+               FREE(entry_text);
+       }
+       else if (copied_path)
+               item->gitem_style = GRID_ITEM_STYLE_IMAGE;
+
+       item->data = data;
+       item->len = len;
+
+       item = item_add_by_CNP_ITEM(ad, item, EINA_TRUE, show_msg);
+
+       if ((item->type_index == ATOM_INDEX_IMAGE) && orig_path && copied_path)
+       {
+               if (!ecore_file_cp(orig_path, copied_path))
+                       DBG("ecore_file_cp fail!");
+               FREE(orig_path);
+       }
+
+       // Set vconf value to notify copy event to popsync application
+       vconf_set_str(VCONFKEY_POPSYNC_COPY_EVENT_SET_KEY, "1");
+       return item;
+}
+
+CNP_ITEM *item_get_by_index(AppData *ad, int index)
+{
+       if (!ad || eina_list_count(ad->item_list) <= index || 0 > index)
+       {
+               ERR("WRONG PARAMETER in %s", __func__);
+               return NULL;
+       }
+       CNP_ITEM *item;
+       item = eina_list_nth(ad->item_list, index);
+       return item;
+}
+
+CNP_ITEM *item_get_by_data(AppData *ad, void *data, int len)
+{
+       CNP_ITEM *item;
+       Eina_List *l;
+
+       if (!ad || !data)
+       {
+               ERR("WRONG PARAMETER in %s", __func__);
+               return NULL;
+       }
+
+       EINA_LIST_FOREACH(ad->item_list, l, item)
+       {
+               if (item && (item->len == len) && (!SAFE_STRNCMP(item->data, data, len)))
+                       return item;
+       }
+
+       return NULL;
+}
+
+CNP_ITEM *item_get_last(AppData *ad)
+{
+       if (!ad)
+       {
+               ERR("WRONG PARAMETER in %s", __func__);
+               return NULL;
+       }
+       return eina_list_data_get(ad->item_list);
+}
+
+void item_delete_by_CNP_ITEM(AppData *ad, CNP_ITEM *item)
+{
+       CALLED();
+       ClipdrawerData *cd = ad->clipdrawer;
+
+       if ((item_count_get(ad, ATOM_INDEX_COUNT_ALL) - cd->locked_item_count) == 1)
+       {
+               elm_object_signal_emit(cd->main_layout, "elm,state,disable,del", "elm");
+               _delete_mode_set(ad, EINA_FALSE);
+       }
+       if (!item)
+       {
+               ERR("WRONG PARAMETER in %s", __func__);
+               return;
+       }
+       ad->item_list = eina_list_remove(ad->item_list, item);
+       item_free(item, EINA_TRUE);
+       slot_property_set(ad, -1);
+       slot_item_count_set(ad);
+}
+
+void item_delete_by_data(AppData *ad, void *data, int len)
+{
+       CALLED();
+       if (!ad || !data)
+       {
+               ERR("WRONG PARAMETER in %s", __func__);
+               return;
+       }
+       CNP_ITEM *item;
+       item = item_get_by_data(ad, data, len);
+       item_delete_by_CNP_ITEM(ad, item);
+}
+
+void item_delete_by_index(AppData *ad, int index)
+{
+       CALLED();
+       if (!ad || eina_list_count(ad->item_list) <= index || 0 > index)
+       {
+               ERR("WRONG PARAMETER in %s", __func__);
+               return;
+       }
+       CNP_ITEM *item;
+       item = item_get_by_index(ad, index);
+       item_delete_by_CNP_ITEM(ad, item);
+}
+
+void item_clear_all(AppData *ad)
+{
+       CALLED();
+       while(ad->item_list)
+       {
+               CNP_ITEM *item = eina_list_data_get(ad->item_list);
+               ad->item_list = eina_list_remove(ad->item_list, item);
+               if (item)
+                       item_free(item, EINA_FALSE);
+       }
+}
+
+int item_count_get(AppData *ad, int atom_index)
+{
+       int icount = 0;
+       Eina_List *l;
+       CNP_ITEM *item;
+
+       if (!ad || !ad->item_list) return 0;
+
+       // Get the number of all items
+       if (atom_index == ATOM_INDEX_COUNT_ALL)
+       {
+               icount = eina_list_count(ad->item_list);
+       }
+       // Get the number of text type items
+       else if (atom_index == ATOM_INDEX_COUNT_TEXT)
+       {
+               EINA_LIST_FOREACH(ad->item_list, l, item)
+               {
+                       if (item &&
+                                (item->type_index == ATOM_INDEX_TEXT ||
+                                 item->type_index == ATOM_INDEX_HTML ||
+                                 item->type_index == ATOM_INDEX_EFL))
+                               icount++;
+               }
+       }
+       // Get the number of image type items
+       else if (atom_index == ATOM_INDEX_COUNT_IMAGE)
+       {
+               EINA_LIST_FOREACH(ad->item_list, l, item)
+               {
+                       if (item &&
+                                (item->type_index == ATOM_INDEX_IMAGE))
+                               icount++;
+               }
+       }
+
+       return icount;
+}
diff --git a/2.2/src/item_manager.h b/2.2/src/item_manager.h
new file mode 100644 (file)
index 0000000..8a59083
--- /dev/null
@@ -0,0 +1,74 @@
+/*
+ * 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 _ITEM_MANAGER_H_
+#define _ITEM_MANAGER_H_
+
+#include "cbhm.h"
+#include <vconf.h>
+#include <vconf-internal-popsync-keys.h>
+
+#define MULTI_(s) dgettext(PACKAGE, s)
+#define S_CLIPBOARD MULTI_("IDS_COM_BODY_CLIPBOARD")
+#define S_DELETE MULTI_("IDS_COM_BODY_DELETE")
+#define S_DONE MULTI_("IDS_COM_BODY_DONE")
+#define S_COPY MULTI_("IDS_COM_POP_COPIED_TO_CLIPBOARD")
+#define S_EXIST MULTI_("IDS_COM_POP_ALREADY_EXISTS")
+#define S_DELETE_ALL MULTI_("IDS_COM_BODY_DELETE_ALL")
+#define S_DELETE_ALL_Q MULTI_("IDS_COM_POP_DELETE_ALL_Q")
+#define S_CANCEL MULTI_("IDS_COM_BUTTON_CANCEL")
+#define S_CLOSE MULTI_("IDS_COM_BODY_CLOSE")
+#define S_CLIPBOARD_OPTION MULTI_("IDS_COM_HEADER_CLIPBOARD_OPTIONS")
+#define S_DELETE_FROM_CLIPBOARD MULTI_("IDS_COM_BODY_DELETE_FROM_CLIPBOARD")
+#define S_LOCK_TO_CLIPBOARD MULTI_("IDS_COM_BODY_LOCK_TO_CLIPBOARD")
+#define S_UNLOCK_TO_CLIPBOARD MULTI_("IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD")
+
+enum GRID_ITEM_STYLE {
+       GRID_ITEM_STYLE_TEXT = 0,
+       GRID_ITEM_STYLE_IMAGE = 1,
+       GRID_ITEM_STYLE_COMBINED = 2,
+       GRID_ITEM_STYLE_MAX = 3
+};
+
+struct _CNP_ITEM {
+       int type_index;
+       void *data;
+       size_t len;
+       void *file;
+       size_t file_len;
+       int gitem_style;
+       Eina_Bool img_from_web;
+       Elm_Object_Item *gitem;
+       Eina_Bool locked;
+       AppData *ad;
+};
+
+CNP_ITEM *item_add_by_CNP_ITEM(AppData *ad, CNP_ITEM *item, Eina_Bool storage, Eina_Bool show_msg);
+CNP_ITEM *item_add_by_data(AppData *ad, Ecore_X_Atom type, void *data, int len, Eina_Bool show_msg);
+
+CNP_ITEM *item_get_by_index(AppData *ad, int index);
+CNP_ITEM *item_get_by_data(AppData *ad, void *data, int len);
+CNP_ITEM *item_get_last(AppData *ad);
+
+void item_delete_by_CNP_ITEM(AppData *ad, CNP_ITEM *item);
+void item_delete_by_data(AppData *ad, void *data, int len);
+void item_delete_by_index(AppData *ad, int index);
+void item_clear_all(AppData *ad);
+int item_count_get(AppData *ad, int atom_index);
+
+#endif /*_ITEM_MANAGER_H_*/
+
diff --git a/2.2/src/main.c b/2.2/src/main.c
new file mode 100644 (file)
index 0000000..ee32dbd
--- /dev/null
@@ -0,0 +1,204 @@
+/*
+ * 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.
+ *
+ */
+#include <appcore-efl.h>
+#include <Ecore_X.h>
+#include <systemd/sd-daemon.h>
+#include <X11/Xlib.h>
+#include <X11/Xatom.h>
+#include <X11/extensions/XInput.h>
+#include <X11/extensions/XInput2.h>
+#include <X11/extensions/XI2.h>
+#include <X11/extensions/XIproto.h>
+
+#include "cbhm.h"
+
+#define CLIPBOARD_MANAGER_WINDOW_TITLE_STRING "X11_CLIPBOARD_HISTORY_MANAGER"
+#define ATOM_CLIPBOARD_MANAGER_NAME "CLIPBOARD_MANAGER"
+
+static AppData *g_main_ad = NULL;
+
+int _log_domain = -1;
+
+void *d_malloc(const char *func, int line, size_t size)
+{
+       char *m = malloc(size);
+       DBG("in %s, %d: 0x%p = malloc(%d)", func, line, m, size);
+       return m;
+}
+void *d_calloc(const char *func, int line, size_t n, size_t size)
+{
+       char *m = calloc(n, size);
+       DBG("in %s, %d: 0x%p = calloc(%d)", func, line, m, size);
+       return m;
+}
+void d_free(const char *func, int line, void *m)
+{
+       DBG("in %s, %d: free(0x%p)", func, line, m);
+       free(m);
+}
+
+static Eina_Bool setClipboardManager(AppData *ad)
+{
+       if (!ad) return EINA_FALSE;
+
+       if(!ecore_file_mkpath(COPIED_DATA_STORAGE_DIR))
+               DBG("ecore_file_mkpath fail");
+
+       ad->x_disp = ecore_x_display_get();
+       DBG("x_disp: 0x%p", ad->x_disp);
+       if (ad->x_disp)
+       {
+               Ecore_X_Atom clipboard_manager_atom = XInternAtom(ad->x_disp, ATOM_CLIPBOARD_MANAGER_NAME, False);
+               Ecore_X_Window clipboard_manager = XGetSelectionOwner(ad->x_disp, clipboard_manager_atom);
+               DBG("clipboard_manager_window: 0x%x", clipboard_manager);
+               if (!clipboard_manager)
+               {
+                       ad->x_root_win = DefaultRootWindow(ad->x_disp);
+                       if (ad->x_root_win)
+                       {
+                               ad->x_event_win = ecore_x_window_new(ad->x_root_win, 0, 0, 19, 19);
+                               DBG("x_event_win: 0x%x", ad->x_event_win);
+                               if (ad->x_event_win)
+                               {
+                                       XSetSelectionOwner(ad->x_disp, clipboard_manager_atom, ad->x_event_win, CurrentTime);
+                                       Ecore_X_Window clipboard_manager = XGetSelectionOwner(ad->x_disp, clipboard_manager_atom);
+                                       DBG("clipboard_manager: 0x%x", clipboard_manager);
+                                       if (ad->x_event_win == clipboard_manager)
+                                       {
+                                               return EINA_TRUE;
+                                       }
+                               }
+                       }
+               }
+       }
+       return EINA_FALSE;
+}
+
+static void set_x_window(Ecore_X_Window x_event_win, Ecore_X_Window x_root_win)
+{
+       ecore_x_netwm_name_set(x_event_win, CLIPBOARD_MANAGER_WINDOW_TITLE_STRING);
+       ecore_x_event_mask_set(x_event_win,
+                       ECORE_X_EVENT_MASK_WINDOW_PROPERTY);
+       ecore_x_event_mask_set(x_root_win,
+                       ECORE_X_EVENT_MASK_WINDOW_CONFIGURE);
+       ecore_x_window_prop_property_set(
+                       x_root_win, ecore_x_atom_get("CBHM_XWIN"),
+                       XA_WINDOW, 32, &x_event_win, 1);
+       ecore_x_flush();
+}
+
+static int app_create(void *data)
+{
+       AppData *ad = (AppData *)data;
+
+       ecore_x_init(ad->x_disp);
+       _log_domain = eina_log_domain_register("cbhm", EINA_COLOR_LIGHTBLUE);
+       if (!_log_domain)
+               {
+                       EINA_LOG_ERR("could not register cbhm log domain.");
+                       _log_domain = EINA_LOG_DOMAIN_GLOBAL;
+               }
+
+       if (!setClipboardManager(ad))
+       {
+               DBG("Clipboard Manager set failed");
+               return EXIT_FAILURE;
+       }
+
+       set_x_window(ad->x_event_win, ad->x_root_win);
+
+       if (!ecore_init()) return EXIT_FAILURE;
+       if (!ecore_evas_init()) return EXIT_FAILURE;
+       if (!edje_init()) return EXIT_FAILURE;
+       ad->magic = CBHM_MAGIC;
+       init_target_atoms(ad);
+       if (!(ad->clipdrawer = init_clipdrawer(ad))) return EXIT_FAILURE;
+
+       //set env for root.
+       setenv("HOME", "/", 1);
+       if (!(ad->xhandler = init_xhandler(ad))) return EXIT_FAILURE;
+       if (!(ad->storage = init_storage(ad))) return EXIT_FAILURE;
+       slot_item_count_set(ad);
+
+       set_selection_owner(ad, ECORE_X_SELECTION_CLIPBOARD, NULL);
+       return 0;
+}
+
+static int app_terminate(void *data)
+{
+       AppData *ad = data;
+
+       item_clear_all(ad);
+       depose_clipdrawer(ad->clipdrawer);
+       depose_xhandler(ad->xhandler);
+       depose_storage(ad->storage);
+       depose_target_atoms(ad);
+       FREE(ad);
+
+       eina_log_domain_unregister(_log_domain);
+       _log_domain = -1;
+
+       return 0;
+}
+
+static int app_pause(void *data)
+{
+       AppData *ad = data;
+       Ecore_X_Illume_Clipboard_State state = ecore_x_e_illume_clipboard_state_get(ad->x_active_win);
+       if(state == ECORE_X_ILLUME_CLIPBOARD_STATE_ON)
+       {
+               clipdrawer_lower_view(ad);
+       }
+       return 0;
+}
+
+static int app_resume(void *data)
+{
+       return 0;
+}
+
+static int app_reset(bundle *b, void *data)
+{
+       return 0;
+}
+
+int main(int argc, char *argv[])
+{
+       AppData *ad;
+
+       struct appcore_ops ops = {
+               .create = app_create,
+               .terminate = app_terminate,
+               .pause = app_pause,
+               .resume = app_resume,
+               .reset = app_reset,
+       };
+
+       ad = calloc(1, sizeof(AppData));
+       ops.data = ad;
+       g_main_ad = ad;
+
+       appcore_set_i18n(PACKAGE, LOCALEDIR);
+
+       // Notyfication to systemd
+       sd_notify(1, "READY=1");
+
+       //set env app for changeable UI.
+       setenv("HOME", "/opt/home/app" , 1);
+
+       return appcore_efl_main(PACKAGE, &argc, &argv, &ops);
+}
diff --git a/2.2/src/storage.c b/2.2/src/storage.c
new file mode 100644 (file)
index 0000000..d126f4f
--- /dev/null
@@ -0,0 +1,452 @@
+/*
+ * 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.
+ *
+ */
+
+#include <Ecore_File.h>
+
+#include "storage.h"
+#define STORAGE_FILEPATH "/opt/var/.cbhm_data"
+#define STORAGE_KEY_INDEX_FORMAT "<index%02d>"
+#define STORAGE_KEY_ITEM_FORMAT "<item%02d%s>"
+#define STORAGE_INDEX_ITEM_NONE 0.0
+
+static Eina_Bool item_write(Eet_File *ef, int index, CNP_ITEM *item);
+static Eina_Bool item_delete(Eet_File *ef, int index);
+static Eina_Bool storage_index_write(StorageData *sd, int index);
+static Eina_Bool storage_item_write(AppData *ad, CNP_ITEM *item);
+static Eina_Bool storage_item_delete(AppData *ad, CNP_ITEM *item);
+static Eina_Bool storage_item_update(AppData *ad, CNP_ITEM *item);
+static CNP_ITEM *storage_item_load(StorageData *sd, int index);
+//static void dump_items(StorageData *sd);
+
+static int getMinIndex(indexType *indexTable, int len)
+{
+       int i = 0;
+       int minIndex;
+       indexType min;
+       min = indexTable[i];
+       minIndex = i;
+
+       for (i = 1; i < len; i++)
+       {
+               if ((min > indexTable[i]))
+               {
+                       min = indexTable[i];
+                       minIndex = i;
+               }
+       }
+       return minIndex;
+}
+
+static int getMaxIndex(indexType *indexTable, int len)
+{
+       int i = 0;
+       indexType max = indexTable[i];
+       int maxIndex = i;
+       for (i = 1; i < len; i++)
+       {
+               if (max < indexTable[i])
+               {
+                       max = indexTable[i];
+                       maxIndex = i;
+               }
+       }
+       return maxIndex;
+}
+
+StorageData *init_storage(AppData *ad)
+{
+       CALLED();
+       StorageData *sd = CALLOC(1, sizeof(StorageData));
+       if (!sd) return EINA_FALSE;
+
+       eet_init();
+       ecore_file_init();
+
+       sd->ef = eet_open(STORAGE_FILEPATH, EET_FILE_MODE_READ_WRITE);
+
+       if (sd->ef)
+       {
+               char datakey[20];
+               int i, j;
+               int index;
+               int index_order[ITEM_CNT_MAX];
+               int read_size;
+               indexType *read_data;
+               indexType temp[ITEM_CNT_MAX];
+
+               // Initialize index data in file
+               for (i = 0; i < ITEM_CNT_MAX; i++)
+               {
+                       sd->itemTable[i] = NULL;
+                       sd->indexTable[i] = STORAGE_INDEX_ITEM_NONE;
+               }
+
+               // Load index data from file
+               for (i = 0; i < ITEM_CNT_MAX; i++)
+               {
+                       snprintf(datakey, sizeof(datakey), STORAGE_KEY_INDEX_FORMAT, i);
+                       read_data = eet_read(sd->ef, datakey, &read_size);
+                       if (read_data && read_size > 0)
+                               temp[i] = atol((char *)read_data);
+                       else
+                               temp[i] = STORAGE_INDEX_ITEM_NONE;
+                       free(read_data);
+               }
+
+               // Load item data from file
+               for (i = 0, index = 0; i < ITEM_CNT_MAX; i++)
+               {
+                       int maxIndex = getMaxIndex(temp, ITEM_CNT_MAX);
+                       if (temp[maxIndex] == STORAGE_INDEX_ITEM_NONE)
+                               break;
+                       else
+                       {
+                               sd->itemTable[maxIndex] = storage_item_load(sd, maxIndex);
+                               sd->indexTable[maxIndex] = temp[maxIndex];
+                               temp[maxIndex] = STORAGE_INDEX_ITEM_NONE;
+                               index_order[index] = maxIndex;
+                               index++;
+                       }
+               }
+
+               // Add loaded item to clipboard
+               if (index > 0)
+               {
+                       for (i = index - 1; i >= 0; i--)
+                       {
+                               j = index_order[i];
+                               if (sd->itemTable[j])
+                                       item_add_by_CNP_ITEM(ad, sd->itemTable[j], EINA_FALSE, EINA_FALSE);
+                       }
+               }
+               else
+               {
+                       DBG("load storage index failed");
+               }
+       }
+       else
+               DBG("storage ef is NULL");
+
+       //dump_items(sd);
+
+       ad->storage_item_add = storage_item_write;
+       ad->storage_item_del = storage_item_delete;
+       ad->storage_item_load = storage_item_load;
+       ad->storage_item_update = storage_item_update;
+
+       return sd;
+}
+
+void depose_storage(StorageData *sd)
+{
+       CALLED();
+       //dump_items(sd);
+       if (sd->ef)
+               eet_close(sd->ef);
+       sd->ef = NULL;
+       eet_shutdown();
+       ecore_file_shutdown();
+}
+/*
+static void dump_items(StorageData *sd)
+{
+       CALLED();
+       int i;
+       for (i = 0; i < ITEM_CNT_MAX; i++)
+       {
+               CNP_ITEM *item = storage_item_load(sd, i);
+               if (item)
+                       DBG("item #%d type_index: 0x%x, gitem_style: 0x%x, data: %s\n, len: %d\n, file: %s\n, file_len: %d\n", i, item->type_index, item->gitem_style, (char *)item->data, item->len, (char *)item->file, item->file_len);
+               free(item);
+       }
+}
+*/
+static Eina_Bool item_write(Eet_File *ef, int index, CNP_ITEM *item)
+{
+       if (!ef)
+       {
+               ERR("eet_file is NULL");
+               return EINA_FALSE;
+       }
+       if (!item)
+       {
+               ERR("item is NULL");
+               return EINA_FALSE;
+       }
+
+       Eina_Bool ret = EINA_FALSE;
+       char datakey[20];
+       char write_data[10];
+
+       if (item->len > 0) {
+               snprintf(datakey, sizeof(datakey), STORAGE_KEY_ITEM_FORMAT, index, "data");
+               ret = eet_write(ef, datakey, item->data, item->len, 1);
+       }
+
+       if (item->file_len > 0) {
+               snprintf(datakey, sizeof(datakey), STORAGE_KEY_ITEM_FORMAT, index, "file");
+               ret &= eet_write(ef, datakey, item->file, item->file_len, 1);
+       }
+
+       snprintf(datakey, sizeof(datakey), STORAGE_KEY_ITEM_FORMAT, index, "type_index");
+       snprintf(write_data, sizeof(write_data), "%d", item->type_index);
+       ret &= eet_write(ef, datakey, write_data, strlen(write_data) + 1, 1);
+
+       snprintf(datakey, sizeof(datakey), STORAGE_KEY_ITEM_FORMAT, index, "gitem_style");
+       snprintf(write_data, sizeof(write_data), "%d", item->gitem_style);
+       ret &= eet_write(ef, datakey, write_data, strlen(write_data) + 1, 1);
+
+       snprintf(datakey, sizeof(datakey), STORAGE_KEY_ITEM_FORMAT, index, "locked");
+       snprintf(write_data, sizeof(write_data), "%d", item->locked);
+       ret &= eet_write(ef, datakey, write_data, strlen(write_data) + 1, 1);
+
+       eet_sync(ef);
+       DBG("write result: %d, item index: %d", ret, index);
+
+       return ret != 0;
+}
+
+static Eina_Bool item_delete(Eet_File *ef, int index)
+{
+       if (!ef)
+       {
+               ERR("eet_file is NULL");
+               return EINA_FALSE;
+       }
+
+       Eina_Bool ret;
+       char datakey[20];
+
+       snprintf(datakey, sizeof(datakey), STORAGE_KEY_ITEM_FORMAT, index, "data");
+       ret = eet_delete(ef, datakey);
+
+       snprintf(datakey, sizeof(datakey), STORAGE_KEY_ITEM_FORMAT, index, "type_index");
+       ret &= eet_delete(ef, datakey);
+
+       snprintf(datakey, sizeof(datakey), STORAGE_KEY_ITEM_FORMAT, index, "gitem_style");
+       ret &= eet_delete(ef, datakey);
+
+       snprintf(datakey, sizeof(datakey), STORAGE_KEY_ITEM_FORMAT, index, "locked");
+       ret &= eet_delete(ef, datakey);
+
+       eet_sync(ef);
+       DBG("delete result: %d, item index: %d", ret, index);
+
+       return ret != 0;
+}
+
+static Eina_Bool storage_item_update(AppData *ad, CNP_ITEM *item)
+{
+       CALLED();
+       StorageData *sd = ad->storage;
+       CNP_ITEM *temp;
+       Eina_Bool ret = EINA_FALSE;
+       int index;
+       char datakey[20];
+       char write_data[10];
+
+       if (!item)
+       {
+               ERR("item is NULL");
+               return EINA_FALSE;
+       }
+
+       for (index = 0; index < ITEM_CNT_MAX; index++)
+       {
+               temp = sd->itemTable[index];
+
+               if (temp &&
+                        (item->type_index == temp->type_index) &&
+                        (!SAFE_STRCMP(item->data, temp->data)))
+                       break;
+       }
+       //delete before value.
+       snprintf(datakey, sizeof(datakey), STORAGE_KEY_ITEM_FORMAT, index, "locked");
+       ret &= eet_delete(sd->ef, datakey);
+       eet_sync(sd->ef);
+
+       //rewrite locked value.
+       snprintf(datakey, sizeof(datakey), STORAGE_KEY_ITEM_FORMAT, index, "locked");
+       snprintf(write_data, sizeof(write_data), "%d", item->locked);
+       ret &= eet_write(sd->ef, datakey, write_data, strlen(write_data) + 1, 1);
+       eet_sync(sd->ef);
+
+       return ret != 0;
+
+}
+
+static Eina_Bool storage_item_write(AppData *ad, CNP_ITEM *item)
+{
+       CALLED();
+       StorageData *sd = ad->storage;
+       CNP_ITEM *temp;
+       Eina_Bool ret = EINA_TRUE;
+       int index;
+
+       if (!item)
+       {
+               ERR("item is NULL");
+               return EINA_FALSE;
+       }
+
+       for (index = 0; index < ITEM_CNT_MAX; index++)
+       {
+               temp = sd->itemTable[index];
+
+               if (temp &&
+                        (item->type_index == temp->type_index) &&
+                        (!SAFE_STRCMP(item->data, temp->data)))
+                       break;
+       }
+
+       // Item does not exist in clipboard
+       if (index == ITEM_CNT_MAX)
+       {
+               index = getMinIndex(sd->indexTable, ITEM_CNT_MAX);
+               ret = item_write(sd->ef, index, item);
+       }
+
+       sd->indexTable[index] = ecore_time_unix_get();
+       sd->itemTable[index] = item;
+       ret &= storage_index_write(sd, index);
+       //dump_items(sd);
+       return ret;
+}
+
+static Eina_Bool storage_item_delete(AppData *ad, CNP_ITEM *item)
+{
+       CALLED();
+       StorageData *sd = ad->storage;
+       Eina_Bool ret = EINA_FALSE;
+       int index;
+
+       for (index = 0; index < ITEM_CNT_MAX; index++)
+       {
+               if (sd->itemTable[index] == item)
+                       break;
+       }
+
+       if (index < ITEM_CNT_MAX)
+       {
+               ret = item_delete(sd->ef, index);
+               sd->indexTable[index] = STORAGE_INDEX_ITEM_NONE;
+               ret &= storage_index_write(sd, index);
+       }
+       return ret;
+}
+
+static CNP_ITEM *storage_item_load(StorageData *sd, int index)
+{
+       if (!sd->ef)
+       {
+               ERR("eet_file is NULL");
+               return NULL;
+       }
+       if (index >= ITEM_CNT_MAX)
+               return NULL;
+
+       char datakey[20];
+       char *read_data;
+       int read_size;
+       CNP_ITEM *item = CALLOC(1, sizeof(CNP_ITEM));
+
+       if (!item) {
+               ERR("item CALLOC failed");
+               return NULL;
+       }
+
+       snprintf(datakey, sizeof(datakey), STORAGE_KEY_ITEM_FORMAT, index, "data");
+       read_data = eet_read(sd->ef, datakey, &read_size);
+       if (read_data){
+           if (read_size > 0) {
+               item->len = read_size;
+               item->data = CALLOC(1, read_size * sizeof(char));
+                       if (item->data) {
+                               memcpy(item->data, read_data, read_size);
+                       }
+                       else {
+                               free(read_data);
+                               FREE(item);
+                               return NULL;
+                       }
+           }
+           free(read_data);
+         }
+
+       snprintf(datakey, sizeof(datakey), STORAGE_KEY_ITEM_FORMAT, index, "file");
+       read_data = eet_read(sd->ef, datakey, &read_size);
+       if (read_data) {
+               if (read_size > 0) {
+               item->file_len = read_size;
+               item->file = CALLOC(1, read_size * sizeof(char));
+               if (item->file)
+                       memcpy(item->file, read_data, read_size);
+               }
+               free(read_data);
+       }
+
+       snprintf(datakey, sizeof(datakey), STORAGE_KEY_ITEM_FORMAT, index, "type_index");
+       read_data = eet_read(sd->ef, datakey, &read_size);
+       if (read_data) {
+               if ( read_size > 0) {
+               item->type_index = atoi(read_data);
+               }
+               free(read_data);
+       }
+
+       snprintf(datakey, sizeof(datakey), STORAGE_KEY_ITEM_FORMAT, index, "gitem_style");
+       read_data = eet_read(sd->ef, datakey, &read_size);
+       if (read_data) {
+               if ( read_size > 0) {
+               item->gitem_style = atoi(read_data);
+               }
+               free(read_data);
+       }
+
+       snprintf(datakey, sizeof(datakey), STORAGE_KEY_ITEM_FORMAT, index, "locked");
+       read_data = eet_read(sd->ef, datakey, &read_size);
+       if (read_data) {
+               if (read_size > 0) {
+               item->locked = atoi(read_data);
+               }
+               free(read_data);
+       }
+
+       return item;
+}
+
+static Eina_Bool storage_index_write(StorageData *sd, int index)
+{
+       CALLED();
+       Eina_Bool ret;
+       char datakey[20];
+       char write_data[50];
+
+       if (!sd->ef)
+       {
+               ERR("eet_file is NULL");
+               return EINA_FALSE;
+       }
+
+       snprintf(datakey, sizeof(datakey), STORAGE_KEY_INDEX_FORMAT, index);
+       snprintf(write_data, sizeof(write_data), "%lf", sd->indexTable[index]);
+       ret = eet_write(sd->ef, datakey, write_data, strlen(write_data) + 1, 1);
+
+       eet_sync(sd->ef);
+
+       return ret != 0;
+}
diff --git a/2.2/src/storage.h b/2.2/src/storage.h
new file mode 100644 (file)
index 0000000..cd9d6a7
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+ * 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 _STORAGE_H_
+#define _STORAGE_H_
+
+#include <Eet.h>
+#include <Eina.h>
+#include <Ecore.h>
+
+#include "cbhm.h"
+
+typedef double indexType; /* Ecore_Time */
+
+struct _StorageData {
+       Eet_File *ef;
+       indexType indexTable[ITEM_CNT_MAX];
+       CNP_ITEM *itemTable[ITEM_CNT_MAX];
+};
+
+StorageData *init_storage(AppData *ad);
+void depose_storage(StorageData *sd);
+#endif
diff --git a/2.2/src/xconverter.c b/2.2/src/xconverter.c
new file mode 100644 (file)
index 0000000..53091b5
--- /dev/null
@@ -0,0 +1,1439 @@
+/*
+ * 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.
+ *
+ */
+
+#include "xconverter.h"
+
+static char *html_to_entry(AppData *ad, int type_index, const char *str);
+static char *efl_to_entry(AppData *ad, int type_index, const char *str);
+static char *text_to_entry(AppData *ad, int type_index, const char *str);
+static char *image_path_to_entry(AppData *ad, int type_index, const char *str);
+static char *polaris_to_entry(AppData *ad, int type_index, const char *str);
+
+//static char *make_close_tag(Eina_List* nodes);
+static char *do_not_convert(AppData *ad, int type_index, const char *str);
+static char *html_to_efl(AppData *ad, int type_index, const char *str);
+static char *efl_to_html(AppData *ad, int type_index, const char *str);
+static char *text_to_html(AppData *ad, int type_index, const char *str);
+static char *text_to_efl(AppData *ad, int type_index, const char *str);
+static char *to_text(AppData *ad, int type_index, const char *str);
+static char *image_path_to_html(AppData *ad, int type_index, const char *str);
+static char *image_path_to_efl(AppData *ad, int type_index, const char *str);
+//static char *image_path_to_text(AppData *ad, int type_index, const char *str);
+//static char *efl_to_efl(AppData *ad, int type_index, const char *str);
+//static char *html_to_html(AppData *ad, int type_index, const char *str);
+static char *image_path_to_image_path(AppData *ad, int type_index, const char *str);
+static char *html_to_image_path(AppData *ad, int type_index, const char *str);
+static char *efl_to_image_path(AppData *ad, int type_index, const char *str);
+
+int atom_type_index_get(AppData *ad, Ecore_X_Atom atom)
+{
+       int i, j;
+       for (i = 0; i < ATOM_INDEX_MAX; i++)
+       {
+               for (j = 0; j < ad->targetAtoms[i].atom_cnt; j++)
+                       if (ad->targetAtoms[i].atom[j] == atom)
+                               return i;
+       }
+       return -1;
+}
+
+void init_target_atoms(AppData *ad)
+{
+       int atom_cnt[ATOM_INDEX_MAX] = {
+               1, 5, 2, 1, 2, 1
+       };
+       char *targetAtomNames[][5] = {
+               { "TARGETS" },
+               { "UTF8_STRING", "STRING", "TEXT", "text/plain;charset=utf-8", "text/plain" },
+               { "text/html;charset=utf-8", "text/html" },
+               { "application/x-elementary-markup" },
+               { "text/uri", "text/uri-list" },
+               { "polaris-markup" }
+       };
+       text_converter_func converts_to_entry[ATOM_INDEX_MAX] = {
+               NULL, text_to_entry, html_to_entry, efl_to_entry, image_path_to_entry, polaris_to_entry
+       };
+
+       text_converter_func converts[ATOM_INDEX_MAX][ATOM_INDEX_MAX] = {
+               {NULL, NULL, NULL, NULL, NULL, NULL},
+               {NULL, do_not_convert, text_to_html, text_to_efl, NULL, NULL},
+               {NULL, to_text, do_not_convert, html_to_efl, html_to_image_path, NULL},
+               {NULL, to_text, efl_to_html, do_not_convert, efl_to_image_path, NULL},
+               {NULL, NULL, image_path_to_html, image_path_to_efl, image_path_to_image_path, NULL},
+               {NULL, to_text, NULL, NULL, NULL, do_not_convert}
+       };
+
+       int i, j;
+       for (i = 0; i < ATOM_INDEX_MAX; i++)
+       {
+               ad->targetAtoms[i].atom_cnt = atom_cnt[i];
+               ad->targetAtoms[i].name = MALLOC(sizeof(char *) * atom_cnt[i]);
+               ad->targetAtoms[i].atom = MALLOC(sizeof(Ecore_X_Atom) * atom_cnt[i]);
+               for (j = 0; j < atom_cnt[i]; j++)
+               {
+                       DBG("atomName: %s", targetAtomNames[i][j]);
+                       ad->targetAtoms[i].name[j] = SAFE_STRDUP(targetAtomNames[i][j]);
+                       ad->targetAtoms[i].atom[j] = ecore_x_atom_get(targetAtomNames[i][j]);
+               }
+               ad->targetAtoms[i].convert_to_entry = converts_to_entry[i];
+
+               for (j = 0; j < ATOM_INDEX_MAX; j++)
+                       ad->targetAtoms[i].convert_to_target[j] = converts[i][j];
+               //ecore_x_selection_converter_atom_add(ad->targetAtoms[i].atom, target_converters[i]);
+               //ecore_x_selection_converter_atom_add(ad->targetAtoms[i].atom, generic_converter);
+       }
+}
+
+void depose_target_atoms(AppData *ad)
+{
+       int i, j;
+       for (i = 0; i < ATOM_INDEX_MAX; i++)
+       {
+               for (j = 0; j < ad->targetAtoms[i].atom_cnt; j++)
+               {
+                       if (ad->targetAtoms[i].name[j])
+                               FREE(ad->targetAtoms[i].name[j]);
+               }
+               if (ad->targetAtoms[i].name)
+                       FREE(ad->targetAtoms[i].name);
+               if (ad->targetAtoms[i].atom)
+                       FREE(ad->targetAtoms[i].atom);
+       }
+}
+
+static Eina_Bool targets_converter(AppData *ad, Ecore_X_Atom reqAtom, CNP_ITEM *item, void **data_ret, int *size_ret, Ecore_X_Atom *ttype, int *tsize)
+{
+       CALLED();
+
+       int count;
+       int i, j;
+       int item_type_index = ATOM_INDEX_TEXT;
+       char *file = NULL;
+
+       if (item)
+       {
+               item_type_index = item->type_index;
+               file = item->file;
+       }
+
+       if (!file || item->img_from_web)
+       {
+               if (item_type_index == ATOM_INDEX_HTML)
+                       ad->targetAtoms[item_type_index].convert_to_target[ATOM_INDEX_IMAGE] = NULL;
+               else if (item_type_index == ATOM_INDEX_EFL)
+                       ad->targetAtoms[item_type_index].convert_to_target[ATOM_INDEX_IMAGE] = NULL;
+       }
+
+       for (i = 0, count = 0; i < ATOM_INDEX_MAX; i++)
+       {
+               if (ad->targetAtoms[item_type_index].convert_to_target[i])
+                       count += ad->targetAtoms[i].atom_cnt;
+       }
+
+       *data_ret = MALLOC(sizeof(Ecore_X_Atom) * count);
+       DBG("item_type: %d, target Atom cnt: %d", item_type_index, count);
+       if (!*data_ret)
+               return EINA_FALSE;
+
+       for (i = 0, count = 0; i < ATOM_INDEX_MAX; i++)
+       {
+               if (ad->targetAtoms[item_type_index].convert_to_target[i])
+               {
+                       for(j = 0; j < ad->targetAtoms[i].atom_cnt; j++)
+                       {
+                               ((Ecore_X_Atom *)*data_ret)[count++] = ad->targetAtoms[i].atom[j];
+                               DBG("send target atom: %s", ad->targetAtoms[i].name[j]);
+                       }
+               }
+       }
+
+       if (!file)
+       {
+               if (item_type_index == ATOM_INDEX_HTML)
+                       ad->targetAtoms[item_type_index].convert_to_target[ATOM_INDEX_IMAGE] = html_to_image_path;
+               else if (item_type_index == ATOM_INDEX_EFL)
+                       ad->targetAtoms[item_type_index].convert_to_target[ATOM_INDEX_IMAGE] = efl_to_image_path;
+       }
+
+       if (size_ret) *size_ret = count;
+       if (ttype) *ttype = ECORE_X_ATOM_ATOM;
+       if (tsize) *tsize = 32;
+       return EINA_TRUE;
+}
+
+Eina_Bool generic_converter(AppData *ad, Ecore_X_Atom reqAtom, CNP_ITEM *item, void **data_ret, int *size_ret, Ecore_X_Atom *ttype, int *tsize)
+{
+       CALLED();
+
+       if (ad->targetAtoms[ATOM_INDEX_TARGET].atom[0] == reqAtom)
+               return targets_converter(ad, reqAtom, item, data_ret, size_ret, ttype, tsize);
+
+       int req_index = atom_type_index_get(ad, reqAtom);
+       int item_type_index = ATOM_INDEX_TEXT;
+       void *item_data = "";
+
+       if (req_index < 0) return EINA_FALSE;
+
+       if (item)
+       {
+               item_type_index = item->type_index;
+               item_data = item->data;
+       }
+
+       if (ad->targetAtoms[item_type_index].convert_to_target[req_index])
+       {
+               *data_ret = ad->targetAtoms[item_type_index].convert_to_target[req_index](ad, item_type_index, item_data);
+               if (!*data_ret)
+                       return EINA_FALSE;
+               if (size_ret) *size_ret = SAFE_STRLEN(*data_ret);
+               if (ttype) *ttype = ad->targetAtoms[item_type_index].atom[0];
+               if (tsize) *tsize = 8;
+               return EINA_TRUE;
+       }
+
+       return EINA_FALSE;
+}
+
+/* For convert EFL to HTML */
+
+#define TAGPOS_START    0x00000001
+#define TAGPOS_END      0x00000002
+#define TAGPOS_ALONE    0x00000003
+
+/* TEXTBLOCK tag using stack but close tag word has no mean maybe bug...
+ * TEXTBLOCK <b>bold<font>font</b>bold</font>
+ * HTML <b>bold<font>font bold</b>font</font> */
+
+typedef struct _TagTable {
+       char *src;
+       char *dst;
+}TagTable;
+
+TagTable _EFLtoHTMLConvertTable[] = {
+       {"font", "font"},
+       {"underline", "del"},
+       {"strikethrough", "ins"},
+       {"br", "br"},
+       {"br/", "br"},
+       {"ps", "br"},
+       {"b", "b"},
+       {"item", "img"}
+};
+
+TagTable _HTMLtoEFLConvertTable[] = {
+       {"font", ""},
+       {"del", "underline"},
+       {"u", "underline"},
+       {"ins", "strikethrough"},
+       {"s", "strikethrough"},
+       {"br", "br"},
+       {"b", "b"},
+       {"strong", "b"},
+       {"img", "item"}
+};
+
+
+typedef struct _TagNode TagNode, *PTagNode;
+struct _TagNode {
+       char *tag;  //EINA_STRINGSHARE if NULL just str
+       char *tag_str;
+       char *str;
+       const char *pos_in_ori_str;
+       PTagNode matchTag;
+       void *tagData;
+       unsigned char tagPosType;
+};
+
+typedef struct _FontTagData FontTagData, *PFontTagData;
+struct _FontTagData {
+       char *name;
+       char *color;
+       char *size;
+       char *bg_color;
+};
+
+
+typedef struct _ItemTagData ItemTagData, *PItemTagData;
+struct _ItemTagData {
+       char *href;
+       char *width;
+       char *height;
+};
+
+#define SAFEFREE(ptr) \
+       do\
+{\
+       if (ptr)\
+       FREE(ptr);\
+       ptr = NULL;\
+} while(0);\
+
+#define freeAndAssign(dst, value) \
+       do\
+{\
+       if (value)\
+       {\
+               SAFEFREE(dst);\
+               dst = value;\
+       }\
+} while(0);
+
+static PTagNode _new_tag_node(char *tag, char *tag_str, char* str, const char *pos_in_ori_str);
+static PTagNode _get_start_node(const char *str);
+static PTagNode _get_next_node(PTagNode prev);
+static void _delete_node(PTagNode node);
+static void _link_match_tags(Eina_List *nodes);
+static char *_get_tag_value(const char *tag_str, const char *tag_name);
+static char *_convert_to_html(Eina_List* nodes);
+static void _set_EFL_tag_data(Eina_List* nodes);
+static char *_convert_to_edje(Eina_List* nodes);
+static void _set_HTML_tag_data(Eina_List* nodes);
+static void cleanup_tag_list(Eina_List *nodeList);
+static PFontTagData _set_EFL_font_data(PFontTagData data, const char *tag_str);
+static PItemTagData _set_EFL_item_data(PItemTagData data, const char *tag_str);
+static PFontTagData _set_HTML_font_data(PFontTagData data, const char *tag_str);
+static PItemTagData _set_HTML_img_data(PItemTagData data, const char *tag_str);
+
+static void _dumpNode(Eina_List* nodes);
+
+static PTagNode
+_new_tag_node(char *tag, char *tag_str, char* str, const char *pos_in_ori_str)
+{
+       PTagNode newNode = CALLOC(1, sizeof(TagNode));
+       if (tag)
+               eina_str_tolower(&tag);
+       newNode->tag = tag;
+       newNode->tag_str = tag_str;
+       newNode->str = str;
+       newNode->pos_in_ori_str = pos_in_ori_str;
+       return newNode;
+}
+
+static PTagNode
+_get_start_node(const char *str)
+{
+       char *startStr = NULL;
+       if (!str || str[0] == '\0')
+               return NULL;
+
+       if (str[0] != '<')
+       {
+               char *tagStart = SAFE_STRCHR(str, '<');
+               if (!tagStart)
+                       startStr = SAFE_STRDUP(str);
+               else
+               {
+                       int strLength = tagStart - str;
+                       startStr = MALLOC(sizeof(char) * (strLength + 1));
+                       SAFE_STRNCPY(startStr, str, strLength);
+                       startStr[strLength] = '\0';
+               }
+       }
+
+       return _new_tag_node(NULL, NULL, startStr, str);
+}
+
+static PTagNode
+_get_next_node(PTagNode prev)
+{
+       PTagNode retTag = NULL;
+       char *tagStart;
+       char *tagEnd;
+       char *tagNameEnd = NULL;
+       char *nextTagStart;
+
+       if (prev->tag == NULL)
+               tagStart = SAFE_STRCHR(prev->pos_in_ori_str, '<');
+       else
+               tagStart = SAFE_STRCHR(prev->pos_in_ori_str + 1, '<');
+
+       if (!tagStart)
+               return retTag;
+
+       tagEnd = SAFE_STRCHR(tagStart, '>');
+       nextTagStart = SAFE_STRCHR(tagStart + 1, '<');
+
+       if (!tagEnd || (nextTagStart && (nextTagStart < tagEnd)))
+               return _get_start_node(tagStart + 1);
+
+       int spCnt = 5;
+       char *spArray[spCnt];
+       spArray[0] = SAFE_STRCHR(tagStart, '=');
+       spArray[1] = SAFE_STRCHR(tagStart, '_');
+       spArray[2] = SAFE_STRCHR(tagStart, ' ');
+       spArray[3] = SAFE_STRCHR(tagStart, '\t');
+       spArray[4] = SAFE_STRCHR(tagStart, '\n');
+       tagNameEnd = tagEnd;
+
+       int i;
+       for (i = 0; i < spCnt; i++)
+       {
+               if (spArray[i] && spArray[i] < tagNameEnd)
+                       tagNameEnd = spArray[i];
+       }
+
+       int tagLength = tagNameEnd - tagStart - 1;
+       char *tagName = NULL;
+       if (!SAFE_STRNCMP(&tagStart[1], "/item", tagLength))
+               tagName = SAFE_STRDUP("");
+       else
+               tagName = SAFE_STRNDUP(&tagStart[1], tagLength);
+
+       int tagStrLength = 0;
+       char *tagStr = NULL;
+       if (tagName)
+       {
+               tagStrLength = tagEnd - tagStart + 1;
+               tagStr = SAFE_STRNDUP(tagStart, tagStrLength);
+       }
+
+       unsigned int strLength = nextTagStart ? (unsigned int)(nextTagStart - tagEnd - 1) : SAFE_STRLEN(&tagEnd[1]);
+       char *str = SAFE_STRNDUP(&tagEnd[1], strLength);
+
+       retTag = _new_tag_node(tagName, tagStr, str, tagStart);
+       return retTag;
+}
+
+
+static void
+_delete_node(PTagNode node)
+{
+       if (node)
+       {
+               SAFEFREE(node->tag_str);
+               SAFEFREE(node->str);
+
+               if (node->tagData)
+               {
+                       if (node->tag)
+                       {
+                               if (!SAFE_STRCMP("font", node->tag))
+                               {
+                                       PFontTagData data = node->tagData;
+                                       SAFEFREE(data->name);
+                                       SAFEFREE(data->color);
+                                       SAFEFREE(data->size);
+                                       SAFEFREE(data->bg_color);
+                               }
+                               if (!SAFE_STRCMP("item", node->tag))
+                               {
+                                       PItemTagData data = node->tagData;
+                                       SAFEFREE(data->href);
+                                       SAFEFREE(data->width);
+                                       SAFEFREE(data->height);
+                               }
+                       }
+                       SAFEFREE(node->tagData);
+               }
+               SAFEFREE(node->tag);
+               SAFEFREE(node);
+       }
+}
+
+static void
+_link_match_tags(Eina_List *nodes)
+{
+       Eina_List *stack = NULL;
+
+       PTagNode trail, popData;
+       Eina_List *l, *r;
+
+       EINA_LIST_FOREACH(nodes, l, trail)
+       {
+               if (!trail || !trail->tag || trail->tag[0] == '\0') continue;
+
+               if (!SAFE_STRCMP("br", trail->tag) || !SAFE_STRCMP("br/", trail->tag))
+               {
+                       trail->tagPosType = TAGPOS_ALONE;
+                       continue;
+               }
+               else if (!SAFE_STRCMP("item", trail->tag) || !SAFE_STRCMP("img", trail->tag))
+               {
+                       trail->tagPosType = TAGPOS_ALONE;
+                       continue;
+               }
+
+               if (trail->tag[0] != '/') // PUSH
+               {
+                       stack = eina_list_append(stack, trail);
+                       /*             eina_array_push(stack, trail);
+                                                  DBG("stack: %d, tag %s", eina_array_count_get(stack), trail->tag);*/
+                       DBG("stack: %d, tag %s", eina_list_count(stack), trail->tag);
+               }
+               else // POP
+               {
+                       if (!eina_list_count(stack))
+                       {
+                               WRN("tag not matched %s", trail->tag);
+                               continue;
+                       }
+
+                       EINA_LIST_REVERSE_FOREACH(stack, r, popData)
+                       {
+                               if (!popData || !popData->tag || popData->tag[0] == '\0') continue;
+
+                               if (!SAFE_STRCMP(popData->tag, &trail->tag[1]))
+                               {
+                                       popData->tagPosType = TAGPOS_START;
+                                       trail->tagPosType = TAGPOS_END;
+                                       popData->matchTag = trail;
+                                       trail->matchTag = popData;
+                                       stack = eina_list_remove_list(stack, r);
+                                       break;
+                               }
+                       }
+                       /*             popData = eina_array_pop(stack);
+
+                                                  popData->tagPosType = TAGPOS_START;
+                                                  trail->tagPosType = TAGPOS_END;
+                                                  popData->matchTag = trail;
+                                                  trail->matchTag = popData;
+                                                  DBG("pop stack: %d, tag %s", eina_array_count_get(stack), trail->tag);
+                        */
+               }
+       }
+
+       /*   if (eina_array_count_get(stack))
+                DBG("stack state: %d, tag %s", eina_array_count_get(stack), trail->tag);*/
+
+       /* Make Dummy close tag */
+       /*   while ((popData = eina_array_pop(stack)))  */
+
+       EINA_LIST_REVERSE_FOREACH(stack, r, popData)
+       {
+               if (!popData) continue;
+
+               PTagNode newData;
+               int tagLength = SAFE_STRLEN(popData->tag);
+               char *tagName = MALLOC(sizeof(char) * (tagLength + 2));
+               if (!tagName) break;
+
+               tagName[0] = '/';
+               tagName[1] = '\0';
+               SAFE_STRCAT(tagName, popData->tag);
+
+               newData = _new_tag_node(tagName, NULL, NULL, NULL);
+               popData->tagPosType = TAGPOS_START;
+               newData->tagPosType = TAGPOS_END;
+               popData->matchTag = newData;
+               newData->matchTag = popData;
+               nodes = eina_list_append(nodes, newData);
+               /*        DBG("stack: %d, tag %s", eina_array_count_get(stack), popData->tag);*/
+       }
+       /*   DBG("stack_top: %d", eina_array_count_get(stack));
+                eina_array_free(stack);*/
+       eina_list_free(stack);
+}
+
+static char *
+_get_tag_value(const char *tag_str, const char *tag_name)
+{
+       if (!tag_name || !tag_str)
+               return NULL;
+
+       char *tag;
+       if ((tag = SAFE_STRSTR(tag_str, tag_name)))
+       {
+               if (tag[SAFE_STRLEN(tag_name)] == '_')
+                       return NULL;
+               char *value = SAFE_STRCHR(tag, '=');
+               if (value)
+               {
+                       do
+                       {
+                               value++;
+                       } while (!isalnum(*value) && *value != '#');
+
+                       int spCnt = 6;
+                       char *spArray[spCnt];
+                       spArray[0] = SAFE_STRCHR(value, ' ');
+                       spArray[1] = SAFE_STRCHR(value, '>');
+                       spArray[2] = SAFE_STRCHR(value, '\"');
+                       spArray[3] = SAFE_STRCHR(value, '\'');
+                       spArray[4] = SAFE_STRCHR(value, '\t');
+                       spArray[5] = SAFE_STRCHR(value, '\n');
+                       char *valueEnd = SAFE_STRCHR(value, '\0');
+
+                       int i;
+                       int start = 0;
+                       if ((!SAFE_STRNCMP(tag_str, "<item", 5) && !SAFE_STRCMP(tag_name, "href")) // EFL img tag
+               || (!SAFE_STRNCMP(tag_str, "<img", 4) && !SAFE_STRCMP(tag_name, "src"))) // HTML img tag
+               start = 1;
+
+                       for (i = start; i < spCnt; i++)
+                       {
+                               if (spArray[i] && spArray[i] < valueEnd)
+                                       valueEnd = spArray[i];
+                       }
+
+                       int valueLength = valueEnd - value;
+                       return SAFE_STRNDUP(value, valueLength);
+               }
+       }
+       return NULL;
+}
+
+static PFontTagData
+_set_EFL_font_data(PFontTagData data, const char *tag_str)
+{
+       char *value;
+
+       if (!data)
+               data = CALLOC(1, sizeof(FontTagData));
+       value = _get_tag_value(tag_str, "font_size");
+       freeAndAssign(data->size, value);
+       value = _get_tag_value(tag_str, "color");
+       freeAndAssign(data->color, value);
+       value = _get_tag_value(tag_str, "bgcolor");
+       freeAndAssign(data->bg_color, value);
+       value = _get_tag_value(tag_str, "font");
+       freeAndAssign(data->name, value);
+
+       return data;
+}
+
+static PItemTagData
+_set_EFL_item_data(PItemTagData data, const char *tag_str)
+{
+       char *value;
+
+       if (!data)
+               data = CALLOC(1, sizeof(ItemTagData));
+       value = _get_tag_value(tag_str, "href");
+       if (value)
+       {
+               char *path = SAFE_STRSTR(value, "file://");
+               if (path)
+               {
+                       char *modify = MALLOC(sizeof(char) * (SAFE_STRLEN(value) + 1));
+                       SAFE_STRNCPY(modify, "file://", 8);
+                       path += 7;
+                       while (path[1] && path[0] && path[1] == '/' && path[0] == '/')
+                       {
+                               path++;
+                       }
+                       SAFE_STRCAT(modify, path);
+                       data->href = modify;
+                       DBG("image href ---%s---", data->href);
+                       FREE(value);
+               }
+               else
+                       freeAndAssign(data->href, value);
+       }
+
+       value = _get_tag_value(tag_str, "absize");
+       if (value)
+       {
+               char *xpos = SAFE_STRCHR(value, 'x');
+               if (xpos)
+               {
+                       int absizeLen = SAFE_STRLEN(value);
+                       freeAndAssign(data->width, SAFE_STRNDUP(value, xpos - value));
+                       freeAndAssign(data->height, SAFE_STRNDUP(xpos + 1, absizeLen - (xpos - value) - 1));
+                       DBG("image width: -%s-, height: -%s-", data->width, data->height);
+               }
+               FREE(value);
+       }
+       return data;
+}
+
+static void
+_set_EFL_tag_data(Eina_List* nodes)
+{
+       PTagNode trail;
+       Eina_List *l;
+
+       EINA_LIST_FOREACH(nodes, l, trail)
+       {
+               if (!trail || !trail->tag || trail->tag[0] == '\0') continue;
+
+               if (!SAFE_STRCMP("font", trail->tag) || !SAFE_STRCMP("color", trail->tag))
+                       trail->tagData = _set_EFL_font_data(trail->tagData, trail->tag_str);
+               else if (!SAFE_STRCMP("item", trail->tag))
+                       trail->tagData = _set_EFL_item_data(trail->tagData, trail->tag_str);
+       }
+}
+
+static PFontTagData
+_set_HTML_font_data(PFontTagData data, const char *tag_str)
+{
+       char *value;
+
+       if (!data)
+               data = CALLOC(1, sizeof(FontTagData));
+       value = _get_tag_value(tag_str, "size");
+       freeAndAssign(data->size, value);
+       value = _get_tag_value(tag_str, "color");
+       freeAndAssign(data->color, value);
+       value = _get_tag_value(tag_str, "bgcolor");
+       freeAndAssign(data->bg_color, value);
+       value = _get_tag_value(tag_str, "face");
+       freeAndAssign(data->name, value);
+
+       return data;
+}
+
+static PItemTagData
+_set_HTML_img_data(PItemTagData data, const char *tag_str)
+{
+       char *value;
+
+       if (!data)
+               data = CALLOC(1, sizeof(ItemTagData));
+       value = _get_tag_value(tag_str, "src");
+       if (value)
+       {
+               char *path = SAFE_STRSTR(value, "file://");
+               if (path)
+               {
+                       char *modify = MALLOC(sizeof(char) * (SAFE_STRLEN(value) + 1));
+                       SAFE_STRNCPY(modify, "file://", 8);
+                       path += 7;
+                       while (path[1] && path[0] && path[1] == '/' && path[0] == '/')
+                       {
+                               path++;
+                       }
+                       SAFE_STRCAT(modify, path);
+                       data->href = modify;
+                       DBG("image src ---%s---", data->href);
+                       FREE(value);
+               }
+               else
+                       freeAndAssign(data->href, value);
+       }
+
+       value = _get_tag_value(tag_str, "width");
+       freeAndAssign(data->width, value);
+       value = _get_tag_value(tag_str, "height");
+       freeAndAssign(data->height, value);
+       return data;
+}
+
+static void
+_set_HTML_tag_data(Eina_List* nodes)
+{
+       PTagNode trail;
+       Eina_List *l;
+
+       EINA_LIST_FOREACH(nodes, l, trail)
+       {
+               if (!trail || !trail->tag || trail->tag[0] == '\0') continue;
+
+               if (!SAFE_STRCMP("font", trail->tag) || !SAFE_STRCMP("color", trail->tag))
+                       trail->tagData = _set_HTML_font_data(trail->tagData, trail->tag_str);
+               else if (!SAFE_STRCMP("img", trail->tag))
+                       trail->tagData = _set_HTML_img_data(trail->tagData, trail->tag_str);
+       }
+}
+
+static void
+_dumpNode(Eina_List* nodes)
+{
+       PTagNode trail;
+       Eina_List *l;
+
+       EINA_LIST_FOREACH(nodes, l, trail)
+       {
+               if (!trail) continue;
+
+               DBG("tag: %s, tag_str: %s, str: %s, tagPosType: %d",
+                               trail->tag, trail->tag_str, trail->str, trail->tagPosType);
+               DBG("matchTag: %x", (unsigned int)trail->matchTag);
+               if (trail->matchTag)
+                       DBG("matchTag->tag_str: %s", trail->matchTag->tag_str);
+               if (trail->tagData)
+               {
+                       if (!SAFE_STRCMP(trail->tag, "font"))
+                       {
+                               PFontTagData data = trail->tagData;
+                               DBG(" tagData->name: %s, tagData->color: %s, tagData->size: %s, tagData->bg_color: %s",
+                                               data->name, data->color, data->size, data->bg_color);
+                       }
+                       else if (!SAFE_STRCMP(trail->tag, "item") || !SAFE_STRCMP(trail->tag, "img"))
+                       {
+                               PItemTagData data = trail->tagData;
+                               DBG(" tagData->href: %s, tagData->width: %s, tagData->height: %s",
+                                               data->href, data->width, data->height);
+                       }
+                       else
+                               WRN("ERROR!!!! not need tagData");
+               }
+       }
+}
+
+static char *
+_convert_to_html(Eina_List* nodes)
+{
+       PTagNode trail;
+       Eina_List *l;
+
+       Eina_Strbuf *html = eina_strbuf_new();
+
+       int tableCnt = sizeof(_EFLtoHTMLConvertTable) / sizeof(TagTable);
+
+       EINA_LIST_FOREACH(nodes, l, trail)
+       {
+               if (!trail) continue;
+
+               if (trail->tag)
+               {
+                       char *tagName = trail->tagPosType == TAGPOS_END ?
+                               trail->matchTag->tag : trail->tag;
+                       int j;
+                       for(j = 0; j < tableCnt; j++)
+                       {
+                               if (!SAFE_STRCMP(_EFLtoHTMLConvertTable[j].src, tagName))
+                               {
+                                       switch(trail->tagPosType)
+                                       {
+                                               case TAGPOS_END:
+                                                       eina_strbuf_append(html, "</");
+                                                       break;
+                                               default:
+                                                       eina_strbuf_append(html, "<");
+                                                       break;
+                                       }
+
+                                       eina_strbuf_append(html, _EFLtoHTMLConvertTable[j].dst);
+                                       if (trail->tagPosType != TAGPOS_END)
+                                       {
+                                               if (!SAFE_STRCMP(_EFLtoHTMLConvertTable[j].src, "font"))
+                                               {
+                                                       PFontTagData data = trail->tagData;
+                                                       if (data->name)
+                                                       {
+                                                       }
+                                                       if (data->color)
+                                                       {
+                                                               char *color = SAFE_STRDUP(data->color);
+                                                               if (color && color[0] == '#' && SAFE_STRLEN(color) == 9)
+                                                               {
+                                                                       color[7] = '\0';
+                                                                       eina_strbuf_append_printf(html, " color=\"%s\"", color);
+                                                               }
+                                                               else
+                                                                       eina_strbuf_append_printf(html, " color=\"%s\"", data->color);
+                                                               if (color)
+                                                                       FREE(color);
+                                                       }
+                                                       if (data->size)
+                                                               eina_strbuf_append_printf(html, " size=\"%s\"", data->size);
+                                                       if (data->bg_color)
+                                                       {
+                                                       }
+                                               }
+                                               else if (!SAFE_STRCMP(_EFLtoHTMLConvertTable[j].src, "item"))
+                                               {
+                                                       PItemTagData data = trail->tagData;
+                                                       if (data->href)
+                                                               eina_strbuf_append_printf(html, " src=\"%s\"", data->href);
+                                                       if (data->width)
+                                                               eina_strbuf_append_printf(html, " width=\"%s\"", data->width);
+                                                       if (data->height)
+                                                               eina_strbuf_append_printf(html, " height=\"%s\"", data->height);
+                                               }
+                                       }
+                                       switch(trail->tagPosType)
+                                       {
+                                               /* closed tag does not need in HTML
+                                                  case TAGPOS_ALONE:
+                                                  eina_strbuf_append(html, " />");
+                                                  break;*/
+                                               default:
+                                                       eina_strbuf_append(html, ">");
+                                                       break;
+                                       }
+                                       break;
+                               }
+                       }
+               }
+               if (trail->str)
+                       eina_strbuf_append(html, trail->str);
+       }
+
+       eina_strbuf_replace_all(html, "  ", " &nbsp;");
+       char *ret = eina_strbuf_string_steal(html);
+       eina_strbuf_free(html);
+       return ret;
+}
+
+#define IMAGE_DEFAULT_WIDTH "240"
+#define IMAGE_DEFAULT_HEIGHT "180"
+
+
+static char *
+_convert_to_edje(Eina_List* nodes)
+{
+       PTagNode trail;
+       Eina_List *l;
+
+       Eina_Strbuf *edje = eina_strbuf_new();
+
+       int tableCnt = sizeof(_HTMLtoEFLConvertTable) / sizeof(TagTable);
+
+       EINA_LIST_FOREACH(nodes, l, trail)
+       {
+               if (!trail) continue;
+
+               if (trail->tag)
+               {
+                       char *tagName = trail->tagPosType == TAGPOS_END ?
+                               trail->matchTag->tag : trail->tag;
+                       int j;
+                       for(j = 0; j < tableCnt; j++)
+                       {
+                               if (!SAFE_STRCMP(_HTMLtoEFLConvertTable[j].src, tagName))
+                               {
+                                       if (_HTMLtoEFLConvertTable[j].dst[0] != '\0')
+                                       {
+                                               switch(trail->tagPosType)
+                                               {
+                                                       case TAGPOS_END:
+                                                               eina_strbuf_append(edje, "</");
+                                                               break;
+                                                       default:
+                                                               eina_strbuf_append(edje, "<");
+                                                               break;
+                                               }
+
+                                               eina_strbuf_append(edje, _HTMLtoEFLConvertTable[j].dst);
+                                       }
+                                       if (trail->tagPosType != TAGPOS_END)
+                                       {
+                                               if (!SAFE_STRCMP(_HTMLtoEFLConvertTable[j].src, "font"))
+                                               {
+                                                       PFontTagData data = trail->tagData;
+                                                       if (data->name)
+                                                       {
+                                                       }
+                                                       if (data->color)
+                                                       {
+                                                               if (data->color[0] == '#' && SAFE_STRLEN(data->color) == 7)
+                                                                       eina_strbuf_append_printf(edje, "<color=%sff>", data->color);
+                                                               else
+                                                                       eina_strbuf_append_printf(edje, "<color=%s>", data->color);
+
+                                                       }
+                                                       if (data->size)
+                                                               eina_strbuf_append_printf(edje, "<font_size=%s>", data->size);
+                                                       if (data->bg_color)
+                                                       {
+                                                       }
+                                                       break;
+                                               }
+                                               else if (!SAFE_STRCMP(_HTMLtoEFLConvertTable[j].src, "img"))
+                                               {
+                                                       PItemTagData data = trail->tagData;
+                                                       char *width = IMAGE_DEFAULT_WIDTH, *height = IMAGE_DEFAULT_HEIGHT;
+                                                       if (data->width)
+                                                               width = data->width;
+                                                       if (data->height)
+                                                               height = data->height;
+                                                       eina_strbuf_append_printf(edje, " absize=%sx%s", width, height);
+                                                       if (data->href)
+                                                               eina_strbuf_append_printf(edje, " href=%s></item>", data->href);
+                                                       break;
+                                               }
+                                       }
+                                       else
+                                       {
+                                               if (_HTMLtoEFLConvertTable[j].dst[0] == '\0')
+                                               {
+                                                       if (!SAFE_STRCMP(_HTMLtoEFLConvertTable[j].src, "font"))
+                                                       {
+                                                               if (trail->matchTag->tagData)
+                                                               {
+                                                                       PFontTagData data = trail->matchTag->tagData;
+                                                                       if (data->name)
+                                                                       {
+                                                                       }
+                                                                       if (data->color)
+                                                                               eina_strbuf_append_printf(edje, "</color>");
+                                                                       if (data->size)
+                                                                               eina_strbuf_append_printf(edje, "</font>");
+                                                                       if (data->bg_color)
+                                                                       {
+                                                                       }
+                                                                       break;
+                                                               }
+                                                       }
+                                               }
+                                       }
+                                       switch(trail->tagPosType)
+                                       {
+                                               /* not support in efl
+                                                  case TAGPOS_ALONE:
+                                                  eina_strbuf_append(edje, " />");
+                                                  break;
+                                                */
+                                               default:
+                                                       eina_strbuf_append(edje, ">");
+                                                       break;
+                                       }
+                                       break;
+                               }
+                       }/* for(j = 0; j < tableCnt; j++) end */
+               }
+               if (trail->str)
+                       eina_strbuf_append(edje, trail->str);
+       }
+
+       eina_strbuf_replace_all(edje, "&nbsp;", " ");
+       char *ret = eina_strbuf_string_steal(edje);
+       eina_strbuf_free(edje);
+       return ret;
+}
+
+char *string_for_entry_get(AppData *ad, int type_index, const char *str)
+{
+       DBG("type_index: %d str: %s ", type_index, str);
+       if (ad->targetAtoms[type_index].convert_to_entry)
+               return ad->targetAtoms[type_index].convert_to_entry(ad, type_index, str);
+       return NULL;
+}
+
+char *string_for_image_path_get(AppData *ad, int type_index, const char *str)
+{
+       DBG("type_index: %d str: %s ", type_index, str);
+       char *image_path = NULL;
+
+       if (type_index == ATOM_INDEX_HTML)
+               image_path = html_to_image_path(ad, type_index, str);
+       else if (type_index == ATOM_INDEX_EFL)
+               image_path = efl_to_image_path(ad, type_index, str);
+
+       return image_path;
+}
+/*
+static char *make_close_tag(Eina_List* nodes)
+{
+       CALLED();
+       PTagNode trail;
+       Eina_List *l;
+
+       Eina_Strbuf *tag_str = eina_strbuf_new();
+
+       EINA_LIST_FOREACH(nodes, l, trail)
+       {
+               if (trail->tag)
+               {
+                       if (trail->tag_str)
+                               eina_strbuf_append(tag_str, trail->tag_str);
+                       else
+                       {
+                               eina_strbuf_append(tag_str, "<");
+                               eina_strbuf_append(tag_str, trail->tag);
+                               eina_strbuf_append(tag_str, ">");
+                       }
+               }
+               if (trail->str)
+                       eina_strbuf_append(tag_str, trail->str);
+       }
+
+       char *ret = eina_strbuf_string_steal(tag_str);
+       eina_strbuf_free(tag_str);
+       return ret;
+}
+*/
+static char *do_not_convert(AppData *ad, int type_index, const char *str)
+{
+       DBG("str: %s", str);
+       return SAFE_STRDUP(str);
+}
+/*
+   static char *efl_to_efl(AppData *ad, int type_index, const char *str)
+   {
+   CALLED();
+   return NULL;
+   }
+
+   static char *html_to_html(AppData *ad, int type_index, const char *str)
+   {
+   CALLED();
+   return NULL;
+   }
+ */
+
+#define IMAGE_DEFAULT_WIDTH "240"
+#define IMAGE_DEFAULT_HEIGHT "180"
+static char *make_image_path_tag(int type_index, const char *str)
+{
+       char *img_tag_str = "file://%s";
+       char *efl_img_tag = "<item absize="IMAGE_DEFAULT_WIDTH"x"IMAGE_DEFAULT_HEIGHT" href=file://%s>";
+       char *html_img_tag = "<img src=\"file://%s\">";
+
+       switch (type_index)
+       {
+               case ATOM_INDEX_HTML:
+                       img_tag_str = html_img_tag;
+                       break;
+               case ATOM_INDEX_EFL:
+                       img_tag_str = efl_img_tag;
+                       break;
+               case ATOM_INDEX_TEXT:
+               case ATOM_INDEX_IMAGE:
+                       break;
+               default:
+                       ERR("wrong type_index: %d", type_index);
+                       return NULL;
+       }
+
+       size_t len = snprintf(NULL, 0, img_tag_str, str) + 1;
+       char *ret = MALLOC(sizeof(char) * len);
+       if (ret)
+               snprintf(ret, len, img_tag_str, str);
+       return ret;
+}
+
+/*
+static char *image_path_to_text(AppData *ad, int type_index, const char *str)
+{
+       DBG("str: %s", str);
+       return make_image_path_tag(ATOM_INDEX_TEXT, str);
+}
+*/
+
+static char *image_path_to_html(AppData *ad, int type_index, const char *str)
+{
+       DBG("str: %s", str);
+       return make_image_path_tag(ATOM_INDEX_HTML, str);
+}
+
+static char *image_path_to_efl(AppData *ad, int type_index, const char *str)
+{
+       DBG("str: %s", str);
+       return make_image_path_tag(ATOM_INDEX_EFL, str);
+}
+
+static char *image_path_to_image_path(AppData *ad, int type_index, const char *str)
+{
+       DBG("str: %s", str);
+       return make_image_path_tag(ATOM_INDEX_IMAGE, str);
+}
+
+static char *html_to_image_path(AppData *ad, int type_index, const char *str)
+{
+       DBG("str: %s", str);
+       Eina_Strbuf *sbuf = eina_strbuf_new();
+       Eina_Bool image_path_exists = EINA_FALSE;
+       int len = SAFE_STRLEN(str);
+       char *p = (char *)str;
+       char *s;
+       char *image_path = NULL;
+
+       if (type_index == ATOM_INDEX_HTML)
+       {
+               for (s = p; (p - s) <= len; p++)
+               {
+                       if (*p == '<')
+                       {
+                               if (!SAFE_STRNCMP((p + 1), "img", 3))
+                               {
+                                       for (p += 4; *p != '"'; p++);
+                                       if (!SAFE_STRNCMP((p + 1), "http:/", 6) || !SAFE_STRNCMP((p + 1), "file:/", 6))
+                                       {
+                                               if (!SAFE_STRNCMP((p + 1), "http:/", 6))
+                                                       ad->clipdrawer->http_path = EINA_TRUE;
+                                               else
+                                                       ad->clipdrawer->http_path = EINA_FALSE;
+
+                                               p += 7;
+                                               s = p;
+                                               for (; *p != '"'; p++);
+                                               eina_strbuf_append_length(sbuf, s, p - s);
+                                               image_path_exists = EINA_TRUE;
+                                               break;
+                                       }
+                                       else if ((*(p + 1) == '/'))
+                                       {
+                                               p++;
+                                               s = p;
+                                               for (; *p != '"'; p++);
+                                               eina_strbuf_append_length(sbuf, s, p - s);
+                                               image_path_exists = EINA_TRUE;
+                                               ad->clipdrawer->http_path = EINA_FALSE;
+                                               break;
+                                       }
+                               }
+                       }
+               }
+       }
+
+       if (image_path_exists)
+       {
+               //Replace the space Unicode character(%20).
+               eina_strbuf_replace_all(sbuf, "%20", " ");
+               image_path = eina_strbuf_string_steal(sbuf);
+               eina_strbuf_free(sbuf);
+               return image_path;
+       }
+
+       eina_strbuf_free(sbuf);
+       return NULL;
+}
+
+static char *efl_to_image_path(AppData *ad, int type_index, const char *str)
+{
+       DBG("str: %s", str);
+       Eina_Strbuf *sbuf = eina_strbuf_new();
+       Eina_Bool image_path_exists = EINA_FALSE;
+       int len = SAFE_STRLEN(str);
+       char *p = (char *)str;
+       char *s;
+       char *image_path = NULL;
+
+       if (type_index == ATOM_INDEX_EFL)
+       {
+               for (s = p; (p - s) <= len; p++)
+               {
+                       if (*p == '<')
+                       {
+                               if (!SAFE_STRNCMP((p + 1), "item", 3))
+                               {
+                                       for (p += 5; *p != 'h'; p++);
+                                       if (!SAFE_STRNCMP(p, "href=file:/", 11))
+                                       {
+                                               p += 11;
+                                               s = p;
+                                               for (; *p != '>'; p++);
+                                               eina_strbuf_append_length(sbuf, s, p - s);
+                                               image_path_exists = EINA_TRUE;
+                                               break;
+                                       }
+                               }
+                       }
+               }
+       }
+
+       if (image_path_exists)
+       {
+               image_path = eina_strbuf_string_steal(sbuf);
+               eina_strbuf_free(sbuf);
+               return image_path;
+       }
+
+       eina_strbuf_free(sbuf);
+       return NULL;
+}
+
+static char *markup_to_entry(AppData *ad, int type_index, const char *str)
+{
+       CALLED();
+       if (!str)
+               return NULL;
+
+       Eina_Strbuf *strbuf = eina_strbuf_new();
+       if (!strbuf)
+               return SAFE_STRDUP(str);
+       eina_strbuf_prepend(strbuf, "<font_size=28><color=#000000FF>");
+
+       const char *trail = str;
+
+       while (trail && *trail)
+       {
+               const char *pretrail = trail;
+               unsigned long length;
+               char *temp;
+               char *endtag;
+
+               trail = SAFE_STRCHR(trail, '<');
+               if (!trail)
+               {
+                       eina_strbuf_append(strbuf, pretrail);
+                       break;
+               }
+               endtag = SAFE_STRCHR(trail, '>');
+               if (!endtag)
+                       break;
+
+               length = trail - pretrail;
+
+               temp = SAFE_STRNDUP(pretrail, length);
+               if (!temp)
+               {
+                       trail++;
+                       continue;
+               }
+
+               eina_strbuf_append(strbuf, temp);
+               FREE(temp);
+               trail++;
+
+               if (trail[0] == '/')
+               {
+                       trail = endtag + 1;
+                       continue;
+               }
+
+               if (!SAFE_STRNCMP(trail, "br", 2))
+               {
+                       eina_strbuf_append(strbuf, "<br>");
+                       trail = endtag + 1;
+                       continue;
+               }
+               trail = endtag + 1;
+       }
+
+       if (type_index == ATOM_INDEX_HTML)
+               eina_strbuf_replace_all(strbuf, "&nbsp;", " ");
+
+       char *entry_str = eina_strbuf_string_steal(strbuf);
+       eina_strbuf_free(strbuf);
+       return entry_str;
+}
+
+static char *polaris_to_entry(AppData *ad, int type_index, const char *str)
+{
+       DBG("str: %s", str);
+       return markup_to_entry(ad, type_index, str);
+}
+
+static char *html_to_entry(AppData *ad, int type_index, const char *str)
+{
+       DBG("str: %s", str);
+       return markup_to_entry(ad, type_index, str);
+}
+
+static char *efl_to_entry(AppData *ad, int type_index, const char *str)
+{
+       DBG("str: %s", str);
+       return markup_to_entry(ad, type_index, str);
+}
+
+static char *image_path_to_entry(AppData *ad, int type_index, const char *str)
+{
+       CALLED();
+       return NULL;
+}
+
+static char *text_to_entry(AppData *ad, int type_index, const char *str)
+{
+       DBG("str: %s", str);
+       char *markup = NULL;
+       markup = (char*)evas_textblock_text_utf8_to_markup(NULL, str);
+       char *for_entry = markup_to_entry(ad, type_index, markup);
+       FREE(markup);
+       return for_entry;
+}
+
+static Eina_List *make_tag_list(int type_index, const char *str)
+{
+       Eina_List *nodeList = NULL;
+       PTagNode nodeData;
+
+       nodeData = _get_start_node(str);
+
+       while (nodeData)
+       {
+               nodeList = eina_list_append(nodeList, nodeData);
+               nodeData = _get_next_node(nodeData);
+       }
+
+       _link_match_tags(nodeList);
+
+       switch(type_index)
+       {
+               case ATOM_INDEX_EFL:
+                       _set_EFL_tag_data(nodeList);
+                       break;
+               case ATOM_INDEX_HTML:
+                       _set_HTML_tag_data(nodeList);
+                       break;
+               default:
+                       WRN("wrong index: %d", type_index);
+       }
+
+       _dumpNode(nodeList);
+       return nodeList;
+}
+
+static void cleanup_tag_list(Eina_List *nodeList)
+{
+       Eina_List *trail;
+       PTagNode nodeData;
+
+       EINA_LIST_FOREACH(nodeList, trail, nodeData)
+               _delete_node(nodeData);
+       eina_list_free(nodeList);
+}
+
+static char *html_to_efl(AppData *ad, int type_index, const char *str)
+{
+       CALLED();
+       Eina_List *nodeList = NULL;
+       nodeList = make_tag_list(type_index, str);
+       char *ret = _convert_to_edje(nodeList);
+       DBG("efl: %s", ret);
+       cleanup_tag_list(nodeList);
+
+       return ret;
+}
+
+static char *efl_to_html(AppData *ad, int type_index, const char *str)
+{
+       CALLED();
+       Eina_List *nodeList = NULL;
+       nodeList = make_tag_list(type_index, str);
+       char *ret = _convert_to_html(nodeList);
+       DBG("html: %s", ret);
+       cleanup_tag_list(nodeList);
+
+       return ret;
+}
+
+static char *text_to_html(AppData *ad, int type_index, const char *str)
+{
+       DBG("str: %s", str);
+       char *markup = NULL;
+       markup = (char*)evas_textblock_text_utf8_to_markup(NULL, str);
+       char *html = efl_to_html(ad, ATOM_INDEX_EFL, markup);
+       FREE(markup);
+       return html;
+}
+
+static char *text_to_efl(AppData *ad, int type_index, const char *str)
+{
+       DBG("str: %s", str);
+       char *ret = NULL;
+       ret = (char*)evas_textblock_text_utf8_to_markup(NULL, str);
+       return ret;
+}
+
+static char *to_text(AppData *ad, int type_index, const char *str)
+{
+       DBG("str: %s", str);
+       char *text = NULL;
+       if (type_index == ATOM_INDEX_HTML)
+       {
+               Eina_Strbuf *buf = eina_strbuf_new();
+               if (buf)
+               {
+                       char *html;
+                       eina_strbuf_append(buf, str);
+                       eina_strbuf_replace_all(buf, "&nbsp;", " ");
+                       html = eina_strbuf_string_steal(buf);
+                       eina_strbuf_free(buf);
+                       text = (char*)evas_textblock_text_markup_to_utf8(NULL, html);
+                       free(html);
+                       return text;
+               }
+       }
+
+       text = (char*)evas_textblock_text_markup_to_utf8(NULL, str);
+       return text;
+}
+
diff --git a/2.2/src/xconverter.h b/2.2/src/xconverter.h
new file mode 100644 (file)
index 0000000..8102ba0
--- /dev/null
@@ -0,0 +1,40 @@
+/*
+ * 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 _X_ATOM_H_
+#define _X_ATOM_H_
+
+enum ATOM_INDEX {
+       ATOM_INDEX_TARGET = 0,
+       ATOM_INDEX_TEXT = 1,
+       ATOM_INDEX_HTML = 2,
+       ATOM_INDEX_EFL = 3,
+       ATOM_INDEX_IMAGE = 4,
+       ATOM_INDEX_POLARIS = 5,
+       ATOM_INDEX_MAX = 6
+};
+
+#include "cbhm.h"
+
+void init_target_atoms(AppData *ad);
+void depose_target_atoms(AppData *ad);
+int atom_type_index_get(AppData *ad, Ecore_X_Atom atom);
+char *string_for_entry_get(AppData *ad, int type_index, const char *str);
+char *string_for_image_path_get(AppData *ad, int type_index, const char *str);
+Eina_Bool generic_converter(AppData *ad, Ecore_X_Atom reqAtom, CNP_ITEM *item, void **data_ret, int *size_ret, Ecore_X_Atom *ttype, int *tsize);
+
+#endif
diff --git a/2.2/src/xhandler.c b/2.2/src/xhandler.c
new file mode 100644 (file)
index 0000000..9bd0b59
--- /dev/null
@@ -0,0 +1,962 @@
+/*
+ * 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.
+ *
+ */
+
+#include "xhandler.h"
+#include <X11/Xatom.h>
+#include <X11/Xlib.h>
+
+Eina_Bool cbhm_send_event(AppData *ad, Ecore_X_Window xwin, char *msg)
+{
+       ClipdrawerData *cd = ad->clipdrawer;
+
+       Ecore_X_Atom x_atom_cbhm_msg = ecore_x_atom_get("CBHM_MSG");
+       XClientMessageEvent m;
+       memset(&m, 0, sizeof(m));
+       m.type = ClientMessage;
+       m.display = ecore_x_display_get();
+       m.window = cd->x_main_win;
+       m.message_type = x_atom_cbhm_msg;
+       m.format = 8;
+       snprintf(m.data.b, 20, "%s", msg);
+
+       XSendEvent(ecore_x_display_get(), xwin, False, NoEventMask, (XEvent*)&m);
+
+       ecore_x_sync();
+
+       return EINA_TRUE;
+}
+
+Ecore_X_Window get_selection_owner(AppData *ad, Ecore_X_Selection selection)
+{
+       CALLED();
+       if (!ad) return 0;
+       Ecore_X_Atom sel = 0;
+       switch(selection)
+       {
+               case ECORE_X_SELECTION_SECONDARY:
+                       sel = ECORE_X_ATOM_SELECTION_SECONDARY;
+                       break;
+               case ECORE_X_SELECTION_CLIPBOARD:
+                       sel = ECORE_X_ATOM_SELECTION_CLIPBOARD;
+                       break;
+               default:
+                       return 0;
+       }
+       return XGetSelectionOwner(ad->x_disp, sel);
+}
+
+Eina_Bool is_cbhm_selection_owner(AppData *ad, Ecore_X_Selection selection)
+{
+       CALLED();
+       if (!ad) return EINA_FALSE;
+       Ecore_X_Window sel_owner = get_selection_owner(ad, selection);
+       DBG("selection_owner: 0x%x, x_event_win: 0x%x", sel_owner, ad->x_event_win);
+       if (sel_owner == ad->x_event_win)
+               return EINA_TRUE;
+       return EINA_FALSE;
+}
+
+Eina_Bool set_selection_owner(AppData *ad, Ecore_X_Selection selection, CNP_ITEM *item)
+{
+       CALLED();
+       if (!ad) return EINA_FALSE;
+
+       if (!item && is_cbhm_selection_owner(ad, selection))
+               return EINA_TRUE;
+
+       Eina_Bool (*selection_func)(Ecore_X_Window win, const void *data, int size) = NULL;
+
+       switch(selection)
+       {
+               case ECORE_X_SELECTION_SECONDARY:
+//                     ecore_x_selection_secondary_clear();
+                       selection_func = ecore_x_selection_secondary_set;
+                       break;
+               case ECORE_X_SELECTION_CLIPBOARD:
+//                     ecore_x_selection_clipboard_clear();
+                       selection_func = ecore_x_selection_clipboard_set;
+                       break;
+               default:
+                       return EINA_FALSE;
+       }
+
+       slot_selected_item_set(ad);
+       if (selection_func(ad->x_event_win, NULL, 0))
+               return EINA_TRUE;
+
+       ERR("set selection failed");
+       return EINA_FALSE;
+}
+
+static Eina_Bool selection_timer_cb(void *data)
+{
+       CALLED();
+       AppData *ad = data;
+       XHandlerData *xd = ad->xhandler;
+
+       set_selection_owner(ad, ECORE_X_SELECTION_CLIPBOARD, NULL);
+       if (is_cbhm_selection_owner(ad, ECORE_X_SELECTION_CLIPBOARD))
+       {
+               ecore_timer_del(xd->selection_timer);
+               xd->selection_timer = NULL;
+               return ECORE_CALLBACK_CANCEL;
+       }
+       return ECORE_CALLBACK_RENEW;
+}
+
+static Eina_Bool _xsel_clear_cb(void *data, int type, void *event)
+{
+       CALLED();
+       if (!data || !event) return EINA_TRUE;
+       AppData *ad = data;
+       ClipdrawerData *cd = ad->clipdrawer;
+       XHandlerData *xd = ad->xhandler;
+       Ecore_X_Event_Selection_Clear *ev = event;
+
+       DBG("in %s, ev->win: 0x%x\n", __func__, ev->win);
+
+       if (is_cbhm_selection_owner(ad, ev->selection)) return EINA_TRUE;
+
+       if (ev->selection == ECORE_X_SELECTION_SECONDARY && cd->item_clicked)
+       {
+               cd->item_clicked = EINA_FALSE;
+               set_selection_owner(ad, ECORE_X_SELECTION_SECONDARY, NULL);
+       }
+
+       if (ev->selection != ECORE_X_SELECTION_CLIPBOARD)
+               return ECORE_CALLBACK_PASS_ON;
+
+       ecore_x_selection_clipboard_request(ad->x_event_win, ECORE_X_SELECTION_TARGET_TARGETS);
+
+       if (xd->selection_timer)
+       {
+               ecore_timer_del(xd->selection_timer);
+               xd->selection_timer = NULL;
+       }
+       xd->selection_timer = ecore_timer_add(SELECTION_CHECK_TIME, selection_timer_cb, ad);
+
+       return ECORE_CALLBACK_DONE;
+}
+
+static Eina_Bool _xsel_request_cb(void *data, int type, void *event)
+{
+       CALLED();
+#ifdef MDM_ENABLE
+       if (!data || !event || !_mdm_get_allow_clipboard()) return ECORE_CALLBACK_PASS_ON;
+#else
+       if (!data || !event) return ECORE_CALLBACK_PASS_ON;
+#endif
+       AppData *ad = data;
+       Ecore_X_Event_Selection_Request *ev = event;
+
+       char *names[3];
+       DBG("selection_owner: 0x%x, ev->... owner: 0x%x, req: 0x%x, selection: %s, target: %s, property: %s",
+                       get_selection_owner(ad, ECORE_X_SELECTION_CLIPBOARD), ev->owner, ev->requestor,
+                       names[0] = ecore_x_atom_name_get(ev->selection),
+                       names[1] = ecore_x_atom_name_get(ev->target),
+                       names[2] = ecore_x_atom_name_get(ev->property));
+       FREE(names[0]);
+       FREE(names[1]);
+       FREE(names[2]);
+
+       CNP_ITEM *item = NULL;
+       if (ev->selection == ECORE_X_ATOM_SELECTION_CLIPBOARD)
+               item = item_get_last(ad);
+       else if (ev->selection == ECORE_X_ATOM_SELECTION_SECONDARY)
+               item = ad->clip_selected_item;
+       else
+               return ECORE_CALLBACK_PASS_ON;
+
+       if (!item)
+       {
+               DBG("has no item");
+               ecore_x_selection_notify_send(ev->requestor,
+                               ev->selection,
+                               None,
+                               None,
+                               CurrentTime);
+               DBG("change property notify");
+               ecore_x_flush();
+               return ECORE_CALLBACK_DONE;
+       }
+
+       Ecore_X_Atom property = None;
+       void *data_ret = NULL;
+       int size_ret;
+       Ecore_X_Atom ttype;
+       int tsize;
+
+       if (!generic_converter(ad, ev->target, item, &data_ret, &size_ret, &ttype, &tsize))
+               /*      if (!ecore_x_selection_convert(ev->selection,
+                       ev->target,
+                       &data_ret, &len, &typeAtom, &typesize))*/
+
+       {
+               /* Refuse selection, conversion to requested target failed */
+               DBG("converter return FALSE");
+       }
+       else if (data_ret)
+       {
+               /* FIXME: This does not properly handle large data transfers */
+               ecore_x_window_prop_property_set(
+                               ev->requestor,
+                               ev->property,
+                               ttype,
+                               tsize,
+                               data_ret,
+                               size_ret);
+               property = ev->property;
+               FREE(data_ret);
+               DBG("change property");
+       }
+
+       ecore_x_selection_notify_send(ev->requestor,
+                       ev->selection,
+                       ev->target,
+                       property,
+                       CurrentTime);
+       DBG("change property notify");
+       ecore_x_flush();
+       return ECORE_CALLBACK_DONE;
+}
+
+static void send_convert_selection_target(AppData *ad, Ecore_X_Selection_Data_Targets *targets_data)
+{
+       CALLED();
+       /*      struct _Ecore_X_Selection_Data_Targets {
+               Ecore_X_Selection_Data data;
+               struct _Ecore_X_Selection_Data {
+               enum {
+               ECORE_X_SELECTION_CONTENT_NONE,
+               ECORE_X_SELECTION_CONTENT_TEXT,
+               ECORE_X_SELECTION_CONTENT_FILES,
+               ECORE_X_SELECTION_CONTENT_TARGETS,
+               ECORE_X_SELECTION_CONTENT_CUSTOM
+               } content;
+               unsigned char *data;
+               int            length;
+               int            format;
+               int            (*FREE)(void *data);
+               };
+
+               char                 **targets;
+               int                    num_targets;
+               };*/
+       if (!targets_data || !ad)
+               return;
+       Ecore_X_Atom *atomlist = (Ecore_X_Atom *)targets_data->data.data;
+       if (!atomlist)
+               return;
+
+       DBG("targets_data->num_targets: 0x%x", targets_data->num_targets);
+       int i, j, k;
+       for (i = 0; i < targets_data->num_targets; i++)
+       {
+               DBG("get target: %s", targets_data->targets[i]);
+               for (j = 0; j < ATOM_INDEX_MAX; j++)
+               {
+                       for (k = 0; k < ad->targetAtoms[j].atom_cnt; k++)
+                       {
+                               if (!SAFE_STRCMP(targets_data->targets[i], ad->targetAtoms[j].name[k]))
+                               {
+                                       DBG("find matched target: %s", ad->targetAtoms[j].name[k]);
+                                       ecore_x_selection_clipboard_request(ad->x_event_win, ad->targetAtoms[j].name[k]);
+                                       return;
+                               }
+                       }
+               }
+       }
+       ERR("get target atom failed");
+}
+
+static Eina_Bool _add_selection_imagepath(AppData* ad, char *str)
+{
+       if (!ad || !str)
+               return EINA_FALSE;
+       DBG("get FILE: %s", str);
+       char *slash = SAFE_STRCHR(str, '/');
+       while (slash && slash[0] == '/')
+       {
+               if (slash[1] != '/')
+               {
+                       char *filepath;
+                       filepath = SAFE_STRDUP(slash);
+                       if (filepath)
+                       {
+                               if (ecore_file_exists(filepath))
+                               {
+                                       item_add_by_data(ad, ad->targetAtoms[ATOM_INDEX_IMAGE].atom[0], filepath, SAFE_STRLEN(filepath) + 1, EINA_TRUE);
+                                       return EINA_TRUE;
+                               }
+                               else
+                                       FREE(filepath);
+                       }
+                       break;
+               }
+               slash++;
+       }
+       ERR("it isn't normal file = %s", str);
+       return EINA_FALSE;
+}
+
+static void _get_selection_data_files(AppData* ad, Ecore_X_Selection_Data_Files *files_data)
+{
+/*     struct _Ecore_X_Selection_Data_Files {
+               Ecore_X_Selection_Data data;
+               char                 **files;
+               int                    num_files;
+       }; */
+
+       int i;
+       for (i = 0; i < files_data->num_files; i++)
+       {
+               _add_selection_imagepath(ad, files_data->files[i]);
+       }
+}
+
+static Eina_Bool _xsel_notify_cb(void *data, int type, void *event)
+{
+       CALLED();
+       if (!data || !event)
+               return ECORE_CALLBACK_PASS_ON;
+
+       AppData *ad = data;
+       XHandlerData *xd = ad->xhandler;
+       if (xd->selection_timer)
+       {
+               ecore_timer_del(xd->selection_timer);
+               xd->selection_timer = NULL;
+       }
+
+/*     struct _Ecore_X_Event_Selection_Notify
+       {
+               Ecore_X_Window    win;
+               Ecore_X_Time      time;
+               Ecore_X_Selection selection;
+               Ecore_X_Atom      atom;
+               char             *target;
+               void             *data;
+       };*/
+       Ecore_X_Event_Selection_Notify *ev = event;
+
+       switch (ev->selection)
+       {
+               case ECORE_X_SELECTION_CLIPBOARD:
+                       break;
+               case ECORE_X_SELECTION_SECONDARY:
+               case ECORE_X_SELECTION_PRIMARY:
+               case ECORE_X_SELECTION_XDND:
+               default:
+                       return ECORE_CALLBACK_PASS_ON;
+       }
+       if (!ev->data)
+               goto set_clipboard_selection_owner;
+
+/*     struct _Ecore_X_Selection_Data {
+               enum {
+                       ECORE_X_SELECTION_CONTENT_NONE,
+                       ECORE_X_SELECTION_CONTENT_TEXT,
+                       ECORE_X_SELECTION_CONTENT_FILES,
+                       ECORE_X_SELECTION_CONTENT_TARGETS,
+                       ECORE_X_SELECTION_CONTENT_CUSTOM
+               } content;
+               unsigned char *data;
+               int            length;
+               int            format;
+               int            (*FREE)(void *data);
+       };*/
+       Ecore_X_Selection_Data *sel_data = ev->data;
+       switch (sel_data->content)
+       {
+               case ECORE_X_SELECTION_CONTENT_NONE:
+                       DBG("ECORE_X_SELECTION_CONTENT_NONE");
+                       break;
+               case ECORE_X_SELECTION_CONTENT_TEXT:
+                       DBG("ECORE_X_SELECTION_CONTENT_TEXT");
+               /*      struct _Ecore_X_Selection_Data_Text {
+                               Ecore_X_Selection_Data data;
+                               char                  *text;
+                       };
+                       Ecore_X_Selection_Data_Text *text_data = ev->data;*/
+               //      DBG("sel_data->data: 0x%x, text_data->text: 0x%x", sel_data->data, text_data->text);
+                       break;
+               case ECORE_X_SELECTION_CONTENT_FILES:
+                       DBG("ECORE_X_SELECTION_CONTENT_FILES");
+                       _get_selection_data_files(ad, ev->data);
+                       goto set_clipboard_selection_owner;
+                       break;
+               case ECORE_X_SELECTION_CONTENT_TARGETS:
+                       DBG("ECORE_X_SELECTION_CONTENT_TARGETS");
+                       send_convert_selection_target(ad, ev->data);
+                       if (!is_cbhm_selection_owner(ad, ECORE_X_SELECTION_CLIPBOARD))
+                               xd->selection_timer = ecore_timer_add(SELECTION_CHECK_TIME, selection_timer_cb, ad);
+                       return ECORE_CALLBACK_DONE;
+               case ECORE_X_SELECTION_CONTENT_CUSTOM:
+                       DBG("ECORE_X_SELECTION_CONTENT_CUSTOM");
+                       break;
+       }
+       char *name;
+       DBG("get atom: %d(%s), target: %s, length: %d, format: %d",
+                       ev->atom, name = ecore_x_atom_name_get(ev->atom), ev->target, sel_data->length, sel_data->format);
+       FREE(name);
+#ifdef MDM_ENABLE
+       if (_mdm_get_allow_clipboard())
+       {
+#else
+       {
+#endif
+               Ecore_X_Atom targetAtom = ecore_x_atom_get(ev->target);
+               char *stripstr = SAFE_STRNDUP((char *)sel_data->data, sel_data->length);
+               DBG("get data: %s, len: %d", stripstr, SAFE_STRLEN(stripstr));
+               if (atom_type_index_get(ad, targetAtom) == ATOM_INDEX_IMAGE)
+               {
+                       _add_selection_imagepath(ad, stripstr);
+                       FREE(stripstr);
+               }
+               else
+                       item_add_by_data(ad, targetAtom, stripstr, SAFE_STRLEN(stripstr) + 1, EINA_TRUE);
+       }
+//     FREE(stripstr);
+
+set_clipboard_selection_owner:
+       set_selection_owner(ad, ECORE_X_SELECTION_CLIPBOARD, NULL);
+       if (!is_cbhm_selection_owner(ad, ECORE_X_SELECTION_CLIPBOARD))
+               xd->selection_timer = ecore_timer_add(SELECTION_CHECK_TIME, selection_timer_cb, ad);
+
+       return ECORE_CALLBACK_DONE;
+}
+
+static Eina_Bool _xclient_msg_cb(void *data, int type, void *event)
+{
+       CALLED();
+       if (!data || !event) return ECORE_CALLBACK_PASS_ON;
+
+       AppData *ad = data;
+       XHandlerData *xd = ad->xhandler;
+       Ecore_X_Event_Client_Message *ev = event;
+
+       if (ev->message_type != xd->atomCBHM_MSG)
+               return -1;
+
+       DBG("## %s", ev->data.b);
+
+/*     Atom cbhm_atoms[ITEM_CNT_MAX];
+       char atomname[10];
+       Ecore_X_Window reqwin = ev->win;*/
+
+       if (!SAFE_STRCMP("set_owner", ev->data.b))
+       {
+               cbhm_send_event(ad, ev->win, "SET_OWNER");
+       }
+       else if (!SAFE_STRNCMP("show", ev->data.b, 4))
+       {
+#ifdef MDM_ENABLE
+               if (_mdm_get_allow_clipboard())
+               {
+#endif
+                       ad->x_active_win = ev->win;
+                       if (ev->data.b[4] == '1')
+                               clipdrawer_paste_textonly_set(ad, EINA_FALSE);
+                       else
+                               clipdrawer_paste_textonly_set(ad, EINA_TRUE);
+
+                       clipdrawer_activate_view(ad);
+#ifdef MDM_ENABLE
+               }
+#endif
+       }
+       else if (!SAFE_STRCMP("cbhm_hide", ev->data.b))
+       {
+               Ecore_X_Illume_Clipboard_State state = ecore_x_e_illume_clipboard_state_get(ad->x_active_win);
+               if(state == ECORE_X_ILLUME_CLIPBOARD_STATE_ON)
+               {
+                       clipdrawer_lower_view(ad);
+               }
+       }
+       else if (!SAFE_STRCMP("get count", ev->data.b))
+       {
+               int i, icount;
+               char countbuf[10];
+
+               for (i = 0; i < ATOM_INDEX_COUNT_MAX; i++)
+               {
+                       icount = item_count_get(ad, i);
+                       snprintf(countbuf, 10, "%d", icount);
+                       ecore_x_window_prop_property_set(
+                                       ev->win,
+                                       xd->atomCBHMCount[i],
+                                       xd->atomUTF8String,
+                                       8,
+                                       countbuf,
+                                       strlen(countbuf)+1);
+               }
+       }
+       /* for OSP */
+       else if (!SAFE_STRNCMP("GET_ITEM", ev->data.b, 8))
+       {
+               int itempos = 0;
+               int index = 8;
+               xd->atomCBHM_ITEM = ecore_x_atom_get("CBHM_ITEM");
+
+               while ('0' <= ev->data.b[index] && ev->data.b[index] <= '9')
+               {
+                       itempos = (itempos * 10) + (ev->data.b[index] - '0');
+                       index++;
+               }
+
+               CNP_ITEM *item = item_get_by_index(ad, itempos);
+               if (!item)
+               {
+                       Ecore_X_Atom itemtype = ecore_x_atom_get("CBHM_ERROR");
+
+                       char error_buf[] = "OUT OF BOUND";
+                       int bufsize = sizeof(error_buf);
+                       ecore_x_window_prop_property_set(
+                                       ev->win,
+                                       xd->atomCBHM_ITEM,
+                                       itemtype,
+                                       8,
+                                       error_buf,
+                                       bufsize);
+                       DBG("GET ITEM ERROR msg: %s, index: %d, item count: %d",
+                                       ev->data.b, itempos, item_count_get(ad, ATOM_INDEX_COUNT_ALL));
+               }
+               else
+               {
+                       ecore_x_window_prop_property_set(
+                                       ev->win,
+                                       xd->atomCBHM_ITEM,
+                                       ad->targetAtoms[item->type_index].atom[0],
+                                       8,
+                                       item->data,
+                                       item->len);
+                       DBG("GET ITEM index: %d, item type: %d, item data: %s, item->len: %d",
+                                       itempos, ad->targetAtoms[item->type_index].atom[0],
+                                       (char *)item->data, item->len);
+               }
+       }
+       else if (!SAFE_STRNCMP("SET_ITEM", ev->data.b, 8))
+       {
+               int ret = 0;
+               int size_ret = 0;
+               unsigned long num_ret = 0;
+               unsigned long bytes = 0;
+               unsigned char *item_data = NULL;
+               unsigned char *prop_ret = NULL;
+               Ecore_X_Atom format = 0;
+               int i;
+               char *format_name = NULL;
+               xd->atomCBHM_ITEM = ecore_x_atom_get("CBHM_ITEM");
+               ret = XGetWindowProperty(ecore_x_display_get(), ad->x_event_win, xd->atomCBHM_ITEM, 0, LONG_MAX, False, ecore_x_window_prop_any_type(),
+                               (Atom*)&format, &size_ret, &num_ret, &bytes, &prop_ret);
+               ecore_x_sync();
+               if (ret != Success)
+               {
+                       DBG("Failed Set Item");
+                       return EINA_FALSE;
+               }
+               if (!num_ret)
+               {
+                       XFree(prop_ret);
+                       return EINA_FALSE;
+               }
+
+               if (!(item_data = malloc(num_ret * size_ret / 8)))
+               {
+                       XFree(item_data);
+                       return EINA_FALSE;
+               }
+
+               switch (size_ret)
+               {
+                       case 8:
+                       default:
+                               for (i = 0; i < num_ret; i++)
+                                       item_data[i] = prop_ret[i];
+                               break;
+                       case 16:
+                               for (i = 0; i < num_ret; i++)
+                                       ((unsigned short *)item_data)[i] = ((unsigned short *)prop_ret)[i];
+                               break;
+                       case 32:
+                               for (i = 0; i < num_ret; i++)
+                                       ((unsigned int *)item_data)[i] = ((unsigned long *)prop_ret)[i];
+                               break;
+               }
+
+               XFree(prop_ret);
+
+               format_name = ecore_x_atom_name_get(format);
+               DBG("item_data:%s format:%s(%d)\n", item_data, format_name, format);
+               free(format_name);
+               item_add_by_data(ad, format, item_data, SAFE_STRLEN((char *)item_data) + 1, EINA_TRUE);
+       }
+       else if (!SAFE_STRNCMP("DEL_ITEM", ev->data.b, 8))
+       {
+               int itempos = 0;
+               int index = 8;
+
+               while ('0' <= ev->data.b[index] && ev->data.b[index] <= '9')
+               {
+                       itempos = (itempos * 10) + (ev->data.b[index] - '0');
+                       index++;
+               }
+
+               item_delete_by_index(ad, itempos);
+       }
+/*     else if (!SAFE_STRNCMP("get #", ev->data.b, 5))
+       {
+               // FIXME : handle greater than 9
+               int num = ev->data.b[5] - '0';
+               int cur = get_current_history_position();
+               num = cur + num - 1;
+               if (num > ITEMS_CNT_MAX-1)
+                       num = num-ITEMS_CNT_MAX;
+
+               if (num >= 0 && num < ITEMS_CNT_MAX)
+               {
+                       DBG("## pos : #%d", num);
+                       // FIXME : handle with correct atom
+                       sprintf(atomname, "CBHM_c%d", num);
+                       cbhm_atoms[0] = XInternAtom(g_disp, atomname, False);
+
+                       CNP_ITEM *item = clipdr;
+
+
+                       if (clipdrawer_get_item_data(ad, num) != NULL)
+                       {
+                               XChangeProperty(g_disp, reqwin, cbhm_atoms[0], atomUTF8String,
+                                                               8, PropModeReplace,
+                                                               (unsigned char *) clipdrawer_get_item_data(ad, num),
+                                                               (int) SAFE_STRLEN(clipdrawer_get_item_data(ad, num)));
+                       }
+               }
+       }
+       else if (!SAFE_STRCMP("get all", ev->data.b))
+       {
+//             print_history_buffer();
+               pos = get_current_history_position();
+               for (i = 0; i < 5; i++)
+               {
+                       DBG("## %d -> %d", i, pos);
+                       sprintf(atomname, "CBHM_c%d", i);
+                       cbhm_atoms[i] = XInternAtom(g_disp, atomname, False);
+                       if (clipdrawer_get_item_data(ad, pos) != NULL)
+                       {
+                               XChangeProperty(g_disp, reqwin, cbhm_atoms[i], atomUTF8String,
+                                                               8, PropModeReplace,
+                                                               (unsigned char *) clipdrawer_get_item_data(ad, pos),
+                                                               (int) SAFE_STRLEN(clipdrawer_get_item_data(ad, pos)));
+                       }
+                       pos--;
+                       if (pos < 0)
+                               pos = ITEMS_CNT_MAX-1;
+               }
+       }*/
+/*     else if (!SAFE_STRCMP("get raw", ev->data.b))
+       {
+
+               if (get_storage_start_addr != NULL)
+               {
+                       XChangeProperty(g_disp, reqwin, atomCBHM_cRAW, atomUTF8String,
+                                                       8, PropModeReplace,
+                                                       (unsigned char *) get_storage_start_addr(),
+                                                       (int) get_total_storage_size());
+               }
+       }
+       */
+       XFlush(ad->x_disp);
+
+       return EINA_TRUE;
+}
+
+static Eina_Bool _xfocus_out_cb(void *data, int type, void *event)
+{
+       CALLED();
+       if (!data || !event) return ECORE_CALLBACK_PASS_ON;
+
+       AppData *ad = data;
+       DBG("XE:FOCUS OUT");
+       clipdrawer_lower_view(ad);
+       return EINA_TRUE;
+}
+
+static Eina_Bool _xproperty_notify_cb(void *data, int type, void *event)
+{
+    if (!data || !event) return ECORE_CALLBACK_PASS_ON;
+
+       AppData *ad = data;
+       XHandlerData *xd = ad->xhandler;
+       Ecore_X_Event_Window_Property *pevent = (Ecore_X_Event_Window_Property *)event;
+       char *filepath;
+
+       //Screen captured.
+       if (pevent->win == ad->x_event_win)
+       {
+               if (pevent->atom == xd->atomShotString)
+               {
+                       filepath = ecore_x_window_prop_string_get(ad->x_event_win, xd->atomShotString);
+                       if (filepath && ecore_file_exists(filepath))
+                       {
+                               DBG("captured item added filepath = %s", filepath);
+                               item_add_by_data(ad, ad->targetAtoms[ATOM_INDEX_IMAGE].atom[0], filepath, SAFE_STRLEN(filepath) + 1, EINA_FALSE);
+                       }
+                       else FREE(filepath);
+               }
+       }
+
+       return EINA_TRUE;
+}
+
+static Eina_Bool _xwin_destroy_cb(void *data, int type, void *event)
+{
+       CALLED();
+       if (!data || !event) return ECORE_CALLBACK_PASS_ON;
+
+       AppData *ad = data;
+       Ecore_X_Event_Window_Destroy *pevent = event;
+       if (ad->x_active_win != pevent->win)
+               return ECORE_CALLBACK_PASS_ON;
+       clipdrawer_lower_view(ad);
+       return ECORE_CALLBACK_DONE;
+}
+
+XHandlerData *init_xhandler(AppData *ad)
+{
+       XHandlerData *xd = CALLOC(1, sizeof(XHandlerData));
+       if (!xd)
+               return NULL;
+       xd->xsel_clear_handler = ecore_event_handler_add(ECORE_X_EVENT_SELECTION_CLEAR, _xsel_clear_cb, ad);
+       xd->xsel_request_handler = ecore_event_handler_add(ECORE_X_EVENT_SELECTION_REQUEST, _xsel_request_cb, ad);
+       xd->xsel_notify_handler = ecore_event_handler_add(ECORE_X_EVENT_SELECTION_NOTIFY, _xsel_notify_cb, ad);
+       xd->xclient_msg_handler = ecore_event_handler_add(ECORE_X_EVENT_CLIENT_MESSAGE, _xclient_msg_cb, ad);
+       xd->xfocus_out_handler = ecore_event_handler_add(ECORE_X_EVENT_WINDOW_FOCUS_OUT, _xfocus_out_cb, ad);
+       xd->xproperty_notify_handler = ecore_event_handler_add(ECORE_X_EVENT_WINDOW_PROPERTY, _xproperty_notify_cb, ad);
+       xd->xwindow_destroy_handler = ecore_event_handler_add(ECORE_X_EVENT_WINDOW_DESTROY, _xwin_destroy_cb, ad);
+
+       xd->atomInc = ecore_x_atom_get("INCR");
+       xd->atomShotString = ecore_x_atom_get("_E_SHOT_IMG_FILEPATH");
+       xd->atomCBHM_MSG = ecore_x_atom_get("CBHM_MSG");
+       xd->atomCBHM_ITEM = ecore_x_atom_get("CBHM_ITEM");
+       xd->atomCBHMCount[ATOM_INDEX_COUNT_ALL] = ecore_x_atom_get("CBHM_cCOUNT");
+       xd->atomCBHMCount[ATOM_INDEX_COUNT_TEXT] = ecore_x_atom_get("CBHM_TEXT_cCOUNT");
+       xd->atomCBHMCount[ATOM_INDEX_COUNT_IMAGE] = ecore_x_atom_get("CBHM_IMAGE_cCOUNT");
+       xd->atomUTF8String = ecore_x_atom_get("UTF8_STRING");
+       xd->atomCBHM_SELECTED_ITEM = ecore_x_atom_get("CBHM_SELECTED_ITEM");
+
+       int i;
+       for (i = 0; i < ITEM_CNT_MAX; i++)
+       {
+               char buf[20];
+               snprintf(buf, sizeof(buf), "CBHM_ITEM%d", i);
+               xd->atomCBHM_ITEM = ecore_x_atom_get(buf);
+       }
+
+       return xd;
+}
+
+void depose_xhandler(XHandlerData *xd)
+{
+       ecore_event_handler_del(xd->xsel_clear_handler);
+       ecore_event_handler_del(xd->xsel_request_handler);
+       ecore_event_handler_del(xd->xsel_notify_handler);
+       ecore_event_handler_del(xd->xclient_msg_handler);
+       ecore_event_handler_del(xd->xfocus_out_handler);
+       ecore_event_handler_del(xd->xproperty_notify_handler);
+       ecore_event_handler_del(xd->xwindow_destroy_handler);
+       FREE(xd);
+}
+
+void slot_property_set(AppData *ad, int index)
+{
+       XHandlerData *xd = ad->xhandler;
+
+       if (index < 0)
+       {
+               int i = 0;
+               char buf[12];
+               CNP_ITEM *item;
+               Eina_List *l;
+
+               EINA_LIST_FOREACH(ad->item_list, l, item)
+               {
+                       snprintf(buf, sizeof(buf), "CBHM_ITEM%d", i);
+                       xd->atomCBHM_ITEM = ecore_x_atom_get(buf);
+                       if (item)
+                       {
+                               ecore_x_window_prop_property_set(
+                                       ad->x_event_win,
+                                       xd->atomCBHM_ITEM,
+                                       ad->targetAtoms[item->type_index].atom[0],
+                                       8,
+                                       item->data,
+                                       item->len);
+                       DBG("GET ITEM index: %d, item type: %d, item data: %s, item->len: %d",
+                                       i, ad->targetAtoms[item->type_index].atom[0],
+                                       (char *)item->data, item->len);
+                       }
+
+                       i++;
+               }
+       }
+       else if (index < ITEM_CNT_MAX)
+       {
+               char buf[12];
+               snprintf(buf, sizeof(buf), "CBHM_ITEM%d", index);
+               xd->atomCBHM_ITEM = ecore_x_atom_get(buf);
+
+               CNP_ITEM *item = item_get_by_index(ad, index);
+               if (!item)
+               {
+                       Ecore_X_Atom itemtype = ecore_x_atom_get("CBHM_ERROR");
+                       char error_buf[] = "OUT OF BOUND";
+                       int bufsize = sizeof(error_buf);
+                       ecore_x_window_prop_property_set(
+                                       ad->x_event_win,
+                                       xd->atomCBHM_ITEM,
+                                       itemtype,
+                                       8,
+                                       error_buf,
+                                       bufsize);
+                       DBG("CBHM Error: index: %d, item count: %d",
+                                       index, item_count_get(ad, ATOM_INDEX_COUNT_ALL));
+               }
+               else
+               {
+                       ecore_x_window_prop_property_set(
+                                       ad->x_event_win,
+                                       xd->atomCBHM_ITEM,
+                                       ad->targetAtoms[item->type_index].atom[0],
+                                       8,
+                                       item->data,
+                                       item->len);
+                       DBG("GET ITEM index: %d, item type: %d, item data: %s, item->len: %d",
+                                       index, ad->targetAtoms[item->type_index].atom[0],
+                                       (char *)item->data, item->len);
+               }
+       }
+       else
+       {
+               DBG("can't set property");
+       }
+}
+
+void slot_item_count_set(AppData *ad)
+{
+       XHandlerData *xd = ad->xhandler;
+       int i, icount;
+       char countbuf[10];
+
+       for (i = 0; i < ATOM_INDEX_COUNT_MAX; i++)
+       {
+               icount = item_count_get(ad, i);
+               snprintf(countbuf, 10, "%d", icount);
+               ecore_x_window_prop_property_set(
+                               ad->x_event_win,
+                               xd->atomCBHMCount[i],
+                               xd->atomUTF8String,
+                               8,
+                               countbuf,
+                               strlen(countbuf)+1);
+       }
+}
+
+void slot_selected_item_set(AppData *ad)
+{
+       XHandlerData *xd = ad->xhandler;
+       CNP_ITEM *item = ad->clip_selected_item;
+
+       if (item)
+       {
+               char buf[20];
+               snprintf(buf, sizeof(buf), "CBHM_SELECTED_ITEM");
+               xd->atomCBHM_SELECTED_ITEM = ecore_x_atom_get(buf);
+
+               ecore_x_window_prop_property_set(
+                               ad->x_event_win,
+                               xd->atomCBHM_SELECTED_ITEM,
+                               ad->targetAtoms[item->type_index].atom[0],
+                               8,
+                               item->data,
+                               item->len);
+       }
+       else
+       {
+               Ecore_X_Atom itemtype = ecore_x_atom_get("CBHM_ERROR");
+
+               char error_buf[] = "NOT EXIST SELECTED ITEM";
+               int bufsize = sizeof(error_buf);
+               ecore_x_window_prop_property_set(
+                               ad->x_event_win,
+                               xd->atomCBHM_SELECTED_ITEM,
+                               itemtype,
+                               8,
+                               error_buf,
+                               bufsize);
+
+       }
+}
+#ifdef MDM_ENABLE
+#ifdef MDM_PHASE_2
+static void _popup_timeout_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *win = data;
+       evas_object_del(obj);
+       evas_object_del(win);
+}
+#endif
+Eina_Bool _mdm_get_allow_clipboard()
+{
+#ifdef MDM_PHASE_2
+       Eina_Bool result = EINA_TRUE;
+       if (mdm_get_service() == MDM_RESULT_SUCCESS)
+       {
+               ret = mdm_get_allow_clipboard();
+               if (ret == MDM_RESTRICTED)
+               {
+                       Evas_Object *win = elm_win_add(NULL, "cbhm popup", ELM_WIN_DIALOG_BASIC);
+                       int w,h;
+                       ecore_x_window_size_get(ecore_x_window_root_first_get(), &w, &h);
+                       evas_object_resize(win, w, h);
+                       elm_win_alpha_set(win, EINA_TRUE);
+                       evas_object_show(win);
+
+                       Evas_Object *popup;
+                       popup = elm_popup_add(win);
+
+                       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+                       elm_object_text_set(popup, "Security policy restricts using clipboard");
+                       elm_popup_timeout_set(popup, 2.0);
+                       evas_object_smart_callback_add(popup, "timeout", _popup_timeout_cb, win);
+                       evas_object_show(popup);
+
+                       result = EINA_FALSE;
+               }
+               else
+                       result = EINA_TRUE;
+       }
+       else
+               return EINA_TRUE;
+
+       mdm_release_service();
+
+       return result;
+#else
+       return EINA_TRUE;
+#endif
+}
+#endif
diff --git a/2.2/src/xhandler.h b/2.2/src/xhandler.h
new file mode 100644 (file)
index 0000000..4d79d8c
--- /dev/null
@@ -0,0 +1,71 @@
+/*
+ * 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 _XCNPHANDLER_H_
+#define _XCNPHANDLER_H_
+
+#include <Ecore_X.h>
+#include <Ecore.h>
+#ifdef MDM_ENABLE
+#include <mdm.h>
+#endif
+
+enum ATOM_INDEX_COUNT {
+       ATOM_INDEX_COUNT_ALL = 0,
+       ATOM_INDEX_COUNT_TEXT = 1,
+       ATOM_INDEX_COUNT_IMAGE = 2,
+       ATOM_INDEX_COUNT_MAX = 3
+};
+
+struct _XHandlerData {
+       Ecore_Event_Handler *xsel_clear_handler;
+       Ecore_Event_Handler *xsel_request_handler;
+       Ecore_Event_Handler *xsel_notify_handler;
+       Ecore_Event_Handler *xclient_msg_handler;
+       Ecore_Event_Handler *xfocus_out_handler;
+       Ecore_Event_Handler *xproperty_notify_handler;
+       Ecore_Event_Handler *xwindow_destroy_handler;
+
+       Ecore_X_Atom atomInc;
+
+       Ecore_X_Atom atomCBHM_MSG;
+       Ecore_X_Atom atomCBHM_ITEM;
+
+       Ecore_X_Atom atomUTF8String;
+       Ecore_X_Atom atomCBHMCount[ATOM_INDEX_COUNT_MAX];
+       Ecore_X_Atom atomCBHM_SELECTED_ITEM;
+
+       Ecore_X_Atom atomShotString;
+
+       Ecore_Timer *selection_timer;
+};
+
+#include "cbhm.h"
+
+XHandlerData *init_xhandler(AppData *data);
+void depose_xhandler(XHandlerData *xd);
+Eina_Bool is_cbhm_selection_owner(AppData *ad, Ecore_X_Selection selection);
+Eina_Bool set_selection_owner(AppData *ad, Ecore_X_Selection selection, CNP_ITEM *item);
+void slot_property_set(AppData *ad, int index);
+void slot_item_count_set(AppData *ad);
+void slot_selected_item_set(AppData *ad);
+Eina_Bool cbhm_send_event(AppData *ad, Ecore_X_Window xwin, char *msg);
+Eina_Bool _mdm_get_allow_clipboard();  // magnolia only
+
+#define SELECTION_CHECK_TIME 10.0
+
+#endif
index 9b4e914..4514eb7 100644 (file)
@@ -1,8 +1,7 @@
 CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
 PROJECT(cbhm C)
 
-SET(PREFIX ${CMAKE_INSTALL_PREFIX})
-SET(LIBDIR "${PREFIX}/lib")
+SET(PREFIX "${CMAKE_INSTALL_PREFIX}")
 SET(DATADIR "${PREFIX}/share")
 SET(LOCALEDIR "${DATADIR}/locale")
 SET(VERSION 0.1.0)
@@ -23,7 +22,7 @@ IF ( MDM_ENABLE )
 ENDIF ( MDM_ENABLE )
 
 INCLUDE(FindPkgConfig)
-       pkg_check_modules(pkgs REQUIRED elementary eet appcore-efl appcore-common x11 ecore-x utilX eina evas ecore ecore-file ecore-evas edje ecore-input notification vconf vconf-internal-keys libsystemd-daemon efl-assist ${MDM_REQUIED_PKGS})
+       pkg_check_modules(pkgs REQUIRED elementary eet appcore-efl appcore-common x11 ecore-x utilX eina evas ecore ecore-file ecore-evas edje ecore-input notification vconf vconf-internal-keys libsystemd-daemon ${MDM_REQUIED_PKGS})
 
 FOREACH(flag ${pkgs_CFLAGS})
        SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
@@ -41,7 +40,8 @@ SET(CMAKE_CXX_FLAGS_CCOV       "-O2 -std=c++0x -g --coverage -fPIE")
 
 SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed -pie")
 
-ADD_DEFINITIONS("-DPREFIX=\"${CMAKE_INSTALL_PREFIX}\"")
+ADD_DEFINITIONS("-DDATADIR=\"${DATADIR}\"")
+ADD_DEFINITIONS("-DLOCALEDIR=\"${LOCALEDIR}\"")
 
 ADD_EXECUTABLE(${PROJECT_NAME} ${SRCS})
 #for XV extension screenshot
@@ -56,8 +56,8 @@ ADD_CUSTOM_TARGET(cbhmdrawer.edj
 )
 ADD_DEPENDENCIES(${PROJECT_NAME} cbhmdrawer.edj)
 
-INSTALL(TARGETS ${PROJECT_NAME} DESTINATION bin)
+INSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${PREFIX}/bin)
 INSTALL(FILES ${CMAKE_BINARY_DIR}/data/themes/cbhmdrawer.edj DESTINATION ${DATADIR}/edje)
 ADD_SUBDIRECTORY(po)
-INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/../systemd/cbhm.service DESTINATION ${LIBDIR}/systemd/user)
-INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/../systemd/cbhm.service DESTINATION ${LIBDIR}/systemd/system)
+INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/../systemd/cbhm.service DESTINATION /usr/lib/systemd/user)
+INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/../systemd/cbhm.service DESTINATION /usr/lib/systemd/system)
diff --git a/2.3-mobile/data/images/clipboard_button_bg.#.png b/2.3-mobile/data/images/clipboard_button_bg.#.png
new file mode 100644 (file)
index 0000000..e545936
Binary files /dev/null and b/2.3-mobile/data/images/clipboard_button_bg.#.png differ
index f7957f2..6198726 100755 (executable)
@@ -21,28 +21,26 @@ externals {
 }
 
 collections {
-base_scale: 1.8;
+base_scale: 2.6;
 #include "scroller.edc"
 #include "popup_layout.edc"
 
 // Clipboard
-#define CLIPBOARD_H_INC 352
-#define CLIPBOARD_LANDSCAPE_H_INC 218
 #define CLIPBOARD_PANEL_TOP_PADDING_INC 0
-#define CLIPBOARD_PANEL_LEFT_PADDING_INC 6 // also used for RIGHT_PADDING
-#define CLIPBOARD_PANEL_H_INC 58
-#define CLIPBOARD_PANEL_LANDS_H_INC 48
-#define CLIPBOARD_CLOSE_BTN_BG_W_INC (CLIPBOARD_PANEL_LEFT_PADDING_INC + CLIPBOARD_CLOSE_BTN_W_INC + CLIPBOARD_PANEL_LEFT_PADDING_INC)
-#define CLIPBOARD_CLOSE_BTN_W_INC 46
-#define CLIPBOARD_CLOSE_BTN_H_INC 46
-#define CLIPBOARD_FUNCTION_BTN_MIN_W_INC 40
-#define CLIPBOARD_FUNCTION_BTN_MAX_W_INC 150
+#define CLIPBOARD_PANEL_LEFT_PADDING_INC 16
+#define CLIPBOARD_PANEL_H_INC 72
+#define CLIPBOARD_CLOSE_BTN_BG_W_INC (CLIPBOARD_PANEL_LEFT_PADDING_INC + CLIPBOARD_CLOSE_BTN_W_INC)
+#define CLIPBOARD_CLOSE_BTN_W_INC 70
+#define CLIPBOARD_CLOSE_BTN_H_INC 70
+#define CLIPBOARD_FUNCTION_BTN_MIN_W_INC 50
+#define CLIPBOARD_FUNCTION_BTN_MAX_W_INC 200
 #define CLIPBOARD_FUNCTION_BTN_LANDSCAPE_MAX_W_INC 337
+#define CLIPBOARD_DELETE_TEXT_PADDING 20
 
 #define CLIPBOARD_FUNCTION_BTN_LEFT_SIZE_INC 8 // also used for BTN_RIGHT
 #define CLIPBOARD_FUNCTION_BTN_TEXT_MAX_W_INC (CLIPBOARD_FUNCTION_BTN_MAX_W_INC - CLIPBOARD_FUNCTION_BTN_LEFT_SIZE_INC - CLIPBOARD_FUNCTION_BTN_LEFT_SIZE_INC)
 #define CLIPBOARD_FUNCTION_BTN_TEXT_LANDSCAPE_MAX_W_INC (CLIPBOARD_FUNCTION_BTN_LANDSCAPE_MAX_W_INC - CLIPBOARD_FUNCTION_BTN_LEFT_SIZE_INC - CLIPBOARD_FUNCTION_BTN_LEFT_SIZE_INC)
-#define CLIPBOARD_FUNCTION_BTN_H_INC 58
+#define CLIPBOARD_FUNCTION_BTN_H_INC 45
 
 #define CLIPBOARD_CONTENT_TOP_LEFT_PADDING_INC 0 0
 #define CLIPBOARD_CONTENT_BOTTOM_RIGHT_PADDING_INC 0 0
@@ -50,26 +48,30 @@ base_scale: 1.8;
 #define CLIPBOARD_DIVIDER_WIDTH_HEIGHT 2 38
 
 // Grid Item
-#define GRID_ITEM_W_INC 140
-#define GRID_ITEM_H_INC 140
-#define GRID_IMAGE_ITEM_W_INC 126
-#define GRID_IMAGE_ITEM_H_INC 126
+#define GRID_IMAGE_ITEM_W_INC 240
+#define GRID_IMAGE_ITEM_H_INC 159
 #define GRID_ITEM_OUTER_LINE_SIZE_INC 2
-#define GRID_ITEM_INNER_BG_PADDING_INC 12
-#define GRID_COMBINED_TOP_LEFT_PADDING_INC 4
-#define GRID_COMBINED_BOTTOM_PADDING_INC 6
-#define GRID_COMBINED_MAX_SIZE_INC 62 54
-#define GRID_COMBINED_SEPERATOR_PADDING_INC 2
-#define GRID_ITEM_DELETE_BTN_TOP_PADDING_INC 6 6
-#define GRID_ITEM_DELETE_BTN_SIZE_INC 36 36
+#define GRID_ITEM_INNER_BG_PADDING_INC 0
+#define GRID_COMBINED_TOP_LEFT_PADDING_INC 5
+#define GRID_COMBINED_BOTTOM_PADDING_INC 1
+#define GRID_COMBINED_ITEM_W_INC 102
+#define GRID_COMBINED_ITEM_H_INC 153
+#define GRID_COMBINED_SEPERATOR_PADDING_INC 4
+#define GRID_ITEM_DELETE_BTN_TOP_PADDING_INC 12 12
+#define GRID_ITEM_DELETE_BTN_SIZE_INC 54 54
 #define GRID_ITEM_LOCK_BTN_SIZE_INC 36 36
-#define GRID_ITEM_TEXT_TOP_LEFT_PADDING 8 6
-#define GRID_ITEM_TEXT_MAX_INC 114 96
+#define GRID_ITEM_TEXT_TOP_LEFT_PADDING 9 2
+#define GRID_ITEM_TEXT_MAX_INC 226 161
+#define GRID_ITEM_RIGHT_PADDING 7
+#define GRID_ITEM_LEFT_PADDING 7
+#define GRID_ITEM_TOP_BOTTOM_PADDING_INC 6
 
 #define SCROLLER_BOTTOM_RIGHT_PADDING_INC 6
-#define SCROLLER_BOTTOM_PADDING_INC 7
-#define SCROLLER_LEFT_PADDING_INC 5
-#define SCROLLER_BOTTOM_LANDSCAPE_PADDING_INC 15
+#define SCROLLER_BOTTOM_PADDING_INC 14
+#define SCROLLER_TOP_PADDING_INC 6
+#define SCROLLER_LEFT_PADDING_INC 11
+#define SCROLLER_BOTTOM_LANDSCAPE_PADDING_INC 36
+#define SCROLLER_TOP_LANDSCAPE_PADDING_INC 35
 
 #define GENGRID_ITEM_SELECT_VI_EFFECT \
 } \
@@ -133,14 +135,8 @@ description { state: "selected" 0.0; \
          image: "clipboard_expand_press.#.png" COMP;
          image: "clipboard_btn_press_bg.#.png" COMP;
          image: "clipboard_title_divider.#.png" COMP;
+         image: "clipboard_button_bg.#.png" COMP;
       }
-      data.item: "clipboard_height" CLIPBOARD_H_INC;
-      data.item: "clipboard_landscape_height" CLIPBOARD_LANDSCAPE_H_INC;
-      data.item: "grid_item_bg_w" GRID_ITEM_W_INC;
-      data.item: "grid_item_bg_h" GRID_ITEM_H_INC;
-      data.item: "grid_image_item_w" GRID_ITEM_W_INC;
-      data.item: "grid_image_item_h" GRID_ITEM_H_INC;
-
       script {
          public g_landscape = 0; // Flag for landscape mode
       }
@@ -153,7 +149,7 @@ description { state: "selected" 0.0; \
             description { state: "default" 0.0;
                rel1 { relative: 0.0 0.0; }
                rel2 { relative: 1.0 1.0; }
-               color: 14 74 104 255;
+               color: 210 212 216 255;
             }
          }
          part { name: "top_left_padding";
@@ -173,6 +169,7 @@ description { state: "selected" 0.0; \
             scale: 1;
             mouse_events: 1;
             description { state: "default" 0.0;
+               fixed: 0 1;
                align: 0.0 0.0;
                min: CLIPBOARD_PANEL_TOP_PADDING_INC CLIPBOARD_PANEL_H_INC;
                max: -1 CLIPBOARD_PANEL_H_INC;
@@ -181,8 +178,8 @@ description { state: "selected" 0.0; \
             }
             description { state: "landscape" 0.0;
                inherit: "default" 0.0;
-               min: CLIPBOARD_PANEL_TOP_PADDING_INC CLIPBOARD_PANEL_LANDS_H_INC;
-               max: -1 CLIPBOARD_PANEL_LANDS_H_INC;
+               min: CLIPBOARD_PANEL_TOP_PADDING_INC CLIPBOARD_PANEL_H_INC;
+               max: -1 CLIPBOARD_PANEL_H_INC;
             }
          }
          part { name: "background/title/image";
@@ -193,7 +190,7 @@ description { state: "selected" 0.0; \
                align: 0.0 0.0;
                rel1 { relative: 0.0 0.0; to: "background";}
                rel2 { relative: 1.0 1.0; to: "background/title";}
-               color: 20 107 147 255;
+               color: 138 140 142 255;
             }
          }
          part { name: "background/title/close/bg";
@@ -238,12 +235,12 @@ description { state: "selected" 0.0; \
                max: CLIPBOARD_CLOSE_BTN_W_INC CLIPBOARD_CLOSE_BTN_H_INC;
                rel1 { to: "background/title/close/bg"; }
                rel2 { to: "background/title/close/bg"; }
-               color: 255 255 255 255;
+               color: 249 249 249 255;
                image { normal: "clipboard_expand_close.png"; }
             }
             description { state: "disabled" 0.0;
                inherit: "default" 0.0;
-               color: 255 255 255 128;
+               color: 249 249 249 128;
             }
          }
          part { name: "title_close_btn_right_padding";
@@ -267,11 +264,11 @@ description { state: "selected" 0.0; \
                   min: 0 1;
                   max: 1 0;
                   align: 0.5 0.5;
-                  size: 27;
+                  size: 32;
                   text_class: "tizen";
                }
                rel1 { relative: 1.0 0.0; to_x: "title_close_btn_right_padding"; to_y: "background/title"; }
-               rel2 { relative: 0.0 1.0; to_x: "background/title/delete_all/divider"; to_y: "background/title"; }
+               rel2 { relative: 0.0 1.0; to_x: "delete_all_left_padding"; to_y: "background/title"; }
             }
          }
          part { name: "delete_right_padding";
@@ -292,8 +289,8 @@ description { state: "selected" 0.0; \
             description { state: "default" 0.0;
                fixed: 1 0;
                align: 1.0 0.0;
-               min: CLIPBOARD_FUNCTION_BTN_LEFT_SIZE_INC 0;
-               max: CLIPBOARD_FUNCTION_BTN_LEFT_SIZE_INC -1;
+               min: CLIPBOARD_DELETE_TEXT_PADDING 0;
+               max: CLIPBOARD_DELETE_TEXT_PADDING -1;
                rel1 { relative: 0.0 0.0; to: "delete_right_padding"; }
                rel2 { relative: 0.0 1.0; to: "delete_right_padding"; }
             }
@@ -304,8 +301,8 @@ description { state: "selected" 0.0; \
             description { state: "default" 0.0;
                fixed: 1 0;
                align: 1.0 0.5;
-               min: CLIPBOARD_FUNCTION_BTN_LEFT_SIZE_INC 0;
-               max: CLIPBOARD_FUNCTION_BTN_LEFT_SIZE_INC -1;
+               min: CLIPBOARD_PANEL_LEFT_PADDING_INC 0;
+               max: CLIPBOARD_PANEL_LEFT_PADDING_INC -1;
                rel1 { relative: 0.0 0.0; to: "delete_text_left_padding"; }
                rel2 { relative: 0.0 1.0; to: "delete_text_left_padding"; }
             }
@@ -316,48 +313,32 @@ description { state: "selected" 0.0; \
             description { state: "default" 0.0;
                fixed: 1 0;
                align: 1.0 0.5;
-               min: CLIPBOARD_FUNCTION_BTN_LEFT_SIZE_INC 0;
-               max: CLIPBOARD_FUNCTION_BTN_LEFT_SIZE_INC -1;
+               min: CLIPBOARD_DELETE_TEXT_PADDING 0;
+               max: CLIPBOARD_DELETE_TEXT_PADDING -1;
                rel1 { relative: 0.0 0.0; to: "panel_function_delete"; }
                rel2 { relative: 0.0 1.0; to: "panel_function_delete"; }
             }
          }
-         part { name: "background/title/delete/divider";
-            scale: 1;
-            mouse_events: 1;
-            description { state: "default" 0.0;
-               align: 1.0 0.5;
-               min: CLIPBOARD_DIVIDER_WIDTH_HEIGHT;
-               max: CLIPBOARD_DIVIDER_WIDTH_HEIGHT;
-               fixed: 1 1;
-               visible: 1;
-                  rel1 { relative: 0.0 0.0; to: "delete_left_padding"; }
-                  rel2 { relative: 0.0 1.0; to: "delete_left_padding"; }
-                  color: 255 255 255 77;
-                  image { normal: "clipboard_title_divider.#.png";
-               }
-            }
-         }
          part { name: "background/title/delete/image1";
             scale: 1;
             mouse_events: 1;
             description { state: "default" 0.0;
+               image.normal: "clipboard_button_bg.#.png";
                align: 0.0 0.5;
                min: CLIPBOARD_FUNCTION_BTN_MIN_W_INC CLIPBOARD_FUNCTION_BTN_H_INC;
                max: -1 CLIPBOARD_FUNCTION_BTN_H_INC;
                fixed: 1 1;
-               visible: 0;
-               rel1 { relative: 1.0 0.0; to_x: "background/title/delete/divider"; to_y: "background/title"; }
-               rel2.to: "background/title/image";
-               image { normal: "clipboard_btn_press_bg.#.png"; }
-               color: 16 87 119 255;
+               rel1 { relative: 1.0 0.0; to_x: "delete_left_padding"; to_y: "background/title"; }
+               rel2.to: "delete_text_right_padding";
+               color: 0 0 0 89;
             }
             description { state: "pressed" 0.0;
                inherit: "default" 0.0;
-               visible: 1;
+               color: 0 0 0 140;
             }
             description { state: "disabled" 0.0;
                inherit: "default" 0.0;
+               color: 0 0 0 43;
             }
          }
          part { name: "background/title/delete/image";
@@ -396,28 +377,16 @@ description { state: "selected" 0.0; \
                   min: 0 1;
                   max: 1 0;
                   align: 0.0 0.5;
-                  size: 24;
+                  size: 32;
                   text_class: "tizen";
                }
                rel1.to: "delete_text_bg";
                rel2.to: "delete_text_bg";
-               color: 255 255 255 255;
+               color: 249 249 249 255;
             }
             description { state: "disabled" 0.0;
                inherit: "default" 0.0;
-               color: 255 255 255 77;
-            }
-         }
-         part { name: "delete_all_right_padding";
-            type: SPACER;
-            scale: 1;
-            description { state: "default" 0.0;
-               fixed: 1 0;
-               align: 1.0 0.5;
-               min: 2*CLIPBOARD_FUNCTION_BTN_LEFT_SIZE_INC 0;
-               max: 2*CLIPBOARD_FUNCTION_BTN_LEFT_SIZE_INC -1;
-               rel1 { relative: 0.0 0.0; to: "background/title/delete/divider"; }
-               rel2 { relative: 0.0 1.0; to: "background/title/delete/divider"; }
+               color: 249 249 249 163;
             }
          }
          part { name: "delete_all_text_right_padding";
@@ -425,11 +394,11 @@ description { state: "selected" 0.0; \
             scale: 1;
             description { state: "default" 0.0;
                fixed: 1 0;
-               align: 0.0 0.5;
-               min: CLIPBOARD_FUNCTION_BTN_LEFT_SIZE_INC 0;
-               max: CLIPBOARD_FUNCTION_BTN_LEFT_SIZE_INC -1;
-               rel1 { relative: 0.0 0.0; to: "delete_all_right_padding"; }
-               rel2 { relative: 0.0 1.0; to: "delete_all_right_padding"; }
+               align: 1.0 0.5;
+               min: CLIPBOARD_DELETE_TEXT_PADDING 0;
+               max: CLIPBOARD_DELETE_TEXT_PADDING -1;
+               rel1 { relative: 0.0 0.0; to: "delete_left_padding"; }
+               rel2 { relative: 0.0 1.0; to: "delete_left_padding"; }
             }
          }
          part { name: "delete_all_left_padding";
@@ -438,8 +407,8 @@ description { state: "selected" 0.0; \
             description { state: "default" 0.0;
                fixed: 1 0;
                align: 1.0 0.5;
-               min: CLIPBOARD_FUNCTION_BTN_LEFT_SIZE_INC 0;
-               max: CLIPBOARD_FUNCTION_BTN_LEFT_SIZE_INC -1;
+               min: CLIPBOARD_DELETE_TEXT_PADDING 0;
+               max: CLIPBOARD_DELETE_TEXT_PADDING -1;
                rel1 { relative: 0.0 0.0; to: "delete_all_text_left_padding"; }
                rel2 { relative: 0.0 1.0; to: "delete_all_text_left_padding"; }
             }
@@ -450,58 +419,43 @@ description { state: "selected" 0.0; \
             description { state: "default" 0.0;
                fixed: 1 0;
                align: 1.0 0.5;
-               min: CLIPBOARD_FUNCTION_BTN_LEFT_SIZE_INC 0;
-               max: CLIPBOARD_FUNCTION_BTN_LEFT_SIZE_INC -1;
+               min: CLIPBOARD_DELETE_TEXT_PADDING 0;
+               max: CLIPBOARD_DELETE_TEXT_PADDING -1;
                rel1 { relative: 0.0 0.0; to: "panel_function_delete_all"; }
                rel2 { relative: 0.0 1.0; to: "panel_function_delete_all"; }
             }
          }
-         part { name: "background/title/delete_all/divider";
-            scale: 1;
-            mouse_events: 1;
-            description { state: "default" 0.0;
-               align: 1.0 0.5;
-               min: CLIPBOARD_DIVIDER_WIDTH_HEIGHT;
-               max: CLIPBOARD_DIVIDER_WIDTH_HEIGHT;
-               fixed: 1 1;
-               visible: 1;
-                  rel1 { relative: 0.0 0.0; to_x: "delete_all_left_padding"; to_y: "background/title/image"; }
-                  rel2 { relative: 0.0 1.0; to_x: "delete_all_left_padding"; to_y: "background/title/image"; }
-                  color: 255 255 255 77;
-                  image { normal: "clipboard_title_divider.#.png";
-               }
-            }
-            description { state: "hide" 0.0;
-               inherit: "default" 0.0;
-               visible: 0;
-            }
-         }
          part { name: "background/title/delete_all/image1";
             scale: 1;
             mouse_events: 1;
             description { state: "default" 0.0;
+               image.normal: "clipboard_button_bg.#.png";
                align: 0.0 0.5;
                fixed: 1 1;
-               visible: 0;
                min: CLIPBOARD_FUNCTION_BTN_MIN_W_INC CLIPBOARD_FUNCTION_BTN_H_INC;
                max: -1 CLIPBOARD_FUNCTION_BTN_H_INC;
-               rel1 { relative: 1.0 0.5; to: "background/title/delete_all/divider"; }
-               rel2 { relative: 0.0 0.5; to_x: "background/title/delete/divider"; to_y: "delete_all_text_left_padding"; }
-               image { normal: "clipboard_btn_press_bg.#.png"; }
-               color: 16 87 119 255;
+               rel1 { relative: 1.0 0.5; to: "delete_all_left_padding"; }
+               rel2 { relative: 0.0 0.5; to: "delete_left_padding"; }
+               color: 0 0 0 89;
             }
             description { state: "pressed" 0.0;
                inherit: "default" 0.0;
-               visible: 1;
+               color: 0 0 0 140;
+            }
+            description { state: "disabled" 0.0;
+               inherit: "default" 0.0;
+               color: 0 0 0 43;
             }
             description { state: "hide" 0.0;
                inherit: "default" 0.0;
                visible: 0;
+               color: 0 0 0 140;
             }
          }
          part { name: "background/title/delete_all/image";
             scale: 1;
             description { state: "default" 0.0;
+               image.normal: "clipboard_button_bg.#.png";
                rel1 { relative: 0.0 0.0; to: "background/title/delete_all/image1"; }
                rel2 { relative: 1.0 1.0; to: "background/title/delete_all/image1"; }
                color: 0 0 0 0;
@@ -519,8 +473,8 @@ description { state: "selected" 0.0; \
                align: 1.0 0.5;
                min: CLIPBOARD_FUNCTION_BTN_TEXT_MAX_W_INC 0;
                max: CLIPBOARD_FUNCTION_BTN_TEXT_MAX_W_INC -1;
-               rel1 { relative: 0.0 0.0; to_y: "background/title/image"; }
-               rel2 { relative: 0.0 1.0; to_x: "delete_all_right_padding"; to_y: "background/title/image"; }
+               rel1 { relative: 0.0 0.0; to: "delete_all_text_right_padding"; }
+               rel2 { relative: 0.0 1.0; to: "delete_all_text_right_padding"; }
             }
             description { state: "landscape" 0.0;
                inherit: "default" 0.0;
@@ -539,16 +493,16 @@ description { state: "selected" 0.0; \
                   min: 0 1;
                   max: 1 0;
                   align: 0.5 0.5;
-                  size: 24;
+                  size: 32;
                   text_class: "tizen";
                }
                rel1.to: "delete_all_text_bg";
                rel2.to: "delete_all_text_bg";
-               color: 255 255 255 255;
+               color: 249 249 249 255;
             }
             description { state: "disabled" 0.0;
                inherit: "default" 0.0;
-               color: 255 255 255 77;
+               color: 249 249 249 163;
             }
             description { state: "hide" 0.0;
                inherit: "default" 0.0;
@@ -663,36 +617,42 @@ description { state: "selected" 0.0; \
             source: "background/title/delete/image";
             action: STATE_SET "pressed" 0.0;
             target: "background/title/delete/image1";
+            target: "panel_function_delete";
          }
          program { name: "mouse_out_delbtn";
             signal: "mouse,out";
             source: "background/title/delete/image";
             action: STATE_SET "default" 0.0;
             target: "background/title/delete/image1";
+            target: "panel_function_delete";
          }
          program { name: "mouse_up_delbtn";
             signal: "mouse,up,1";
             source: "background/title/delete/image";
             action: STATE_SET "default" 0.0;
             target: "background/title/delete/image1";
+            target: "panel_function_delete";
          }
          program { name: "mouse_down_del_all_btn";
             signal: "mouse,down,1";
             source: "background/title/delete_all/image";
             action: STATE_SET "pressed" 0.0;
             target: "background/title/delete_all/image1";
+            target: "panel_function_delete_all";
          }
          program { name: "mouse_out_del_all_btn";
             signal: "mouse,out";
             source: "background/title/delete_all/image";
             action: STATE_SET "default" 0.0;
             target: "background/title/delete_all/image1";
+            target: "panel_function_delete_all";
          }
          program { name: "mouse_up_del_all_btn";
             signal: "mouse,up,1";
             source: "background/title/delete_all/image";
             action: STATE_SET "default" 0.0;
             target: "background/title/delete_all/image1";
+            target: "panel_function_delete_all";
          }
          program { name: "play_sound_delbtn";
             signal: "mouse,clicked,1";
@@ -788,7 +748,6 @@ description { state: "selected" 0.0; \
             source: "elm";
             action: STATE_SET "hide" 0.0;
             target: "panel_function_delete_all";
-            target: "background/title/delete_all/divider";
             target: "background/title/delete_all/image1";
             target: "background/title/delete_all/image";
          }
@@ -797,7 +756,6 @@ description { state: "selected" 0.0; \
             source: "elm";
             action: STATE_SET "default" 0.0;
             target: "panel_function_delete_all";
-            target: "background/title/delete_all/divider";
             target: "background/title/delete_all/image1";
             target: "background/title/delete_all/image";
          }
@@ -836,8 +794,8 @@ description { state: "selected" 0.0; \
             type: SPACER;
             scale:1 ;
             description { state: "default" 0.0;
-               min: SCROLLER_LEFT_PADDING_INC SCROLLER_BOTTOM_PADDING_INC;
-               max: SCROLLER_LEFT_PADDING_INC SCROLLER_BOTTOM_PADDING_INC;
+               min: SCROLLER_LEFT_PADDING_INC SCROLLER_TOP_PADDING_INC;
+               max: SCROLLER_LEFT_PADDING_INC SCROLLER_TOP_PADDING_INC;
                rel1 {
                   relative: 0.0 0.0;
                   to: "bg";
@@ -848,8 +806,8 @@ description { state: "selected" 0.0; \
             }
             description { state: "landscape" 0.0;
                inherit: "default" 0.0;
-               min: SCROLLER_LEFT_PADDING_INC SCROLLER_BOTTOM_LANDSCAPE_PADDING_INC;
-               max: SCROLLER_LEFT_PADDING_INC SCROLLER_BOTTOM_LANDSCAPE_PADDING_INC;
+               min: SCROLLER_LEFT_PADDING_INC SCROLLER_TOP_LANDSCAPE_PADDING_INC;
+               max: SCROLLER_LEFT_PADDING_INC SCROLLER_TOP_LANDSCAPE_PADDING_INC;
             }
          }
          part { name: "padding.right";
@@ -955,9 +913,74 @@ description { state: "selected" 0.0; \
       }
    }
 
-   group { name: "elm/gengrid/item/clipboard/image_style/default";
-      data.item: "contents" "elm.swallow.content";
+   group { name: "elm/button/base/delete_icon";
+      images {
+         image: "clipboard_delete.png" COMP;
+         image: "clipboard_delete_press.png" COMP;
+      }
+      parts {
+         part { name: "base";
+            scale: 1;
+            type: SPACER;
+            description { state: "default" 0.0;
+               min: GRID_ITEM_DELETE_BTN_SIZE_INC;
+               max: GRID_ITEM_DELETE_BTN_SIZE_INC;
+            }
+         }
+         part { name: "icon";
+            scale: 1;
+            mouse_events: 1;
+            description { state: "default" 0.0;
+               visible: 1;
+               image.normal: "clipboard_delete.png";
+               rel1.to: "base";
+               rel2.to: "base";
+            }
+            description { state: "pressed" 0.0;
+               inherit: "default" 0.0;
+               image.normal: "clipboard_delete_press.png";
+            }
+         }
+      }
+      programs {
+         program { name: "touch_snd";
+            signal: "mouse,clicked,1";
+            source: "icon";
+            script {
+               run_program(PROGRAM:"touch_sound");
+               emit("elm,action,click", "");
+            }
+         }
+         program { name: "touch_sound";
+            action: RUN_PLUGIN "touch_sound";
+         }
+         program { name: "mouse_down";
+            signal: "mouse,down,1";
+            source: "icon";
+            script {
+               set_state(PART:"icon", "pressed", 0.0);
+            }
+         }
+         program { name: "mouse_out";
+            signal: "mouse,out";
+            source: "icon";
+            script {
+               set_state(PART:"icon", "default", 0.0);
+            }
+          }
+         program { name: "mouse_up";
+            signal: "mouse,up,1";
+            source: "icon";
+            script {
+               set_state(PART:"icon", "default", 0.0);
+            }
+         }
+      }
+   }
 
+   group { name: "elm/gengrid/item/clipboard/image_style/default";
+      alias: "elm/gengrid/item/clipboard/image_style/cbhm";
+      data.item: "contents" "elm.swallow.content delbtn/img";
       images {
          image: "clipboard_thumb_bg.#.png" COMP;
          image: "clipboard_thumb_line.#.png" COMP;
@@ -1008,7 +1031,7 @@ description { state: "selected" 0.0; \
             description { state: "default" 0.0;
                rel1.to: "item_outer_bg_top_left_padding";
                rel2.to: "item_outer_bg_bottom_right_padding";
-               color: 255 255 255 255;
+               color: 249 249 249 255;
                image.normal: "clipboard_thumb_bg.#.png";
                GENGRID_ITEM_SELECT_VI_EFFECT
             }
@@ -1019,7 +1042,7 @@ description { state: "selected" 0.0; \
             description { state: "default" 0.0;
                rel2.to: "item_outer_bg";
                rel1.to: "item_outer_bg";
-               color: 255 255 255 255;
+               color: 249 249 249 255;
                image.normal: "clipboard_thumb_line.#.png";
                GENGRID_ITEM_SELECT_VI_EFFECT
             }
@@ -1054,7 +1077,7 @@ description { state: "selected" 0.0; \
             mouse_events: 0;
             description { state: "default" 0.0;
                fixed: 1 1;
-               max: GRID_IMAGE_ITEM_W_INC GRID_IMAGE_ITEM_W_INC;
+               max: GRID_IMAGE_ITEM_W_INC GRID_IMAGE_ITEM_H_INC;
                rel1 { relative: 0.5 0.5; to: "bg"; }
                rel2 { relative: 0.5 0.5; to: "bg"; }
                GENGRID_ITEM_SELECT_VI_EFFECT
@@ -1066,7 +1089,7 @@ description { state: "selected" 0.0; \
             mouse_events: 0;
             description { state: "default" 0.0;
                visible: 0;
-               color: 0 0 0 100;
+               color: 255 255 255 178;
                rel1.to: "elm.swallow.content";
                rel2.to: "elm.swallow.content";
             }
@@ -1102,6 +1125,7 @@ description { state: "selected" 0.0; \
          part { name: "delbtn/img";
             scale: 1;
             mouse_events: 1;
+            type: SWALLOW;
             description { state: "default" 0.0;
                rel1.to: "delbtn";
                rel2.to: "delbtn";
@@ -1110,16 +1134,10 @@ description { state: "selected" 0.0; \
             description { state: "show" 0.0;
                inherit: "default" 0.0;
                visible: 1;
-               image {
-                  normal: "clipboard_delete.png";
-               }
             }
             description { state: "pressed" 0.0;
                inherit: "default" 0.0;
                visible: 1;
-               image {
-                  normal: "clipboard_delete_press.png";
-               }
             }
          }
       }
@@ -1154,44 +1172,6 @@ description { state: "selected" 0.0; \
             target: "item_outer_bg_line";
             target: "elm.swallow.content";
          )
-         program { name: "mouse_down";
-            signal: "mouse,down,1";
-            source: "delbtn/img";
-            script {
-               new st[31];
-               new Float:vl;
-               get_state(PART:"delbtn/img", st, 30, vl);
-               if (!strcmp(st, "show"))
-                  set_state(PART:"delbtn/img", "pressed", 0.0);
-            }
-         }
-         program { name: "mouse_out";
-            signal: "mouse,out";
-            source: "delbtn/img";
-            script {
-               new st[31];
-               new Float:vl;
-               get_state(PART:"delbtn/img", st, 30, vl);
-               if (!strcmp(st, "pressed"))
-                  set_state(PART:"delbtn/img", "show", 0.0);
-            }
-         }
-         program { name: "mouse_up";
-            signal: "mouse,up,1";
-            source: "delbtn/img";
-            script {
-               new st[31];
-               new Float:vl;
-               get_state(PART:"delbtn/img", st, 30, vl);
-               if (!strcmp(st, "pressed"))
-                  set_state(PART:"delbtn/img", "show", 0.0);
-            }
-         }
-         program { name: "play_sound_delbtn";
-            signal: "mouse,clicked,1";
-            source: "delbtn/img";
-            action: RUN_PLUGIN "touch_sound";
-         }
          program { name: "touch_sound_program";
             action: RUN_PLUGIN "touch_sound";
          }
@@ -1237,7 +1217,9 @@ description { state: "selected" 0.0; \
    }
 
    group { name: "elm/gengrid/item/clipboard/text_style/default";
+      alias: "elm/gengrid/item/clipboard/text_style/cbhm";
       data.item: "texts" "elm.text";
+      data.item: "contents" "delbtn/img";
       images {
          image: "clipboard_note_bg.#.png" COMP;
          image: "clipboard_delete.png" COMP;
@@ -1246,7 +1228,7 @@ description { state: "selected" 0.0; \
 
       styles {
          style { name: "clipboard_01_style";
-            base: "font=Tizen:style=Regular font_size=27 color=#000000FF align=left wrap=mixed text_class=tizen";
+            base: "font=Tizen:style=Regular font_size=27 color=#F9F9F9FF align=left wrap=mixed text_class=tizen";
             tag: "br" "\n";
             tag: "ps" "ps";
             tag: "tab" "\t";
@@ -1297,8 +1279,8 @@ description { state: "selected" 0.0; \
             description { state: "default" 0.0;
                fixed: 1 1;
                align: 0.0 0.0;
-               min: SCROLLER_LEFT_PADDING_INC SCROLLER_LEFT_PADDING_INC;
-               max: SCROLLER_LEFT_PADDING_INC SCROLLER_LEFT_PADDING_INC;
+               min: GRID_ITEM_LEFT_PADDING GRID_ITEM_TOP_BOTTOM_PADDING_INC;
+               max: GRID_ITEM_LEFT_PADDING GRID_ITEM_TOP_BOTTOM_PADDING_INC;
                rel1 { relative: 0.0 0.0; to: "bg"; }
                rel2 { relative: 0.0 0.0; to: "bg"; }
             }
@@ -1309,8 +1291,8 @@ description { state: "selected" 0.0; \
             description { state: "default" 0.0;
                fixed: 1 1;
                align: 1.0 1.0;
-               min: SCROLLER_LEFT_PADDING_INC SCROLLER_LEFT_PADDING_INC;
-               max: SCROLLER_LEFT_PADDING_INC SCROLLER_LEFT_PADDING_INC;
+               min: GRID_ITEM_RIGHT_PADDING GRID_ITEM_TOP_BOTTOM_PADDING_INC;
+               max: GRID_ITEM_RIGHT_PADDING GRID_ITEM_TOP_BOTTOM_PADDING_INC;
                rel1 { relative: 1.0 1.0; to: "bg"; }
                rel2 { relative: 1.0 1.0; to: "bg"; }
             }
@@ -1364,7 +1346,7 @@ description { state: "selected" 0.0; \
             description { state: "default" 0.0;
                rel1.to: "item_inner_bg";
                rel2.to: "item_inner_bg";
-               color: 237 233 208 255;
+               color: 252 225 116 255;
                image.normal: "clipboard_note_bg.#.png";
                GENGRID_ITEM_SELECT_VI_EFFECT
             }
@@ -1452,6 +1434,7 @@ description { state: "selected" 0.0; \
          }
          part { name: "delbtn/img";
             scale: 1;
+            type: SWALLOW;
             description { state: "default" 0.0;
                rel1.to: "delbtn";
                rel2.to: "delbtn";
@@ -1460,16 +1443,10 @@ description { state: "selected" 0.0; \
             description { state: "show" 0.0;
                inherit: "default" 0.0;
                visible: 1;
-               image {
-                  normal: "clipboard_delete.png";
-               }
             }
             description { state: "pressed" 0.0;
                inherit: "default" 0.0;
                visible: 1;
-               image {
-                  normal: "clipboard_delete_press.png";
-               }
             }
          }
       }
@@ -1503,44 +1480,6 @@ description { state: "selected" 0.0; \
             target: "item_bg";
             target: "elm.text";
          )
-         program { name: "mouse_down";
-            signal: "mouse,down,1";
-            source: "delbtn/img";
-            script {
-               new st[31];
-               new Float:vl;
-               get_state(PART:"delbtn/img", st, 30, vl);
-               if (!strcmp(st, "show"))
-                  set_state(PART:"delbtn/img", "pressed", 0.0);
-            }
-         }
-         program { name: "mouse_out";
-            signal: "mouse,out";
-            source: "delbtn/img";
-            script {
-               new st[31];
-               new Float:vl;
-               get_state(PART:"delbtn/img", st, 30, vl);
-               if (!strcmp(st, "pressed"))
-                  set_state(PART:"delbtn/img", "show", 0.0);
-            }
-         }
-         program { name: "mouse_up";
-            signal: "mouse,up,1";
-            source: "delbtn/img";
-            script {
-               new st[31];
-               new Float:vl;
-               get_state(PART:"delbtn/img", st, 30, vl);
-               if (!strcmp(st, "pressed"))
-                  set_state(PART:"delbtn/img", "show", 0.0);
-            }
-         }
-         program { name: "play_sound_delbtn";
-            signal: "mouse,clicked,1";
-            source: "delbtn/img";
-            action: RUN_PLUGIN "touch_sound";
-         }
          program { name: "touch_sound_program";
             action: RUN_PLUGIN "touch_sound";
          }
@@ -1586,8 +1525,9 @@ description { state: "selected" 0.0; \
    }
 
    group { name: "elm/gengrid/item/clipboard/combined_style/default";
+      alias: "elm/gengrid/item/clipboard/combined_style/cbhm";
       data.item: "texts" "elm.text";
-      data.item: "contents" "elm.swallow.content";
+      data.item: "contents" "elm.swallow.content delbtn/img";
       images {
          image: "clipboard_note_bg.#.png" COMP;
          image: "clipboard_delete.png" COMP;
@@ -1596,7 +1536,7 @@ description { state: "selected" 0.0; \
 
       styles {
          style { name: "clipboard_02_style";
-            base: "font=Tizen:style=Light font_size=17 color=#000000FF align=left wrap=mixed text_class=tizen";
+            base: "font=Tizen:style=Light font_size=17 color=#F9F9F9FF align=left wrap=mixed text_class=tizen";
             tag: "br" "\n";
             tag: "ps" "ps";
             tag: "tab" "\t";
@@ -1647,8 +1587,8 @@ description { state: "selected" 0.0; \
             description { state: "default" 0.0;
                fixed: 1 1;
                align: 0.0 0.0;
-               min: SCROLLER_LEFT_PADDING_INC SCROLLER_LEFT_PADDING_INC;
-               max: SCROLLER_LEFT_PADDING_INC SCROLLER_LEFT_PADDING_INC;
+               min: GRID_ITEM_LEFT_PADDING GRID_ITEM_TOP_BOTTOM_PADDING_INC;
+               max: GRID_ITEM_LEFT_PADDING GRID_ITEM_TOP_BOTTOM_PADDING_INC;
                rel1 { relative: 0.0 0.0; to: "bg"; }
                rel2 { relative: 0.0 0.0; to: "bg"; }
             }
@@ -1659,8 +1599,8 @@ description { state: "selected" 0.0; \
             description { state: "default" 0.0;
                fixed: 1 1;
                align: 1.0 1.0;
-               min: SCROLLER_LEFT_PADDING_INC SCROLLER_LEFT_PADDING_INC;
-               max: SCROLLER_LEFT_PADDING_INC SCROLLER_LEFT_PADDING_INC;
+               min: GRID_ITEM_RIGHT_PADDING GRID_ITEM_TOP_BOTTOM_PADDING_INC;
+               max: GRID_ITEM_RIGHT_PADDING GRID_ITEM_TOP_BOTTOM_PADDING_INC;
                rel1 { relative: 1.0 1.0; to: "bg"; }
                rel2 { relative: 1.0 1.0; to: "bg"; }
             }
@@ -1675,36 +1615,12 @@ description { state: "selected" 0.0; \
                GENGRID_ITEM_SELECT_VI_EFFECT
             }
          }
-         part { name: "item_inner_bg_top_left_padding";
-            type: SPACER;
-            scale: 1;
-            description { state: "default" 0.0;
-               fixed: 1 1;
-               align: 0.0 0.0;
-               min: CLIPBOARD_PANEL_TOP_PADDING_INC GRID_ITEM_INNER_BG_PADDING_INC;
-               max: CLIPBOARD_PANEL_TOP_PADDING_INC GRID_ITEM_INNER_BG_PADDING_INC;
-               rel1 { relative: 0.0 0.0; to: "item_outer_bg"; }
-               rel2 { relative: 0.0 0.0; to: "item_outer_bg"; }
-            }
-         }
-         part { name: "item_inner_bg_bottom_right_padding";
-            type: SPACER;
-            scale: 1;
-            description { state: "default" 0.0;
-               fixed: 1 1;
-               align: 1.0 1.0;
-               min: CLIPBOARD_PANEL_TOP_PADDING_INC GRID_ITEM_INNER_BG_PADDING_INC;
-               max: CLIPBOARD_PANEL_TOP_PADDING_INC GRID_ITEM_INNER_BG_PADDING_INC;
-               rel1 { relative: 1.0 1.0; to: "item_outer_bg"; }
-               rel2 { relative: 1.0 1.0; to: "item_outer_bg"; }
-            }
-         }
          part { name: "item_inner_bg";
             type: SPACER;
             mouse_events: 0;
             description { state: "default" 0.0;
-               rel1 { relative: 1.0 1.0; to: "item_inner_bg_top_left_padding"; }
-               rel2 { relative: 0.0 0.0; to: "item_inner_bg_bottom_right_padding"; }
+               rel1 { relative: 0.0 0.0; to: "item_outer_bg"; }
+               rel2 { relative: 1.0 1.0; to: "item_outer_bg"; }
                GENGRID_ITEM_SELECT_VI_EFFECT
             }
          }
@@ -1714,7 +1630,7 @@ description { state: "selected" 0.0; \
             description { state: "default" 0.0;
                fixed: 1 1;
                align: 0.0 0.0;
-               min: GRID_COMBINED_TOP_LEFT_PADDING_INC GRID_COMBINED_TOP_LEFT_PADDING_INC ;
+               min: GRID_COMBINED_TOP_LEFT_PADDING_INC GRID_COMBINED_TOP_LEFT_PADDING_INC;
                max: GRID_COMBINED_TOP_LEFT_PADDING_INC GRID_COMBINED_TOP_LEFT_PADDING_INC;
                rel1 { relative: 0.0 0.0; to: "item_inner_bg"; }
                rel2 { relative: 0.0 0.0; to: "item_inner_bg"; }
@@ -1772,7 +1688,7 @@ description { state: "selected" 0.0; \
             mouse_events: 0;
             description { state: "default" 0.0;
                align: 0.0 0.0;
-               max: GRID_COMBINED_MAX_SIZE_INC;
+               max: GRID_COMBINED_ITEM_W_INC GRID_COMBINED_ITEM_H_INC;
                rel1 { relative: 1.0 1.0; to: "content_top_left_padding"; }
                rel2 { relative: 1.0 1.0; to: "content_top_left_padding"; }
                GENGRID_ITEM_SELECT_VI_EFFECT
@@ -1783,11 +1699,11 @@ description { state: "selected" 0.0; \
             scale: 1;
             description { state: "default" 0.0;
                fixed: 1 1;
-               align: 0.5 0.0;
-               min: CLIPBOARD_PANEL_TOP_PADDING_INC GRID_COMBINED_SEPERATOR_PADDING_INC;
-               max: -1 GRID_COMBINED_SEPERATOR_PADDING_INC;
-               rel1 { relative: 0.0 1.0; to: "elm.swallow.content"; }
-               rel2 { relative: 0.0 1.0; to_x: "text_bottom_right_padding";  to_y: "elm.swallow.content"; }
+               align: 0.0 0.0;
+               min: GRID_COMBINED_SEPERATOR_PADDING_INC CLIPBOARD_PANEL_TOP_PADDING_INC;
+               max: GRID_COMBINED_SEPERATOR_PADDING_INC -1;
+               rel1 { relative: 1.0 0.0; to: "elm.swallow.content"; }
+               rel2 { relative: 1.0 0.0; to: "elm.swallow.content"; }
             }
          }
          part { name: "elm.text";
@@ -1799,7 +1715,7 @@ description { state: "selected" 0.0; \
                   style: "clipboard_02_style";
                   align: 0.0 0.0;
                }
-               rel1 { relative: 0.0 1.0; to: "separator_padding"; }
+               rel1 { relative: 1.0 0.0; to: "separator_padding"; }
                rel2 { relative: 0.0 0.0; to: "text_bottom_right_padding"; }
             }
             description { state: "pressed" 0.0;
@@ -1838,8 +1754,8 @@ description { state: "selected" 0.0; \
             type: SPACER;
             scale: 1;
             description { state: "default" 0.0;
-               rel1 { relative: 0.0 1.0; to: "delbtn_top_left_padding"; }
-               rel2 { relative: 0.0 1.0; to: "delbtn_top_left_padding"; }
+               rel1 { relative: 0.0 0.0; to: "delbtn_top_left_padding"; }
+               rel2 { relative: 0.0 0.0; to: "delbtn_top_left_padding"; }
                align: 0.0 0.0;
                fixed: 1 1;
                min: GRID_ITEM_DELETE_BTN_SIZE_INC;
@@ -1849,6 +1765,7 @@ description { state: "selected" 0.0; \
          part { name: "delbtn/img";
             scale: 1;
             mouse_events: 1;
+            type: SWALLOW;
             description { state: "default" 0.0;
                rel1.to: "delbtn";
                rel2.to: "delbtn";
@@ -1857,16 +1774,10 @@ description { state: "selected" 0.0; \
             description { state: "show" 0.0;
                inherit: "default" 0.0;
                visible: 1;
-               image {
-                  normal: "clipboard_delete.png";
-               }
             }
             description { state: "pressed" 0.0;
                inherit: "default" 0.0;
                visible: 1;
-               image {
-                  normal: "clipboard_delete_press.png";
-               }
             }
          }
       }
@@ -1903,44 +1814,6 @@ description { state: "selected" 0.0; \
             target: "elm.swallow.content";
             target: "elm.text";
          )
-         program { name: "mouse_down";
-            signal: "mouse,down,1";
-            source: "delbtn/img";
-            script {
-               new st[31];
-               new Float:vl;
-               get_state(PART:"delbtn/img", st, 30, vl);
-               if (!strcmp(st, "show"))
-                  set_state(PART:"delbtn/img", "pressed", 0.0);
-            }
-         }
-         program { name: "mouse_out";
-            signal: "mouse,out";
-            source: "delbtn/img";
-            script {
-               new st[31];
-               new Float:vl;
-               get_state(PART:"delbtn/img", st, 30, vl);
-               if (!strcmp(st, "pressed"))
-                  set_state(PART:"delbtn/img", "show", 0.0);
-            }
-         }
-         program { name: "mouse_up";
-            signal: "mouse,up,1";
-            source: "delbtn/img";
-            script {
-               new st[31];
-               new Float:vl;
-               get_state(PART:"delbtn/img", st, 30, vl);
-               if (!strcmp(st, "pressed"))
-                  set_state(PART:"delbtn/img", "show", 0.0);
-            }
-         }
-         program { name: "play_sound_delbtn";
-            signal: "mouse,clicked,1";
-            source: "delbtn/img";
-            action: RUN_PLUGIN "touch_sound";
-         }
          program { name: "touch_sound_program";
             action: RUN_PLUGIN "touch_sound";
          }
index aa952ac..f2e750d 100755 (executable)
@@ -2,8 +2,10 @@
 
 SET(POFILES
        ar.po
+       as.po
        az.po
        bg.po
+       bn.po
        ca.po
        cs.po
        da.po
@@ -30,23 +32,33 @@ SET(POFILES
        ja_JP.po
        ka.po
        kk.po
+       kn.po
        ko_KR.po
        lt.po
        lv.po
        mk.po
+       ml.po
+       mr.po
        nb.po
+       ne.po
        nl.po
+       or.po
+       pa.po
        pl.po
        pt_BR.po
        pt_PT.po
        ro.po
        ru_RU.po
+       si.po
        sk.po
        sl.po
        sr.po
        sv.po
+       ta.po
+       te.po
        tr_TR.po
        uk.po
+       ur.po
        uz.po
        zh_CN.po
        zh_HK.po
index 48e0796..37b5e23 100644 (file)
@@ -64,9 +64,15 @@ msgstr "الحافظة"
 msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
 msgstr "سيتم حذف %d عناصر."
 
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "سيتم حذف كل العناصر."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "حذف كل العناصر"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "سيتم حذف كل العناصر من الحافظة."
 
 msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
 msgstr "تم بالفعل نسخ العنصر إلى الحافظة."
 
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "لا توجد عناصر"
+
diff --git a/2.3-mobile/po/as.po b/2.3-mobile/po/as.po
new file mode 100644 (file)
index 0000000..9b31573
--- /dev/null
@@ -0,0 +1,78 @@
+msgid "IDS_COM_BODY_DELETE"
+msgstr "বিলোপ কৰক"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "ক্লিপবোৰ্ডৰ পৰা বিলোপ কৰক"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "ক্লিপব'ৰ্ডলৈ লক কৰক"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "ক্লিপব'ৰ্ডৰ পৰা আনলক কৰক"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "বাতিল"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "ক্লিপবোৰ্ড বিকল্প"
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "সকলো বিলোপ কৰিবনে?"
+
+msgid "IDS_DM_POP_PD_ITEMS_WILL_BE_DELETED_ABB2"
+msgstr "%d টা আইটেম বিলোপ কৰা হ'ব৷"
+
+msgid "IDS_DM_POP_THIS_ITEM_WILL_BE_DELETED_ABB"
+msgstr "এই আইটেমটো বিলোপ কৰা হ'ব৷"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "বন্ধ কৰক"
+
+msgid "IDS_COM_BODY_DONE"
+msgstr "সম্পন্ন"
+
+msgid "IDS_COM_BODY_SELECT_ALL"
+msgstr "সকলো চয়ন কৰক"
+
+msgid "IDS_COM_BODY_COPY"
+msgstr "প্ৰতিলিপি"
+
+msgid "IDS_COM_POP_DELETE_Q"
+msgstr "বিলোপ কৰিবনে?"
+
+msgid "IDS_COM_SK_SELECT"
+msgstr "চয়ন কৰক"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "সকলো বিলোপ কৰক"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "ক্লিপবৰ্ডলৈ প্ৰতিলিপি হৈছে৷"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "ইতিমধ্যে মজুত আছে৷"
+
+msgid "IDS_COM_BODY_CUT"
+msgstr "কাটক"
+
+msgid "IDS_COM_BODY_PASTE"
+msgstr "লেপন কৰক"
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "ক্লিপব'ৰ্ড"
+
+msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
+msgstr "%d টা আইটেম বিলোপ কৰা হ'ব৷"
+
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "সকলো আইটেম বিলোপ কৰক"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "সকলো আইটেম ক্লিপব'ৰ্ডৰ পৰা বিলোপ কৰা হ'ব৷"
+
+msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
+msgstr "আইটেম ইতিমধ্যেই ক্লিপব'ৰ্ডলৈ প্ৰতিলিপি কৰা হ'ল৷"
+
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "আইটেম নাই"
+
index 5ed7704..af04efe 100644 (file)
@@ -64,9 +64,15 @@ msgstr "Mübadilə buferi"
 msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
 msgstr "%d element silinəcək."
 
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Bütün elementlər silinəcək."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Bütün elementləri sil"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Bütün elementlər yalnız mübadilə buferindən silinəcək."
 
 msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
 msgstr "Element artıq məlumat buferinə kopyalanmışdır."
 
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Element yoxdur"
+
index 886b39c..38e9061 100644 (file)
@@ -64,9 +64,15 @@ msgstr "Системен буфер"
 msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
 msgstr "%d елемента ще бъдат изтрити."
 
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Всички елементи ще бъдат изтрити."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Изтриване на всички елементи"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Всички елементи ще бъдат изтрити от клипборда."
 
 msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
 msgstr "Елементът вече е копиран в клипборда."
 
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Няма елементи"
+
diff --git a/2.3-mobile/po/bn.po b/2.3-mobile/po/bn.po
new file mode 100644 (file)
index 0000000..a453a4d
--- /dev/null
@@ -0,0 +1,78 @@
+msgid "IDS_COM_BODY_DELETE"
+msgstr "মুছুন"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "ক্লিপবোর্ড থেকে মুছুন"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "ক্লিপবোর্ডে আবদ্ধ করুন"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "ক্লিপবোর্ড থেকে আনলক করুন"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "বাতিল"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "ক্লিপবোর্ড বিকল্প"
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "সব মুছবেন?"
+
+msgid "IDS_DM_POP_PD_ITEMS_WILL_BE_DELETED_ABB2"
+msgstr "%dটি আইটেম মোছা হবে।"
+
+msgid "IDS_DM_POP_THIS_ITEM_WILL_BE_DELETED_ABB"
+msgstr "এই আইটেমটি মোছা হবে।"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "বন্ধ করুন"
+
+msgid "IDS_COM_BODY_DONE"
+msgstr "সম্পন্ন"
+
+msgid "IDS_COM_BODY_SELECT_ALL"
+msgstr "সমস্ত নির্বাচন করুন"
+
+msgid "IDS_COM_BODY_COPY"
+msgstr "অনুলিপি করুন"
+
+msgid "IDS_COM_POP_DELETE_Q"
+msgstr "মুছবেন?"
+
+msgid "IDS_COM_SK_SELECT"
+msgstr "নির্বাচন"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "সমস্ত মুছুন"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "ক্লিপবোর্ডে প্রতিলিপি গঠন করা হয়েছে।"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "ইতিমধ্যে রয়েছে।"
+
+msgid "IDS_COM_BODY_CUT"
+msgstr "কাট"
+
+msgid "IDS_COM_BODY_PASTE"
+msgstr "প্রতিলেপন"
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "ক্লিপবোর্ড"
+
+msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
+msgstr "%dটি আইটেম মোছা হবে।"
+
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "সমস্ত আইটেম মুছুন"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "ক্লিপবোর্ড থেকে সমস্ত আইটেম মোছা হবে।"
+
+msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
+msgstr "আইটেম ইতিমধ্যে ক্লিপবোর্ডে অনুলিপি করা হয়েছে।"
+
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "কোনও আইটেম নেই"
+
index 46a089c..003b852 100644 (file)
@@ -64,9 +64,15 @@ msgstr "Porta-retalls"
 msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
 msgstr "S'esborraran %d elements"
 
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "S'esborraran tots els elements"
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Esborrar tots els elements"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "S'esborraran tots els elements del porta-retalls."
 
 msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
 msgstr "Element ja copiat al porta-retalls."
 
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Cap element"
+
index ea2602f..e244dd1 100644 (file)
@@ -64,9 +64,15 @@ msgstr "Schránka"
 msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
 msgstr "%d položek bude odstraněno."
 
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Všechny položky budou odstraněny."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Odstranit všechny položky"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Ze schránky budou odstraněny všechny položky."
 
 msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
 msgstr "Položka již byla zkopírována do schránky."
 
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Žádné položky"
+
index 2d8db27..2879345 100644 (file)
@@ -64,9 +64,15 @@ msgstr "Udklipsholder"
 msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
 msgstr "%d elementer vil blive slettet."
 
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Alle elementer bliver slettet."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Slet alle elementer"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Alle elementer vil blive slettet fra udklipsholderen."
 
 msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
 msgstr "Elementet er allerede blevet kopieret til udklipsholderen."
 
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Ingen elementer"
+
index 2eecb1b..e92fac4 100644 (file)
@@ -64,9 +64,15 @@ msgstr "Zwischenablage"
 msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
 msgstr "%d Elemente werden gelöscht."
 
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Alle Elemente werden gelöscht."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Löschen aller Elemente"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Alle Elemente werden aus der Zwischenablage entfernt."
 
 msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
 msgstr "Das Element wurde bereits in die Zwischenablage kopiert."
 
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Keine Elemente"
+
index 0297f1b..68b989c 100644 (file)
@@ -64,9 +64,15 @@ msgstr "Πρόχειρο"
 msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
 msgstr "Θα διαγραφούν %d στοιχεία."
 
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Θα γίνει διαγραφή όλων των στοιχείων."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Διαγραφή όλων των στοιχείων"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Όλα τα στοιχεία θα διαγραφούν από το πρόχειρο."
 
 msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
 msgstr "Το στοιχείο έχει ήδη αντιγραφεί στο πρόχειρο."
 
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Κανένα στοιχείο"
+
index ef08a38..c828162 100644 (file)
@@ -64,9 +64,15 @@ msgstr "Clipboard"
 msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
 msgstr "%d items will be deleted."
 
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "All items will be deleted."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Delete all items"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "All items will be deleted from the clipboard."
 
 msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
 msgstr "Item already copied to clipboard."
 
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "No items"
+
index ef08a38..c828162 100644 (file)
@@ -64,9 +64,15 @@ msgstr "Clipboard"
 msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
 msgstr "%d items will be deleted."
 
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "All items will be deleted."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Delete all items"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "All items will be deleted from the clipboard."
 
 msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
 msgstr "Item already copied to clipboard."
 
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "No items"
+
index ef08a38..c828162 100644 (file)
@@ -64,9 +64,15 @@ msgstr "Clipboard"
 msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
 msgstr "%d items will be deleted."
 
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "All items will be deleted."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Delete all items"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "All items will be deleted from the clipboard."
 
 msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
 msgstr "Item already copied to clipboard."
 
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "No items"
+
index 7e68e48..f4b9914 100644 (file)
@@ -64,9 +64,15 @@ msgstr "Portapapeles"
 msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
 msgstr "Se eliminarán %d elementos"
 
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Se eliminarán todos los elementos"
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Eliminar todos los elementos"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Se eliminarán todos los elementos del portapapeles."
 
 msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
 msgstr "Elemento ya copiado en el portapapeles."
 
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Sin elementos"
+
index 52aff80..55d52be 100644 (file)
@@ -64,9 +64,14 @@ msgstr "Portapapeles"
 msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
 msgstr "Se eliminarán %d elementos."
 
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Se eliminarán todos los elementos."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Eliminar todos los elementos"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Se eliminarán todos los elementos del portapapeles."
 
 msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
 msgstr "Ya se copió el elemento al portapapeles."
 
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "No hay elementos"
index 56ba46e..ace7d3a 100644 (file)
@@ -64,9 +64,15 @@ msgstr "Lõikelaud"
 msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
 msgstr "%d uksust kustutatakse."
 
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Kõik üksused kustutatakse."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Kõigi üksuste kustutamine"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Kõik üksused kustutatakse lõikelaualt."
 
 msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
 msgstr "Üksus on juba kopeeritud lõikelauale."
 
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Üksusi pole"
+
index 7c06b61..d709b5d 100644 (file)
@@ -64,9 +64,15 @@ msgstr "Arbela"
 msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
 msgstr "%d elementu ezabatuko dira"
 
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Elementu guztiak ezabatuko dira"
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Ezabatu elementu guztiak"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Elementu guztiak ezabatuko dira arbeletik."
 
 msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
 msgstr "Elementua arbelean kopiatu dago aurretik."
 
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Elementurik ez"
+
index f714ce7..aae0ac5 100644 (file)
@@ -64,9 +64,15 @@ msgstr "Leikepöytä"
 msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
 msgstr "%d kohdetta poistetaan."
 
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Kaikki kohteet poistetaan."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Poista kaikki kohteet"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Kaikki kohteet poistetaan leikepöydältä."
 
 msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
 msgstr "Kohde on jo kopioitu leikepöydälle."
 
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Ei kohteita"
+
index f00c144..b8c2aba 100644 (file)
@@ -64,9 +64,15 @@ msgstr "Presse-papier"
 msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
 msgstr "%d éléments vont être supprimés."
 
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Tous les éléments vont être supprimés."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Suppression ts les éléments"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Tous les éléments vont être supprimés du presse-papiers."
 
 msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
 msgstr "Elément déjà copié sur le presse-papiers."
 
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Aucun élément"
+
index 1f38c47..b28d6ef 100644 (file)
@@ -64,9 +64,15 @@ msgstr "Presse-papier"
 msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
 msgstr "%d éléments vont être supprimés."
 
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Tous les éléments vont être supprimés."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Suppression ts les éléments"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Tous les éléments vont être supprimés du presse-papier."
 
 msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
 msgstr "Élément déjà copié sur le presse-papier."
 
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Aucun élément"
+
index 1cf7491..4f9dc89 100644 (file)
@@ -64,9 +64,15 @@ msgstr "Gearrthaisce"
 msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
 msgstr "Scriosfar %d mír"
 
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Scriosfar gach mír"
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Scrios gach mír"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Scriosfar gach mír ón ngearrthaisce."
 
 msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
 msgstr "Mír cóipeáilte chuig an ngearrthaisce cheana."
 
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Níl míreanna ann"
+
index 6b982d4..0bea106 100644 (file)
@@ -64,9 +64,15 @@ msgstr "Portapapeis"
 msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
 msgstr "Eliminaranse %d elementos"
 
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Eliminaranse todos os elementos"
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Eliminar todos os elementos"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Eliminaranse todos os elementos do portapapeis."
 
 msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
 msgstr "Elemento xa copiado no portapapeis."
 
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Sen elementos"
+
index 0484412..18e8de4 100644 (file)
@@ -64,9 +64,15 @@ msgstr "क्लिपबोर्ड"
 msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
 msgstr "%d मदें हटाई जाएँगी।"
 
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "सभी मदें हटाए जाएँगे।"
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "सभी मदें हटाएँ"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "क्लिपबोर्ड से सभी मदें हटाई जाएँगी।"
 
 msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
 msgstr "मद पहले से ही क्लिपबोर्ड में कॉपी किया गया।"
 
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "कोई मद नहीं"
+
index 863f4d7..e96a6a0 100644 (file)
@@ -64,9 +64,15 @@ msgstr "Međuspremnik"
 msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
 msgstr "%d datoteka bit će obrisano."
 
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Svi će stavke biti obrisane."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Brisanje svih stavki"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Izbrisat će se sve stavke iz međuspremnika."
 
 msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
 msgstr "Stavka je već kopirana u međuspremnik."
 
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Nema stavki"
+
index ae70621..11b5931 100644 (file)
@@ -64,9 +64,15 @@ msgstr "Vágólap"
 msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
 msgstr "%d tételt törölni fog."
 
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Minden tételt törölni fog."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Összes elem törlése"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Törli a vágólap összes elemét."
 
 msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
 msgstr "Már a vágólapra másolta ezt az elemet."
 
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Nincs tétel"
+
index 0d34a7a..11497a7 100644 (file)
@@ -64,9 +64,15 @@ msgstr "Գզրոց"
 msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
 msgstr "%d տարրեր կվերացվեն:"
 
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Բոլոր տարրերը կվերացվեն:"
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Վերացնել բոլոր տարրերը"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Բոլոր տարրերը կվերացվեն միայն գզրոցից:"
 
 msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
 msgstr "Տարրն արդեն պատճենվել է գզրոցում:"
 
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Տարրեր չկան"
+
index ab0e4fd..f21af8e 100644 (file)
@@ -64,9 +64,15 @@ msgstr "Klippiborð"
 msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
 msgstr "%d hlutum verður eytt."
 
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Öllum hlutum verður eytt."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Eyða öllum atriðum"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Öllum atriðum verður eytt af klippiborðinu."
 
 msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
 msgstr "Búið er að afrita atriðið á klippiborð."
 
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Engin atriði"
+
index 60ccdcb..18e124a 100644 (file)
@@ -64,9 +64,15 @@ msgstr "Appunti"
 msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
 msgstr "%d elementi verranno eliminati."
 
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Tutti gli elementi verranno eliminati."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Elimina tutti gli elementi"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Tutti gli elementi verranno eliminati dagli appunti."
 
 msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
 msgstr "Elemento già copiato negli appunti."
 
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Nessun elemento"
+
index 68f75e9..f30d16b 100644 (file)
@@ -64,9 +64,15 @@ msgstr "クリップボード"
 msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
 msgstr "%d件のアイテムを削除します。"
 
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "全てのアイテムを削除します。"
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "全てのアイテムを削除"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "全てのアイテムがクリップボードから削除されます。"
 
 msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
 msgstr "アイテムは既にクリップボードにコピーされています。"
 
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "アイテムがありません"
+
index af5bda2..b0e37e5 100644 (file)
@@ -64,9 +64,15 @@ msgstr "ბუფერული მეხს."
 msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
 msgstr "%d ელემენტი წაიშლება."
 
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "ყველა ელემენტი წაიშლება."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "ყველა ელემენტის წაშლა"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "ბუფერულ მეხსიერებაში წაიშლება ყველაფერი."
 
 msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
 msgstr "ასლი უკვე შენახულია ბუფერში."
 
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "ელემენტები არაა"
+
index 74fc11e..237e411 100644 (file)
@@ -64,9 +64,15 @@ msgstr "Буфер"
 msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
 msgstr "%d элемент жойылады."
 
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Барлық элементтер жойылады."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Барлық элементтерді жою"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Пернетақтадан барлық элементтер жойылады."
 
 msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
 msgstr "Элемент буферге көшіріліп қойған."
 
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Элементтер жоқ"
+
diff --git a/2.3-mobile/po/kn.po b/2.3-mobile/po/kn.po
new file mode 100644 (file)
index 0000000..6ac3e2a
--- /dev/null
@@ -0,0 +1,78 @@
+msgid "IDS_COM_BODY_DELETE"
+msgstr "ಅಳಿಸು"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "ಕ್ಲಿಪ್‌ಬೋರ್ಡ್‌ನಿಂದ ಅಳಿಸಿ"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "ಕ್ಲಿಪ್‌ಬೋರ್ಡ್‌ಗೆ ಲಾಕ್ ಮಾಡಿ"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "ಕ್ಲಿಪ್‌ಬೋರ್ಡ್‌ನಿಂದ ಅನ್‌ಲಾಕ್ ಮಾಡಿ"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "ರದ್ದು"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "ಕ್ಲಿಪ್‌ಬೋರ್ಡ್ ಆಯ್ಕೆಗಳು"
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "ಎಲ್ಲವನ್ನೂ ಅಳಿಸುವುದೆ?"
+
+msgid "IDS_DM_POP_PD_ITEMS_WILL_BE_DELETED_ABB2"
+msgstr "%d ಅಂಶಗಳನ್ನು ಅಳಿಸಲಾಗುವುದು."
+
+msgid "IDS_DM_POP_THIS_ITEM_WILL_BE_DELETED_ABB"
+msgstr "ಈ ಅಂಶವನ್ನು ಅಳಿಸಲಾಗುವುದು."
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "ಮುಚ್ಚಿ"
+
+msgid "IDS_COM_BODY_DONE"
+msgstr "ಮಾಡಲಾಗಿದೆ"
+
+msgid "IDS_COM_BODY_SELECT_ALL"
+msgstr "ಎಲ್ಲಾ ಆಯ್ಕೆಮಾಡಿ"
+
+msgid "IDS_COM_BODY_COPY"
+msgstr "ನಕಲಿಸಿ"
+
+msgid "IDS_COM_POP_DELETE_Q"
+msgstr "ಅಳಿಸಲೇ?"
+
+msgid "IDS_COM_SK_SELECT"
+msgstr "ಆಯ್ಕೆ"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "ಎಲ್ಲವನ್ನು ತೆಗೆದುಹಾಕಿ"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "ಕ್ಲಿಪ್‌ಬೋರ್ಡ್‌ಗೆ ನಕಲಿಸಿದೆ."
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "ಈಗಾಗಲೇ ಇದೆ."
+
+msgid "IDS_COM_BODY_CUT"
+msgstr "ಕತ್ತರಿಸು"
+
+msgid "IDS_COM_BODY_PASTE"
+msgstr "ಅಂಟಿಸಿರಿ"
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "ಕ್ಲಿಪ್‌ಬೋರ್ಡ್"
+
+msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
+msgstr "%dಅಂಶಗಳನ್ನು ಅಳಿಸಲಾಗುವುದು."
+
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "ಎಲ್ಲಾ ಐಟಮ್‌ಗಳನ್ನು ಅಳಿಸಿ"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "ಕ್ಲಿಪ್‌ಬೋರ್ಡ್‌ನಿಂದ ಎಲ್ಲ ಐಟಂಗಳನ್ನು ಅಳಿಸಲಾಗುತ್ತದೆ."
+
+msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
+msgstr "ಅಂಶವನ್ನು ಈಗಾಗಲೇ ಕ್ಲಿಪ್‌ಬೋರ್ಡ್‌ಗೆ ನಕಲಿಸಲಾಗಿದೆ."
+
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "ಯಾವುದೇ ಅಂಶಗಳಿಲ್ಲ"
+
index f83f005..d642566 100644 (file)
@@ -64,9 +64,15 @@ msgstr "클립보드"
 msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
 msgstr "항목 %d개를 삭제합니다."
 
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "항목을 모두 삭제합니다."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "모든 항목 삭제"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "클립보드의 모든 항목을 삭제합니다."
 
 msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
 msgstr "클립보드에 이미 복사된 항목입니다."
 
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "항목이 없습니다"
+
index 38f1742..a441ec5 100644 (file)
@@ -64,9 +64,15 @@ msgstr "Iškarpinė"
 msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
 msgstr "Bus ištrinta elementų: %d."
 
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Bus ištrinti visi elementai."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Trinti visus elementus"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Visi iškarpinės elementai bus ištrinti."
 
 msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
 msgstr "Elementas jau nukopijuotas į iškarpinę."
 
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Nėra elementų"
+
index 75ee9cf..b116b65 100644 (file)
@@ -64,9 +64,15 @@ msgstr "Starpliktuve"
 msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
 msgstr "%d objekti tiks izdzēsti."
 
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Visi objekti tiks izdzēsti."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Dzēst visus objektus"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Visi objekti tiks izdzēsti no starpliktuves."
 
 msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
 msgstr "Objekts jau ir kopēts uz starpliktuvi."
 
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Nav objektu"
+
index b4a0606..ff0db00 100644 (file)
@@ -64,9 +64,15 @@ msgstr "Посредна меморија"
 msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
 msgstr "%d записи ќе се избришат."
 
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Сите записи ќе се избришат."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Избриши ги сите записи"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Сите записи ќе се избришат од посредната меморија."
 
 msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
 msgstr "Ставката е веќе ископирана во посредната меморија."
 
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Нема записи"
+
diff --git a/2.3-mobile/po/ml.po b/2.3-mobile/po/ml.po
new file mode 100644 (file)
index 0000000..0aff2a9
--- /dev/null
@@ -0,0 +1,78 @@
+msgid "IDS_COM_BODY_DELETE"
+msgstr "ഇല്ലാതാക്കുക"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "ക്ലിപ്‍ബോര്‍ഡില്‍ നിന്നും ഇല്ലാതാക്കുക"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "ക്ലിപ്ബോര്‍ഡിലേക്ക് ലോക്ക് ചെയ്യുക"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "ക്ലിപ്‍ബോര്‍ഡില്‍ നിന്നും അണ്‍ലോക്ക് ചെയ്യുക"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "റദ്ദാക്കുക"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "ക്ലിപ്‍ബോര്‍ഡ് ഓപ്ഷനുകള്‍"
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "എല്ലാം ഇല്ലാതാക്കണോ?"
+
+msgid "IDS_DM_POP_PD_ITEMS_WILL_BE_DELETED_ABB2"
+msgstr "%d ഇനങ്ങൾ ഇല്ലാതാക്കപ്പെടും."
+
+msgid "IDS_DM_POP_THIS_ITEM_WILL_BE_DELETED_ABB"
+msgstr "ഈ ഇനം ഇല്ലാതാക്കപ്പെടും."
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "അടയ്ക്കുക"
+
+msgid "IDS_COM_BODY_DONE"
+msgstr "ചെയ്‌തു"
+
+msgid "IDS_COM_BODY_SELECT_ALL"
+msgstr "എല്ലാം തിരഞ്ഞെടുക്കുക"
+
+msgid "IDS_COM_BODY_COPY"
+msgstr "പകര്‍ത്തുക"
+
+msgid "IDS_COM_POP_DELETE_Q"
+msgstr "ഇല്ലാതാക്കണോ?"
+
+msgid "IDS_COM_SK_SELECT"
+msgstr "തിരഞ്ഞെ."
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "എല്ലാം ഇല്ലാതാക്കുക"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "ക്ലിപ്ബോര്‍ഡിലേക്ക് പകര്‍ത്തി."
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "ഇതിനകം നിലവിലുണ്ട്."
+
+msgid "IDS_COM_BODY_CUT"
+msgstr "മുറിക്കുക"
+
+msgid "IDS_COM_BODY_PASTE"
+msgstr "ഒട്ടിക്കുക"
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "ക്ലിപ്ബോര്‍ഡ്"
+
+msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
+msgstr "%d ഇനം ഇല്ലാതാക്കപ്പെടും."
+
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "എല്ലാ ഇനങ്ങളും മായ്ക്കുക"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "ക്ലിപ്ബോർഡിൽ നിന്ന് എല്ലാ ഇനങ്ങളും ഇല്ലാതാക്കപ്പെടും."
+
+msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
+msgstr "ഇനത്തെ നേരത്തേതന്നെ ക്ലിപ്ബോർഡിലേക്ക് പകർത്തിയിട്ടുണ്ട്."
+
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "ഇനങ്ങളൊന്നുമില്ല"
+
diff --git a/2.3-mobile/po/mr.po b/2.3-mobile/po/mr.po
new file mode 100644 (file)
index 0000000..d8e8190
--- /dev/null
@@ -0,0 +1,78 @@
+msgid "IDS_COM_BODY_DELETE"
+msgstr "काढून टाका"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "क्लिपबोर्डमधून हटवा"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "क्लिपबोर्डवर लॉक करा."
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "क्लिपबोर्ड मधून अनलॉक करा."
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "रद्द"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "क्लिपबोर्ड पर्याय"
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "सर्व काढून टाकायचे?"
+
+msgid "IDS_DM_POP_PD_ITEMS_WILL_BE_DELETED_ABB2"
+msgstr "%d आयटम्‍स हटवले जातील."
+
+msgid "IDS_DM_POP_THIS_ITEM_WILL_BE_DELETED_ABB"
+msgstr "हा आयटम हटवला जाईल."
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "बंद करा"
+
+msgid "IDS_COM_BODY_DONE"
+msgstr "झाले"
+
+msgid "IDS_COM_BODY_SELECT_ALL"
+msgstr "सर्व निवडा"
+
+msgid "IDS_COM_BODY_COPY"
+msgstr "कॉपी"
+
+msgid "IDS_COM_POP_DELETE_Q"
+msgstr "काढून टाकायचे?"
+
+msgid "IDS_COM_SK_SELECT"
+msgstr "निवडा"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "सर्व काढून टाका"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "क्लिपबोर्डवर कॉपी केले."
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "आधिपासूनच."
+
+msgid "IDS_COM_BODY_CUT"
+msgstr "कट"
+
+msgid "IDS_COM_BODY_PASTE"
+msgstr "पेस्ट"
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "क्लिपबोर्ड"
+
+msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
+msgstr "%d बाबी हटवल्या जातील."
+
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "सर्व आयटम्‍स हटवा"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "सर्व आयटम्‍स क्लिपबोर्डवरून हटवण्‍यात येतील."
+
+msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
+msgstr "आयटम आधीपासूनच क्लिपबोर्डवर कॉपी केला."
+
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "बाबी नाही"
+
index f7ec59e..e886079 100644 (file)
@@ -64,9 +64,15 @@ msgstr "Utklippstavle"
 msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
 msgstr "%d elementer vil bli slettet."
 
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Alle elementer vil bli slettet."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Slett alle elementer"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Alle elementer blir slettet fra utklippstavlen."
 
 msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
 msgstr "Element er allerede kopiert til utklippstavle."
 
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Ingen elementer"
+
diff --git a/2.3-mobile/po/ne.po b/2.3-mobile/po/ne.po
new file mode 100644 (file)
index 0000000..4136ee6
--- /dev/null
@@ -0,0 +1,78 @@
+msgid "IDS_COM_BODY_DELETE"
+msgstr "मेटाउनु"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "क्लिपवोर्डबाट मेटाउ"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "क्लिपबोर्डमा लक गर्नुहोस्"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "क्लिपबोर्डबाट अनलक गर्नुहोस्"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "रद्द"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "क्लिपवोर्ड विकल्पहरू"
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "सबै मेटाउनु?"
+
+msgid "IDS_DM_POP_PD_ITEMS_WILL_BE_DELETED_ABB2"
+msgstr "%d वस्तुहरू मेटाइनेछ।"
+
+msgid "IDS_DM_POP_THIS_ITEM_WILL_BE_DELETED_ABB"
+msgstr "यो वस्तुलाई मेटाइनेछ।"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "बन्द गर्नुहोस्"
+
+msgid "IDS_COM_BODY_DONE"
+msgstr "भयो"
+
+msgid "IDS_COM_BODY_SELECT_ALL"
+msgstr "सबै छान्नुहोस्"
+
+msgid "IDS_COM_BODY_COPY"
+msgstr "कपी गर्नुहोस्"
+
+msgid "IDS_COM_POP_DELETE_Q"
+msgstr "मेट्ऊँ?"
+
+msgid "IDS_COM_SK_SELECT"
+msgstr "चयन गर"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "सबै मेटाउनु"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "क्लिपबोर्डमा प्रतिलिपि गरियो।"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "पहिले स्थापित छ।"
+
+msgid "IDS_COM_BODY_CUT"
+msgstr "काट्नुहोस्"
+
+msgid "IDS_COM_BODY_PASTE"
+msgstr "पेस्ट गर्नुहोस्"
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "क्लिपबोर्ड"
+
+msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
+msgstr "%d वस्तुहरू मेटाइनेछ।"
+
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "सबै वस्तुहरू मेटाउनुहोस्"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "क्लिपबोर्डबाट सबै वस्तुहरू मेटाइनेछ।"
+
+msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
+msgstr "वस्तु क्लिपबोर्डमा पहिले नै प्रतिलिपि गरियो।"
+
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "वस्तुहरु छैनन्"
+
index 07dfba5..bc2f047 100644 (file)
@@ -64,9 +64,15 @@ msgstr "Klembord"
 msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
 msgstr "%d items worden verwijderd."
 
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Alle items worden verwijderd."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Alle items verwijderen"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Alle items worden verwijderd van het klembord."
 
 msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
 msgstr "Item is al gekopieerd naar klembord."
 
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Geen items"
+
diff --git a/2.3-mobile/po/or.po b/2.3-mobile/po/or.po
new file mode 100644 (file)
index 0000000..f48a36a
--- /dev/null
@@ -0,0 +1,78 @@
+msgid "IDS_COM_BODY_DELETE"
+msgstr "ବିଲୋପ"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "କ୍ଲିପ୍‌ବୋର୍ଡରୁ ବିଲୋପ କରନ୍ତୁ।"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "କ୍ଲିପ୍‌ବୋର୍ଡ୍‌କୁ ଲକ୍ କରନ୍ତୁ।"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "କ୍ଲିପ୍‌ବୋର୍ଡରୁ ଅନ୍‌ଲକ୍ କରନ୍ତୁ।"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "ବାତିଲ୍"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "କ୍ଲିପବୋର୍ଡ୍ ବିକଳ୍ପଗୁଡିକ"
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "ସମସ୍ତ ବିଲୋପ କରିବେ?"
+
+msgid "IDS_DM_POP_PD_ITEMS_WILL_BE_DELETED_ABB2"
+msgstr "%dଟି ଆଇଟମ୍‌ ବିଲୋପିତ ହେବ।"
+
+msgid "IDS_DM_POP_THIS_ITEM_WILL_BE_DELETED_ABB"
+msgstr "ଏହି ଆଇଟମ୍ ବିଲୋପିତ ହେବ।"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "ବନ୍ଦ"
+
+msgid "IDS_COM_BODY_DONE"
+msgstr "ସମାପ୍ତ"
+
+msgid "IDS_COM_BODY_SELECT_ALL"
+msgstr "ସମସ୍ତ ଚୟନ କରନ୍ତୁ"
+
+msgid "IDS_COM_BODY_COPY"
+msgstr "କପି"
+
+msgid "IDS_COM_POP_DELETE_Q"
+msgstr "ବିଲୋପ କରିବେ?"
+
+msgid "IDS_COM_SK_SELECT"
+msgstr "ଚୟନ"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "ସମସ୍ତ ବିଲୋପ କରନ୍ତୁ"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "କ୍ଲିପ୍‌ବୋର୍ଡ୍‌କୁ କପି ହୋଇଛି।"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "ପୂର୍ବରୁ ବିଦ୍ୟମାନ ଅଛି।"
+
+msgid "IDS_COM_BODY_CUT"
+msgstr "ଛେଦନ"
+
+msgid "IDS_COM_BODY_PASTE"
+msgstr "ଲେପନ"
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "କ୍ଲିପବୋର୍ଡ୍"
+
+msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
+msgstr "%d ଆଇଟମ୍‌ ବିଲୋପିତ ହେବ।"
+
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "ସମସ୍ତ ଆଇଟମ୍‌ ବିଲୋପ"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "କ୍ଲିପବୋର୍ଡରୁ ସମସ୍ତ ଆଇଟମ୍‌ ବିଲୋପ ହେବ।"
+
+msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
+msgstr "ଆଇଟମ୍ ପୂର୍ବରୁ କ୍ଲିପବୋର୍ଡକୁ କପି ହୋଇଛି।"
+
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "କୌଣସି ଆଇଟମ୍ ନାହିଁ"
+
diff --git a/2.3-mobile/po/pa.po b/2.3-mobile/po/pa.po
new file mode 100644 (file)
index 0000000..518ba09
--- /dev/null
@@ -0,0 +1,78 @@
+msgid "IDS_COM_BODY_DELETE"
+msgstr "ਮਿਟਾਓ"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "ਕਲਿਪਬੋਰਡ ਤੋਂ ਮਿਟਾਓ"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "ਕਲਿਪਬੋਰਡ ਤੇ ਲੌਕ ਕਰੋ"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "ਕਲਿਪਬੋਰਡ ਤੋਂ ਅਨਲੌਕ ਕਰੋ"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "ਰੱਦ"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "ਕਲਿਪਬੋਰਡ ਵਿਕਲਪ"
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "ਸਾਰੇ ਮਿਟਾਉਣੇ ਹਨ?"
+
+msgid "IDS_DM_POP_PD_ITEMS_WILL_BE_DELETED_ABB2"
+msgstr "%d ਆਈਟਮਸ ਨੂੰ ਮਿਟਾਇਆ ਜਾਵੇਗਾ।"
+
+msgid "IDS_DM_POP_THIS_ITEM_WILL_BE_DELETED_ABB"
+msgstr "ਇਸ ਆਈਟਮ ਨੂੰ ਮਿਟਾਇਆ ਜਾਵੇਗਾ।"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "ਬੰਦ ਕਰੋ"
+
+msgid "IDS_COM_BODY_DONE"
+msgstr "ਪੂਰਨ"
+
+msgid "IDS_COM_BODY_SELECT_ALL"
+msgstr "ਸਭ ਚੁਣੋ"
+
+msgid "IDS_COM_BODY_COPY"
+msgstr "ਕਾਪੀ ਕਰੋ"
+
+msgid "IDS_COM_POP_DELETE_Q"
+msgstr "ਮਿਟਾਉ?"
+
+msgid "IDS_COM_SK_SELECT"
+msgstr "ਚੁਣੋ"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "ਸਾਰੇ ਮਿਟਾਓ"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "ਕਲਿਪਬੋਰਡ ਤੇ ਕਾਪੀ ਹੋਇਆ।"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "ਪਹਿਲਾਂ ਤੋਂ ਹੀ ਮੌਜ਼ੂਦ ਹੈ।"
+
+msgid "IDS_COM_BODY_CUT"
+msgstr "ਕੱਟੋ"
+
+msgid "IDS_COM_BODY_PASTE"
+msgstr "ਪੇਸਟ ਕਰੋ"
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "ਕਲਿਪਬੋਰਡ"
+
+msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
+msgstr "%d ਆਈਟਮਾਂ ਮਿਟ ਜਾਣਗੀਆਂ।"
+
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "ਸਭ ਆਈਟਮਸ ਮਿਟਾਓ"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "ਸਾਰੇ ਆਈਟਮਸ ਕਲਿਪਬੋਰਡ ਤੋਂ ਮਿਟ ਜਾਣਗੇ।"
+
+msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
+msgstr "ਆਈਟਮ ਪਹਿਲਾਂ ਤੋਂ ਹੀ ਕਲਿਪਬੋਰਡ ਤੇ ਕਾਪੀ ਕੀਤੀ ਗਈ ਹੈ।"
+
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "ਕੋਈ ਆਈਟਮ ਨਹੀਂ"
+
index ea89976..0cf7694 100644 (file)
@@ -64,9 +64,15 @@ msgstr "Schowek"
 msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
 msgstr "Liczba elementów, które zostaną usunięte: %d."
 
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Wszystkie elementy zostaną usunięte."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Usuwanie wszystkich element."
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Wszystkie elementy zostaną usunięte ze schowka."
 
 msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
 msgstr "Element już skopiowano do schowka."
 
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Brak elementów"
+
index 12cfe69..043839d 100644 (file)
@@ -64,9 +64,15 @@ msgstr "Área de transferência"
 msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
 msgstr "%d itens serão excluídos"
 
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Todos os itens serão apagados."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Excluir todos os itens"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Todos os itens serão excluídos da área de transferência."
 
 msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
 msgstr "Item já copiado para a área de transferência."
 
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Nenhum item"
+
index feb4bc4..b638a39 100644 (file)
@@ -64,9 +64,15 @@ msgstr "Área transferência"
 msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
 msgstr "%d itens serão eliminados."
 
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Todos os itens serão eliminados."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Eliminar todos os itens"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Todos os itens serão eliminados da área de transferência."
 
 msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
 msgstr "O item já foi copiado para a área de transferência."
 
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Sem itens"
+
index 068ea54..d2f8553 100644 (file)
@@ -64,9 +64,15 @@ msgstr "Clipboard"
 msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
 msgstr "%d elemente vor fi şterse."
 
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Toate elementele vor fi şterse."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Ştergeţi toate elementele"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Toate elementele vor fi şterse din clipboard."
 
 msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
 msgstr "Elementul a fost deja copiat în clipboard."
 
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Niciun element"
+
index b720e9e..0476b70 100644 (file)
@@ -64,9 +64,15 @@ msgstr "Буфер обмена"
 msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
 msgstr "Элементы (%d) будут удалены."
 
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Все элементы будут удалены."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Удаление всех элементов"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Все элементы будут удалены из буфера обмена."
 
 msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
 msgstr "Элемент уже скопирован в буфер обмена."
 
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Элементы отсутствуют"
+
diff --git a/2.3-mobile/po/si.po b/2.3-mobile/po/si.po
new file mode 100644 (file)
index 0000000..f7d3dc6
--- /dev/null
@@ -0,0 +1,78 @@
+msgid "IDS_COM_BODY_DELETE"
+msgstr "මකන්න"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "ක්ලිප්බෝඩයෙන් මකන්න"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "ක්ලිප් බෝඩයට අගුලු දමන්න"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "ක්ලිප් බෝඩයෙන් අගුලු හරින්න"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "අවල. කර"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "ක්ලිප්බෝඩ් විකල්ප"
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "සියල්ල මකන්නද?"
+
+msgid "IDS_DM_POP_PD_ITEMS_WILL_BE_DELETED_ABB2"
+msgstr "අයිතම %d ක් මැකෙනු ඇත."
+
+msgid "IDS_DM_POP_THIS_ITEM_WILL_BE_DELETED_ABB"
+msgstr "මෙම අයිතමය මැකෙනු ඇත."
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "වසන්න"
+
+msgid "IDS_COM_BODY_DONE"
+msgstr "නිමයි"
+
+msgid "IDS_COM_BODY_SELECT_ALL"
+msgstr "සියල්ල තෝරන්න"
+
+msgid "IDS_COM_BODY_COPY"
+msgstr "පිටපත් කරන්න"
+
+msgid "IDS_COM_POP_DELETE_Q"
+msgstr "මකන්නද?"
+
+msgid "IDS_COM_SK_SELECT"
+msgstr "තෝරන්න"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "සියල්ල මකන්න"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "ක්ලිප්බෝඩ් වෙත පිටපත් විය."
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "දැනටමත් පවතී."
+
+msgid "IDS_COM_BODY_CUT"
+msgstr "කපන්න"
+
+msgid "IDS_COM_BODY_PASTE"
+msgstr "අලවන්න"
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "ක්ලිප් පුවරුව"
+
+msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
+msgstr "අයිතම %d මැකෙනු ඇත."
+
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "අයිතම සියල්ල මැකීම"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "අයිතම සියල්ල ක්ලිප්පුවරුව වෙතින් මැකෙනු ඇත."
+
+msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
+msgstr "අයිතමය දැනටමත් ක්ලිප්පුවරුවට පිටපත් කොට තිබේ."
+
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "අයිතම නැත"
+
index d3df2ce..5603a3c 100644 (file)
@@ -64,9 +64,15 @@ msgstr "Schránka"
 msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
 msgstr "%d položky sa vymažú."
 
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Všetky položky sa vymažú."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Odstrán. všetkých položiek"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Zo schránky sa odstránia všetky položky."
 
 msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
 msgstr "Položka je už skopírovaná do schránky."
 
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Žiadne položky"
+
index d162c10..9dbb5c4 100644 (file)
@@ -64,9 +64,15 @@ msgstr "Odložišče"
 msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
 msgstr "%d elementov bo izbrisanih."
 
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Vsi elementi bodo izbrisani."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Izbrišite vse elemente"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Vsi elementi bodo izbrisani iz odložišča."
 
 msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
 msgstr "Element je že bil kopiran v odložišče."
 
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Ni elementov"
+
index c4f61bc..18563e3 100644 (file)
@@ -64,9 +64,15 @@ msgstr "Privremena memorija"
 msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
 msgstr "Biće obrisane/o %d stavke/i."
 
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Biće obrisane sve stavke."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Izbriši sve stavke"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Sve stavke će biti izbrisane iz privremene memorije."
 
 msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
 msgstr "Stavka je već kopirana u privremenu memoriju."
 
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Nema stavki"
+
index 4700875..06d624a 100644 (file)
@@ -64,9 +64,15 @@ msgstr "Urklipp"
 msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
 msgstr "%d objekt raderas."
 
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Alla objekt tas bort."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Ta bort alla objekt"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Alla objekt kommer att tas bort från urklipp."
 
 msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
 msgstr "Objektet har redan kopierats till urklipp."
 
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Inga objekt"
+
diff --git a/2.3-mobile/po/ta.po b/2.3-mobile/po/ta.po
new file mode 100644 (file)
index 0000000..c74c274
--- /dev/null
@@ -0,0 +1,78 @@
+msgid "IDS_COM_BODY_DELETE"
+msgstr "நீக்கு"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "க்ளிப்போர்டிலிருந்து நீக்குக"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "க்ளிப்போர்டில் பூட்டுக"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "க்ளிப்போர்டிலிருந்து பூட்டுநீக்குக"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "ரத்து"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "க்ளிப்போர்டு தெரிவுகள்"
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "எல்லாம் நீக்கவா?"
+
+msgid "IDS_DM_POP_PD_ITEMS_WILL_BE_DELETED_ABB2"
+msgstr "%d உருப்படிகள் நீக்கப்படும்."
+
+msgid "IDS_DM_POP_THIS_ITEM_WILL_BE_DELETED_ABB"
+msgstr "இந்த உருப்படி நீக்கப்படும்."
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "மூடவும்"
+
+msgid "IDS_COM_BODY_DONE"
+msgstr "முடிந்தது"
+
+msgid "IDS_COM_BODY_SELECT_ALL"
+msgstr "எல்லாம் தேர்வு"
+
+msgid "IDS_COM_BODY_COPY"
+msgstr "நகல்"
+
+msgid "IDS_COM_POP_DELETE_Q"
+msgstr "நீக்கவா?"
+
+msgid "IDS_COM_SK_SELECT"
+msgstr "தேர்வு"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "எல்லாம் நீக்குக"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "க்ளிப்போர்டிற்கு நகலெடுக்கப்பட்டது."
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "முன்பே உள்ளது."
+
+msgid "IDS_COM_BODY_CUT"
+msgstr "வெட்டு"
+
+msgid "IDS_COM_BODY_PASTE"
+msgstr "ஒட்டு"
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "கிளிப்போர்டு"
+
+msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
+msgstr "%d உருப்படிகள் நீக்கப்படும்."
+
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "எல். உருப்படிகளையும் நீக்குக"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "அனைத்து உருப்படிகளும் கிளிப்போர்டில் இருந்து நீக்கப்படும்."
+
+msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
+msgstr "உருப்படி ஏற்கனவே க்ளிப்போர்டிற்கு நகலெடுக்கப்பட்டது."
+
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "உருப்படிகள் இல்லை"
+
diff --git a/2.3-mobile/po/te.po b/2.3-mobile/po/te.po
new file mode 100644 (file)
index 0000000..cb7575b
--- /dev/null
@@ -0,0 +1,78 @@
+msgid "IDS_COM_BODY_DELETE"
+msgstr "తొలగించు"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "క్లిప్‌బోర్డ్ నుండి తొలగించండి"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "క్లిప్‌బోర్డ్ కు లాక్ చేయండి"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "క్లిప్‌బోర్డ్ నుండి అన్‌లాక్ చెయ్యి"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "రద్దు"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "క్లిప్‌బోర్డ్ ఎంపికలు"
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "అన్నీ తొలగించాలా?"
+
+msgid "IDS_DM_POP_PD_ITEMS_WILL_BE_DELETED_ABB2"
+msgstr "%d అంశాలు తొలగించబడతాయి."
+
+msgid "IDS_DM_POP_THIS_ITEM_WILL_BE_DELETED_ABB"
+msgstr "ఈ అంశం తొలగిచబడుతుంది."
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "మూసివేయి"
+
+msgid "IDS_COM_BODY_DONE"
+msgstr "పూర్తయింది"
+
+msgid "IDS_COM_BODY_SELECT_ALL"
+msgstr "అన్నీ ఎంచుకోండి"
+
+msgid "IDS_COM_BODY_COPY"
+msgstr "కాపీ"
+
+msgid "IDS_COM_POP_DELETE_Q"
+msgstr "తొలగించాలా?"
+
+msgid "IDS_COM_SK_SELECT"
+msgstr "ఎంచు."
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "అన్నిటినీ తొలగించు"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "క్లిప్ బోర్డుకు కాపీ అయింది."
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "ఇప్పటికే ఉంది."
+
+msgid "IDS_COM_BODY_CUT"
+msgstr "కట్"
+
+msgid "IDS_COM_BODY_PASTE"
+msgstr "అతికించు"
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "క్లిప్‌బోర్డ్"
+
+msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
+msgstr "%d ఐటమ్లు తొలగించబడతాయి."
+
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "అన్ని అంశాలను తొలగించు"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "క్లిప్‌బోర్డ్ నుండి అన్ని అంశాలు తొలగించబడతాయి."
+
+msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
+msgstr "అంశం ఇప్పటికే క్లిప్‌బోర్డ్‌కు కాపీ చేయబడింది."
+
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "అంశాలు లేవు"
+
index 22044b1..f7f648e 100644 (file)
@@ -64,9 +64,15 @@ msgstr "Pano"
 msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
 msgstr "%d öğe silinecek."
 
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Tüm öğeler silinecek."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Tüm öğeleri sil"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Tüm öğeler panodan silinecek."
 
 msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
 msgstr "Öğe zaten panoya kopyalandı."
 
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Öğe yok"
+
index 123ee9a..f32d160 100644 (file)
@@ -64,9 +64,15 @@ msgstr "Буфер обміну"
 msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
 msgstr "%d об’єктів буде видалено."
 
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Усі об’єкти буде видалено."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Видалити всі об’єкти"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Усі об’єкти буде видалено з буферу обміну."
 
 msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
 msgstr "Об’єкт уже скопійовано до буфера обміну."
 
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Немає об’єктів"
+
diff --git a/2.3-mobile/po/ur.po b/2.3-mobile/po/ur.po
new file mode 100644 (file)
index 0000000..835530f
--- /dev/null
@@ -0,0 +1,78 @@
+msgid "IDS_COM_BODY_DELETE"
+msgstr "مٹانا"
+
+msgid "IDS_COM_BODY_DELETE_FROM_CLIPBOARD"
+msgstr "کلپ بورڈ سے حذف کریں"
+
+msgid "IDS_COM_BODY_LOCK_TO_CLIPBOARD"
+msgstr "کلپ بورڈ پر لاک کریں"
+
+msgid "IDS_COM_BODY_UNLOCK_FROM_CLIPBOARD"
+msgstr "کلپ بورڈ سے ان لاک کریں"
+
+msgid "IDS_COM_BUTTON_CANCEL"
+msgstr "منسوخ"
+
+msgid "IDS_COM_HEADER_CLIPBOARD_OPTIONS"
+msgstr "کلپ بورڈ اختیارات"
+
+msgid "IDS_COM_POP_DELETE_ALL_Q"
+msgstr "تمام مٹانا؟"
+
+msgid "IDS_DM_POP_PD_ITEMS_WILL_BE_DELETED_ABB2"
+msgstr "%d اشیا حذف کردی جائیں گی۔"
+
+msgid "IDS_DM_POP_THIS_ITEM_WILL_BE_DELETED_ABB"
+msgstr "اس آئٹم کو حذف کر دیا جائے گا۔"
+
+msgid "IDS_COM_BODY_CLOSE"
+msgstr "بند کرنا"
+
+msgid "IDS_COM_BODY_DONE"
+msgstr "ٹھیک ہے"
+
+msgid "IDS_COM_BODY_SELECT_ALL"
+msgstr "تمام منتخب کریں"
+
+msgid "IDS_COM_BODY_COPY"
+msgstr "کاپی"
+
+msgid "IDS_COM_POP_DELETE_Q"
+msgstr "مٹانا؟"
+
+msgid "IDS_COM_SK_SELECT"
+msgstr "انتخاب"
+
+msgid "IDS_COM_BODY_DELETE_ALL"
+msgstr "تمام مٹانا"
+
+msgid "IDS_COM_POP_COPIED_TO_CLIPBOARD"
+msgstr "کلپ بورڈ پر نقل ہوگیا۔"
+
+msgid "IDS_COM_POP_ALREADY_EXISTS"
+msgstr "پہلے سے موجود۔"
+
+msgid "IDS_COM_BODY_CUT"
+msgstr "کٹ"
+
+msgid "IDS_COM_BODY_PASTE"
+msgstr "جوڑ دیں"
+
+msgid "IDS_COM_BODY_CLIPBOARD"
+msgstr "کلپ بورڈ"
+
+msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
+msgstr "%d اشیا حذف کردی جائیں گی"
+
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "تمام اشیاء حذف کریں"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "تمام اشیاء کو کلپ بورڈ سے حذف کر دیا جائے گا۔"
+
+msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
+msgstr "آئٹم پہلے ہی کلپ بورڈ میں کاپی ہوچکا ہے۔"
+
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "کوئی آئٹمز نہیں ہیں"
+
index 8185cf8..5729c15 100644 (file)
@@ -64,9 +64,15 @@ msgstr "Bufer"
 msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
 msgstr "%d element o'chirib tashlanadi."
 
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "Barcha elementlar o'chirib tashlanadi."
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "Barcha elementlarni o‘chir"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "Barcha elementlar faqat buferdan yo‘q qilinadi."
 
 msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
 msgstr "Elementdan buferga nusxa olindi."
 
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "Elementlar yo‘q"
+
index 6d89216..0b8af42 100644 (file)
@@ -64,9 +64,15 @@ msgstr "剪贴板"
 msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
 msgstr "将删除 %d 个项目。"
 
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "全部项目将被删除。"
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "删除所有项目"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "所有项目将从剪贴板删除。"
 
 msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
 msgstr "项目已复制至剪贴板"
 
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "无项目"
+
index 3202bb4..d32b450 100644 (file)
@@ -64,9 +64,15 @@ msgstr "剪貼板"
 msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
 msgstr "將刪除 %d 個項目。"
 
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "所有項目將被刪除。"
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "刪除所有項目"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "所有項目將從剪貼板刪除。"
 
 msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
 msgstr "項目已複製至剪貼板。"
 
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "無項目"
+
index c7b1efa..6194915 100644 (file)
@@ -64,9 +64,15 @@ msgstr "剪貼簿"
 msgid "IDS_DM_BODY_PD_ITEMS_WILL_BE_DELETED"
 msgstr "將刪除%d 個項目。"
 
-msgid "IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED"
-msgstr "所有項目將被刪除。"
+msgid "IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB"
+msgstr "刪除所有項目"
+
+msgid "IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD"
+msgstr "將自剪貼簿刪除所有項目。"
 
 msgid "IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD"
 msgstr "項目已複製到剪貼簿。"
 
+msgid "IDS_GALLERY_NPBODY_NO_ITEMS"
+msgstr "無項目"
+
index 7412bd7..35a4768 100644 (file)
@@ -19,7 +19,6 @@
 #define _CBHM_H_
 
 #include <Elementary.h>
-#include <efl_assist.h>
 #include <Ecore_X.h>
 
 #if !defined(PACKAGE)
 #  define APPNAME "Clipboard History Manager"
 #endif
 
-#if !defined(LOCALEDIR)
-#  define LOCALEDIR "/usr/share/locale"
-#endif
-
 #define CBHM_MAGIC 0xad960009
 
 typedef struct _TargetHandler TargetHandler;
@@ -45,7 +40,7 @@ typedef struct _StorageData StorageData;
 typedef char *(*text_converter_func)(AppData *ad, int type_index, const char *str);
 
 #define ITEM_CNT_MAX 20
-#define COPIED_DATA_STORAGE_DIR "/opt/var/.cbhm_files"
+#define COPIED_DATA_STORAGE_DIR DATADIR"/.cbhm_files"
 
 #include "clipdrawer.h"
 #include "item_manager.h"
index 6f35d60..cf0782c 100755 (executable)
 #include "item_manager.h"
 #include "xconverter.h"
 
-#define EDJ_PATH "/usr/share/edje"
+#define EDJ_PATH DATADIR"/edje"
 #define APP_EDJ_FILE EDJ_PATH"/cbhmdrawer.edj"
 #define GRP_MAIN "cbhmdrawer"
 
 #define ANIM_DURATION 30 // 1 seconds
 #define ANIM_FLOPS (0.5/30)
 #define DEFAULT_WIDTH 720
-#define COMBINED_ITEM_IMAGE_HEIGHT 54
 #define BUFF (int)1024 //limited gengrid text buffer
 
 #define EDJE_CLOSE_PART_PREFIX "background/title/close/bg"
 #define EDJE_DELETE_MODE_PREFIX "background/title/delete/image"
 #define EDJE_DELETE_ALL_BTN_PART_PREFIX "background/title/delete_all/image"
 
-#define TIME_DELAY_LOWER_VIEW 0.1 //Time to delay lower view
-
 static Evas_Object *create_win(ClipdrawerData *cd, const char *name);
 static Evas_Object *_grid_image_content_get(void *data, Evas_Object *obj, const char *part);
 static Evas_Object *_grid_combined_content_get(void *data, Evas_Object *obj, const char *part);
 static char *_grid_text_get(void *data, Evas_Object *obj, const char *part);
+static Evas_Object *_grid_content_get(void *data, Evas_Object *obj, const char *part);
 static void _grid_realized(void *data, Evas_Object *obj, void *event_info);
-static void _grid_unrealized(void *data, Evas_Object *obj, void *event_info);
 static Eina_Bool clipdrawer_add_item(AppData *ad, CNP_ITEM *item);
 static Eina_Bool clipdrawer_del_item(AppData *ad, CNP_ITEM *item);
 static void _ok_btn_cb(void *data, Evas_Object *obj, void *event_info);
 static void _cancel_btn_cb(void *data, Evas_Object *obj, void *event_info);
-static void _create_cbhm_popup(AppData *ad);
+static void _create_cbhm_popup(AppData *ad, ClipdrawerData *cd);
+static void _show_cbhm_popup(ClipdrawerData *cd);
+static void _hide_cbhm_popup(ClipdrawerData *cd);
 static void clipdrawer_ly_clicked(void *data, Evas_Object *obj, const char *emission, const char *source);
-static void _grid_item_ly_clicked(void *data, Elm_Object_Item *it, const char *emission, const char *source);
+static void _grid_item_button_clicked(void *data, Evas_Object *obj, void *event_info);
 static void setting_win(Ecore_X_Display *x_disp, Ecore_X_Window x_root_win, Ecore_X_Window x_main_win);
 static Ecore_X_Window isf_ise_window_get();
 static void set_transient_for(Ecore_X_Window x_main_win, Ecore_X_Window x_active_win);
 static void unset_transient_for(Ecore_X_Window x_main_win);
 static void set_focus_for_app_window(Ecore_X_Window x_main_win, Eina_Bool enable);
+static void rotate_cb(void *data, Evas_Object * obj, void *event);
 
 static Evas_Event_Flags flick_end(void *data , void *event_info)
 {
@@ -99,6 +99,7 @@ static void _change_gengrid_paste_textonly_mode(ClipdrawerData *cd)
                                elm_object_item_signal_emit(gitem, "elm,state,show,dim", "elm");
                        else
                                elm_object_item_signal_emit(gitem, "elm,state,hide,dim", "elm");
+                       if (entry_text) free(entry_text);
                }
 
                gitem = elm_gengrid_item_next_get(gitem);
@@ -178,25 +179,20 @@ static void _gengrid_select_cb(void *data, Evas_Object *obj, void *event)
 static Eina_Bool keydown_cb(void *data, int type, void *event)
 {
        if (!data || !event) return ECORE_CALLBACK_DONE;
-
        AppData *ad = data;
        ClipdrawerData *cd = ad->clipdrawer;
        Ecore_Event_Key *ev = event;
 
-       if (!SAFE_STRCMP(ev->keyname, KEY_END))
+       if (!SAFE_STRCMP(ev->keyname, "XF86Back"))
        {
                if (cd->popup_activate)
-               {
-                       cd->popup_activate = EINA_FALSE;
-                       evas_object_del(cd->popup_conform);
-                       evas_object_del(cd->popup_win);
-               }
+                       _hide_cbhm_popup(ad->clipdrawer);
                else if (delete_mode)
                        _delete_mode_set(ad, EINA_FALSE);
                else
                        clipdrawer_lower_view(ad);
        }
-       else if(!SAFE_STRCMP(ev->keyname, KEY_HOME))
+       else if(!SAFE_STRCMP(ev->keyname, "XF86Home"))
        {
                clipdrawer_lower_view(ad);
                return ECORE_CALLBACK_PASS_ON;
@@ -310,7 +306,7 @@ _title_delete_all_btn_access_activate_cb(void *data,
        ClipdrawerData *cd = ad->clipdrawer;
 
        if ((item_count_get(ad, ATOM_INDEX_COUNT_ALL) - cd->locked_item_count) != 0)
-               _create_cbhm_popup(ad);
+               _show_cbhm_popup(ad->clipdrawer);
 }
 
 ClipdrawerData* init_clipdrawer(AppData *ad)
@@ -318,6 +314,8 @@ ClipdrawerData* init_clipdrawer(AppData *ad)
        ClipdrawerData *cd = calloc(1, sizeof(ClipdrawerData));
        const char *data;
        Evas_Object *part_obj, *access_obj;
+       int rotations[4] = { 0, 90, 180, 270 };
+       Evas_Coord w, h;
 
        /* create and setting window */
        if (!cd)
@@ -343,32 +341,60 @@ ClipdrawerData* init_clipdrawer(AppData *ad)
                return NULL;
        }
 
-       //double scale = elm_config_scale_get();
-       Evas_Object* ly = elm_layout_edje_get(cd->main_layout);
+       elm_win_wm_rotation_available_rotations_set(cd->main_win, rotations, 4);
+       evas_object_smart_callback_add(cd->main_win, "wm,rotation,changed", rotate_cb, ad);
 
-       data = edje_object_data_get(ly, "clipboard_height");
-       cd->height = data ? atoi(data) : 0;
-       cd->height = ELM_SCALE_SIZE(cd->height);
-       
-   data = edje_object_data_get(ly, "clipboard_landscape_height");
-       cd->landscape_height = data ? atoi(data) : 0;
-       cd->landscape_height = ELM_SCALE_SIZE(cd->landscape_height);
+       cd->popup_win = elm_win_add(NULL, "delete popup", ELM_WIN_MENU);
+       ecore_x_window_size_get(ecore_x_window_root_first_get(), &w, &h);
+       evas_object_resize(cd->popup_win, w, h);
+       elm_win_alpha_set(cd->popup_win, EINA_TRUE);
+       ecore_x_icccm_name_class_set(elm_win_xwindow_get(cd->popup_win),"APP_POPUP", "APP_POPUP");
+       set_focus_for_app_window(elm_win_xwindow_get(cd->popup_win) , EINA_FALSE);
+       set_transient_for(elm_win_xwindow_get(cd->popup_win), cd->x_main_win);
+       elm_win_wm_rotation_available_rotations_set(cd->popup_win, rotations, 4);
+       elm_win_conformant_set(cd->popup_win, EINA_TRUE);
 
-       data = edje_object_data_get(ly, "grid_item_bg_w");
-       cd->grid_item_bg_w = data ? atoi(data) : 0;
-       cd->grid_item_bg_w = ELM_SCALE_SIZE(cd->grid_item_bg_w);
+       cd->popup_conform = elm_conformant_add(cd->popup_win);
+       evas_object_size_hint_weight_set(cd->popup_conform, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_win_resize_object_add(cd->popup_win, cd->popup_conform);
 
-       data = edje_object_data_get(ly, "grid_item_bg_h");
-       cd->grid_item_bg_h = data ? atoi(data) : 0;
-       cd->grid_item_bg_h = ELM_SCALE_SIZE(cd->grid_item_bg_h);
+       _create_cbhm_popup(ad, cd);
 
-       data = edje_object_data_get(ly, "grid_image_item_w");
-       cd->grid_image_item_w = data ? atoi(data) : 0;
-       cd->grid_image_item_w = ELM_SCALE_SIZE(cd->grid_image_item_w);
+       //double scale = elm_config_scale_get();
+       Evas_Object* ly = elm_layout_edje_get(cd->main_layout);
 
-       data = edje_object_data_get(ly, "grid_image_item_h");
-       cd->grid_image_item_h = data ? atoi(data) : 0;
-       cd->grid_image_item_h = ELM_SCALE_SIZE(cd->grid_image_item_h);
+
+       if (cd->root_w == WVGA_WIDTH && cd->root_h == WVGA_HEIGHT)
+       {
+               cd->height = WVGA_CLIPBOARD_H;
+               cd->landscape_height = WVGA_CLIPBOARD_LANDSCAPE_H;
+               cd->grid_item_bg_w = WVGA_GRID_ITEM_W;
+               cd->grid_item_bg_h = WVGA_GRID_ITEM_H;
+               cd->grid_image_item_w = WVGA_GRID_IMAGE_ITEM_W;
+               cd->grid_image_item_h = WVGA_GRID_IMAGE_ITEM_H;
+               cd->grid_combined_item_w = WVGA_GRID_COMBINED_ITEM_W;
+               cd->grid_combined_item_h = WVGA_GRID_COMBINED_ITEM_H;
+       }
+       else
+       {
+               cd->height = CLIPBOARD_H;
+               cd->landscape_height = CLIPBOARD_LANDSCAPE_H;
+               cd->grid_item_bg_w = GRID_ITEM_W;
+               cd->grid_item_bg_h = GRID_ITEM_H;
+               cd->grid_image_item_w = GRID_IMAGE_ITEM_W;
+               cd->grid_image_item_h = GRID_IMAGE_ITEM_H;
+               cd->grid_combined_item_w = GRID_COMBINED_ITEM_W;
+               cd->grid_combined_item_h = GRID_COMBINED_ITEM_H;
+
+               cd->height = ELM_SCALE_SIZE(cd->height);
+               cd->landscape_height = ELM_SCALE_SIZE(cd->landscape_height);
+               cd->grid_item_bg_w = ELM_SCALE_SIZE(cd->grid_item_bg_w);
+               cd->grid_item_bg_h = ELM_SCALE_SIZE(cd->grid_item_bg_h);
+               cd->grid_image_item_w = ELM_SCALE_SIZE(cd->grid_image_item_w);
+               cd->grid_image_item_h = ELM_SCALE_SIZE(cd->grid_image_item_h);
+               cd->grid_combined_item_w = ELM_SCALE_SIZE(cd->grid_combined_item_w);
+               cd->grid_combined_item_h = ELM_SCALE_SIZE(cd->grid_combined_item_h);
+       }
 
        /* create and setting gengrid */
        elm_theme_extension_add(NULL, APP_EDJ_FILE);
@@ -416,7 +442,6 @@ ClipdrawerData* init_clipdrawer(AppData *ad)
        elm_gengrid_clear(cd->gengrid);
 
        evas_object_smart_callback_add(cd->gengrid, "realized", _grid_realized, NULL);
-       evas_object_smart_callback_add(cd->gengrid, "unrealized", _grid_unrealized, NULL);
 
        cd->gic_image.item_style = "clipboard/image_style";
        cd->gic_image.func.text_get = NULL;
@@ -426,7 +451,7 @@ ClipdrawerData* init_clipdrawer(AppData *ad)
 
        cd->gic_text.item_style = "clipboard/text_style";
        cd->gic_text.func.text_get = _grid_text_get;
-       cd->gic_text.func.content_get = NULL;
+       cd->gic_text.func.content_get = _grid_content_get;
        cd->gic_text.func.state_get = NULL;
        cd->gic_text.func.del = NULL;
 
@@ -450,8 +475,6 @@ ClipdrawerData* init_clipdrawer(AppData *ad)
        cd->item_clicked = EINA_FALSE;
        cd->delbtn_clicked = EINA_FALSE;
 
-       cd->lower_view_timer = NULL;
-
        cd->event_rect = evas_object_rectangle_add(evas_object_evas_get(cd->main_win));
        evas_object_size_hint_weight_set(cd->event_rect, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
        evas_object_color_set(cd->event_rect, 0, 0, 0, 0);
@@ -465,14 +488,21 @@ ClipdrawerData* init_clipdrawer(AppData *ad)
        elm_gesture_layer_attach(cd->gesture_layer, cd->event_rect);
        elm_gesture_layer_cb_set(cd->gesture_layer, ELM_GESTURE_N_FLICKS, ELM_GESTURE_STATE_END, flick_end, ad);
 
+       cd->noc_layout = elm_layout_add(cd->main_win);
+       elm_layout_theme_set(cd->noc_layout, "layout", "nocontents", "default");
+       elm_object_part_text_set(cd->noc_layout, "elm.text", S_NO_ITEMS);
+
        return cd;
 }
 
 void depose_clipdrawer(ClipdrawerData *cd)
 {
-       utilx_ungrab_key(ecore_x_display_get(), cd->x_main_win, KEY_END);
-       utilx_ungrab_key(ecore_x_display_get(), cd->x_main_win, KEY_HOME);
+       utilx_ungrab_key(ecore_x_display_get(), cd->x_main_win, "XF86Back");
+       utilx_ungrab_key(ecore_x_display_get(), cd->x_main_win, "XF86Home");
        evas_object_del(cd->main_win);
+       evas_object_del(cd->cbhm_popup);
+       evas_object_del(cd->popup_conform);
+       evas_object_del(cd->popup_win);
        if (cd->anim_timer)
                ecore_timer_del(cd->anim_timer);
        if (cd->keydown_handler)
@@ -555,10 +585,26 @@ static char *_grid_text_get(void *data, Evas_Object *obj, const char *part)
                else
                        return SAFE_STRDUP(item->data);
        }
-
        return NULL;
 }
 
+static Evas_Object *_grid_content_get(void *data, Evas_Object *obj, const char *part)
+{
+       CNP_ITEM *item = data;
+
+       if (!SAFE_STRCMP(part, "delbtn/img")) /* text */
+       {
+               Evas_Object *btn = elm_button_add(obj);
+               elm_object_style_set(btn, "delete_icon");
+               evas_object_propagate_events_set(btn,EINA_FALSE);
+               evas_object_smart_callback_add(btn, "clicked", _grid_item_button_clicked, item);
+               return btn;
+       }
+       else
+               return NULL;
+}
+
+
 static Evas_Object *_grid_image_content_get(void *data, Evas_Object *obj, const char *part)
 {
        CNP_ITEM *item = data;
@@ -594,15 +640,20 @@ static Evas_Object *_grid_image_content_get(void *data, Evas_Object *obj, const
 
                if (w > grid_image_real_w || h > grid_image_real_h)
                {
-                       if (w >= h)
+                       if (w > h)
                        {
-                               iw = ELM_SCALE_SIZE(126);
-                               ih = ELM_SCALE_SIZE(106);
+                               iw = cd->grid_image_item_w;
+                               ih = cd->grid_image_item_h;
+                       }
+                       else if (w < h)
+                       {
+                               iw = (float)cd->grid_image_item_h / 1.5;
+                               ih = cd->grid_image_item_h;
                        }
                        else
                        {
-                               iw = ELM_SCALE_SIZE(106);
-                               ih = ELM_SCALE_SIZE(126);
+                               iw = cd->grid_image_item_h;
+                               ih = cd->grid_image_item_h;
                        }
                }
                else
@@ -619,6 +670,14 @@ static Evas_Object *_grid_image_content_get(void *data, Evas_Object *obj, const
                else
                        elm_object_item_signal_emit(gitem, "elm,state,hide,dim", "elm");
        }
+       else if (!SAFE_STRCMP(part, "delbtn/img")) /* text */
+       {
+               Evas_Object *btn = elm_button_add(obj);
+               elm_object_style_set(btn, "delete_icon");
+               evas_object_propagate_events_set(btn,EINA_FALSE);
+               evas_object_smart_callback_add(btn, "clicked", _grid_item_button_clicked, item);
+               return btn;
+       }
        else
                return NULL;
 
@@ -656,25 +715,25 @@ static Evas_Object *_grid_combined_content_get(void *data, Evas_Object *obj, con
                if (w <= 0 || h <= 0)
                        return NULL;
 
-               if (w > grid_image_real_w || h > COMBINED_ITEM_IMAGE_HEIGHT)
+               if (w > cd->grid_combined_item_w || h > cd->grid_combined_item_h )
                {
-                       if (w >= h)
+                       if (h >= w)
                        {
-                               ih = (float)grid_image_real_w / w * h;
-                               if (ih > COMBINED_ITEM_IMAGE_HEIGHT)
+                               iw = (float)grid_image_real_h / h * w;
+                               if (iw > cd->grid_combined_item_w)
                                {
-                                       iw = (float)COMBINED_ITEM_IMAGE_HEIGHT / h * w;
-                                       ih = COMBINED_ITEM_IMAGE_HEIGHT;
+                                       ih = (float)cd->grid_combined_item_w / w * h;
+                                       iw = cd->grid_combined_item_w;
                                }
                                else
                                {
-                                       iw = grid_image_real_w;
+                                       ih = cd->grid_combined_item_h;
                                }
                        }
                        else
                        {
-                               iw = (float)COMBINED_ITEM_IMAGE_HEIGHT / h * w;
-                               ih = COMBINED_ITEM_IMAGE_HEIGHT;
+                               ih = (float)cd->grid_combined_item_w / w * h;
+                               iw = cd->grid_combined_item_w;
                        }
                }
                else
@@ -690,14 +749,24 @@ static Evas_Object *_grid_combined_content_get(void *data, Evas_Object *obj, con
                if (entry_text)
                {
                        entry_text = evas_textblock_text_markup_to_utf8(NULL, entry_text);
-               if (entry_text)
-                       strcat(entry_text, "\0");
+                       if (entry_text)
+                         strcat(entry_text, "\0");
                }
 
                if (cd->paste_text_only && entry_text && !strlen(entry_text))
                        elm_object_item_signal_emit(gitem, "elm,state,show,dim", "elm");
                else
                        elm_object_item_signal_emit(gitem, "elm,state,hide,dim", "elm");
+               if (entry_text)
+                 free(entry_text);
+       }
+       else if (!SAFE_STRCMP(part, "delbtn/img")) /* text */
+       {
+               Evas_Object *btn = elm_button_add(obj);
+               elm_object_style_set(btn, "delete_icon");
+               evas_object_propagate_events_set(btn,EINA_FALSE);
+               evas_object_smart_callback_add(btn, "clicked", _grid_item_button_clicked, item);
+               return btn;
        }
        else
                return NULL;
@@ -714,9 +783,6 @@ static void _grid_realized(void *data, Evas_Object *obj, void *event_info)
        {
                item = elm_object_item_data_get(gitem);
 
-               if (item)
-                       elm_object_item_signal_callback_add(gitem, "mouse,clicked,1", "*", _grid_item_ly_clicked, item);
-
           if (delete_mode)
              elm_object_item_signal_emit(gitem, "elm,state,show,delbtn", "elm");
           else
@@ -724,64 +790,54 @@ static void _grid_realized(void *data, Evas_Object *obj, void *event_info)
        }
 }
 
-static void _create_cbhm_popup(AppData *ad)
+void _create_cbhm_popup(AppData *ad, ClipdrawerData *cd)
 {
-       if (ad == NULL) return;
-
-       ClipdrawerData *cd = ad->clipdrawer;
        Evas_Object *btn1;
        Evas_Object *btn2;
-       int w,h;
-       int rotations[4] = { 0, 90, 180, 270 };
-
-       if (cd->popup_activate == EINA_TRUE)
-               return;
-
-       cd->popup_activate = EINA_TRUE;
-
-       cd->popup_win = elm_win_add(NULL, "delete popup", ELM_WIN_MENU);
-       ecore_x_window_size_get(ecore_x_window_root_first_get(), &w, &h);
-       evas_object_resize(cd->popup_win, w, h);
-       elm_win_alpha_set(cd->popup_win, EINA_TRUE);
-       ecore_x_icccm_name_class_set(elm_win_xwindow_get(cd->popup_win),"APP_POPUP", "APP_POPUP");
-       set_focus_for_app_window(elm_win_xwindow_get(cd->popup_win) , EINA_FALSE);
-       set_transient_for(elm_win_xwindow_get(cd->popup_win), cd->x_main_win);
-       elm_win_wm_rotation_available_rotations_set(cd->popup_win, rotations, 4);
-       evas_object_show(cd->popup_win);
-
-       cd->popup_conform = elm_conformant_add(cd->popup_win);
-       evas_object_size_hint_weight_set(cd->popup_conform, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-       elm_win_resize_object_add(cd->popup_win, cd->popup_conform);
-       evas_object_show(cd->popup_conform);
-
-       elm_win_conformant_set(cd->popup_win, EINA_TRUE);
 
        cd->cbhm_popup = elm_popup_add(cd->popup_win);
-       
        elm_object_part_text_set(cd->cbhm_popup, "title,text", S_DELETE_Q);
        elm_object_text_set(cd->cbhm_popup, S_DELETE_ALL_Q);
 
        btn1 = elm_button_add(cd->cbhm_popup);
-       elm_object_style_set(btn1, "popup_button/default");
+       elm_object_style_set(btn1, "popup");
        elm_object_text_set(btn1, S_CANCEL);
        elm_object_part_content_set(cd->cbhm_popup, "button1", btn1);
        evas_object_smart_callback_add(btn1, "clicked", _cancel_btn_cb, ad);
 
        btn2 = elm_button_add(cd->cbhm_popup);
-       elm_object_style_set(btn2, "popup_button/default");
+       elm_object_style_set(btn2, "popup");
        elm_object_text_set(btn2, S_DELETE);
        elm_object_part_content_set(cd->cbhm_popup, "button2", btn2);
        evas_object_smart_callback_add(btn2, "clicked", _ok_btn_cb, ad);
+}
+
+static void _show_cbhm_popup(ClipdrawerData *cd)
+{
+       if (cd == NULL) return;
+
+       if (cd->popup_activate == EINA_TRUE)
+               return;
 
+       cd->popup_activate = EINA_TRUE;
+
+       evas_object_show(cd->popup_conform);
        evas_object_show(cd->cbhm_popup);
+       evas_object_show(cd->popup_win);
 }
 
-static void _grid_unrealized(void *data, Evas_Object *obj, void *event_info)
+static void _hide_cbhm_popup(ClipdrawerData *cd)
 {
-       Elm_Object_Item *gitem = (Elm_Object_Item *) event_info;
+       if (cd == NULL) return;
 
-       if (gitem)
-               elm_object_item_signal_callback_del(gitem, "mouse,clicked,1", "*", _grid_item_ly_clicked);
+       if (cd->popup_activate == EINA_FALSE)
+               return;
+
+       cd->popup_activate = EINA_FALSE;
+
+       evas_object_hide(cd->popup_win);
+       evas_object_hide(cd->popup_conform);
+       evas_object_hide(cd->cbhm_popup);
 }
 
 static void clipdrawer_ly_clicked(void *data, Evas_Object *obj, const char *emission, const char *source)
@@ -796,7 +852,7 @@ static void clipdrawer_ly_clicked(void *data, Evas_Object *obj, const char *emis
        else if (!SAFE_STRNCMP(source, EDJE_DELETE_MODE_PREFIX, SAFE_STRLEN(EDJE_DELETE_MODE_PREFIX)))
                _delete_mode_set(ad, !delete_mode);
        else if (!SAFE_STRNCMP(source, EDJE_DELETE_ALL_BTN_PART_PREFIX, SAFE_STRLEN(EDJE_DELETE_ALL_BTN_PART_PREFIX)))
-                _create_cbhm_popup(ad);
+                _show_cbhm_popup(ad->clipdrawer);
        else
                return;
 }
@@ -830,18 +886,14 @@ static void _ok_btn_cb(void *data, Evas_Object *obj, void *event_info)
                CNP_ITEM *gitem_data = elm_object_item_data_get(gitem);
                gitem = elm_gengrid_item_next_get(gitem);
 
-               if (gitem_data && !gitem_data->locked)
+               if(!gitem_data->locked)
                        item_delete_by_CNP_ITEM(ad, gitem_data);
        }
 
        if (item_count_get(ad, ATOM_INDEX_COUNT_ALL) == 0)
                clipdrawer_lower_view(ad);
        else
-       {
-               cd->popup_activate = EINA_FALSE;
-               evas_object_del(cd->popup_conform);
-               evas_object_del(cd->popup_win);
-       }
+               _hide_cbhm_popup(ad->clipdrawer);
 }
 
 static void _cancel_btn_cb(void *data, Evas_Object *obj, void *event_info)
@@ -849,12 +901,10 @@ static void _cancel_btn_cb(void *data, Evas_Object *obj, void *event_info)
        AppData *ad = data;
        ClipdrawerData *cd = ad->clipdrawer;
 
-       cd->popup_activate = EINA_FALSE;
-       evas_object_del(cd->popup_conform);
-       evas_object_del(cd->popup_win);
+       _hide_cbhm_popup(ad->clipdrawer);
 }
 
-static void _grid_item_ly_clicked(void *data, Elm_Object_Item *it, const char *emission, const char *source)
+static void _grid_item_button_clicked(void *data, Evas_Object *obj, void *event_info)
 {
        CNP_ITEM *item = data;
        AppData *ad = item->ad;
@@ -863,9 +913,7 @@ static void _grid_item_ly_clicked(void *data, Elm_Object_Item *it, const char *e
        if (cd->anim_status != STATUS_NONE)
                return;
 
-       #define EDJE_DELBTN_PART_PREFIX "delbtn/img"
-       if (!SAFE_STRNCMP(source, EDJE_DELBTN_PART_PREFIX, SAFE_STRLEN(EDJE_DELBTN_PART_PREFIX)))
-               cd->delbtn_clicked = EINA_TRUE;
+       item_delete_by_CNP_ITEM(ad, item);
 }
 
 static Ecore_X_Window isf_ise_window_get()
@@ -1202,7 +1250,7 @@ static Eina_Bool timer_cb(void *data)
        return ECORE_CALLBACK_CANCEL;
 }
 
-void rotate_cb(void *data, Evas_Object * obj, void *event)
+static void rotate_cb(void *data, Evas_Object * obj, void *event)
 {
        if (!data) return;
 
@@ -1218,7 +1266,6 @@ void clipdrawer_activate_view(AppData* ad)
        Ecore_X_Window                 x_transient_win = ad->x_active_win;
        Ecore_X_Window                 x_isf_ise_win = 0;
        Ecore_X_Virtual_Keyboard_State isf_ise_state;
-       int rotations[4] = { 0, 90, 180, 270 };
 
        if(cd->main_layout)
        {
@@ -1242,51 +1289,51 @@ void clipdrawer_activate_view(AppData* ad)
                }
                set_transient_for(cd->x_main_win, x_transient_win);
 
-               elm_win_wm_rotation_available_rotations_set(cd->main_win, rotations, 4);
-               evas_object_smart_callback_add(cd->main_win, "wm,rotation,changed", rotate_cb, ad);
                _delete_mode_set(ad, EINA_FALSE);
                set_rotation_to_clipdrawer(ad);
                evas_object_show(cd->main_win);
                elm_win_activate(cd->main_win);
                ecore_x_e_illume_clipboard_state_set(ad->x_active_win, ECORE_X_ILLUME_CLIPBOARD_STATE_ON);
-               utilx_grab_key(ad->x_disp, cd->x_main_win, KEY_END, TOP_POSITION_GRAB);
-               utilx_grab_key(ad->x_disp, cd->x_main_win, KEY_HOME, SHARED_GRAB);
+               utilx_grab_key(ad->x_disp, cd->x_main_win, "XF86Back", TOP_POSITION_GRAB);
+               utilx_grab_key(ad->x_disp, cd->x_main_win, "XF86Home", SHARED_GRAB);
                ecore_timer_add(0.125, timer_cb, cd);  //0.125 is experimentally decided.
        }
+
+       if (item_count_get(ad, ATOM_INDEX_COUNT_ALL) == 0)
+       {
+               elm_object_part_content_unset(cd->main_layout, "historyitems");
+               evas_object_hide(cd->gengrid);
+               elm_object_part_content_set(cd->main_layout, "historyitems", cd->noc_layout);
+       }
+       else
+       {
+               elm_object_part_content_unset(cd->main_layout, "historyitems");
+               evas_object_hide(cd->noc_layout);
+               elm_object_part_content_set(cd->main_layout, "historyitems", cd->gengrid);
+       }
 }
 
-static Eina_Bool clipdrawer_lower_view_timer_cb(void *data)
+void clipdrawer_lower_view(AppData* ad)
 {
        CALLED();
-       AppData *ad = (AppData *)data;
        ClipdrawerData *cd = ad->clipdrawer;
-
-       cd->lower_view_timer = NULL;
+       Ecore_X_Window                 x_isf_ise_win = 0;
+       Ecore_X_Virtual_Keyboard_State isf_ise_state;
 
        if (cd->main_win)
        {
+               if(cd->popup_activate)
+                       _hide_cbhm_popup(ad->clipdrawer);
+
                elm_object_signal_emit(cd->main_layout, "elm,state,hide,historyitems", "elm");
                edje_object_message_signal_process(elm_layout_edje_get(cd->main_layout));
+               Elm_Object_Item *it = elm_gengrid_first_item_get (cd->gengrid);
+               elm_gengrid_item_show(it, ELM_GENGRID_ITEM_SCROLLTO_NONE);
                evas_object_hide(cd->main_win);
                elm_win_lower(cd->main_win);
                unset_transient_for(cd->x_main_win);
                _delete_mode_set(ad, EINA_FALSE);
-       }
-
-       return ECORE_CALLBACK_CANCEL;
-}
 
-void clipdrawer_lower_view(AppData* ad)
-{
-       CALLED();
-       ClipdrawerData *cd = ad->clipdrawer;
-       Ecore_X_Window                 x_isf_ise_win = 0;
-       Ecore_X_Virtual_Keyboard_State isf_ise_state;
-
-       if (cd->lower_view_timer) return;
-
-       if (cd->main_win)
-       {
                ecore_x_e_illume_clipboard_state_set(ad->x_active_win, ECORE_X_ILLUME_CLIPBOARD_STATE_OFF);
                ecore_x_e_illume_clipboard_geometry_set(ad->x_active_win, 0, 0, 0, 0);
 
@@ -1298,18 +1345,9 @@ void clipdrawer_lower_view(AppData* ad)
                                ecore_x_e_illume_clipboard_state_set(x_isf_ise_win, ECORE_X_ILLUME_CLIPBOARD_STATE_OFF);
                }
 
-               utilx_ungrab_key(ad->x_disp, cd->x_main_win, KEY_END);
-               utilx_ungrab_key(ad->x_disp, cd->x_main_win, KEY_HOME);
-
-               if(cd->popup_activate)
-               {
-                       cd->popup_activate = EINA_FALSE;
-                       evas_object_del(cd->popup_conform);
-                       evas_object_del(cd->popup_win);
-               }
+               utilx_ungrab_key(ad->x_disp, cd->x_main_win, "XF86Back");
+               utilx_ungrab_key(ad->x_disp, cd->x_main_win, "XF86Home");
        }
-
-       cd->lower_view_timer = ecore_timer_add(TIME_DELAY_LOWER_VIEW, clipdrawer_lower_view_timer_cb, ad);
 }
 
 void _delete_mode_set(AppData* ad, Eina_Bool del_mode)
@@ -1333,11 +1371,14 @@ void _delete_mode_set(AppData* ad, Eina_Bool del_mode)
        else
        {
                elm_object_part_text_set(cd->main_layout, "panel_function_delete", S_DELETE);
-               
+
                if (item_count_get(ad, ATOM_INDEX_COUNT_ALL) == 0)
                {
                   elm_object_signal_emit(cd->main_layout, "elm,state,show,delete_all", "elm");
                   elm_object_signal_emit(cd->main_layout, "elm,state,disable,del", "elm");
+                  elm_object_part_content_unset(cd->main_layout, "historyitems");
+                  evas_object_hide(cd->gengrid);
+                  elm_object_part_content_set(cd->main_layout, "historyitems", cd->noc_layout);
                }
                else
                   elm_object_signal_emit(cd->main_layout, "elm,state,show,delete_all", "elm");
index 6439762..8438fc8 100644 (file)
 
 #include <Ecore_X.h>
 #include <Elementary.h>
+
+// WVGA Resolution
+#define WVGA_WIDTH 480
+#define WVGA_HEIGHT 800
+#define WVGA_CLIPBOARD_H 276
+#define WVGA_CLIPBOARD_LANDSCAPE_H 212
+#define WVGA_GRID_ITEM_W 158
+#define WVGA_GRID_ITEM_H 105
+#define WVGA_GRID_IMAGE_ITEM_W 148
+#define WVGA_GRID_IMAGE_ITEM_H 97
+#define WVGA_GRID_COMBINED_ITEM_W 61
+#define WVGA_GRID_COMBINED_ITEM_H 91
+
+// Default Resolution
+#define CLIPBOARD_H 442
+#define CLIPBOARD_LANDSCAPE_H 318
+#define GRID_ITEM_W 259
+#define GRID_ITEM_H 175
+#define GRID_IMAGE_ITEM_W 240
+#define GRID_IMAGE_ITEM_H 159
+#define GRID_COMBINED_ITEM_W 102
+#define GRID_COMBINED_ITEM_H 153
+
 typedef enum _AnimStatus AnimStatus;
 enum _AnimStatus {
        STATUS_NONE = 0,
@@ -38,11 +61,11 @@ struct _ClipdrawerData {
        Evas_Object *popup_win;
        Evas_Object *popup_conform;
        Evas_Object *cbhm_popup;
+       Evas_Object *noc_layout;
        Evas *evas;
        Ecore_Event_Handler *keydown_handler;
        Ecore_Timer *anim_timer;
        Elm_Gengrid_Item_Class gic;
-       Ecore_Timer *lower_view_timer;
        int locked_item_count;
        Ecore_X_Window x_main_win;
 
@@ -57,6 +80,8 @@ struct _ClipdrawerData {
        int grid_item_bg_h;
        int grid_image_item_w;
        int grid_image_item_h;
+       int grid_combined_item_w;
+       int grid_combined_item_h;
 
        AnimStatus anim_status;
        int anim_count;
index 4933581..ef83a3e 100644 (file)
@@ -71,7 +71,13 @@ CNP_ITEM *item_add_by_CNP_ITEM(AppData *ad, CNP_ITEM *item, Eina_Bool storage, E
        }
        ClipdrawerData *cd = ad->clipdrawer;
        if ((item_count_get(ad, ATOM_INDEX_COUNT_ALL) - cd->locked_item_count) == 0)
+       {
                elm_object_signal_emit(cd->main_layout, "elm,state,enable,del", "elm");
+               elm_object_part_content_unset(cd->main_layout, "historyitems");
+               evas_object_hide(cd->noc_layout);
+               elm_object_part_content_set(cd->main_layout, "historyitems", cd->gengrid);
+       }
+
        if (!item)
        {
                ERR("WRONG PARAMETER in %s, ad: 0x%p, item: 0x%p", __func__, ad, item);
@@ -161,8 +167,8 @@ static void image_name_get(char *filename)
                now = localtime(&tim);
                if (now)
                  sprintf(filename, "fromweb-%d%02d%02d%02d%02d%02d%s",
-                                         now->tm_year + 1900, now->tm_mon + 1, now->tm_mday,
-                                         now->tm_hour, now->tm_min, now->tm_sec, ".jpg");
+                                        now->tm_year + 1900, now->tm_mon + 1, now->tm_mday,
+                                        now->tm_hour, now->tm_min, now->tm_sec, ".jpg");
                else
                  sprintf(filename, "fromweb-%d%02d%02d%02d%02d%02d%s",
                                         1900, 1, 1, 0, 0, 0,".jpg");
@@ -266,6 +272,8 @@ CNP_ITEM *item_add_by_data(AppData *ad, Ecore_X_Atom type, void *data, int len,
        {
                entry_text = string_for_entry_get(ad, ATOM_INDEX_EFL, data);
                copied_path = string_for_image_path_get(ad, ATOM_INDEX_EFL, data);
+               if (copied_path)
+                       item->img_from_markup = EINA_TRUE;
        }
        else if (item->type_index == ATOM_INDEX_IMAGE)
        {
@@ -316,8 +324,6 @@ CNP_ITEM *item_add_by_data(AppData *ad, Ecore_X_Atom type, void *data, int len,
                FREE(orig_path);
        }
 
-       // Set vconf value to notify copy event to popsync application
-       vconf_set_str(VCONFKEY_POPSYNC_COPY_EVENT_SET_KEY, "1");
        return item;
 }
 
@@ -379,7 +385,10 @@ void item_delete_by_CNP_ITEM(AppData *ad, CNP_ITEM *item)
        slot_item_count_set(ad);
 
        if (item_count_get(ad, ATOM_INDEX_COUNT_ALL) == 0)
+       {
                _delete_mode_set(ad, EINA_FALSE);
+               clipdrawer_lower_view(ad);
+       }
 }
 
 void item_delete_by_data(AppData *ad, void *data, int len)
index 2127678..a65122b 100644 (file)
@@ -20,7 +20,7 @@
 
 #include "cbhm.h"
 #include <vconf.h>
-#include <vconf-internal-popsync-keys.h>
+#include <vconf-internal-keys.h>
 
 #define MULTI_(s) dgettext(PACKAGE, s)
 #define S_CLIPBOARD MULTI_("IDS_COM_BODY_CLIPBOARD")
 #define S_COPY MULTI_("IDS_COM_POP_COPIED_TO_CLIPBOARD")
 #define S_EXIST MULTI_("IDS_IME_POP_ITEM_ALREADY_COPIED_TO_CLIPBOARD")
 #define S_DELETE_ALL MULTI_("IDS_COM_BODY_DELETE_ALL")
-#define S_DELETE_ALL_Q MULTI_("IDS_GALLERY_POP_ALL_ITEMS_WILL_BE_DELETED")
+#define S_DELETE_ALL_Q MULTI_("IDS_IME_POP_ALL_ITEMS_WILL_BE_DELETED_FROM_THE_CLIPBOARD")
 #define S_CANCEL MULTI_("IDS_COM_BUTTON_CANCEL")
 #define S_CLOSE MULTI_("IDS_COM_BODY_CLOSE")
 #define S_CLIPBOARD_OPTION MULTI_("IDS_COM_HEADER_CLIPBOARD_OPTIONS")
-#define S_DELETE_Q MULTI_("IDS_COM_BODY_DELETE")
+#define S_DELETE_Q MULTI_("IDS_IME_HEADER_DELETE_ALL_ITEMS_ABB")
+#define S_NO_ITEMS MULTI_("IDS_GALLERY_NPBODY_NO_ITEMS")
 
 enum GRID_ITEM_STYLE {
        GRID_ITEM_STYLE_TEXT = 0,
@@ -50,6 +51,7 @@ struct _CNP_ITEM {
        size_t file_len;
        int gitem_style;
        Eina_Bool img_from_web;
+       Eina_Bool img_from_markup;
        Elm_Object_Item *gitem;
        Eina_Bool locked;
        AppData *ad;
index 2546f07..a845a57 100644 (file)
@@ -105,7 +105,7 @@ static int app_create(void *data)
 {
        AppData *ad = (AppData *)data;
 
-   elm_app_base_scale_set(1.8);
+       elm_app_base_scale_set(2.6);
        ecore_x_init(ad->x_disp);
        _log_domain = eina_log_domain_register("cbhm", EINA_COLOR_LIGHTBLUE);
        if (!_log_domain)
@@ -177,6 +177,11 @@ static int app_reset(bundle *b, void *data)
        return 0;
 }
 
+static int _lang_changed(void *data)
+{
+       return 0;
+}
+
 int main(int argc, char *argv[])
 {
        AppData *ad;
@@ -194,6 +199,7 @@ int main(int argc, char *argv[])
        g_main_ad = ad;
 
        appcore_set_i18n(PACKAGE, LOCALEDIR);
+       appcore_set_event_callback(APPCORE_EVENT_LANG_CHANGE, _lang_changed, NULL);
 
        // Notyfication to systemd
        sd_notify(1, "READY=1");
index 8e594e0..0600509 100644 (file)
@@ -18,7 +18,7 @@
 #include <Ecore_File.h>
 
 #include "storage.h"
-#define STORAGE_FILEPATH "/opt/var/.cbhm_data"
+#define STORAGE_FILEPATH DATADIR"/.cbhm_data"
 #define STORAGE_KEY_INDEX_FORMAT "<index%02d>"
 #define STORAGE_KEY_ITEM_FORMAT "<item%02d%s>"
 #define STORAGE_INDEX_ITEM_NONE 0.0
index 861540f..30e549c 100644 (file)
@@ -151,7 +151,7 @@ static Eina_Bool targets_converter(AppData *ad, Ecore_X_Atom reqAtom, CNP_ITEM *
                file = item->file;
        }
 
-       if (!file || item->img_from_web)
+       if (!file || item->img_from_web || item->img_from_markup)
        {
                if (item_type_index == ATOM_INDEX_HTML)
                        ad->targetAtoms[item_type_index].convert_to_target[ATOM_INDEX_IMAGE] = NULL;
@@ -663,18 +663,8 @@ _set_EFL_item_data(PItemTagData data, const char *tag_str)
                if (xpos)
                {
                        int absizeLen = SAFE_STRLEN(value);
-                       char *modify = SAFE_STRNDUP(value, xpos - value);
-                       if (modify)
-                       {
-                               FREE(data->width);
-                               data->width = modify;
-                       }
-                       modify = SAFE_STRNDUP(xpos + 1, absizeLen - (xpos - value) - 1);
-                       if (modify)
-                       {
-                               FREE(data->height);
-                               data->height = modify;
-                       }
+                       freeAndAssign(data->width, SAFE_STRNDUP(value, xpos - value));
+                       freeAndAssign(data->height, SAFE_STRNDUP(xpos + 1, absizeLen - (xpos - value) - 1));
                        DBG("image width: -%s-, height: -%s-", data->width, data->height);
                }
                FREE(value);
@@ -1229,11 +1219,9 @@ static char *efl_to_image_path(AppData *ad, int type_index, const char *str)
        Eina_Bool image_path_exists = EINA_FALSE;
        int len = SAFE_STRLEN(str);
        char *p = entry_convert_emoticon_to_normal_text((char *)str);
-       char *s = NULL;
+       char *s, *temp;
        char *image_path = NULL;
-
-       if (!p) return NULL;
-
+       temp = p;
        if (type_index == ATOM_INDEX_EFL)
        {
                for (s = p; (p - s) <= len; p++)
@@ -1265,18 +1253,15 @@ static char *efl_to_image_path(AppData *ad, int type_index, const char *str)
                        }
                }
        }
-
+       FREE(temp);
        if (image_path_exists)
        {
                image_path = eina_strbuf_string_steal(sbuf);
                eina_strbuf_free(sbuf);
-               free(s);
                return image_path;
        }
 
        eina_strbuf_free(sbuf);
-       if (s)
-               free(s);
        return NULL;
 }
 
@@ -1406,11 +1391,10 @@ char *entry_convert_emoticon_to_normal_text(const char *src_text)
 {
        char *remain_text = (char *)src_text;
        char *dst_str = NULL;
+       const char *str;
 
        Eina_Strbuf *msg_data = eina_strbuf_new();
 
-       if (!msg_data) return NULL;
-
        while (*remain_text) {
                char *text_start = remain_text;
                int emoticon = ENTRY_EMOTICON_NONE;
@@ -1435,8 +1419,8 @@ char *entry_convert_emoticon_to_normal_text(const char *src_text)
                        break;
                }
        }
-
-       dst_str = strdup(eina_strbuf_string_get(msg_data));
+       str = eina_strbuf_string_get(msg_data);
+       if (str) dst_str = strdup(str);
        eina_strbuf_free(msg_data);
 
        return dst_str;
@@ -1448,7 +1432,7 @@ static char *efl_to_entry(AppData *ad, int type_index, const char *str)
 
        char *emoticon_text = entry_convert_emoticon_to_normal_text(str);
        char *normal_text = markup_to_entry(ad, type_index, emoticon_text);
-       FREE(emoticon_text);
+
        return normal_text;
 }
 
@@ -1579,8 +1563,10 @@ static char *to_text(AppData *ad, int type_index, const char *str)
        char *emoticon_text = entry_convert_emoticon_to_normal_text(str);
        if (emoticon_text)
        {
-               entry_text = markup_to_entry(ad, type_index, emoticon_text);
-               entry_text = evas_textblock_text_markup_to_utf8(NULL, entry_text);
+               char *tmp;
+               tmp = markup_to_entry(ad, type_index, emoticon_text);
+               entry_text = evas_textblock_text_markup_to_utf8(NULL, tmp);
+               free(tmp);
                if (entry_text) strcat(entry_text, "\0");
                FREE(emoticon_text);
        }
index c559b1d..89cfa58 100644 (file)
@@ -264,17 +264,17 @@ static void send_convert_selection_target(AppData *ad, Ecore_X_Selection_Data_Ta
 
        DBG("targets_data->num_targets: 0x%x", targets_data->num_targets);
        int i, j, k;
-       for (i = 0; i < targets_data->num_targets; i++)
+       for (j = 0; j < targets_data->num_targets; j++)
        {
-               DBG("get target: %s", targets_data->targets[i]);
-               for (j = 0; j < ATOM_INDEX_MAX; j++)
+               for (i = 0; i < ATOM_INDEX_MAX; i++)
                {
-                       for (k = 0; k < ad->targetAtoms[j].atom_cnt; k++)
+                       DBG("get target: %s", targets_data->targets[j]);
+                       for (k = 0; k < ad->targetAtoms[i].atom_cnt; k++)
                        {
-                               if (!SAFE_STRCMP(targets_data->targets[i], ad->targetAtoms[j].name[k]))
+                               if (!SAFE_STRCMP(targets_data->targets[j], ad->targetAtoms[i].name[k]))
                                {
-                                       DBG("find matched target: %s", ad->targetAtoms[j].name[k]);
-                                       ecore_x_selection_clipboard_request(ad->x_event_win, ad->targetAtoms[j].name[k]);
+                                       DBG("find matched target: %s", ad->targetAtoms[i].name[k]);
+                                       ecore_x_selection_clipboard_request(ad->x_event_win, ad->targetAtoms[i].name[k]);
                                        return;
                                }
                        }
index 9b4e914..4514eb7 100644 (file)
@@ -1,8 +1,7 @@
 CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
 PROJECT(cbhm C)
 
-SET(PREFIX ${CMAKE_INSTALL_PREFIX})
-SET(LIBDIR "${PREFIX}/lib")
+SET(PREFIX "${CMAKE_INSTALL_PREFIX}")
 SET(DATADIR "${PREFIX}/share")
 SET(LOCALEDIR "${DATADIR}/locale")
 SET(VERSION 0.1.0)
@@ -23,7 +22,7 @@ IF ( MDM_ENABLE )
 ENDIF ( MDM_ENABLE )
 
 INCLUDE(FindPkgConfig)
-       pkg_check_modules(pkgs REQUIRED elementary eet appcore-efl appcore-common x11 ecore-x utilX eina evas ecore ecore-file ecore-evas edje ecore-input notification vconf vconf-internal-keys libsystemd-daemon efl-assist ${MDM_REQUIED_PKGS})
+       pkg_check_modules(pkgs REQUIRED elementary eet appcore-efl appcore-common x11 ecore-x utilX eina evas ecore ecore-file ecore-evas edje ecore-input notification vconf vconf-internal-keys libsystemd-daemon ${MDM_REQUIED_PKGS})
 
 FOREACH(flag ${pkgs_CFLAGS})
        SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
@@ -41,7 +40,8 @@ SET(CMAKE_CXX_FLAGS_CCOV       "-O2 -std=c++0x -g --coverage -fPIE")
 
 SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed -pie")
 
-ADD_DEFINITIONS("-DPREFIX=\"${CMAKE_INSTALL_PREFIX}\"")
+ADD_DEFINITIONS("-DDATADIR=\"${DATADIR}\"")
+ADD_DEFINITIONS("-DLOCALEDIR=\"${LOCALEDIR}\"")
 
 ADD_EXECUTABLE(${PROJECT_NAME} ${SRCS})
 #for XV extension screenshot
@@ -56,8 +56,8 @@ ADD_CUSTOM_TARGET(cbhmdrawer.edj
 )
 ADD_DEPENDENCIES(${PROJECT_NAME} cbhmdrawer.edj)
 
-INSTALL(TARGETS ${PROJECT_NAME} DESTINATION bin)
+INSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${PREFIX}/bin)
 INSTALL(FILES ${CMAKE_BINARY_DIR}/data/themes/cbhmdrawer.edj DESTINATION ${DATADIR}/edje)
 ADD_SUBDIRECTORY(po)
-INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/../systemd/cbhm.service DESTINATION ${LIBDIR}/systemd/user)
-INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/../systemd/cbhm.service DESTINATION ${LIBDIR}/systemd/system)
+INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/../systemd/cbhm.service DESTINATION /usr/lib/systemd/user)
+INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/../systemd/cbhm.service DESTINATION /usr/lib/systemd/system)
index 7412bd7..35a4768 100644 (file)
@@ -19,7 +19,6 @@
 #define _CBHM_H_
 
 #include <Elementary.h>
-#include <efl_assist.h>
 #include <Ecore_X.h>
 
 #if !defined(PACKAGE)
 #  define APPNAME "Clipboard History Manager"
 #endif
 
-#if !defined(LOCALEDIR)
-#  define LOCALEDIR "/usr/share/locale"
-#endif
-
 #define CBHM_MAGIC 0xad960009
 
 typedef struct _TargetHandler TargetHandler;
@@ -45,7 +40,7 @@ typedef struct _StorageData StorageData;
 typedef char *(*text_converter_func)(AppData *ad, int type_index, const char *str);
 
 #define ITEM_CNT_MAX 20
-#define COPIED_DATA_STORAGE_DIR "/opt/var/.cbhm_files"
+#define COPIED_DATA_STORAGE_DIR DATADIR"/.cbhm_files"
 
 #include "clipdrawer.h"
 #include "item_manager.h"
index 84c95ab..2d2a964 100644 (file)
@@ -20,7 +20,7 @@
 #include "item_manager.h"
 #include "xconverter.h"
 
-#define EDJ_PATH "/usr/share/edje"
+#define EDJ_PATH DATADIR"/edje"
 #define APP_EDJ_FILE EDJ_PATH"/cbhmdrawer.edj"
 #define GRP_MAIN "cbhmdrawer"
 
index b820a1b..be6ab78 100644 (file)
@@ -300,8 +300,6 @@ CNP_ITEM *item_add_by_data(AppData *ad, Ecore_X_Atom type, void *data, int len,
                FREE(orig_path);
        }
 
-       // Set vconf value to notify copy event to popsync application
-       vconf_set_str(VCONFKEY_POPSYNC_COPY_EVENT_SET_KEY, "1");
        return item;
 }
 
index 8a59083..6478931 100644 (file)
@@ -20,7 +20,7 @@
 
 #include "cbhm.h"
 #include <vconf.h>
-#include <vconf-internal-popsync-keys.h>
+#include <vconf-internal-keys.h>
 
 #define MULTI_(s) dgettext(PACKAGE, s)
 #define S_CLIPBOARD MULTI_("IDS_COM_BODY_CLIPBOARD")
index d126f4f..6db9048 100644 (file)
@@ -18,7 +18,7 @@
 #include <Ecore_File.h>
 
 #include "storage.h"
-#define STORAGE_FILEPATH "/opt/var/.cbhm_data"
+#define STORAGE_FILEPATH DATADIR"/.cbhm_data"
 #define STORAGE_KEY_INDEX_FORMAT "<index%02d>"
 #define STORAGE_KEY_ITEM_FORMAT "<item%02d%s>"
 #define STORAGE_INDEX_ITEM_NONE 0.0
index 18148ae..53091b5 100644 (file)
@@ -642,18 +642,8 @@ _set_EFL_item_data(PItemTagData data, const char *tag_str)
                if (xpos)
                {
                        int absizeLen = SAFE_STRLEN(value);
-                       char *modify = SAFE_STRNDUP(value, xpos - value);
-                       if (modify)
-                       {
-                               FREE(data->width);
-                               data->width = modify;
-                       }
-                       modify = SAFE_STRNDUP(xpos + 1, absizeLen - (xpos - value) - 1);
-                       if (modify)
-                       {
-                               FREE(data->height);
-                               data->height = modify;
-                       }
+                       freeAndAssign(data->width, SAFE_STRNDUP(value, xpos - value));
+                       freeAndAssign(data->height, SAFE_STRNDUP(xpos + 1, absizeLen - (xpos - value) - 1));
                        DBG("image width: -%s-, height: -%s-", data->width, data->height);
                }
                FREE(value);
diff --git a/LICENSE b/LICENSE
index 4eb6c35..572c853 100644 (file)
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2010 - 2014 Samsung Electronics Co., Ltd. All rights reserved.
+Copyright (c) 2010 - 2015 Samsung Electronics Co., Ltd. All rights reserved.
 
                                  Apache License
                            Version 2.0, January 2004
index 8acd28c..1b96e29 100644 (file)
@@ -1,21 +1,46 @@
 <manifest>
        <define>
                <domain name="cbhm"/>
+               <provide>
+                       <label name="cbhm::share"/>
+               </provide>
                <request>
                        <smack request="system::homedir" type="rwxat"/>
                        <smack request="popsync-agent::vconf" type="rwxat"/>
                        <smack request="mdm-server::admin" type="r"/>
                        <smack request="system::use_internet" type="w"/>
+                       <smack request="tizen::vconf::public::r" type="rl"/>
+                       <smack request="tizen::vconf::setting::admin" type="rl" />
+                       <smack request="device::app_logging" type="rw"/>
+                       <smack request="device::sys_logging" type="rw"/>
+                       <smack request="pkgmgr::db" type="rl"/>
+                       <smack request="ail::db" type="rl"/>
+                       <smack request="xorg" type="w"/>
+                       <smack request="isf" type="rx"/>
+                       <smack request="tizen::vconf::public::r::platform::rw" type="rl"/>
+                       <smack request="tizen::vconf::public::r" type="rw"/>
+                       <smack request="tizen::vconf::setting" type="rl"/>
+                       <smack request="tizen::vconf::camcorder" type="rl"/>
+                       <smack request="org.tizen.browser" type="rx"/>
+                       <smack request="pulseaudio" type="rw"/>
+                       <smack request="system::use_internet" type="w"/>
+                       <smack request="dbus" type="rwx" />
+                       <smack request="system::ext_storage" type="rx"/>
+                       <smack request="com.samsung.memo" type="rx"/>
+                       <smack request="cbhm::share" type="rwxt"/>
                </request>
                <permit>
                        <smack permit="system::use_internet" type="w"/>
+                       <smack permit="dbus" type="rwx" />
+                       <smack permit="xorg" type="rwx"/>
                </permit>
        </define>
        <request>
                <domain name="cbhm"/>
        </request>
        <assign>
-               <filesystem path="/usr/share/locale/*" label="_"/>
+               <filesystem path="/usr/apps/org.tizen.cbhm" label="_"/>
+               <filesystem path="/usr/apps/org.tizen.cbhm/share" label="cbhm::share" type="transmutable"/>
                <filesystem path="/usr/lib/systemd/user/cbhm.service" label="_" exec_label="none" />
                <filesystem path="/usr/lib/systemd/user/core-efl.target.wants/cbhm.service" label="_" exec_label="none" />
        </assign>
index 8a0ea81..6f774b8 100644 (file)
@@ -1,8 +1,8 @@
 Name:       cbhm
 Summary:    cbhm application
-Version:    0.1.227
+Version:    0.1.235
 Release:    1
-Group:      System/Libraries
+Group:      Applications
 License:    Apache-2.0
 URL:        http://www.samsung.com/
 Source0:    %{name}-%{version}.tar.gz
@@ -20,7 +20,6 @@ BuildRequires:  pkgconfig(xi)
 BuildRequires:  pkgconfig(notification)
 BuildRequires:  pkgconfig(vconf)
 BuildRequires:  pkgconfig(vconf-internal-keys)
-BuildRequires:  pkgconfig(efl-assist)
 BuildRequires:  edje-tools
 BuildRequires:  pkgconfig(libsystemd-daemon)
 BuildRequires:  gettext
@@ -33,21 +32,34 @@ Description: cbhm application
 %setup -q
 
 %build
-
 %if "%{?tizen_profile_name}" == "wearable"
-       export TARGET=2.3-wearable
+    export TARGET=2.3-wearable
 %else
-   export TARGET=2.3-mobile
+ %if "%{?tizen_profile_name}" == "mobile"
+    export TARGET=2.3-mobile
+ %else
+   %if "%{?tizen_profile_name}" == "tv"
+    export TARGET=2.3-mobile
+    %endif
+ %endif
 %endif
 
-cd $TARGET && rm -rf CMakeFiles CMackCache.txt && cmake . -DCMAKE_INSTALL_PREFIX=%{_prefix}
+%define PREFIX /usr/apps/org.tizen.cbhm
+
+cd $TARGET && rm -rf CMakeFiles CMackCache.txt && cmake . -DCMAKE_INSTALL_PREFIX=%{PREFIX}
 make %{?jobs:-j%jobs}
 
 %install
 %if "%{?tizen_profile_name}" == "wearable"
-       export TARGET=2.3-wearable
+    export TARGET=2.3-wearable
 %else
-   export TARGET=2.3-mobile
+ %if "%{?tizen_profile_name}" == "mobile"
+    export TARGET=2.3-mobile
+ %else
+   %if "%{?tizen_profile_name}" == "tv"
+    export TARGET=2.3-mobile
+    %endif
+ %endif
 %endif
 
 cd $TARGET && %make_install
@@ -65,12 +77,13 @@ cp %{_builddir}/%{buildsubdir}/LICENSE %{buildroot}/%{_datadir}/license/%{name}
 %post
 echo "INFO: System should be restarted or execute: systemctl --user daemon-reload from user session to finish service installation."
 
+chown -R 5000:5000  %{PREFIX}/share
 
 %files
 %defattr(-,root,root,-)
-%{_bindir}/cbhm
-%{_datadir}/edje/cbhmdrawer.edj
-%{_datadir}/locale/*
+%{PREFIX}/bin/*
+%{PREFIX}/share/edje/cbhmdrawer.edj
+%{PREFIX}/share/locale/*
 ## systemd
 %{_libdir}/systemd/user/cbhm.service
 %{_libdir}/systemd/user/core-efl.target.wants/cbhm.service
index 4aa2921..4993533 100644 (file)
@@ -4,8 +4,11 @@ After=tizen-runtime.target e17.service
 Requires=tizen-runtime.target
 
 [Service]
+User=app
+Group=app
+SmackProcessLabel=cbhm
 Type=simple
-ExecStart=/usr/bin/cbhm
+ExecStart=/usr/apps/org.tizen.cbhm/bin/cbhm
 EnvironmentFile=/run/tizen-mobile-env
 
 [Install]