summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKim Kibum <kb0929.kim@samsung.com>2012-06-08 14:54:15 +0900
committerKim Kibum <kb0929.kim@samsung.com>2012-06-08 14:54:15 +0900
commit62b4c1ecb06f2533cc304af74052a6a80f5e60d5 (patch)
tree37313a986b749b81e8291639ba8bb596bf543dab
parent4113731f43c52c82e17b0376a45c0f9a361bc21b (diff)
downloadtaskmanager-62b4c1ecb06f2533cc304af74052a6a80f5e60d5.tar.gz
taskmanager-62b4c1ecb06f2533cc304af74052a6a80f5e60d5.tar.bz2
taskmanager-62b4c1ecb06f2533cc304af74052a6a80f5e60d5.zip
apply FSL(Flora Software License)
-rwxr-xr-xCMakeLists.txt103
-rwxr-xr-xINSTALL32
-rw-r--r--LICENSE75
-rw-r--r--NOTICE2
-rwxr-xr-xdata/CMakeLists.txt20
-rw-r--r--data/icons/00_button_01_normal.pngbin0 -> 3264 bytes
-rw-r--r--data/icons/00_button_01_press.pngbin0 -> 3318 bytes
-rwxr-xr-xdata/icons/taskman_def_content.pngbin0 -> 2856 bytes
-rw-r--r--data/icons/taskmgr_title_icon_info.pngbin0 -> 3142 bytes
-rwxr-xr-xdata/images/39_multitasking_btn_bg.pngbin0 -> 2852 bytes
-rwxr-xr-xdata/images/PUT_IMAGES_HERE0
-rwxr-xr-xdata/taskmgr.edc187
-rwxr-xr-xdata/themes/00_button_02_focus.pngbin0 -> 3382 bytes
-rwxr-xr-xdata/themes/00_button_02_press.pngbin0 -> 3407 bytes
-rw-r--r--data/themes/00_button_03_focus.pngbin0 -> 3288 bytes
-rw-r--r--data/themes/00_button_03_normal.pngbin0 -> 3227 bytes
-rw-r--r--data/themes/00_button_03_press.pngbin0 -> 3268 bytes
-rw-r--r--data/themes/00_button_delete.pngbin0 -> 4128 bytes
-rw-r--r--data/themes/00_button_delete_text.pngbin0 -> 4023 bytes
-rwxr-xr-xdata/themes/00_list_bar_press_1x80.pngbin0 -> 2872 bytes
-rwxr-xr-xdata/themes/39_mini_controller_bg.pngbin0 -> 3138 bytes
-rwxr-xr-xdata/themes/39_mini_controller_button_nor.pngbin0 -> 3112 bytes
-rwxr-xr-xdata/themes/39_mini_controller_button_press.pngbin0 -> 3158 bytes
-rwxr-xr-xdata/themes/39_multitasking_btn_01.pngbin0 -> 3362 bytes
-rwxr-xr-xdata/themes/theme_taskmanager.edc1446
-rw-r--r--debian/changelog7
-rwxr-xr-xdebian/compat1
-rw-r--r--debian/control18
-rwxr-xr-xdebian/copyright6
-rwxr-xr-xdebian/dirs2
-rwxr-xr-xdebian/docs2
-rw-r--r--debian/org.tizen.taskmgr.install.in4
-rwxr-xr-xdebian/org.tizen.taskmgr.postinst8
-rwxr-xr-xdebian/rules119
-rwxr-xr-xorg.tizen.taskmgr.desktop.in11
-rwxr-xr-xorg.tizen.taskmgr.pngbin0 -> 5759 bytes
-rw-r--r--packaging/org.tizen.taskmgr.spec42
-rw-r--r--po/CMakeLists.txt24
-rw-r--r--po/POTFILES.in10
-rw-r--r--po/de.po95
-rw-r--r--po/el.po95
-rw-r--r--po/en_GB.po104
-rw-r--r--po/en_US.po95
-rw-r--r--po/es.po95
-rw-r--r--po/fr.po95
-rw-r--r--po/it.po95
-rw-r--r--po/ja.po95
-rw-r--r--po/ko.po95
-rw-r--r--po/nl.po95
-rw-r--r--po/pt.po95
-rw-r--r--po/ru.po95
-rw-r--r--po/taskmgr.pot58
-rw-r--r--po/tr_TR.po95
-rwxr-xr-xpo/update-po.sh57
-rw-r--r--po/zh_CN.po95
-rw-r--r--po/zh_HK.po95
-rw-r--r--po/zh_TW.po95
-rw-r--r--src/_cpu.c104
-rw-r--r--src/_cpu.h27
-rw-r--r--src/_eina.c304
-rw-r--r--src/_eina.h33
-rw-r--r--src/_genlist.c992
-rw-r--r--src/_genlist.h42
-rw-r--r--src/_info.c131
-rw-r--r--src/_info.h25
-rw-r--r--src/_logic.c361
-rw-r--r--src/_logic.h30
-rw-r--r--src/_progressbar.c46
-rw-r--r--src/_progressbar.h25
-rw-r--r--src/_util_efl.c267
-rw-r--r--src/_util_efl.h39
-rw-r--r--src/_util_log.h60
-rw-r--r--src/taskmanager.c267
-rw-r--r--src/taskmanager.h123
74 files changed, 6639 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100755
index 0000000..621cc4f
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,103 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+PROJECT(taskmgr C)
+
+SET(SRCS
+ src/taskmanager.c
+ src/_util_efl.c
+ src/_genlist.c
+ src/_logic.c
+ src/_cpu.c
+ src/_eina.c
+ src/_progressbar.c
+)
+
+SET(VENDOR "tizen")
+SET(PACKAGE ${PROJECT_NAME})
+SET(PKGNAME "org.${VENDOR}.${PACKAGE}")
+SET(PREFIX ${CMAKE_INSTALL_PREFIX})
+SET(BINDIR "${PREFIX}/bin")
+SET(RESDIR "${PREFIX}/res")
+SET(DATADIR "${PREFIX}/data")
+SET(LOCALEDIR "${RESDIR}/locale")
+SET(ICONDIR "${RESDIR}/icons/default/small")
+SET(IMAGEDIR "${RESDIR}/images/${PACKAGE}")
+SET(EDJDIR "${RESDIR}/edje/${PACKAGE}")
+
+INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/src)
+
+IF("${CMAKE_BUILD_TYPE}" STREQUAL "")
+ SET(CMAKE_BUILD_TYPE "Release")
+ENDIF("${CMAKE_BUILD_TYPE}" STREQUAL "")
+MESSAGE("Build type: ${CMAKE_BUILD_TYPE}")
+
+INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR})
+
+INCLUDE(FindPkgConfig)
+pkg_check_modules(pkgs REQUIRED
+ ecore
+ ecore-file
+ ecore-input
+ ecore-x
+ edje
+ eina
+ evas
+ appcore-efl
+ elementary
+ aul
+ utilX
+ rua
+ vconf
+ sysman
+ ail
+ dlog
+)
+
+FOREACH(flag ${pkgs_CFLAGS})
+ SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
+ENDFOREACH(flag)
+
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -fPIC")
+SET(CMAKE_C_FLAGS_DEBUG "-O0 -g")
+SET(CMAKE_C_FLAGS_RELEASE "-O2")
+
+FIND_PROGRAM(UNAME NAMES uname)
+EXEC_PROGRAM("${UNAME}" ARGS "-m" OUTPUT_VARIABLE "ARCH")
+IF("${ARCH}" STREQUAL "arm")
+ ADD_DEFINITIONS("-DTARGET")
+ MESSAGE("add -DTARGET")
+ENDIF("${ARCH}" STREQUAL "arm")
+
+ADD_DEFINITIONS("-fpie")
+
+ADD_DEFINITIONS("-DVENDOR=\"${VENDOR}\"")
+ADD_DEFINITIONS("-DPACKAGE=\"${PACKAGE}\"")
+ADD_DEFINITIONS("-DPACKAGE_NAME=\"${PKGNAME}\"")
+ADD_DEFINITIONS("-DPREFIX=\"${PREFIX}\"")
+ADD_DEFINITIONS("-DRESDIR=\"${RESDIR}\"")
+ADD_DEFINITIONS("-DDATADIR=\"${DATADIR}\"")
+ADD_DEFINITIONS("-DLOCALEDIR=\"${LOCALEDIR}\"")
+ADD_DEFINITIONS("-DICONDIR=\"${ICONDIR}\"")
+ADD_DEFINITIONS("-DIMAGEDIR=\"${IMAGEDIR}\"")
+ADD_DEFINITIONS("-DEDJDIR=\"${EDJDIR}\"")
+
+SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed")
+
+ADD_EXECUTABLE(${PROJECT_NAME} ${SRCS})
+TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${pkgs_LDFLAGS} "-pie")
+
+# install binary
+INSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${BINDIR})
+
+# install desktop file & icon
+CONFIGURE_FILE(${PKGNAME}.desktop.in ${CMAKE_BINARY_DIR}/${PKGNAME}.desktop)
+INSTALL(FILES ${CMAKE_BINARY_DIR}/${PKGNAME}.desktop DESTINATION /opt/share/applications)
+INSTALL(FILES ${CMAKE_SOURCE_DIR}/${PKGNAME}.png DESTINATION ${ICONDIR})
+
+#install application HOME directory
+INSTALL(DIRECTORY DESTINATION ${DATADIR})
+
+#install etc
+ADD_SUBDIRECTORY(data)
+
+# i18n
+ADD_SUBDIRECTORY(po)
diff --git a/INSTALL b/INSTALL
new file mode 100755
index 0000000..f9a559a
--- /dev/null
+++ b/INSTALL
@@ -0,0 +1,32 @@
+1. make the build directory
+
+ ex)
+
+ $ mkdir build
+
+
+2. change the working directory to the build directory
+
+ ex)
+
+ $ cd build
+
+
+3. run 'cmake'
+
+ $ cmake ${SOURCE_DIR} -DCMAKE_INSTALL_PREFIX=/opt/apps/@@PKGNAME@@
+
+ ex)
+
+ $ cmake .. -DCMAKE_INSTALL_PREFIX=/opt/apps/@@PKGNAME@@
+
+ or
+
+ $ cmake ..
+
+4. make & make install
+
+ ex)
+
+ $ make -j 2 && make install
+
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..7ccb5b5
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,75 @@
+Flora License
+
+Version 1.0, May, 2012
+
+http://www.tizenopensource.org/license
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
+
+"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+"Tizen Certified Platform" shall mean a software platform that complies with the standards set forth in the Compatibility Definition Document and passes the Compatibility Test Suite as defined from time to time by the Tizen Technical Steering Group and certified by the Tizen Association or its designated agent.
+
+2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work solely as incorporated into a Tizen Certified Platform, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work solely as incorporated into a Tizen Certified Platform to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof pursuant to the copyright license above, in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+ 1. You must give any other recipients of the Work or Derivative Works a copy of this License; and
+
+ 2. You must cause any modified files to carry prominent notices stating that You changed the files; and
+
+ 3. You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+
+ 4. If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Flora License to your work
+
+To apply the Flora License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+
+ 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.
diff --git a/NOTICE b/NOTICE
new file mode 100644
index 0000000..48cdf8f
--- /dev/null
+++ b/NOTICE
@@ -0,0 +1,2 @@
+Copyright (c) 2000 - 2012 Samsung Electronics Co., Ltd. All rights reserved.
+
diff --git a/data/CMakeLists.txt b/data/CMakeLists.txt
new file mode 100755
index 0000000..cc8dcb1
--- /dev/null
+++ b/data/CMakeLists.txt
@@ -0,0 +1,20 @@
+ADD_CUSTOM_TARGET(taskmgr.edj
+ COMMAND edje_cc -id ${CMAKE_CURRENT_SOURCE_DIR}/images
+ ${CMAKE_SOURCE_DIR}/data/taskmgr.edc ${CMAKE_BINARY_DIR}/data/taskmgr.edj
+ DEPENDS ${CMAKE_SOURCE_DIR}/data/taskmgr.edc
+)
+ADD_DEPENDENCIES(${PROJECT_NAME} taskmgr.edj)
+INSTALL(FILES ${CMAKE_BINARY_DIR}/data/taskmgr.edj DESTINATION ${EDJDIR})
+
+# install theme
+#ADD_CUSTOM_TARGET(theme_taskmanager.edj
+# COMMAND edje_cc -id ${CMAKE_CURRENT_SOURCE_DIR}/themes
+# ${CMAKE_SOURCE_DIR}/data/themes/theme_taskmanager.edc ${CMAKE_BINARY_DIR}/data/theme_taskmanager.edj
+# DEPENDS ${CMAKE_SOURCE_DIR}/data/themes/theme_taskmanager.edc
+#)
+#ADD_DEPENDENCIES(${PROJECT_NAME} theme_taskmanager.edj)
+#INSTALL(FILES ${CMAKE_BINARY_DIR}/data/theme_taskmanager.edj DESTINATION ${EDJDIR})
+
+# install images
+INSTALL(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/icons/ DESTINATION ${IMAGEDIR} FILES_MATCHING PATTERN "*.png")
+
diff --git a/data/icons/00_button_01_normal.png b/data/icons/00_button_01_normal.png
new file mode 100644
index 0000000..cf6db15
--- /dev/null
+++ b/data/icons/00_button_01_normal.png
Binary files differ
diff --git a/data/icons/00_button_01_press.png b/data/icons/00_button_01_press.png
new file mode 100644
index 0000000..7179246
--- /dev/null
+++ b/data/icons/00_button_01_press.png
Binary files differ
diff --git a/data/icons/taskman_def_content.png b/data/icons/taskman_def_content.png
new file mode 100755
index 0000000..22e995a
--- /dev/null
+++ b/data/icons/taskman_def_content.png
Binary files differ
diff --git a/data/icons/taskmgr_title_icon_info.png b/data/icons/taskmgr_title_icon_info.png
new file mode 100644
index 0000000..9f4350b
--- /dev/null
+++ b/data/icons/taskmgr_title_icon_info.png
Binary files differ
diff --git a/data/images/39_multitasking_btn_bg.png b/data/images/39_multitasking_btn_bg.png
new file mode 100755
index 0000000..2e16deb
--- /dev/null
+++ b/data/images/39_multitasking_btn_bg.png
Binary files differ
diff --git a/data/images/PUT_IMAGES_HERE b/data/images/PUT_IMAGES_HERE
new file mode 100755
index 0000000..e69de29
--- /dev/null
+++ b/data/images/PUT_IMAGES_HERE
diff --git a/data/taskmgr.edc b/data/taskmgr.edc
new file mode 100755
index 0000000..e7f7b96
--- /dev/null
+++ b/data/taskmgr.edc
@@ -0,0 +1,187 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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.
+ */
+
+#define BTN_H 76
+#define GENLIST_BG 246 245 237
+
+collections {
+
+ group {
+ name: "task_manager";
+ images {
+ image: "39_multitasking_btn_bg.png" COMP;
+ }
+ parts {
+ part {
+ name: "bg";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+// color: GENLIST_BG 255;
+ color: 0 0 0 0;
+ }
+ }
+
+ part {
+ name: "list";
+ type: SWALLOW;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: 0.0 0.0; to: "bg"; }
+ rel2 { relative: 1.0 1.0; to: "bg"; }
+ }
+ description {
+ state: "hide" 0.0;
+ inherit: "default" 0.0;
+ visible: 0;
+ }
+ }
+ }
+ }
+
+ group {
+ name: "icon";
+ parts {
+ part {
+ name: "bg";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ color: 0 0 0 0;
+ }
+ }
+
+ part {
+ name: "icon_ly";
+ type: SWALLOW;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: 0.0 0.0; to: "bg"; }
+ rel2 { relative: 1.0 1.0; to: "bg"; }
+ }
+ }
+ part {
+ name: "icon";
+ type: SWALLOW;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { to: "icon_ly"; }
+ rel2 { to: "icon_ly"; }
+ }
+ }
+ }
+ }
+
+ group {
+ name: "info";
+ parts {
+ part {
+ name: "bg";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description {
+ min: 240 105;
+ state: "default" 0.0;
+ color: 0 0 0 0;
+ }
+ }
+ part {
+ name: "padding/t";
+ type: RECT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ min: 0 10;
+ fixed: 0 1;
+ align: 0.5 0.0;
+ color: 0 0 0 0;
+ rel1 { relative: 0.0 0.0; to: "bg"; }
+ rel2 { relative: 1.0 0.0; to: "bg"; }
+ }
+ }
+ part {
+ name: "padding/l";
+ type: RECT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ min: 10 0;
+ fixed: 1 0;
+ align: 0.0 0.5;
+ color: 0 0 0 0;
+ rel1 { relative: 0.0 0.0; to: "bg"; }
+ rel2 { relative: 0.0 1.0; to: "bg"; }
+ }
+ }
+ part {
+ name: "padding/b";
+ type: RECT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ min: 0 10;
+ fixed: 0 1;
+ align: 0.5 1.0;
+ color: 0 0 0 0;
+ rel1 { relative: 0.0 1.0; to: "bg"; }
+ rel2 { relative: 1.0 1.0; to: "bg"; }
+ }
+ }
+ part {
+ name: "padding/r";
+ type: RECT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ min: 10 0;
+ fixed: 1 0;
+ align: 1.0 0.5;
+ color: 0 0 0 0;
+ rel1 { relative: 1.0 0.0; to: "bg"; }
+ rel2 { relative: 1.0 1.0; to: "bg"; }
+ }
+ }
+
+ part {
+ name: "swallow";
+ type: SWALLOW;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ min: 1 1;
+ rel1 {
+ relative: 1.0 1.0;
+ to_x: "padding/l";
+ to_y: "padding/t";
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ to_x: "padding/r";
+ to_y: "padding/b";
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/data/themes/00_button_02_focus.png b/data/themes/00_button_02_focus.png
new file mode 100755
index 0000000..933a96a
--- /dev/null
+++ b/data/themes/00_button_02_focus.png
Binary files differ
diff --git a/data/themes/00_button_02_press.png b/data/themes/00_button_02_press.png
new file mode 100755
index 0000000..df6c4d0
--- /dev/null
+++ b/data/themes/00_button_02_press.png
Binary files differ
diff --git a/data/themes/00_button_03_focus.png b/data/themes/00_button_03_focus.png
new file mode 100644
index 0000000..72d99ec
--- /dev/null
+++ b/data/themes/00_button_03_focus.png
Binary files differ
diff --git a/data/themes/00_button_03_normal.png b/data/themes/00_button_03_normal.png
new file mode 100644
index 0000000..df4433e
--- /dev/null
+++ b/data/themes/00_button_03_normal.png
Binary files differ
diff --git a/data/themes/00_button_03_press.png b/data/themes/00_button_03_press.png
new file mode 100644
index 0000000..b973210
--- /dev/null
+++ b/data/themes/00_button_03_press.png
Binary files differ
diff --git a/data/themes/00_button_delete.png b/data/themes/00_button_delete.png
new file mode 100644
index 0000000..96f514b
--- /dev/null
+++ b/data/themes/00_button_delete.png
Binary files differ
diff --git a/data/themes/00_button_delete_text.png b/data/themes/00_button_delete_text.png
new file mode 100644
index 0000000..d8df523
--- /dev/null
+++ b/data/themes/00_button_delete_text.png
Binary files differ
diff --git a/data/themes/00_list_bar_press_1x80.png b/data/themes/00_list_bar_press_1x80.png
new file mode 100755
index 0000000..1dc6e15
--- /dev/null
+++ b/data/themes/00_list_bar_press_1x80.png
Binary files differ
diff --git a/data/themes/39_mini_controller_bg.png b/data/themes/39_mini_controller_bg.png
new file mode 100755
index 0000000..2428ca6
--- /dev/null
+++ b/data/themes/39_mini_controller_bg.png
Binary files differ
diff --git a/data/themes/39_mini_controller_button_nor.png b/data/themes/39_mini_controller_button_nor.png
new file mode 100755
index 0000000..4d7404e
--- /dev/null
+++ b/data/themes/39_mini_controller_button_nor.png
Binary files differ
diff --git a/data/themes/39_mini_controller_button_press.png b/data/themes/39_mini_controller_button_press.png
new file mode 100755
index 0000000..1df33fd
--- /dev/null
+++ b/data/themes/39_mini_controller_button_press.png
Binary files differ
diff --git a/data/themes/39_multitasking_btn_01.png b/data/themes/39_multitasking_btn_01.png
new file mode 100755
index 0000000..13a3f74
--- /dev/null
+++ b/data/themes/39_multitasking_btn_01.png
Binary files differ
diff --git a/data/themes/theme_taskmanager.edc b/data/themes/theme_taskmanager.edc
new file mode 100755
index 0000000..898a0d2
--- /dev/null
+++ b/data/themes/theme_taskmanager.edc
@@ -0,0 +1,1446 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 {
+
+ ////////////// BUTTON STYLE1 GROUP START /////////////////////////////////////////////
+ group { name: "elm/button/base/text_only/style1_tm";
+ images {
+ image: "00_button_03_normal.png" COMP;
+ image: "00_button_03_press.png" COMP;
+ image: "00_button_03_focus.png" COMP;
+ }
+ script {
+ public button_state = 0; //0:enabled, 1: disabled
+ }
+ parts {
+ part { name: "base";
+ type: RECT;
+ mouse_events: 1;
+ description { state: "default" 0.0;
+ min: 0 70;
+ color: 0 0 0 0;
+ }
+ }
+ part { name: "button_image";
+ mouse_events: 1;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: 0 50;
+ fixed: 0 1;
+ rel1 {
+ to: "base";
+ relative: 0.0 0.5;
+ }
+ rel2 {
+ to: "base";
+ relative: 1.0 0.5;
+ }
+ image {
+ normal: "00_button_03_normal.png";
+ border: 7 7 7 7;
+ border_scale: 1;
+ }
+ }
+ description { state: "clicked" 0.0;
+ inherit: "default" 0.0;
+ image.normal: "00_button_03_press.png";
+ }
+ description { state: "disabled" 0.0;
+ inherit: "default" 0.0;
+ }
+ description { state: "focused" 0.0;
+ inherit: "default" 0.0;
+ image.normal: "00_button_03_focus.png";
+ }
+ }
+ part {
+ name: "padding_left";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ align: 0.0 0.0;
+ rel1.relative: 0.0 0.0;
+ rel2.relative: 0.0 1.0;
+ min: 5 5;
+ fixed: 1 0;
+ color: 0 0 0 0;
+ }
+ }
+ part {
+ name: "padding_right";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ align: 1.0 0.0;
+ rel1.relative: 1.0 0.0;
+ rel2.relative: 1.0 1.0;
+ min: 5 5;
+ fixed: 1 0;
+ color: 0 0 0 0;
+ }
+ }
+ part {
+ name: "padding_top";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ align: 0.0 0.0;
+ rel1.relative: 0.0 0.0;
+ rel2.relative: 1.0 0.0;
+ min: 5 5;
+ fixed: 0 1;
+ color: 0 0 0 0;
+ }
+ }
+ part {
+ name: "padding_bottom";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ align: 1.0 1.0;
+ rel1.relative: 0.0 1.0;
+ rel2.relative: 1.0 1.0;
+ min: 5 5;
+ fixed: 0 1;
+ color: 0 0 0 0;
+ }
+ }
+ part {
+ name: "icon_rect";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ visible: 1;
+ min: 0 40;
+ fixed: 1 0;
+ rel1 {relative: 0.0 1.0; to_x: "elm.swallow.content"; to_y: "padding_top"; }
+ rel2 {relative: 1.0 0.0; to_x: "elm.swallow.content"; to_y: "padding_bottom"; }
+ align: 0.0 0.5;
+ color: 0 0 0 0;
+ }
+ }
+ part {
+ name: "padding_icon_text";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0; //when only icon or no icon is there
+ align: 0.0 0.0;
+ rel1 { relative: 1.0 0.0; to: "icon_rect"; }
+ rel2 { relative: 1.0 1.0; to: "icon_rect"; }
+ fixed: 1 0;
+ min: 0 0;
+ color: 0 0 0 0;
+ }
+ description { state: "icononly" 0.0;
+ inherit: "default" 0.0;
+ }
+ description { state: "visible" 0.0; //when icon is visible
+ align: 0.0 0.0;
+ rel1 { relative: 1.0 0.0; to: "icon_rect"; }
+ rel2 { relative: 1.0 1.0; to: "icon_rect"; }
+ fixed: 1 0;
+ min: 5 0;
+ color: 0 0 0 0;
+ }
+ }
+ part { name: "elm.swallow.content";
+ type: SWALLOW;
+ scale: 1;
+ description { state: "default" 0.0;
+ visible: 0;
+ align: 0.0 0.5;
+ rel1 {relative: 1.0 1.0; to_x: "padding_left"; to_y: "padding_top"; }
+ rel2 {relative: 1.0 0.0; to_x: "padding_left"; to_y: "padding_bottom"; }
+ fixed: 1 0;
+ }
+ description { state: "visible" 0.0;
+ fixed: 1 0;
+ visible: 1;
+ align: 0.0 0.5;
+ rel1 {relative: 1.0 1.0; to_x: "padding_left"; to_y: "padding_top"; }
+ rel2 {relative: 1.0 0.0; to_x: "padding_left"; to_y: "padding_bottom"; }
+ aspect: 1.0 1.0;
+ aspect_preference: VERTICAL;
+ }
+ description { state: "icononly" 0.0;;
+ visible: 1;
+ min: 40 40;
+ rel1 {relative: 1.0 1.0; to_x: "padding_left"; to_y: "padding_top"; }
+ rel2 {relative: 0.0 0.0; to_x: "padding_right"; to_y: "padding_bottom"; }
+ align: 0.5 0.5;
+ aspect: 1.0 1.0;
+ aspect_preference: VERTICAL;
+ }
+ }
+ part { name: "elm.text";
+ type: TEXT;
+// effect: SHADOW;
+ mouse_events: 0;
+ scale: 1;
+ description { state: "default" 0.0;
+ visible: 0;
+ rel1 { relative: 1.0 1.0; to_x: "padding_icon_text"; to_y: "padding_top"; }
+ rel2 { relative: 0.0 0.0; to_x: "padding_right"; to_y:"padding_bottom"; }
+ align: 0.5 0.5;
+ color: 90 73 40 255;
+ color2: 255 255 255 255;
+ text {
+ font: "SLP:style=Medium";
+ size: 24;
+ min: 0 0;
+ align: 0.5 0.5;
+ max: 1 0;
+ }
+ }
+ description { state: "visible" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ min: 90 40;
+ }
+ description { state: "clicked" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ min: 0 0;
+ color: 255 255 255 255;
+ color2: 0 0 0 102;
+ }
+ description { state: "disabled" 0.0;
+ inherit: "default" 0.0;
+ color: 0 0 0 128;
+ color3: 0 0 0 0;
+ }
+ description { state: "disabled_visible" 0.0;
+ inherit: "default" 0.0;
+ color: 0 0 0 128;
+ color3: 0 0 0 0;
+ visible: 1;
+ }
+ description { state: "focused" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ min: 0 0;
+ color: 255 255 255 255;
+ color2: 0 0 0 102;
+ }
+ }
+ part { name: "over2";
+ type: RECT;
+ mouse_events: 1;
+ repeat_events: 1;
+ ignore_flags: ON_HOLD;
+ description { state: "default" 0.0;
+ color: 0 0 0 0;
+ }
+ description { state: "disabled" 0.0;
+ inherit: "default" 0.0;
+ visible: 0;
+ }
+ }
+ part { name: "over3";
+ type: RECT;
+ mouse_events: 1;
+ repeat_events: 1;
+ description { state: "default" 0.0;
+ color: 0 0 0 0;
+ }
+ description { state: "clicked" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ }
+ part { name: "disabler";
+ type: RECT;
+ description { state: "default" 0.0;
+ color: 0 0 0 0;
+ visible: 0;
+ }
+ description { state: "disabled" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ }
+ }
+ programs {
+ program { name: "button_click";
+ signal: "mouse,down,1";
+ source: "over2";
+ action: SIGNAL_EMIT "elm,action,press" "";
+ after: "button_click_anim";
+ }
+ program { name: "button_click_anim";
+ action: STATE_SET "clicked" 0.0;
+ target: "button_image";
+ after: "text_clicked";
+ }
+ program { name: "text_clicked";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"elm.text", st, 30, vl);
+ if (!strcmp(st, "visible"))
+ set_state(PART:"elm.text", "clicked", 0.0);
+ }
+ }
+ program { name: "button_unpress";
+ action: SIGNAL_EMIT "elm,action,unpress" "";
+ }
+ program { name: "button_mouseout_clicked";
+ signal: "mouse,up,1";
+ source: "over3";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"elm.swallow.content", st, 30, vl);
+ if (strcmp(st, "icononly"))
+ {
+ emit("elm,action,default,text,set", "");
+ set_state(PART:"elm.text", "visible", 0.0);
+ }
+ if(get_int(button_state) !=1)
+ set_state(PART:"button_image", "default", 0.0);
+ }
+ after: button_unpress;
+ }
+ program { name: "button_click2";
+ signal: "mouse,down,1";
+ source: "over3";
+ action: STATE_SET "clicked" 0.0;
+ target: "over3";
+ }
+ program { name: "button_unclick2";
+ signal: "mouse,clicked,1";
+ source: "over3";
+ action: STATE_SET "default" 0.0;
+ target: "over3";
+ }
+ program { name: "button_unclick3";
+ signal: "mouse,clicked,1";
+ source: "over2";
+ action: SIGNAL_EMIT "elm,action,click" "";
+ }
+ program { name: "text_show";
+ signal: "elm,state,text,visible";
+ source: "elm";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"elm.swallow.content", st, 30, vl);
+ if (!strcmp(st, "icononly"))
+ {
+ set_state(PART:"elm.swallow.content", "visible", 0.0);
+ set_state(PART:"padding_icon_text", "visible", 0.0);
+ }
+ set_state(PART:"elm.text", "visible", 0.0);
+ }
+ }
+ program { name: "text_hide";
+ signal: "elm,state,text,hidden";
+ source: "elm";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"elm.swallow.content", st, 30, vl);
+ if (!strcmp(st, "visible"))
+ {
+ set_state(PART:"elm.swallow.content", "icononly", 0.0);
+ set_state(PART:"padding_icon_text", "icononly", 0.0);
+ }
+ set_state(PART:"elm.text", "default", 0.0);
+ }
+ }
+ program { name: "icon_show";
+ signal: "elm,state,icon,visible";
+ source: "elm";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"elm.text", st, 30, vl);
+ if (!strcmp(st, "visible"))
+ {
+ set_state(PART:"elm.swallow.content", "visible", 0.0);
+ set_state(PART:"padding_icon_text", "visible", 0.0);
+ }
+ else
+ {
+ set_state(PART:"elm.swallow.content", "icononly", 0.0);
+ set_state(PART:"padding_icon_text", "icononly", 0.0);
+ }
+ }
+ }
+ program { name: "icon_hide";
+ signal: "elm,state,icon,hidden";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "elm.swallow.content";
+ }
+ program { name: "disable";
+ signal: "elm,state,disabled";
+ source: "elm";
+ action: STATE_SET "disabled" 0.0;
+ target: "button_image";
+ target: "over2";
+ target: "disabler";
+ after: "disable_text";
+ }
+ program { name: "disable_text";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"elm.text", st, 30, vl);
+ if (!strcmp(st, "visible"))
+ set_state(PART:"elm.text", "disabled_visible", 0.0);
+ else
+ set_state(PART:"elm.text", "disabled", 0.0);
+ set_int(button_state, 1);
+ }
+ }
+ program { name: "enable";
+ signal: "elm,state,enabled";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "button_image";
+ target: "over2";
+ target: "disabler";
+ after: "enable_text";
+ }
+ program { name: "enable_text";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"elm.text", st, 30, vl);
+ if (!strcmp(st, "disabled_visible"))
+ set_state(PART:"elm.text", "visible", 0.0);
+ else
+ set_state(PART:"elm.text", "default", 0.0);
+ set_int(button_state, 0);
+ }
+ }
+ program { name: "focused";
+ signal: "elm,action,focus";
+ source: "elm";
+ action: STATE_SET "focused" 0.0;
+ target: "button_image";
+ target: "elm.text";
+ }
+ program { name: "unfocused";
+ signal: "elm,action,unfocus";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "button_image";
+ after: "unfocus_text";
+ }
+ program { name: "unfocus_text";
+ action: STATE_SET "visible" 0.0;
+ target: "elm.text";
+ }
+ }
+ }
+
+ ////////////// BUTTON STYLE2 GROUP START /////////////////////////////////////////////
+ group { name: "elm/button/base/text_only/style2_tm";
+ images {
+ image: "00_button_03_normal.png" COMP;
+ image: "00_button_03_press.png" COMP;
+ image: "00_button_03_focus.png" COMP;
+ }
+ script {
+ public button_state = 0; //0:enabled, 1: disabled
+ }
+ parts {
+ part { name: "base";
+ type: RECT;
+ mouse_events: 1;
+ description { state: "default" 0.0;
+ min: 0 70;
+ color: 0 0 0 0;
+ }
+ }
+ part { name: "button_image";
+ mouse_events: 1;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: 0 50;
+ fixed: 0 1;
+ rel1 {
+ to: "base";
+ relative: 0.0 0.5;
+ }
+ rel2 {
+ to: "base";
+ relative: 1.0 0.5;
+ }
+ image {
+ normal: "00_button_03_normal.png";
+ border: 7 7 7 7;
+ border_scale: 1;
+ }
+ }
+ description { state: "clicked" 0.0;
+ inherit: "default" 0.0;
+ image.normal: "00_button_03_press.png";
+ }
+ description { state: "disabled" 0.0;
+ inherit: "default" 0.0;
+ }
+ description { state: "focused" 0.0;
+ inherit: "default" 0.0;
+ image.normal: "00_button_03_focus.png";
+ }
+ }
+ part {
+ name: "padding_left";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ align: 0.0 0.0;
+ rel1.relative: 0.0 0.0;
+ rel2.relative: 0.0 1.0;
+ min: 5 5;
+ fixed: 1 0;
+ color: 0 0 0 0;
+ }
+ }
+ part {
+ name: "padding_right";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ align: 1.0 0.0;
+ rel1.relative: 1.0 0.0;
+ rel2.relative: 1.0 1.0;
+ min: 5 5;
+ fixed: 1 0;
+ color: 0 0 0 0;
+ }
+ }
+ part {
+ name: "padding_top";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ align: 0.0 0.0;
+ rel1.relative: 0.0 0.0;
+ rel2.relative: 1.0 0.0;
+ min: 5 5;
+ fixed: 0 1;
+ color: 0 0 0 0;
+ }
+ }
+ part {
+ name: "padding_bottom";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ align: 1.0 1.0;
+ rel1.relative: 0.0 1.0;
+ rel2.relative: 1.0 1.0;
+ min: 5 5;
+ fixed: 0 1;
+ color: 0 0 0 0;
+ }
+ }
+ part {
+ name: "icon_rect";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ visible: 1;
+ min: 0 40;
+ fixed: 1 0;
+ rel1 {relative: 0.0 1.0; to_x: "elm.swallow.content"; to_y: "padding_top"; }
+ rel2 {relative: 1.0 0.0; to_x: "elm.swallow.content"; to_y: "padding_bottom"; }
+ align: 0.0 0.5;
+ color: 0 0 0 0;
+ }
+ }
+ part {
+ name: "padding_icon_text";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0; //when only icon or no icon is there
+ align: 0.0 0.0;
+ rel1 { relative: 1.0 0.0; to: "icon_rect"; }
+ rel2 { relative: 1.0 1.0; to: "icon_rect"; }
+ fixed: 1 0;
+ min: 0 0;
+ color: 0 0 0 0;
+ }
+ description { state: "icononly" 0.0;
+ inherit: "default" 0.0;
+ }
+ description { state: "visible" 0.0; //when icon is visible
+ align: 0.0 0.0;
+ rel1 { relative: 1.0 0.0; to: "icon_rect"; }
+ rel2 { relative: 1.0 1.0; to: "icon_rect"; }
+ fixed: 1 0;
+ min: 5 0;
+ color: 0 0 0 0;
+ }
+ }
+ part { name: "elm.swallow.content";
+ type: SWALLOW;
+ scale: 1;
+ description { state: "default" 0.0;
+ visible: 0;
+ align: 0.0 0.5;
+ rel1 {relative: 1.0 1.0; to_x: "padding_left"; to_y: "padding_top"; }
+ rel2 {relative: 1.0 0.0; to_x: "padding_left"; to_y: "padding_bottom"; }
+ fixed: 1 0;
+ }
+ description { state: "visible" 0.0;
+ fixed: 1 0;
+ visible: 1;
+ align: 0.0 0.5;
+ rel1 {relative: 1.0 1.0; to_x: "padding_left"; to_y: "padding_top"; }
+ rel2 {relative: 1.0 0.0; to_x: "padding_left"; to_y: "padding_bottom"; }
+ aspect: 1.0 1.0;
+ aspect_preference: VERTICAL;
+ }
+ description { state: "icononly" 0.0;;
+ visible: 1;
+ min: 40 40;
+ rel1 {relative: 1.0 1.0; to_x: "padding_left"; to_y: "padding_top"; }
+ rel2 {relative: 0.0 0.0; to_x: "padding_right"; to_y: "padding_bottom"; }
+ align: 0.5 0.5;
+ aspect: 1.0 1.0;
+ aspect_preference: VERTICAL;
+ }
+ }
+ part { name: "elm.text";
+ type: TEXT;
+// effect: SHADOW;
+ mouse_events: 0;
+ scale: 1;
+ description { state: "default" 0.0;
+ visible: 0;
+ rel1 { relative: 1.0 1.0; to_x: "padding_icon_text"; to_y: "padding_top"; }
+ rel2 { relative: 0.0 0.0; to_x: "padding_right"; to_y:"padding_bottom"; }
+ align: 0.5 0.5;
+ color: 90 73 40 255;
+ color2: 255 255 255 255;
+ text {
+ font: "SLP:style=Medium";
+ size: 20;
+ min: 0 0;
+ align: 0.5 0.5;
+ max: 1 0;
+ }
+ }
+ description { state: "visible" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ min: 90 40;
+ }
+ description { state: "clicked" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ min: 0 0;
+ color: 255 255 255 255;
+ color2: 0 0 0 102;
+ }
+ description { state: "disabled" 0.0;
+ inherit: "default" 0.0;
+ color: 0 0 0 128;
+ color3: 0 0 0 0;
+ }
+ description { state: "disabled_visible" 0.0;
+ inherit: "default" 0.0;
+ color: 0 0 0 128;
+ color3: 0 0 0 0;
+ visible: 1;
+ }
+ description { state: "focused" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ min: 0 0;
+ color: 255 255 255 255;
+ color2: 0 0 0 102;
+ }
+ }
+ part { name: "over2";
+ type: RECT;
+ mouse_events: 1;
+ repeat_events: 1;
+ ignore_flags: ON_HOLD;
+ description { state: "default" 0.0;
+ color: 0 0 0 0;
+ }
+ description { state: "disabled" 0.0;
+ inherit: "default" 0.0;
+ visible: 0;
+ }
+ }
+ part { name: "over3";
+ type: RECT;
+ mouse_events: 1;
+ repeat_events: 1;
+ description { state: "default" 0.0;
+ color: 0 0 0 0;
+ }
+ description { state: "clicked" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ }
+ part { name: "disabler";
+ type: RECT;
+ description { state: "default" 0.0;
+ color: 0 0 0 0;
+ visible: 0;
+ }
+ description { state: "disabled" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ }
+ }
+ programs {
+ program { name: "button_click";
+ signal: "mouse,down,1";
+ source: "over2";
+ action: SIGNAL_EMIT "elm,action,press" "";
+ after: "button_click_anim";
+ }
+ program { name: "button_click_anim";
+ action: STATE_SET "clicked" 0.0;
+ target: "button_image";
+ after: "text_clicked";
+ }
+ program { name: "text_clicked";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"elm.text", st, 30, vl);
+ if (!strcmp(st, "visible"))
+ set_state(PART:"elm.text", "clicked", 0.0);
+ }
+ }
+ program { name: "button_unpress";
+ action: SIGNAL_EMIT "elm,action,unpress" "";
+ }
+ program { name: "button_mouseout_clicked";
+ signal: "mouse,up,1";
+ source: "over3";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"elm.swallow.content", st, 30, vl);
+ if (strcmp(st, "icononly"))
+ {
+ emit("elm,action,default,text,set", "");
+ set_state(PART:"elm.text", "visible", 0.0);
+ }
+ if(get_int(button_state) !=1)
+ set_state(PART:"button_image", "default", 0.0);
+ }
+ after: button_unpress;
+ }
+ program { name: "button_click2";
+ signal: "mouse,down,1";
+ source: "over3";
+ action: STATE_SET "clicked" 0.0;
+ target: "over3";
+ }
+ program { name: "button_unclick2";
+ signal: "mouse,clicked,1";
+ source: "over3";
+ action: STATE_SET "default" 0.0;
+ target: "over3";
+ }
+ program { name: "button_unclick3";
+ signal: "mouse,clicked,1";
+ source: "over2";
+ action: SIGNAL_EMIT "elm,action,click" "";
+ }
+ program { name: "text_show";
+ signal: "elm,state,text,visible";
+ source: "elm";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"elm.swallow.content", st, 30, vl);
+ if (!strcmp(st, "icononly"))
+ {
+ set_state(PART:"elm.swallow.content", "visible", 0.0);
+ set_state(PART:"padding_icon_text", "visible", 0.0);
+ }
+ set_state(PART:"elm.text", "visible", 0.0);
+ }
+ }
+ program { name: "text_hide";
+ signal: "elm,state,text,hidden";
+ source: "elm";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"elm.swallow.content", st, 30, vl);
+ if (!strcmp(st, "visible"))
+ {
+ set_state(PART:"elm.swallow.content", "icononly", 0.0);
+ set_state(PART:"padding_icon_text", "icononly", 0.0);
+ }
+ set_state(PART:"elm.text", "default", 0.0);
+ }
+ }
+ program { name: "icon_show";
+ signal: "elm,state,icon,visible";
+ source: "elm";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"elm.text", st, 30, vl);
+ if (!strcmp(st, "visible"))
+ {
+ set_state(PART:"elm.swallow.content", "visible", 0.0);
+ set_state(PART:"padding_icon_text", "visible", 0.0);
+ }
+ else
+ {
+ set_state(PART:"elm.swallow.content", "icononly", 0.0);
+ set_state(PART:"padding_icon_text", "icononly", 0.0);
+ }
+ }
+ }
+ program { name: "icon_hide";
+ signal: "elm,state,icon,hidden";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "elm.swallow.content";
+ }
+ program { name: "disable";
+ signal: "elm,state,disabled";
+ source: "elm";
+ action: STATE_SET "disabled" 0.0;
+ target: "button_image";
+ target: "over2";
+ target: "disabler";
+ after: "disable_text";
+ }
+ program { name: "disable_text";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"elm.text", st, 30, vl);
+ if (!strcmp(st, "visible"))
+ set_state(PART:"elm.text", "disabled_visible", 0.0);
+ else
+ set_state(PART:"elm.text", "disabled", 0.0);
+ set_int(button_state, 1);
+ }
+ }
+ program { name: "enable";
+ signal: "elm,state,enabled";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "button_image";
+ target: "over2";
+ target: "disabler";
+ after: "enable_text";
+ }
+ program { name: "enable_text";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"elm.text", st, 30, vl);
+ if (!strcmp(st, "disabled_visible"))
+ set_state(PART:"elm.text", "visible", 0.0);
+ else
+ set_state(PART:"elm.text", "default", 0.0);
+ set_int(button_state, 0);
+ }
+ }
+ program { name: "focused";
+ signal: "elm,action,focus";
+ source: "elm";
+ action: STATE_SET "focused" 0.0;
+ target: "button_image";
+ target: "elm.text";
+ }
+ program { name: "unfocused";
+ signal: "elm,action,unfocus";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "button_image";
+ after: "unfocus_text";
+ }
+ program { name: "unfocus_text";
+ action: STATE_SET "visible" 0.0;
+ target: "elm.text";
+ }
+ }
+ }
+
+
+ ////////////// GENLIST GROUP START /////////////////////////////////////////////
+
+#define BEAT_GENLIST_PART_BASE( param_item_height ) \
+ part { name: "base"; \
+ type: RECT; \
+ repeat_events: 1; \
+ scale: 1; \
+ description { state: "default" 0.0; \
+ min: 0 param_item_height; \
+ color: 246 245 237 255; \
+ } \
+ }
+
+#define BEAT_GENLIST_PART_BG \
+ part { name: "bg"; \
+ type: RECT; \
+ clip_to: "disclip"; \
+ mouse_events: 0; \
+ description { state: "default" 0.0; \
+ color: 246 245 237 255; \
+ } \
+ description { state: "hide" 0.0; \
+ inherit: "default" 0.0; \
+ rel1 { relative: -0.025 0.0; } \
+ rel2 { relative: 0.975 1.0; } \
+ } \
+ description { state: "hide" 0.1; \
+ inherit: "default" 0.0; \
+ rel1 { relative: -0.13 0.0; } \
+ rel2 { relative: 0.87 1.0; } \
+ } \
+ description { state: "hide" 0.2; \
+ inherit: "default" 0.0; \
+ rel1 { relative: -0.5 0.0; } \
+ rel2 { relative: 0.5 1.0; } \
+ } \
+ description { state: "hide" 0.3; \
+ inherit: "default" 0.0; \
+ rel1 { relative: -1.0 0.0; } \
+ rel2 { relative: 0.0 1.0; } \
+ } \
+ }
+
+#define BEAT_GENLIST_PART_BG_IMAGE \
+ part { name: "bg_image"; \
+ clip_to: "disclip"; \
+ mouse_events: 0; \
+ description { state: "default" 0.0; \
+ visible: 0; \
+ image.normal: "00_list_bar_press_1x80.png"; \
+ } \
+ description { state: "selected" 0.0; \
+ inherit: "default" 0.0; \
+ visible: 1; \
+ } \
+ }
+
+#define BEAT_GENLIST_PART_BOTTOM_LINE \
+ part { name: "bottom_line"; \
+ type: RECT; \
+ clip_to: "disclip"; \
+ mouse_events: 0; \
+ description { state: "default" 0.0; \
+ min: 0 1; \
+ fixed: 0 1; \
+ visible: 1; \
+ color: 212 212 212 255; \
+ rel1 { \
+ relative: 0.0 1.0; \
+ offset: 0 -1; \
+ } \
+ } \
+ }
+
+#define BEAT_GENLIST_PART_PADDING_TOP( param_padding_size ) \
+ part { name: "elm.padding.top"; \
+ type: RECT; \
+ scale: 1; \
+ description { \
+ state: "default" 0.0; \
+ min: 0 param_padding_size; \
+ fixed: 0 1; \
+ visible: 0; \
+ rel2.relative: 0.0 0.0; \
+ align: 0.0 0.0; \
+ } \
+ }
+
+#define BEAT_GENLIST_PART_PADDING_BOTTOM( param_padding_size ) \
+ part { name: "elm.padding.bottom"; \
+ type: RECT; \
+ scale: 1; \
+ description { \
+ state: "default" 0.0; \
+ min: 0 param_padding_size; \
+ fixed: 0 1; \
+ visible: 0; \
+ rel1.relative: 0.0 1.0; \
+ align: 0.0 1.0; \
+ } \
+ }
+
+
+#define BEAT_GENLIST_PART_PADDING_LEFT( param_padding_size ) \
+ part { name: "elm.padding.left"; \
+ type: RECT; \
+ scale: 1; \
+ description { \
+ state: "default" 0.0; \
+ min: param_padding_size 0; \
+ fixed: 1 0; \
+ visible: 0; \
+ rel2.relative: 0.0 1.0; \
+ align: 0.0 0.0; \
+ } \
+ }
+
+
+
+#define BEAT_GENLIST_PART_PADDING_RIGHT( param_padding_size ) \
+ part { name: "elm.padding.right"; \
+ type: RECT; \
+ scale: 1; \
+ description { state: "default" 0.0; \
+ min: param_padding_size 0; \
+ fixed: 1 0; \
+ visible: 0; \
+ rel1.relative: 1.0 0.0; \
+ align: 1.0 0.0; \
+ } \
+ }
+
+#define BEAT_GENLIST_PART_DISCLIP \
+ part { name: "disclip"; \
+ type: RECT; \
+ description { state: "default" 0.0; \
+ rel1.to: "bg"; \
+ rel2.to: "bg"; \
+ } \
+ description { state: "disabled" 0.0; \
+ inherit: "default" 0.0; \
+ color: 255 255 255 64; \
+ } \
+ }
+
+
+ group { name: "elm/genlist/item_compress/taskswitcher/default";
+ alias: "elm/genlist/item_compress_odd/taskswitcher/default";
+
+ data.item: "stacking" "above";
+ data.item: "selectraise" "on";
+ data.item: "texts" "elm.text elm.text.right elm.text.button";
+ data.item: "contents" "elm.swallow.icon elm.swallow.end";
+ data.item: "treesize" "20";
+ images {
+ image: "00_list_bar_press_1x80.png" COMP;
+ image: "39_mini_controller_button_nor.png" COMP;
+ image: "39_mini_controller_button_press.png" COMP;
+ }
+ parts {
+ BEAT_GENLIST_PART_BASE( 70 )
+ BEAT_GENLIST_PART_BG
+ BEAT_GENLIST_PART_BG_IMAGE
+ BEAT_GENLIST_PART_BOTTOM_LINE
+ BEAT_GENLIST_PART_PADDING_TOP( 10 )
+ BEAT_GENLIST_PART_PADDING_BOTTOM( 10 )
+ BEAT_GENLIST_PART_PADDING_LEFT( 15 )
+ BEAT_GENLIST_PART_PADDING_RIGHT( 15 )
+
+ part {
+ name: "end.bg";
+ type: RECT;
+ scale: 1;
+ clip_to: "disclip";
+ description {
+ state: "default" 0.0;
+ min: 110 70;
+ fixed: 1 0;
+ align: 1.0 0.5;
+ visible: 0;
+ rel1 {
+ relative: 0.0 0.0;
+ to_x: "elm.padding.right";
+ }
+ rel2 {
+ relative: 0.0 1.0;
+ to_x: "elm.padding.right";
+ }
+ }
+ }
+ part {
+ name: "end.padding.left";
+ type: RECT;
+ scale: 1;
+ clip_to: "disclip";
+ description {
+ state: "default" 0.0;
+ min: 10 10;
+ fixed: 1 1;
+ align: 0.0 0.0;
+ visible: 0;
+ rel1 {
+ relative: 0.0 0.0;
+ to: "end.bg";
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ to: "end.bg";
+ }
+ }
+ }
+ part {
+ name: "end.padding.right";
+ type: RECT;
+ scale: 1;
+ clip_to: "disclip";
+ description {
+ state: "default" 0.0;
+ min: 10 10;
+ fixed: 1 1;
+ align: 1.0 1.0;
+ visible: 0;
+ rel1 {
+ relative: 1.0 1.0;
+ to: "end.bg";
+ }
+ rel2 {
+ relative: 1.0 1.0;
+ to: "end.bg";
+ }
+ }
+ }
+ part {
+ name: "elm.swallow.end";
+ type: SWALLOW;
+ scale: 1;
+ clip_to: "disclip";
+ description {
+ state: "default" 0.0;
+ align: 0.5 0.5;
+ rel1 {
+ relative: 1.0 1.0;
+ to: "end.padding.left";
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ to: "end.padding.right";
+ }
+ }
+ }
+
+ part {
+ name: "elm.text";
+ clip_to: "disclip";
+ type: TEXT;
+ mouse_events: 0;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 {
+ relative: 1.0 0.0;
+ offset: 0 0;
+ to_x: "elm.swallow.icon";
+ }
+ rel2 {
+ to_x: "elm.text.right";
+ relative: 0.0 1.0;
+ offset: 0 0;
+ }
+ color: 0 0 0 255;
+ text {
+ font: "SLP:style=Roman";
+ size: 32;
+ min: 0 1;
+ align: 0.0 0.5;
+ }
+ }
+ description {
+ state: "selected" 0.0;
+ inherit: "default" 0.0;
+ color: 225 225 225 255;
+ }
+ }
+ part {
+ name: "elm.text.right";
+ clip_to: "disclip";
+ type: TEXT;
+ mouse_events: 0;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ visible: 1;
+ min: 70 50;
+ max: 70 50;
+ fixed: 1 0;
+ align: 1.0 0.5;
+ rel1 {
+ to_x: "end.bg";
+ }
+ rel2 {
+ relative: 0.0 1.0;
+ to_x: "end.bg";
+ }
+ color: 213 129 31 255;
+ text {
+ font: "SLP:style=Medium";
+ size: 24;
+ min: 0 1;
+ align: 0.5 0.5;
+ }
+ }
+ description {
+ state: "hide" 0.0;
+ inherit: "default" 0.0;
+ min: 0 0;
+ max: 0 0;
+ visible: 0;
+ }
+ description {
+ state: "selected" 0.0;
+ inherit: "default" 0.0;
+ color: 225 225 225 255;
+ }
+ }
+
+ part {
+ name: "elm.text.button";
+ clip_to: "disclip";
+ type: TEXT;
+ mouse_events: 0;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { to: "elm.swallow.end"; }
+ rel2 { to: "elm.swallow.end"; }
+ color: 0 0 0 255;
+ text {
+ font: "SLP:style=Roman";
+ size: 22;
+ min: 0 1;
+ align: 0.5 0.5;
+ }
+ }
+ description {
+ state: "selected" 0.0;
+ inherit: "default" 0.0;
+ color: 225 225 225 255;
+ }
+ }
+
+ part {
+ name: "elm.swallow.icon";
+ clip_to: "disclip";
+ type: SWALLOW;
+ description {
+ state: "default" 0.0;
+ fixed: 1 0;
+ align: 0.0 0.5;
+ rel1 {
+ relative: 1.0 0.0;
+ to_x: "elm.padding.left";
+ }
+ rel2.to_x: "elm.padding.left";
+ }
+ }
+ BEAT_GENLIST_PART_DISCLIP
+ }
+
+ programs {
+ program { name: "go_active";
+ signal: "elm,state,selected";
+ source: "elm";
+ action: STATE_SET "selected" 0.0;
+ target: "bg_image";
+ target: "elm.text";
+ }
+ program { name: "go_passive";
+ signal: "elm,state,unselected";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "bg_image";
+ target: "elm.text";
+ transition: LINEAR 0.1;
+ }
+ program { name: "go_disabled";
+ signal: "elm,state,disabled";
+ source: "elm";
+ action: STATE_SET "disabled" 0.0;
+ target: "disclip";
+ }
+ program { name: "go_enabled";
+ signal: "elm,state,enabled";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "disclip";
+ }
+
+ program {
+ name: "hide/mem";
+ signal: "prog.hide.mem";
+ source: "taskmanager";
+ action: STATE_SET "hide" 0.0;
+ target: "elm.text.right";
+ }
+ program {
+ name: "show/mem";
+ signal: "prog.show.mem";
+ source: "taskmanager";
+ action: STATE_SET "default" 0.0;
+ target: "elm.text.right";
+ }
+
+ }
+ }
+ group { name: "elm/genlist/item_compress/taskswitcher_btn/default";
+ alias: "elm/genlist/item_compress_odd/taskswitcher_btn/default";
+
+ images {
+ image: "39_mini_controller_button_nor.png" COMP;
+ image: "39_mini_controller_button_press.png" COMP;
+ }
+
+ data.item: "stacking" "above";
+ data.item: "selectraise" "on";
+ data.item: "texts" "elm.text";
+ data.item: "contents" "elm.swallow.icon";
+ data.item: "treesize" "20";
+ parts {
+ BEAT_GENLIST_PART_BASE( 70 )
+ BEAT_GENLIST_PART_BG
+ BEAT_GENLIST_PART_BG_IMAGE
+ BEAT_GENLIST_PART_BOTTOM_LINE
+ BEAT_GENLIST_PART_PADDING_TOP( 10 )
+ BEAT_GENLIST_PART_PADDING_BOTTOM( 10 )
+ BEAT_GENLIST_PART_PADDING_LEFT( 10 )
+ BEAT_GENLIST_PART_PADDING_RIGHT( 10 )
+
+
+ part { name: "label.bg";
+ clip_to: "disclip";
+ type: IMAGE;
+ description { state: "default" 0.0;
+ align: 0.5 0.5;
+ rel1 {
+ relative: 1.0 1.0;
+ to_x: "elm.padding.left";
+ to_y: "elm.padding.top";
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ to_x: "elm.padding.right";
+ to_y: "elm.padding.bottom";
+ }
+ image {
+ normal: "39_mini_controller_button_nor.png";
+ border: 5 5 5 5;
+ border_scale: 1;
+ }
+ }
+ description {
+ state: "selected" 0.0;
+ inherit: "default" 0.0;
+ image {
+ normal: "39_mini_controller_button_press.png";
+ border: 5 5 5 5;
+ border_scale: 1;
+ }
+ }
+ }
+
+ part { name: "elm.text";
+ clip_to: "disclip";
+ type: TEXT;
+ mouse_events: 0;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 {
+ to: "label.bg";
+ }
+ rel2 {
+ to: "label.bg";
+ }
+ color: 0 0 0 255;
+ text {
+ font: "SLP:style=Roman";
+ size: 28;
+ min: 0 1;
+ align: 0.5 0.5;
+ }
+ }
+ description { state: "selected" 0.0;
+ inherit: "default" 0.0;
+ color: 225 225 225 255;
+ }
+ }
+
+ part { name: "elm.swallow.icon";
+ clip_to: "disclip";
+ type: SWALLOW;
+ description { state: "default" 0.0;
+ fixed: 1 0;
+ align: 0.5 0.5;
+ rel1.to_x: "elm.padding.left";
+ rel2.to_x: "elm.padding.right";
+ }
+ }
+ BEAT_GENLIST_PART_DISCLIP
+ }
+ programs {
+ program { name: "go_disabled";
+ signal: "elm,state,disabled";
+ source: "elm";
+ action: STATE_SET "disabled" 0.0;
+ target: "disclip";
+ }
+ program { name: "go_enabled";
+ signal: "elm,state,enabled";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "disclip";
+ }
+ program { name: "selected";
+ signal: "mouse,down,1";
+ source: "label.bg";
+ action: STATE_SET "selected" 0.0;
+ target: "label.bg";
+ target: "elm.text";
+ transition: LINEAR 0.1;
+ }
+ program { name: "released";
+ signal: "mouse,up,1";
+ source: "label.bg";
+ action: STATE_SET "default" 0.0;
+ target: "label.bg";
+ target: "elm.text";
+ transition: LINEAR 0.1;
+ }
+ program { name: "clicked";
+ signal: "mouse,clicked,1";
+ source: "label.bg";
+ action: SIGNAL_EMIT "clicked" "label";
+ }
+ }
+ }
+}
+ ////////////// GENLIST GROUP END /////////////////////////////////////////////
diff --git a/debian/changelog b/debian/changelog
new file mode 100644
index 0000000..310d553
--- /dev/null
+++ b/debian/changelog
@@ -0,0 +1,7 @@
+taskmanager (0.14.2-0) unstable; urgency=low
+
+ * released.
+ * Git: pkgs/t/taskmanager
+ * Tag: taskmanager_0.14.2-0
+
+ -- jeesun Kim <iamjs.kim@samsung.com> Fri, 17 Feb 2012 11:00:00 +0900
diff --git a/debian/compat b/debian/compat
new file mode 100755
index 0000000..7ed6ff8
--- /dev/null
+++ b/debian/compat
@@ -0,0 +1 @@
+5
diff --git a/debian/control b/debian/control
new file mode 100644
index 0000000..803ef35
--- /dev/null
+++ b/debian/control
@@ -0,0 +1,18 @@
+Source: taskmanager
+Section: devel
+Priority: extra
+Maintainer: Jeesun Kim <iamjs.kim@samsung.com>
+Uploaders: Noha Park <noha.park@samsung.com>
+Build-Depends: debhelper (>= 5), libappcore-efl-dev, libelm-dev, libaul-1-dev, libslp-utilx-dev, librua-dev, libslp-sysman-dev, libail-0-dev, dlog-dev
+Standards-Version: 3.7.2
+
+Package: org.tizen.taskmgr
+Architecture: any
+Depends: ${shlibs:Depends}, ${misc:Depends}
+Description: Task Manager
+
+Package: org.tizen.taskmgr-dbg
+Architecture: any
+Depends: ${shlibs:Depends}, ${misc:Depends}
+Description: Task Manager Debug Symbols
+ Debug symbols for taskmanager
diff --git a/debian/copyright b/debian/copyright
new file mode 100755
index 0000000..e36ecdf
--- /dev/null
+++ b/debian/copyright
@@ -0,0 +1,6 @@
+Copyright (c) 2000 - 2012 Samsung Electronics Co., Ltd All Rights Reserved
+
+PROPRIETARY/CONFIDENTIAL
+
+This software is the confidential and proprietary information of SAMSUNG ELECTRONICS ("Confidential Information"). You shall not disclose such Confidential Information and shall use it only in accordance with the terms of the license agreement you entered into with SAMSUNG ELECTRONICS. SAMSUNG make no representations or warranties about the suitability of the software, either express or implied, including but not limited to the implied warranties of merchantability, fitness for a particular purpose, or non-infringement. SAMSUNG shall not be liable for any damages suffered by licensee as a result of using, modifying or distributing this software or its derivatives.
+
diff --git a/debian/dirs b/debian/dirs
new file mode 100755
index 0000000..ca882bb
--- /dev/null
+++ b/debian/dirs
@@ -0,0 +1,2 @@
+usr/bin
+usr/sbin
diff --git a/debian/docs b/debian/docs
new file mode 100755
index 0000000..7a77580
--- /dev/null
+++ b/debian/docs
@@ -0,0 +1,2 @@
+CMakeCache.txt
+CMakeLists.txt
diff --git a/debian/org.tizen.taskmgr.install.in b/debian/org.tizen.taskmgr.install.in
new file mode 100644
index 0000000..d693a62
--- /dev/null
+++ b/debian/org.tizen.taskmgr.install.in
@@ -0,0 +1,4 @@
+@PREFIX@/bin/*
+@PREFIX@/res/*
+@PREFIX@/data
+/opt/share/applications/*
diff --git a/debian/org.tizen.taskmgr.postinst b/debian/org.tizen.taskmgr.postinst
new file mode 100755
index 0000000..f23e504
--- /dev/null
+++ b/debian/org.tizen.taskmgr.postinst
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+if [ x"${USER}" == x"root" ]
+then
+ #5000 is inhouse user id
+ #do not use relative path
+ chown -R 5000:5000 /opt/apps/org.tizen.taskmgr/data
+fi
diff --git a/debian/rules b/debian/rules
new file mode 100755
index 0000000..1df424f
--- /dev/null
+++ b/debian/rules
@@ -0,0 +1,119 @@
+#!/usr/bin/make -f
+# -*- makefile -*-
+# Sample debian/rules that uses debhelper.
+# This file was originally written by Joey Hess and Craig Small.
+# As a special exception, when this file is copied by dh-make into a
+# dh-make output file, you may use that output file without restriction.
+# This special exception was added by Craig Small in version 0.37 of dh-make.
+
+# Uncomment this to turn on verbose mode.
+#export DH_VERBOSE=1
+
+CFLAGS ?= -Wall -g
+CXXFLAGS ?= -Wall -g
+LDFLAGS ?=
+PREFIX ?= /opt/apps/org.tizen.taskmgr
+RESDIR ?= /opt/apps/org.tizen.taaskmgr/res
+DATADIR ?= /opt/apps/org.tizen.taskmgr/data
+
+ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
+ CFLAGS += -O0
+ CXXFLAGS += -O0
+else
+ CFLAGS += -O2
+ CXXFLAGS += -O2
+endif
+
+CFLAGS += -fPIC
+CXXFLAGS += -fPIC
+
+LDFLAGS += -Wl,--rpath=$(PREFIX)/lib -Wl,--hash-style=both -Wl,--as-needed
+CMAKE_BUILD_DIR ?= ${CURDIR}/cmake_build_tmp
+
+configure: configure-stamp
+configure-stamp:
+ dh_testdir
+ # Add here commands to configure the package.
+ mkdir -p $(CMAKE_BUILD_DIR) && cd $(CMAKE_BUILD_DIR) && \
+ CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" cmake .. -DCMAKE_INSTALL_PREFIX=$(PREFIX)
+
+ touch configure-stamp
+
+build: build-stamp
+
+build-stamp: configure-stamp
+ dh_testdir
+
+ # Add here commands to compile the package.
+ cd $(CMAKE_BUILD_DIR) && $(MAKE)
+ #docbook-to-man debian/wavplayer.sgml > wavplayer.1
+
+ for f in `find $(CURDIR)/debian/ -name "*.in"`; do \
+ cat $$f > $${f%.in}; \
+ sed -i -e "s#@PREFIX@#$(PREFIX)#g" $${f%.in}; \
+ sed -i -e "s#@RESDIR@#$(RESDIR)#g" $${f%.in}; \
+ sed -i -e "s#@DATADIR@#$(DATADIR)#g" $${f%.in}; \
+ done
+
+ touch $@
+
+clean:
+ dh_testdir
+ dh_testroot
+ rm -f build-stamp configure-stamp
+
+ # Add here commands to clean up after the build process.
+ rm -rf $(CMAKE_BUILD_DIR)
+
+ for f in `find $(CURDIR)/debian/ -name "*.in"`; do \
+ rm -f $${f%.in}; \
+ done
+
+ dh_clean
+
+install: build
+ dh_testdir
+ dh_testroot
+ dh_clean -k
+# dh_installdirs
+
+ # Add here commands to install the package into debian/wavplayer.
+ cd $(CMAKE_BUILD_DIR) && $(MAKE) DESTDIR=$(CURDIR)/debian/tmp install
+
+# Build architecture-independent files here.
+binary-indep: build install
+# We have nothing to do by default.
+
+# Build architecture-dependent files here.
+binary-arch: build install
+ dh_testdir
+ dh_testroot
+# dh_installchangelogs
+# dh_installdocs
+ dh_installexamples
+ dh_install --sourcedir=debian/tmp
+# dh_installmenu
+# dh_installdebconf
+# dh_installlogrotate
+# dh_installemacsen
+# dh_installpam
+# dh_installmime
+# dh_python
+# dh_installinit
+# dh_installcron
+# dh_installinfo
+ dh_installman
+ dh_link
+ dh_strip --dbg-package=org.tizen.taskmgr-dbg
+ dh_compress
+ dh_fixperms
+# dh_perl
+ dh_makeshlibs
+ dh_installdeb
+ dh_shlibdeps
+ dh_gencontrol
+ dh_md5sums
+ dh_builddeb
+
+binary: binary-indep binary-arch
+.PHONY: build clean binary-indep binary-arch binary install configure
diff --git a/org.tizen.taskmgr.desktop.in b/org.tizen.taskmgr.desktop.in
new file mode 100755
index 0000000..279af5f
--- /dev/null
+++ b/org.tizen.taskmgr.desktop.in
@@ -0,0 +1,11 @@
+Name=taskmgr
+Exec=@BINDIR@/@PROJECT_NAME@
+Icon=@PKGNAME@.png
+Type=Application
+Comment=taskmgr
+Version=0.1.0
+NoDisplay=true
+X-TIZEN-TaskManage=false
+X-TIZEN-Removable=false
+X-TIZEN-Multiple=false
+
diff --git a/org.tizen.taskmgr.png b/org.tizen.taskmgr.png
new file mode 100755
index 0000000..ef74fd1
--- /dev/null
+++ b/org.tizen.taskmgr.png
Binary files differ
diff --git a/packaging/org.tizen.taskmgr.spec b/packaging/org.tizen.taskmgr.spec
new file mode 100644
index 0000000..9624d4a
--- /dev/null
+++ b/packaging/org.tizen.taskmgr.spec
@@ -0,0 +1,42 @@
+Name: org.tizen.taskmgr
+Summary: Task Manager
+Version: 0.14.1
+Release: 1
+Group: devel
+License: Flora Software License
+Source0: %{name}-%{version}.tar.gz
+BuildRequires: pkgconfig(appcore-efl)
+BuildRequires: pkgconfig(elementary)
+BuildRequires: pkgconfig(aul)
+BuildRequires: pkgconfig(utilX)
+BuildRequires: pkgconfig(rua)
+BuildRequires: pkgconfig(sysman)
+BuildRequires: pkgconfig(ail)
+
+BuildRequires: cmake
+BuildRequires: edje-bin
+BuildRequires: embryo-bin
+BuildRequires: gettext-devel
+
+%description
+Task Manager.
+
+%prep
+%setup -q
+
+%build
+%define PREFIX "/opt/apps/org.tizen.taskmgr"
+%define RESDIR "/opt/apps/org.tizen.taskmgr/res"
+%define DATADIR "/opt/apps/org.tizen.taskmgr/data"
+
+cmake . -DCMAKE_INSTALL_PREFIX=%{PREFIX}
+
+make %{?jobs:-j%jobs}
+
+%install
+%make_install
+
+%files
+/opt/apps/org.tizen.taskmgr/bin/*
+/opt/apps/org.tizen.taskmgr/res/*
+/opt/share/applications/*
diff --git a/po/CMakeLists.txt b/po/CMakeLists.txt
new file mode 100644
index 0000000..f400fb1
--- /dev/null
+++ b/po/CMakeLists.txt
@@ -0,0 +1,24 @@
+# for i18n
+
+SET(POFILES en_US.po nl.po de.po zh_HK.po zh_CN.po ru.po ko.po zh_TW.po ja.po es.po el.po it.po tr_TR.po pt.po fr.po)
+
+SET(MSGFMT "/usr/bin/msgfmt")
+
+FOREACH(pofile ${POFILES})
+ SET(pofile ${CMAKE_CURRENT_SOURCE_DIR}/${pofile})
+ MESSAGE("PO: ${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 ${PROJECT_NAME}.mo)
+ SET(moFiles ${moFiles} ${moFile})
+ENDFOREACH(pofile)
+
+MESSAGE(".mo files: ${moFiles}")
+ADD_CUSTOM_TARGET(po ALL DEPENDS ${moFiles})
diff --git a/po/POTFILES.in b/po/POTFILES.in
new file mode 100644
index 0000000..2477469
--- /dev/null
+++ b/po/POTFILES.in
@@ -0,0 +1,10 @@
+# List of source files containing translatable strings.
+taskmanager.c
+_eina.c
+_genlist.c
+_info.c
+_logic.c
+_mem.c
+_progressbar.c
+_util_efl.c
+
diff --git a/po/de.po b/po/de.po
new file mode 100644
index 0000000..2610ce0
--- /dev/null
+++ b/po/de.po
@@ -0,0 +1,95 @@
+msgid "IDS_TASKMGR_BODY_APPLICATION"
+msgstr "Anwendung"
+
+msgid "IDS_TASKMGR_BUTTON_CLEAR_ALL"
+msgstr "Alle löschen"
+
+msgid "IDS_TASKMGR_HEADER_TASK_SWITCHER"
+msgstr "Task-Switcher"
+
+msgid "IDS_TASKMGR_POP_CLEARING_HISTORY_ING"
+msgstr "Verlauf wird gelöscht..."
+
+msgid "IDS_TASKMGR_POP_EXITING_APPLICATIONS_ING"
+msgstr "Anwendungen werden beendet..."
+
+msgid "IDS_TASKMGR_POP_EXITING_APPLICATION_ING"
+msgstr "Anwendung wird beendet..."
+
+msgid "IDS_TASKMGR_POP_EXIT_ALL_APPLICATIONS_Q"
+msgstr "Alle Anwendungen beenden?"
+
+msgid "IDS_TASKMGR_POP_EXIT_APPLICATION_Q"
+msgstr "Anwendung beenden?"
+
+msgid "IDS_TASKMGR_POP_NO_APPLICATIONS_RUNNING"
+msgstr "Keine laufenden Anwendungen"
+
+msgid "IDS_TASKMGR_POP_NO_HISTORY_TO_CLEAR"
+msgstr "Kein zu löschender Verlauf"
+
+msgid "IDS_COM_BODY_END"
+msgstr "Beenden"
+
+msgid "IDS_COM_OPT_DELETE"
+msgstr "Löschen"
+
+msgid "IDS_COM_POP_CANCEL"
+msgstr "Abbrechen"
+
+msgid "IDS_COM_SK3_END_ALL_APPLICATIONS"
+msgstr "Alle Anwend. beenden"
+
+msgid "IDS_BMG_POP_NO_TASKS"
+msgstr "Keine Aufgaben"
+
+msgid "IDS_ST_BODY_IN_USE"
+msgstr "Wird bereits verwendet"
+
+msgid "IDS_MUSIC_OPT_HISTORY"
+msgstr "Verlauf"
+
+msgid "IDS_TASKMGR_NO_RUNNING_TASK"
+msgstr "No running task"
+
+msgid "IDS_TASKMGR_NO_TASK_HISTORY"
+msgstr "No task history"
+
+msgid "IDS_TASKMGR_CANNOT_LAUNCH_APPLICATION"
+msgstr "Cannot launch application"
+
+msgid "IDS_TASKMGR_END_ALL_TASKS"
+msgstr "End all tasks"
+
+msgid "IDS_TASKMGR_DELETE_ALL_HISTORY"
+msgstr "Delete all history"
+
+msgid "IDS_TASKMGR_INFO_MESSAGE"
+msgstr "Select a task which you wish to return to from a task list."
+
+msgid "IDS_TASKMGR_WARNNING_TERMINATE_ALL_TASKS"
+msgstr "Terminate all tasks?<br><br>This may cause data loss!"
+
+msgid "IDS_TASKMGR_ASK_TERMINATE_TASK"
+msgstr "Are you sure to terminate<br> %s task?<br><br>This may cause data loss!"
+
+msgid "IDS_TASKMGR_ASK_CLEAR_HISTORY"
+msgstr "Are you sure to clear<br> %s history?"
+
+msgid "IDS_TASKMGR_DELETING_HISTORY"
+msgstr "Deleting history!"
+
+msgid "IDS_TASKMGR_ASK_DELETE_ALL_HISTORY"
+msgstr "Delete all task history?"
+
+msgid "IDS_TASKMGR_TERMINATING_TASK"
+msgstr "Terminating task!"
+
+msgid "IDS_TASKMGR_TERMINATING_ALL_TASKS"
+msgstr "Terminating all tasks!"
+
+msgid "IDS_TASKMGR_NO_TASK_TO_TERMINATE"
+msgstr "No task to terminate!"
+
+msgid "IDS_TASKMGR_NO_TASK"
+msgstr "No task"
diff --git a/po/el.po b/po/el.po
new file mode 100644
index 0000000..91b1e58
--- /dev/null
+++ b/po/el.po
@@ -0,0 +1,95 @@
+msgid "IDS_TASKMGR_BODY_APPLICATION"
+msgstr "Εφαρμογή"
+
+msgid "IDS_TASKMGR_BUTTON_CLEAR_ALL"
+msgstr "Διαγραφή όλων"
+
+msgid "IDS_TASKMGR_HEADER_TASK_SWITCHER"
+msgstr "Εφαρμογή εναλλαγής εργασιών"
+
+msgid "IDS_TASKMGR_POP_CLEARING_HISTORY_ING"
+msgstr "Εκκαθάριση ιστορικού..."
+
+msgid "IDS_TASKMGR_POP_EXITING_APPLICATIONS_ING"
+msgstr "Έξοδος από τις εφαρμογές..."
+
+msgid "IDS_TASKMGR_POP_EXITING_APPLICATION_ING"
+msgstr "Έξοδος από την εφαρμογή..."
+
+msgid "IDS_TASKMGR_POP_EXIT_ALL_APPLICATIONS_Q"
+msgstr "Έξοδος από όλες τις εφαρμογές;"
+
+msgid "IDS_TASKMGR_POP_EXIT_APPLICATION_Q"
+msgstr "Έξοδος από την εφαρμογή;"
+
+msgid "IDS_TASKMGR_POP_NO_APPLICATIONS_RUNNING"
+msgstr "Δεν εκτελούνται εφαρμογές"
+
+msgid "IDS_TASKMGR_POP_NO_HISTORY_TO_CLEAR"
+msgstr "Δεν υπάρχει ιστορικό προς εκκαθάριση"
+
+msgid "IDS_COM_BODY_END"
+msgstr "Λήξη"
+
+msgid "IDS_COM_OPT_DELETE"
+msgstr "Διαγραφή"
+
+msgid "IDS_COM_POP_CANCEL"
+msgstr "Ακύρωση"
+
+msgid "IDS_COM_SK3_END_ALL_APPLICATIONS"
+msgstr "Τερματισμός όλων"
+
+msgid "IDS_BMG_POP_NO_TASKS"
+msgstr "Καμία εργασία"
+
+msgid "IDS_ST_BODY_IN_USE"
+msgstr "Εν χρήσει"
+
+msgid "IDS_MUSIC_OPT_HISTORY"
+msgstr "Ιστορικό"
+
+msgid "IDS_TASKMGR_NO_RUNNING_TASK"
+msgstr "No running task"
+
+msgid "IDS_TASKMGR_NO_TASK_HISTORY"
+msgstr "No task history"
+
+msgid "IDS_TASKMGR_CANNOT_LAUNCH_APPLICATION"
+msgstr "Cannot launch application"
+
+msgid "IDS_TASKMGR_END_ALL_TASKS"
+msgstr "End all tasks"
+
+msgid "IDS_TASKMGR_DELETE_ALL_HISTORY"
+msgstr "Delete all history"
+
+msgid "IDS_TASKMGR_INFO_MESSAGE"
+msgstr "Select a task which you wish to return to from a task list."
+
+msgid "IDS_TASKMGR_WARNNING_TERMINATE_ALL_TASKS"
+msgstr "Terminate all tasks?<br><br>This may cause data loss!"
+
+msgid "IDS_TASKMGR_ASK_TERMINATE_TASK"
+msgstr "Are you sure to terminate<br> %s task?<br><br>This may cause data loss!"
+
+msgid "IDS_TASKMGR_ASK_CLEAR_HISTORY"
+msgstr "Are you sure to clear<br> %s history?"
+
+msgid "IDS_TASKMGR_DELETING_HISTORY"
+msgstr "Deleting history!"
+
+msgid "IDS_TASKMGR_ASK_DELETE_ALL_HISTORY"
+msgstr "Delete all task history?"
+
+msgid "IDS_TASKMGR_TERMINATING_TASK"
+msgstr "Terminating task!"
+
+msgid "IDS_TASKMGR_TERMINATING_ALL_TASKS"
+msgstr "Terminating all tasks!"
+
+msgid "IDS_TASKMGR_NO_TASK_TO_TERMINATE"
+msgstr "No task to terminate!"
+
+msgid "IDS_TASKMGR_NO_TASK"
+msgstr "No task"
diff --git a/po/en_GB.po b/po/en_GB.po
new file mode 100644
index 0000000..ec18206
--- /dev/null
+++ b/po/en_GB.po
@@ -0,0 +1,104 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-10-27 10:23+0900\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: src/taskmgr_tm.c:40
+msgid "In use"
+msgstr ""
+
+#: src/taskmgr_tm.c:40
+msgid "History"
+msgstr ""
+
+#: src/taskmgr_tm.c:115
+msgid ""
+" <br> Select a task<br> you wish to return to<br> from a task list.<br> "
+msgstr ""
+
+#: src/taskmgr_tm.c:618
+msgid "Terminating all tasks!"
+msgstr ""
+
+#: src/taskmgr_tm.c:633
+msgid "No task to terminate!"
+msgstr ""
+
+#: src/taskmgr_tm.c:643
+msgid "Terminate all tasks?<br><br>This may cause data loss!"
+msgstr ""
+
+#: src/taskmgr_tm.c:644 src/taskmgr_tm.c:699 src/taskmgr_tm.c:769
+#: src/taskmgr_tm.c:832
+msgid "IDS_COM_SK_OK"
+msgstr ""
+
+#: src/taskmgr_tm.c:644 src/taskmgr_tm.c:699 src/taskmgr_tm.c:769
+#: src/taskmgr_tm.c:832
+msgid "Cancel"
+msgstr ""
+
+#: src/taskmgr_tm.c:673
+msgid "Deleting history!"
+msgstr ""
+
+#: src/taskmgr_tm.c:688
+msgid "No history to clear!"
+msgstr ""
+
+#: src/taskmgr_tm.c:698
+msgid "Delete all task history?"
+msgstr ""
+
+#: src/taskmgr_tm.c:737
+msgid "Terminating task!"
+msgstr ""
+
+#: src/taskmgr_tm.c:861
+msgid "No running task"
+msgstr ""
+
+#: src/taskmgr_tm.c:889
+msgid "No task history"
+msgstr ""
+
+#: src/taskmgr_tm.c:929
+msgid "Can not launch application!"
+msgstr ""
+
+#: src/taskmgr_tm.c:973
+msgid "End"
+msgstr ""
+
+#: src/taskmgr_tm.c:981
+msgid "Delete"
+msgstr ""
+
+#: src/taskmgr_tm.c:1028
+msgid "End all tasks"
+msgstr ""
+
+#: src/taskmgr_tm.c:1053
+msgid "Delete all history"
+msgstr ""
+
+#: src/taskmgr_tm.c:1224
+msgid "No task"
+msgstr ""
+
+#: src/taskmgr_tm.c:1244
+msgid "Task Switcher"
+msgstr ""
diff --git a/po/en_US.po b/po/en_US.po
new file mode 100644
index 0000000..78a42fd
--- /dev/null
+++ b/po/en_US.po
@@ -0,0 +1,95 @@
+msgid "IDS_TASKMGR_BODY_APPLICATION"
+msgstr "Application"
+
+msgid "IDS_TASKMGR_BUTTON_CLEAR_ALL"
+msgstr "Clear all"
+
+msgid "IDS_TASKMGR_HEADER_TASK_SWITCHER"
+msgstr "Task switcher"
+
+msgid "IDS_TASKMGR_POP_CLEARING_HISTORY_ING"
+msgstr "Clearing history..."
+
+msgid "IDS_TASKMGR_POP_EXITING_APPLICATIONS_ING"
+msgstr "Exiting applications..."
+
+msgid "IDS_TASKMGR_POP_EXITING_APPLICATION_ING"
+msgstr "Exiting application..."
+
+msgid "IDS_TASKMGR_POP_EXIT_ALL_APPLICATIONS_Q"
+msgstr "Exit all applications?"
+
+msgid "IDS_TASKMGR_POP_EXIT_APPLICATION_Q"
+msgstr "Exit application?"
+
+msgid "IDS_TASKMGR_POP_NO_APPLICATIONS_RUNNING"
+msgstr "No applications running"
+
+msgid "IDS_TASKMGR_POP_NO_HISTORY_TO_CLEAR"
+msgstr "No history to clear"
+
+msgid "IDS_COM_BODY_END"
+msgstr "End"
+
+msgid "IDS_COM_OPT_DELETE"
+msgstr "Delete"
+
+msgid "IDS_COM_POP_CANCEL"
+msgstr "Cancel"
+
+msgid "IDS_COM_SK3_END_ALL_APPLICATIONS"
+msgstr "End all applications"
+
+msgid "IDS_BMG_POP_NO_TASKS"
+msgstr "No tasks"
+
+msgid "IDS_ST_BODY_IN_USE"
+msgstr "In use"
+
+msgid "IDS_MUSIC_OPT_HISTORY"
+msgstr "History"
+
+msgid "IDS_TASKMGR_NO_RUNNING_TASK"
+msgstr "No running task"
+
+msgid "IDS_TASKMGR_NO_TASK_HISTORY"
+msgstr "No task history"
+
+msgid "IDS_TASKMGR_CANNOT_LAUNCH_APPLICATION"
+msgstr "Cannot launch application"
+
+msgid "IDS_TASKMGR_END_ALL_TASKS"
+msgstr "End all tasks"
+
+msgid "IDS_TASKMGR_DELETE_ALL_HISTORY"
+msgstr "Delete all history"
+
+msgid "IDS_TASKMGR_INFO_MESSAGE"
+msgstr "Select a task which you wish to return to from a task list"
+
+msgid "IDS_TASKMGR_WARNNING_TERMINATE_ALL_TASKS"
+msgstr "Terminate all tasks?<br>This may cause data loss!"
+
+msgid "IDS_TASKMGR_ASK_TERMINATE_TASK"
+msgstr "Are you sure to terminate %s task?<br>This may cause data loss!"
+
+msgid "IDS_TASKMGR_ASK_CLEAR_HISTORY"
+msgstr "Are you sure to clear %s history?"
+
+msgid "IDS_TASKMGR_DELETING_HISTORY"
+msgstr "Deleting history!"
+
+msgid "IDS_TASKMGR_ASK_DELETE_ALL_HISTORY"
+msgstr "Delete all task history?"
+
+msgid "IDS_TASKMGR_TERMINATING_TASK"
+msgstr "Terminating task!"
+
+msgid "IDS_TASKMGR_TERMINATING_ALL_TASKS"
+msgstr "Terminating all tasks!"
+
+msgid "IDS_TASKMGR_NO_TASK_TO_TERMINATE"
+msgstr "No task to terminate!"
+
+msgid "IDS_TASKMGR_NO_TASK"
+msgstr "No task"
diff --git a/po/es.po b/po/es.po
new file mode 100644
index 0000000..a0b765d
--- /dev/null
+++ b/po/es.po
@@ -0,0 +1,95 @@
+msgid "IDS_TASKMGR_BODY_APPLICATION"
+msgstr "Aplicación"
+
+msgid "IDS_TASKMGR_BUTTON_CLEAR_ALL"
+msgstr "Borrar todo"
+
+msgid "IDS_TASKMGR_HEADER_TASK_SWITCHER"
+msgstr "Conmutador de tareas"
+
+msgid "IDS_TASKMGR_POP_CLEARING_HISTORY_ING"
+msgstr "Borrando historial..."
+
+msgid "IDS_TASKMGR_POP_EXITING_APPLICATIONS_ING"
+msgstr "Saliendo de las aplicaciones..."
+
+msgid "IDS_TASKMGR_POP_EXITING_APPLICATION_ING"
+msgstr "Aplicación existente..."
+
+msgid "IDS_TASKMGR_POP_EXIT_ALL_APPLICATIONS_Q"
+msgstr "¿Salir de todas las aplicaciones?"
+
+msgid "IDS_TASKMGR_POP_EXIT_APPLICATION_Q"
+msgstr "¿Salir de la aplicación?"
+
+msgid "IDS_TASKMGR_POP_NO_APPLICATIONS_RUNNING"
+msgstr "Sin aplicaciones en ejecución"
+
+msgid "IDS_TASKMGR_POP_NO_HISTORY_TO_CLEAR"
+msgstr "No hay ningún historial que borrar"
+
+msgid "IDS_COM_BODY_END"
+msgstr "Finalizar"
+
+msgid "IDS_COM_OPT_DELETE"
+msgstr "Eliminar"
+
+msgid "IDS_COM_POP_CANCEL"
+msgstr "Cancelar"
+
+msgid "IDS_COM_SK3_END_ALL_APPLICATIONS"
+msgstr "Fin todas aplic"
+
+msgid "IDS_BMG_POP_NO_TASKS"
+msgstr "No hay tareas"
+
+msgid "IDS_ST_BODY_IN_USE"
+msgstr "En uso"
+
+msgid "IDS_MUSIC_OPT_HISTORY"
+msgstr "Historial"
+
+msgid "IDS_TASKMGR_NO_RUNNING_TASK"
+msgstr "No running task"
+
+msgid "IDS_TASKMGR_NO_TASK_HISTORY"
+msgstr "No task history"
+
+msgid "IDS_TASKMGR_CANNOT_LAUNCH_APPLICATION"
+msgstr "Cannot launch application"
+
+msgid "IDS_TASKMGR_END_ALL_TASKS"
+msgstr "End all tasks"
+
+msgid "IDS_TASKMGR_DELETE_ALL_HISTORY"
+msgstr "Delete all history"
+
+msgid "IDS_TASKMGR_INFO_MESSAGE"
+msgstr "Select a task which you wish to return to from a task list."
+
+msgid "IDS_TASKMGR_WARNNING_TERMINATE_ALL_TASKS"
+msgstr "Terminate all tasks?<br><br>This may cause data loss!"
+
+msgid "IDS_TASKMGR_ASK_TERMINATE_TASK"
+msgstr "Are you sure to terminate<br> %s task?<br><br>This may cause data loss!"
+
+msgid "IDS_TASKMGR_ASK_CLEAR_HISTORY"
+msgstr "Are you sure to clear<br> %s history?"
+
+msgid "IDS_TASKMGR_DELETING_HISTORY"
+msgstr "Deleting history!"
+
+msgid "IDS_TASKMGR_ASK_DELETE_ALL_HISTORY"
+msgstr "Delete all task history?"
+
+msgid "IDS_TASKMGR_TERMINATING_TASK"
+msgstr "Terminating task!"
+
+msgid "IDS_TASKMGR_TERMINATING_ALL_TASKS"
+msgstr "Terminating all tasks!"
+
+msgid "IDS_TASKMGR_NO_TASK_TO_TERMINATE"
+msgstr "No task to terminate!"
+
+msgid "IDS_TASKMGR_NO_TASK"
+msgstr "No task"
diff --git a/po/fr.po b/po/fr.po
new file mode 100644
index 0000000..e514d32
--- /dev/null
+++ b/po/fr.po
@@ -0,0 +1,95 @@
+msgid "IDS_TASKMGR_BODY_APPLICATION"
+msgstr "Applications"
+
+msgid "IDS_TASKMGR_BUTTON_CLEAR_ALL"
+msgstr "Effacer tout"
+
+msgid "IDS_TASKMGR_HEADER_TASK_SWITCHER"
+msgstr "Gestionnaire de tâches"
+
+msgid "IDS_TASKMGR_POP_CLEARING_HISTORY_ING"
+msgstr "Effacement de l'historique..."
+
+msgid "IDS_TASKMGR_POP_EXITING_APPLICATIONS_ING"
+msgstr "Fermeture des applications..."
+
+msgid "IDS_TASKMGR_POP_EXITING_APPLICATION_ING"
+msgstr "Fermeture de l'application..."
+
+msgid "IDS_TASKMGR_POP_EXIT_ALL_APPLICATIONS_Q"
+msgstr "Quitter toutes les applications ?"
+
+msgid "IDS_TASKMGR_POP_EXIT_APPLICATION_Q"
+msgstr "Quitter l'application ?"
+
+msgid "IDS_TASKMGR_POP_NO_APPLICATIONS_RUNNING"
+msgstr "Aucune application en cours d'exécution"
+
+msgid "IDS_TASKMGR_POP_NO_HISTORY_TO_CLEAR"
+msgstr "Aucun historique à effacer"
+
+msgid "IDS_COM_BODY_END"
+msgstr "Fin"
+
+msgid "IDS_COM_OPT_DELETE"
+msgstr "Supprimer"
+
+msgid "IDS_COM_POP_CANCEL"
+msgstr "Annuler"
+
+msgid "IDS_COM_SK3_END_ALL_APPLICATIONS"
+msgstr "Quitter ttes appli."
+
+msgid "IDS_BMG_POP_NO_TASKS"
+msgstr "Aucune tâche"
+
+msgid "IDS_ST_BODY_IN_USE"
+msgstr "En cours d'utilisation"
+
+msgid "IDS_MUSIC_OPT_HISTORY"
+msgstr "Historique"
+
+msgid "IDS_TASKMGR_NO_RUNNING_TASK"
+msgstr "No running task"
+
+msgid "IDS_TASKMGR_NO_TASK_HISTORY"
+msgstr "No task history"
+
+msgid "IDS_TASKMGR_CANNOT_LAUNCH_APPLICATION"
+msgstr "Cannot launch application"
+
+msgid "IDS_TASKMGR_END_ALL_TASKS"
+msgstr "End all tasks"
+
+msgid "IDS_TASKMGR_DELETE_ALL_HISTORY"
+msgstr "Delete all history"
+
+msgid "IDS_TASKMGR_INFO_MESSAGE"
+msgstr "Select a task which you wish to return to from a task list."
+
+msgid "IDS_TASKMGR_WARNNING_TERMINATE_ALL_TASKS"
+msgstr "Terminate all tasks?<br><br>This may cause data loss!"
+
+msgid "IDS_TASKMGR_ASK_TERMINATE_TASK"
+msgstr "Are you sure to terminate<br> %s task?<br><br>This may cause data loss!"
+
+msgid "IDS_TASKMGR_ASK_CLEAR_HISTORY"
+msgstr "Are you sure to clear<br> %s history?"
+
+msgid "IDS_TASKMGR_DELETING_HISTORY"
+msgstr "Deleting history!"
+
+msgid "IDS_TASKMGR_ASK_DELETE_ALL_HISTORY"
+msgstr "Delete all task history?"
+
+msgid "IDS_TASKMGR_TERMINATING_TASK"
+msgstr "Terminating task!"
+
+msgid "IDS_TASKMGR_TERMINATING_ALL_TASKS"
+msgstr "Terminating all tasks!"
+
+msgid "IDS_TASKMGR_NO_TASK_TO_TERMINATE"
+msgstr "No task to terminate!"
+
+msgid "IDS_TASKMGR_NO_TASK"
+msgstr "No task"
diff --git a/po/it.po b/po/it.po
new file mode 100644
index 0000000..f942354
--- /dev/null
+++ b/po/it.po
@@ -0,0 +1,95 @@
+msgid "IDS_TASKMGR_BODY_APPLICATION"
+msgstr "Applicazioni"
+
+msgid "IDS_TASKMGR_BUTTON_CLEAR_ALL"
+msgstr "Cancella tutto"
+
+msgid "IDS_TASKMGR_HEADER_TASK_SWITCHER"
+msgstr "Cambia attività"
+
+msgid "IDS_TASKMGR_POP_CLEARING_HISTORY_ING"
+msgstr "Cancellazione cronologia in corso..."
+
+msgid "IDS_TASKMGR_POP_EXITING_APPLICATIONS_ING"
+msgstr "Chiusura delle applicazioni in corso..."
+
+msgid "IDS_TASKMGR_POP_EXITING_APPLICATION_ING"
+msgstr "Chiusura dell'applicazione in corso..."
+
+msgid "IDS_TASKMGR_POP_EXIT_ALL_APPLICATIONS_Q"
+msgstr "Uscire da tutte le applicazioni?"
+
+msgid "IDS_TASKMGR_POP_EXIT_APPLICATION_Q"
+msgstr "Uscire dall'applicazione?"
+
+msgid "IDS_TASKMGR_POP_NO_APPLICATIONS_RUNNING"
+msgstr "Nessuna applicazione in esecuzione"
+
+msgid "IDS_TASKMGR_POP_NO_HISTORY_TO_CLEAR"
+msgstr "Nessuna cronologia da cancellare"
+
+msgid "IDS_COM_BODY_END"
+msgstr "Fine"
+
+msgid "IDS_COM_OPT_DELETE"
+msgstr "Elimina"
+
+msgid "IDS_COM_POP_CANCEL"
+msgstr "Annulla"
+
+msgid "IDS_COM_SK3_END_ALL_APPLICATIONS"
+msgstr "Chiudi tutto"
+
+msgid "IDS_BMG_POP_NO_TASKS"
+msgstr "Nessuna attività"
+
+msgid "IDS_ST_BODY_IN_USE"
+msgstr "Spazio utilizzato"
+
+msgid "IDS_MUSIC_OPT_HISTORY"
+msgstr "Cronologia"
+
+msgid "IDS_TASKMGR_NO_RUNNING_TASK"
+msgstr "No running task"
+
+msgid "IDS_TASKMGR_NO_TASK_HISTORY"
+msgstr "No task history"
+
+msgid "IDS_TASKMGR_CANNOT_LAUNCH_APPLICATION"
+msgstr "Cannot launch application"
+
+msgid "IDS_TASKMGR_END_ALL_TASKS"
+msgstr "End all tasks"
+
+msgid "IDS_TASKMGR_DELETE_ALL_HISTORY"
+msgstr "Delete all history"
+
+msgid "IDS_TASKMGR_INFO_MESSAGE"
+msgstr "Select a task which you wish to return to from a task list."
+
+msgid "IDS_TASKMGR_WARNNING_TERMINATE_ALL_TASKS"
+msgstr "Terminate all tasks?<br><br>This may cause data loss!"
+
+msgid "IDS_TASKMGR_ASK_TERMINATE_TASK"
+msgstr "Are you sure to terminate<br> %s task?<br><br>This may cause data loss!"
+
+msgid "IDS_TASKMGR_ASK_CLEAR_HISTORY"
+msgstr "Are you sure to clear<br> %s history?"
+
+msgid "IDS_TASKMGR_DELETING_HISTORY"
+msgstr "Deleting history!"
+
+msgid "IDS_TASKMGR_ASK_DELETE_ALL_HISTORY"
+msgstr "Delete all task history?"
+
+msgid "IDS_TASKMGR_TERMINATING_TASK"
+msgstr "Terminating task!"
+
+msgid "IDS_TASKMGR_TERMINATING_ALL_TASKS"
+msgstr "Terminating all tasks!"
+
+msgid "IDS_TASKMGR_NO_TASK_TO_TERMINATE"
+msgstr "No task to terminate!"
+
+msgid "IDS_TASKMGR_NO_TASK"
+msgstr "No task"
diff --git a/po/ja.po b/po/ja.po
new file mode 100644
index 0000000..f803558
--- /dev/null
+++ b/po/ja.po
@@ -0,0 +1,95 @@
+msgid "IDS_TASKMGR_BODY_APPLICATION"
+msgstr "アプリケーション"
+
+msgid "IDS_TASKMGR_BUTTON_CLEAR_ALL"
+msgstr "全消去"
+
+msgid "IDS_TASKMGR_HEADER_TASK_SWITCHER"
+msgstr "タスク切替"
+
+msgid "IDS_TASKMGR_POP_CLEARING_HISTORY_ING"
+msgstr "履歴消去中..."
+
+msgid "IDS_TASKMGR_POP_EXITING_APPLICATIONS_ING"
+msgstr "アプリケーション​の​終了​中​..."
+
+msgid "IDS_TASKMGR_POP_EXITING_APPLICATION_ING"
+msgstr "アプリケーション​の​終了​中​..."
+
+msgid "IDS_TASKMGR_POP_EXIT_ALL_APPLICATIONS_Q"
+msgstr "全て​の​アプリケーション​を​終了​しますか?"
+
+msgid "IDS_TASKMGR_POP_EXIT_APPLICATION_Q"
+msgstr "アプリケーション​を​終了​しますか?"
+
+msgid "IDS_TASKMGR_POP_NO_APPLICATIONS_RUNNING"
+msgstr "実行中​の​アプリケーション​は​あり​ません"
+
+msgid "IDS_TASKMGR_POP_NO_HISTORY_TO_CLEAR"
+msgstr "消去​する​履歴​が​あり​ません"
+
+msgid "IDS_COM_BODY_END"
+msgstr "終了"
+
+msgid "IDS_COM_OPT_DELETE"
+msgstr "削除"
+
+msgid "IDS_COM_POP_CANCEL"
+msgstr "キャンセル"
+
+msgid "IDS_COM_SK3_END_ALL_APPLICATIONS"
+msgstr "全​アプリケーション​終了"
+
+msgid "IDS_BMG_POP_NO_TASKS"
+msgstr "タスク​は​ありません"
+
+msgid "IDS_ST_BODY_IN_USE"
+msgstr "使用中"
+
+msgid "IDS_MUSIC_OPT_HISTORY"
+msgstr "履歴"
+
+msgid "IDS_TASKMGR_NO_RUNNING_TASK"
+msgstr "No running task"
+
+msgid "IDS_TASKMGR_NO_TASK_HISTORY"
+msgstr "No task history"
+
+msgid "IDS_TASKMGR_CANNOT_LAUNCH_APPLICATION"
+msgstr "Cannot launch application"
+
+msgid "IDS_TASKMGR_END_ALL_TASKS"
+msgstr "End all tasks"
+
+msgid "IDS_TASKMGR_DELETE_ALL_HISTORY"
+msgstr "Delete all history"
+
+msgid "IDS_TASKMGR_INFO_MESSAGE"
+msgstr "Select a task which you wish to return to from a task list."
+
+msgid "IDS_TASKMGR_WARNNING_TERMINATE_ALL_TASKS"
+msgstr "Terminate all tasks?<br><br>This may cause data loss!"
+
+msgid "IDS_TASKMGR_ASK_TERMINATE_TASK"
+msgstr "Are you sure to terminate<br> %s task?<br><br>This may cause data loss!"
+
+msgid "IDS_TASKMGR_ASK_CLEAR_HISTORY"
+msgstr "Are you sure to clear<br> %s history?"
+
+msgid "IDS_TASKMGR_DELETING_HISTORY"
+msgstr "Deleting history!"
+
+msgid "IDS_TASKMGR_ASK_DELETE_ALL_HISTORY"
+msgstr "Delete all task history?"
+
+msgid "IDS_TASKMGR_TERMINATING_TASK"
+msgstr "Terminating task!"
+
+msgid "IDS_TASKMGR_TERMINATING_ALL_TASKS"
+msgstr "Terminating all tasks!"
+
+msgid "IDS_TASKMGR_NO_TASK_TO_TERMINATE"
+msgstr "No task to terminate!"
+
+msgid "IDS_TASKMGR_NO_TASK"
+msgstr "No task"
diff --git a/po/ko.po b/po/ko.po
new file mode 100644
index 0000000..a620d8e
--- /dev/null
+++ b/po/ko.po
@@ -0,0 +1,95 @@
+msgid "IDS_TASKMGR_BODY_APPLICATION"
+msgstr "애플리케이션"
+
+msgid "IDS_TASKMGR_BUTTON_CLEAR_ALL"
+msgstr "모두 삭제"
+
+msgid "IDS_TASKMGR_HEADER_TASK_SWITCHER"
+msgstr "작업 전환기"
+
+msgid "IDS_TASKMGR_POP_CLEARING_HISTORY_ING"
+msgstr "기록 삭제 중..."
+
+msgid "IDS_TASKMGR_POP_EXITING_APPLICATIONS_ING"
+msgstr "애플리케이션 종료 중..."
+
+msgid "IDS_TASKMGR_POP_EXITING_APPLICATION_ING"
+msgstr "애플리케이션 종료 중..."
+
+msgid "IDS_TASKMGR_POP_EXIT_ALL_APPLICATIONS_Q"
+msgstr "모든 애플리케이션을 종료할까요?"
+
+msgid "IDS_TASKMGR_POP_EXIT_APPLICATION_Q"
+msgstr "프로그램을 종료할까요?"
+
+msgid "IDS_TASKMGR_POP_NO_APPLICATIONS_RUNNING"
+msgstr "실행 중인 애플리케이션이 없습니다"
+
+msgid "IDS_TASKMGR_POP_NO_HISTORY_TO_CLEAR"
+msgstr "삭제할 기록이 없습니다"
+
+msgid "IDS_COM_BODY_END"
+msgstr "종료"
+
+msgid "IDS_COM_OPT_DELETE"
+msgstr "삭제"
+
+msgid "IDS_COM_POP_CANCEL"
+msgstr "취소"
+
+msgid "IDS_COM_SK3_END_ALL_APPLICATIONS"
+msgstr "모든 프로그램 종료"
+
+msgid "IDS_BMG_POP_NO_TASKS"
+msgstr "작업이 없습니다"
+
+msgid "IDS_ST_BODY_IN_USE"
+msgstr "사용 중"
+
+msgid "IDS_MUSIC_OPT_HISTORY"
+msgstr "히스토리"
+
+msgid "IDS_TASKMGR_NO_RUNNING_TASK"
+msgstr "사용중인 작업이 없습니다"
+
+msgid "IDS_TASKMGR_NO_TASK_HISTORY"
+msgstr "작업 기록이 없습니다"
+
+msgid "IDS_TASKMGR_CANNOT_LAUNCH_APPLICATION"
+msgstr "어플리케이션을 실행할 수 없습니다"
+
+msgid "IDS_TASKMGR_END_ALL_TASKS"
+msgstr "모든 작업 종료"
+
+msgid "IDS_TASKMGR_DELETE_ALL_HISTORY"
+msgstr "모든 작업 기록 삭제"
+
+msgid "IDS_TASKMGR_INFO_MESSAGE"
+msgstr "작업목록에서 실행하고 싶은 작업을 선택하세요"
+
+msgid "IDS_TASKMGR_WARNNING_TERMINATE_ALL_TASKS"
+msgstr "모든 작업을 종료하시겠습니까?<br><br>작업 데이터가 손실될 수 있습니다"
+
+msgid "IDS_TASKMGR_ASK_TERMINATE_TASK"
+msgstr "%s 작업을 종료하시겠습니까?<br><br>작업 데이터가 손실될 수 있습니다"
+
+msgid "IDS_TASKMGR_ASK_CLEAR_HISTORY"
+msgstr "%s 기록을 삭제하겠습니까?"
+
+msgid "IDS_TASKMGR_DELETING_HISTORY"
+msgstr "작업 기록 삭제 중!"
+
+msgid "IDS_TASKMGR_ASK_DELETE_ALL_HISTORY"
+msgstr "모든 작업 기록을 삭제하겠습니까?"
+
+msgid "IDS_TASKMGR_TERMINATING_TASK"
+msgstr "작업 종료 중!"
+
+msgid "IDS_TASKMGR_TERMINATING_ALL_TASKS"
+msgstr "모든 작업 종료 중!"
+
+msgid "IDS_TASKMGR_NO_TASK_TO_TERMINATE"
+msgstr "종료할 작업이 없습니다!"
+
+msgid "IDS_TASKMGR_NO_TASK"
+msgstr "작업이 존재하지 않습니다"
diff --git a/po/nl.po b/po/nl.po
new file mode 100644
index 0000000..103b76e
--- /dev/null
+++ b/po/nl.po
@@ -0,0 +1,95 @@
+msgid "IDS_TASKMGR_BODY_APPLICATION"
+msgstr "Toepassing"
+
+msgid "IDS_TASKMGR_BUTTON_CLEAR_ALL"
+msgstr "Wis alles"
+
+msgid "IDS_TASKMGR_HEADER_TASK_SWITCHER"
+msgstr "Taak afwisselen"
+
+msgid "IDS_TASKMGR_POP_CLEARING_HISTORY_ING"
+msgstr "Geschiedenis wissen..."
+
+msgid "IDS_TASKMGR_POP_EXITING_APPLICATIONS_ING"
+msgstr "Toepassingen afsluiten..."
+
+msgid "IDS_TASKMGR_POP_EXITING_APPLICATION_ING"
+msgstr "Toepassing afsluiten..."
+
+msgid "IDS_TASKMGR_POP_EXIT_ALL_APPLICATIONS_Q"
+msgstr "Alle toepassingen sluiten?"
+
+msgid "IDS_TASKMGR_POP_EXIT_APPLICATION_Q"
+msgstr "Toepassing afsluiten?"
+
+msgid "IDS_TASKMGR_POP_NO_APPLICATIONS_RUNNING"
+msgstr "Geen actieve applicaties"
+
+msgid "IDS_TASKMGR_POP_NO_HISTORY_TO_CLEAR"
+msgstr "Geen geschiedenis om te wissen"
+
+msgid "IDS_COM_BODY_END"
+msgstr "Stop"
+
+msgid "IDS_COM_OPT_DELETE"
+msgstr "Wissen"
+
+msgid "IDS_COM_POP_CANCEL"
+msgstr "Annuleer"
+
+msgid "IDS_COM_SK3_END_ALL_APPLICATIONS"
+msgstr "Alles afsluiten"
+
+msgid "IDS_BMG_POP_NO_TASKS"
+msgstr "Geen taken"
+
+msgid "IDS_ST_BODY_IN_USE"
+msgstr "In gebruik"
+
+msgid "IDS_MUSIC_OPT_HISTORY"
+msgstr "Geschiedenis"
+
+msgid "IDS_TASKMGR_NO_RUNNING_TASK"
+msgstr "No running task"
+
+msgid "IDS_TASKMGR_NO_TASK_HISTORY"
+msgstr "No task history"
+
+msgid "IDS_TASKMGR_CANNOT_LAUNCH_APPLICATION"
+msgstr "Cannot launch application"
+
+msgid "IDS_TASKMGR_END_ALL_TASKS"
+msgstr "End all tasks"
+
+msgid "IDS_TASKMGR_DELETE_ALL_HISTORY"
+msgstr "Delete all history"
+
+msgid "IDS_TASKMGR_INFO_MESSAGE"
+msgstr "Select a task which you wish to return to from a task list."
+
+msgid "IDS_TASKMGR_WARNNING_TERMINATE_ALL_TASKS"
+msgstr "Terminate all tasks?<br><br>This may cause data loss!"
+
+msgid "IDS_TASKMGR_ASK_TERMINATE_TASK"
+msgstr "Are you sure to terminate<br> %s task?<br><br>This may cause data loss!"
+
+msgid "IDS_TASKMGR_ASK_CLEAR_HISTORY"
+msgstr "Are you sure to clear<br> %s history?"
+
+msgid "IDS_TASKMGR_DELETING_HISTORY"
+msgstr "Deleting history!"
+
+msgid "IDS_TASKMGR_ASK_DELETE_ALL_HISTORY"
+msgstr "Delete all task history?"
+
+msgid "IDS_TASKMGR_TERMINATING_TASK"
+msgstr "Terminating task!"
+
+msgid "IDS_TASKMGR_TERMINATING_ALL_TASKS"
+msgstr "Terminating all tasks!"
+
+msgid "IDS_TASKMGR_NO_TASK_TO_TERMINATE"
+msgstr "No task to terminate!"
+
+msgid "IDS_TASKMGR_NO_TASK"
+msgstr "No task"
diff --git a/po/pt.po b/po/pt.po
new file mode 100644
index 0000000..cf5c5fe
--- /dev/null
+++ b/po/pt.po
@@ -0,0 +1,95 @@
+msgid "IDS_TASKMGR_BODY_APPLICATION"
+msgstr "Aplicação"
+
+msgid "IDS_TASKMGR_BUTTON_CLEAR_ALL"
+msgstr "Limpar tudo"
+
+msgid "IDS_TASKMGR_HEADER_TASK_SWITCHER"
+msgstr "Comutador de tarefas"
+
+msgid "IDS_TASKMGR_POP_CLEARING_HISTORY_ING"
+msgstr "A limpar histórico..."
+
+msgid "IDS_TASKMGR_POP_EXITING_APPLICATIONS_ING"
+msgstr "A sair das aplicações..."
+
+msgid "IDS_TASKMGR_POP_EXITING_APPLICATION_ING"
+msgstr "A sair da aplicação..."
+
+msgid "IDS_TASKMGR_POP_EXIT_ALL_APPLICATIONS_Q"
+msgstr "Sair de todas as aplicações?"
+
+msgid "IDS_TASKMGR_POP_EXIT_APPLICATION_Q"
+msgstr "Sair da aplicação?"
+
+msgid "IDS_TASKMGR_POP_NO_APPLICATIONS_RUNNING"
+msgstr "Nenhumas aplicações a serem executadas"
+
+msgid "IDS_TASKMGR_POP_NO_HISTORY_TO_CLEAR"
+msgstr "Nenhum histórico para limpar"
+
+msgid "IDS_COM_BODY_END"
+msgstr "Terminar"
+
+msgid "IDS_COM_OPT_DELETE"
+msgstr "Eliminar"
+
+msgid "IDS_COM_POP_CANCEL"
+msgstr "Cancelar"
+
+msgid "IDS_COM_SK3_END_ALL_APPLICATIONS"
+msgstr "Term. tds aplic."
+
+msgid "IDS_BMG_POP_NO_TASKS"
+msgstr "Sem tarefas"
+
+msgid "IDS_ST_BODY_IN_USE"
+msgstr "Em utilização"
+
+msgid "IDS_MUSIC_OPT_HISTORY"
+msgstr "Histórico"
+
+msgid "IDS_TASKMGR_NO_RUNNING_TASK"
+msgstr "No running task"
+
+msgid "IDS_TASKMGR_NO_TASK_HISTORY"
+msgstr "No task history"
+
+msgid "IDS_TASKMGR_CANNOT_LAUNCH_APPLICATION"
+msgstr "Cannot launch application"
+
+msgid "IDS_TASKMGR_END_ALL_TASKS"
+msgstr "End all tasks"
+
+msgid "IDS_TASKMGR_DELETE_ALL_HISTORY"
+msgstr "Delete all history"
+
+msgid "IDS_TASKMGR_INFO_MESSAGE"
+msgstr "Select a task which you wish to return to from a task list."
+
+msgid "IDS_TASKMGR_WARNNING_TERMINATE_ALL_TASKS"
+msgstr "Terminate all tasks?<br><br>This may cause data loss!"
+
+msgid "IDS_TASKMGR_ASK_TERMINATE_TASK"
+msgstr "Are you sure to terminate<br> %s task?<br><br>This may cause data loss!"
+
+msgid "IDS_TASKMGR_ASK_CLEAR_HISTORY"
+msgstr "Are you sure to clear<br> %s history?"
+
+msgid "IDS_TASKMGR_DELETING_HISTORY"
+msgstr "Deleting history!"
+
+msgid "IDS_TASKMGR_ASK_DELETE_ALL_HISTORY"
+msgstr "Delete all task history?"
+
+msgid "IDS_TASKMGR_TERMINATING_TASK"
+msgstr "Terminating task!"
+
+msgid "IDS_TASKMGR_TERMINATING_ALL_TASKS"
+msgstr "Terminating all tasks!"
+
+msgid "IDS_TASKMGR_NO_TASK_TO_TERMINATE"
+msgstr "No task to terminate!"
+
+msgid "IDS_TASKMGR_NO_TASK"
+msgstr "No task"
diff --git a/po/ru.po b/po/ru.po
new file mode 100644
index 0000000..cc8d4c5
--- /dev/null
+++ b/po/ru.po
@@ -0,0 +1,95 @@
+msgid "IDS_TASKMGR_BODY_APPLICATION"
+msgstr "Приложение"
+
+msgid "IDS_TASKMGR_BUTTON_CLEAR_ALL"
+msgstr "Очистить все"
+
+msgid "IDS_TASKMGR_HEADER_TASK_SWITCHER"
+msgstr "Диспетчер задач"
+
+msgid "IDS_TASKMGR_POP_CLEARING_HISTORY_ING"
+msgstr "Очистка журнала..."
+
+msgid "IDS_TASKMGR_POP_EXITING_APPLICATIONS_ING"
+msgstr "Закрытие приложений..."
+
+msgid "IDS_TASKMGR_POP_EXITING_APPLICATION_ING"
+msgstr "Закрытие приложения..."
+
+msgid "IDS_TASKMGR_POP_EXIT_ALL_APPLICATIONS_Q"
+msgstr "Закрыть все приложения?"
+
+msgid "IDS_TASKMGR_POP_EXIT_APPLICATION_Q"
+msgstr "Выйти из приложения?"
+
+msgid "IDS_TASKMGR_POP_NO_APPLICATIONS_RUNNING"
+msgstr "Приложения не запущены"
+
+msgid "IDS_TASKMGR_POP_NO_HISTORY_TO_CLEAR"
+msgstr "Нет журнала для удаления"
+
+msgid "IDS_COM_BODY_END"
+msgstr "Завершить"
+
+msgid "IDS_COM_OPT_DELETE"
+msgstr "Удалить"
+
+msgid "IDS_COM_POP_CANCEL"
+msgstr "Отмена"
+
+msgid "IDS_COM_SK3_END_ALL_APPLICATIONS"
+msgstr "Закрыть все"
+
+msgid "IDS_BMG_POP_NO_TASKS"
+msgstr "Нет задач"
+
+msgid "IDS_ST_BODY_IN_USE"
+msgstr "Используется"
+
+msgid "IDS_MUSIC_OPT_HISTORY"
+msgstr "Журнал"
+
+msgid "IDS_TASKMGR_NO_RUNNING_TASK"
+msgstr "No running task"
+
+msgid "IDS_TASKMGR_NO_TASK_HISTORY"
+msgstr "No task history"
+
+msgid "IDS_TASKMGR_CANNOT_LAUNCH_APPLICATION"
+msgstr "Cannot launch application"
+
+msgid "IDS_TASKMGR_END_ALL_TASKS"
+msgstr "End all tasks"
+
+msgid "IDS_TASKMGR_DELETE_ALL_HISTORY"
+msgstr "Delete all history"
+
+msgid "IDS_TASKMGR_INFO_MESSAGE"
+msgstr "Select a task which you wish to return to from a task list."
+
+msgid "IDS_TASKMGR_WARNNING_TERMINATE_ALL_TASKS"
+msgstr "Terminate all tasks?<br><br>This may cause data loss!"
+
+msgid "IDS_TASKMGR_ASK_TERMINATE_TASK"
+msgstr "Are you sure to terminate<br> %s task?<br><br>This may cause data loss!"
+
+msgid "IDS_TASKMGR_ASK_CLEAR_HISTORY"
+msgstr "Are you sure to clear<br> %s history?"
+
+msgid "IDS_TASKMGR_DELETING_HISTORY"
+msgstr "Deleting history!"
+
+msgid "IDS_TASKMGR_ASK_DELETE_ALL_HISTORY"
+msgstr "Delete all task history?"
+
+msgid "IDS_TASKMGR_TERMINATING_TASK"
+msgstr "Terminating task!"
+
+msgid "IDS_TASKMGR_TERMINATING_ALL_TASKS"
+msgstr "Terminating all tasks!"
+
+msgid "IDS_TASKMGR_NO_TASK_TO_TERMINATE"
+msgstr "No task to terminate!"
+
+msgid "IDS_TASKMGR_NO_TASK"
+msgstr "No task"
diff --git a/po/taskmgr.pot b/po/taskmgr.pot
new file mode 100644
index 0000000..54670e3
--- /dev/null
+++ b/po/taskmgr.pot
@@ -0,0 +1,58 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2011-11-23 18:20+0900\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: _genlist.c:153
+#, c-format
+msgid "IDS_TASKMGR_WARNNING_TERMINATE_ALL_TASKS"
+msgstr ""
+
+#: _genlist.c:170
+#, c-format
+msgid "IDS_TASKMGR_ASK_DELETE_ALL_HISTORY"
+msgstr ""
+
+#: _genlist.c:186
+#, c-format
+msgid "IDS_TASKMGR_ASK_TERMINATE_TASK"
+msgstr ""
+
+#: _genlist.c:203
+#, c-format
+msgid "IDS_TASKMGR_ASK_CLEAR_HISTORY"
+msgstr ""
+
+#: _genlist.c:264
+msgid "IDS_TASKMGR_CANNOT_LAUNCH_APPLICATION"
+msgstr ""
+
+#: _info.c:122
+msgid "IDS_TASKMGR_INFO_MESSAGE"
+msgstr ""
+
+#: _logic.c:150
+msgid "IDS_TASKMGR_HEADER_TASK_SWITCHER"
+msgstr ""
+
+#: _util_efl.c:181
+msgid "Warning!"
+msgstr ""
+
+#: _util_efl.c:184
+msgid "IDS_COM_POP_CANCEL"
+msgstr ""
diff --git a/po/tr_TR.po b/po/tr_TR.po
new file mode 100644
index 0000000..8c0918a
--- /dev/null
+++ b/po/tr_TR.po
@@ -0,0 +1,95 @@
+msgid "IDS_TASKMGR_BODY_APPLICATION"
+msgstr "Uygulama"
+
+msgid "IDS_TASKMGR_BUTTON_CLEAR_ALL"
+msgstr "Tümünü sil"
+
+msgid "IDS_TASKMGR_HEADER_TASK_SWITCHER"
+msgstr "Görev değiştirici"
+
+msgid "IDS_TASKMGR_POP_CLEARING_HISTORY_ING"
+msgstr "Geçmiş siliniyor..."
+
+msgid "IDS_TASKMGR_POP_EXITING_APPLICATIONS_ING"
+msgstr "Uygulamalardan çıkılıyor..."
+
+msgid "IDS_TASKMGR_POP_EXITING_APPLICATION_ING"
+msgstr "Uygulamadan çıkılıyor..."
+
+msgid "IDS_TASKMGR_POP_EXIT_ALL_APPLICATIONS_Q"
+msgstr "Tüm uygulamalardan çıkılsın mı?"
+
+msgid "IDS_TASKMGR_POP_EXIT_APPLICATION_Q"
+msgstr "Uygulamadan çıkılsın mı?"
+
+msgid "IDS_TASKMGR_POP_NO_APPLICATIONS_RUNNING"
+msgstr "Çalışan uygulama yok"
+
+msgid "IDS_TASKMGR_POP_NO_HISTORY_TO_CLEAR"
+msgstr "Silinecek geçmiş yok"
+
+msgid "IDS_COM_BODY_END"
+msgstr "Bitir"
+
+msgid "IDS_COM_OPT_DELETE"
+msgstr "Sil"
+
+msgid "IDS_COM_POP_CANCEL"
+msgstr "İptal"
+
+msgid "IDS_COM_SK3_END_ALL_APPLICATIONS"
+msgstr "Tümünü sonlandır"
+
+msgid "IDS_BMG_POP_NO_TASKS"
+msgstr "Görev yok"
+
+msgid "IDS_ST_BODY_IN_USE"
+msgstr "Kullanımda"
+
+msgid "IDS_MUSIC_OPT_HISTORY"
+msgstr "Geçmiş"
+
+msgid "IDS_TASKMGR_NO_RUNNING_TASK"
+msgstr "No running task"
+
+msgid "IDS_TASKMGR_NO_TASK_HISTORY"
+msgstr "No task history"
+
+msgid "IDS_TASKMGR_CANNOT_LAUNCH_APPLICATION"
+msgstr "Cannot launch application"
+
+msgid "IDS_TASKMGR_END_ALL_TASKS"
+msgstr "End all tasks"
+
+msgid "IDS_TASKMGR_DELETE_ALL_HISTORY"
+msgstr "Delete all history"
+
+msgid "IDS_TASKMGR_INFO_MESSAGE"
+msgstr "Select a task which you wish to return to from a task list."
+
+msgid "IDS_TASKMGR_WARNNING_TERMINATE_ALL_TASKS"
+msgstr "Terminate all tasks?<br><br>This may cause data loss!"
+
+msgid "IDS_TASKMGR_ASK_TERMINATE_TASK"
+msgstr "Are you sure to terminate<br> %s task?<br><br>This may cause data loss!"
+
+msgid "IDS_TASKMGR_ASK_CLEAR_HISTORY"
+msgstr "Are you sure to clear<br> %s history?"
+
+msgid "IDS_TASKMGR_DELETING_HISTORY"
+msgstr "Deleting history!"
+
+msgid "IDS_TASKMGR_ASK_DELETE_ALL_HISTORY"
+msgstr "Delete all task history?"
+
+msgid "IDS_TASKMGR_TERMINATING_TASK"
+msgstr "Terminating task!"
+
+msgid "IDS_TASKMGR_TERMINATING_ALL_TASKS"
+msgstr "Terminating all tasks!"
+
+msgid "IDS_TASKMGR_NO_TASK_TO_TERMINATE"
+msgstr "No task to terminate!"
+
+msgid "IDS_TASKMGR_NO_TASK"
+msgstr "No task"
diff --git a/po/update-po.sh b/po/update-po.sh
new file mode 100755
index 0000000..1869cbd
--- /dev/null
+++ b/po/update-po.sh
@@ -0,0 +1,57 @@
+#!/bin/sh
+
+PACKAGE=taskmgr
+SRCROOT=../src
+POTFILES=POTFILES.in
+
+#ALL_LINGUAS= am az be ca cs da de el en_CA en_GB es et fi fr hr hu it ja ko lv mk ml ms nb ne nl pa pl pt pt_BR ru rw sk sl sr sr@Latn sv ta tr uk vi zh_CN zh_TW
+ALL_LINGUAS="en_US en_GB ja ko zh_CN"
+
+XGETTEXT=/usr/bin/xgettext
+MSGMERGE=/usr/bin/msgmerge
+
+echo -n "Make ${PACKAGE}.pot "
+if [ ! -e $POTFILES ] ; then
+ echo "$POTFILES not found"
+ exit 1
+fi
+
+$XGETTEXT --default-domain=${PACKAGE} --directory=${SRCROOT} \
+ --add-comments --keyword=_ --keyword=N_ --files-from=$POTFILES \
+&& test ! -f ${PACKAGE}.po \
+ || (rm -f ${PACKAGE}.pot && mv ${PACKAGE}.po ${PACKAGE}.pot)
+
+if [ $? -ne 0 ]; then
+ echo "error"
+ exit 1
+else
+ echo "done"
+fi
+
+for LANG in $ALL_LINGUAS; do
+ echo "$LANG : "
+
+ if [ ! -e $LANG.po ] ; then
+ cp ${PACKAGE}.pot ${LANG}.po
+ echo "${LANG}.po created"
+ else
+ if $MSGMERGE ${LANG}.po ${PACKAGE}.pot -o ${LANG}.new.po ; then
+ if cmp ${LANG}.po ${LANG}.new.po > /dev/null 2>&1; then
+ rm -f ${LANG}.new.po
+ else
+ if mv -f ${LANG}.new.po ${LANG}.po; then
+ echo ""
+ else
+ echo "msgmerge for $LANG.po failed: cannot move $LANG.new.po to $LANG.po" 1>&2
+ rm -f ${LANG}.new.po
+ exit 1
+ fi
+ fi
+ else
+ echo "msgmerge for $LANG failed!"
+ rm -f ${LANG}.new.po
+ fi
+ fi
+ echo ""
+done
+
diff --git a/po/zh_CN.po b/po/zh_CN.po
new file mode 100644
index 0000000..a837db1
--- /dev/null
+++ b/po/zh_CN.po
@@ -0,0 +1,95 @@
+msgid "IDS_TASKMGR_BODY_APPLICATION"
+msgstr "软件"
+
+msgid "IDS_TASKMGR_BUTTON_CLEAR_ALL"
+msgstr "全部清除"
+
+msgid "IDS_TASKMGR_HEADER_TASK_SWITCHER"
+msgstr "任务切换器"
+
+msgid "IDS_TASKMGR_POP_CLEARING_HISTORY_ING"
+msgstr "正在清除历史记录…"
+
+msgid "IDS_TASKMGR_POP_EXITING_APPLICATIONS_ING"
+msgstr "正在退出应用程序?"
+
+msgid "IDS_TASKMGR_POP_EXITING_APPLICATION_ING"
+msgstr "正在退出应用程序?"
+
+msgid "IDS_TASKMGR_POP_EXIT_ALL_APPLICATIONS_Q"
+msgstr "退出全部应用程序?"
+
+msgid "IDS_TASKMGR_POP_EXIT_APPLICATION_Q"
+msgstr "退出应用程序?"
+
+msgid "IDS_TASKMGR_POP_NO_APPLICATIONS_RUNNING"
+msgstr "没有运行中应用程序"
+
+msgid "IDS_TASKMGR_POP_NO_HISTORY_TO_CLEAR"
+msgstr "没有可清除的历史记录"
+
+msgid "IDS_COM_BODY_END"
+msgstr "结束"
+
+msgid "IDS_COM_OPT_DELETE"
+msgstr "删除"
+
+msgid "IDS_COM_POP_CANCEL"
+msgstr "取消"
+
+msgid "IDS_COM_SK3_END_ALL_APPLICATIONS"
+msgstr "结束所有的程序"
+
+msgid "IDS_BMG_POP_NO_TASKS"
+msgstr "没有任务"
+
+msgid "IDS_ST_BODY_IN_USE"
+msgstr "使用中"
+
+msgid "IDS_MUSIC_OPT_HISTORY"
+msgstr "历史记录"
+
+msgid "IDS_TASKMGR_NO_RUNNING_TASK"
+msgstr "No running task"
+
+msgid "IDS_TASKMGR_NO_TASK_HISTORY"
+msgstr "No task history"
+
+msgid "IDS_TASKMGR_CANNOT_LAUNCH_APPLICATION"
+msgstr "Cannot launch application"
+
+msgid "IDS_TASKMGR_END_ALL_TASKS"
+msgstr "End all tasks"
+
+msgid "IDS_TASKMGR_DELETE_ALL_HISTORY"
+msgstr "Delete all history"
+
+msgid "IDS_TASKMGR_INFO_MESSAGE"
+msgstr "Select a task which you wish to return to from a task list."
+
+msgid "IDS_TASKMGR_WARNNING_TERMINATE_ALL_TASKS"
+msgstr "Terminate all tasks?<br><br>This may cause data loss!"
+
+msgid "IDS_TASKMGR_ASK_TERMINATE_TASK"
+msgstr "Are you sure to terminate<br> %s task?<br><br>This may cause data loss!"
+
+msgid "IDS_TASKMGR_ASK_CLEAR_HISTORY"
+msgstr "Are you sure to clear<br> %s history?"
+
+msgid "IDS_TASKMGR_DELETING_HISTORY"
+msgstr "Deleting history!"
+
+msgid "IDS_TASKMGR_ASK_DELETE_ALL_HISTORY"
+msgstr "Delete all task history?"
+
+msgid "IDS_TASKMGR_TERMINATING_TASK"
+msgstr "Terminating task!"
+
+msgid "IDS_TASKMGR_TERMINATING_ALL_TASKS"
+msgstr "Terminating all tasks!"
+
+msgid "IDS_TASKMGR_NO_TASK_TO_TERMINATE"
+msgstr "No task to terminate!"
+
+msgid "IDS_TASKMGR_NO_TASK"
+msgstr "No task"
diff --git a/po/zh_HK.po b/po/zh_HK.po
new file mode 100644
index 0000000..44f6ec4
--- /dev/null
+++ b/po/zh_HK.po
@@ -0,0 +1,95 @@
+msgid "IDS_TASKMGR_BODY_APPLICATION"
+msgstr "應用程式"
+
+msgid "IDS_TASKMGR_BUTTON_CLEAR_ALL"
+msgstr "全部清除"
+
+msgid "IDS_TASKMGR_HEADER_TASK_SWITCHER"
+msgstr "工作切換器"
+
+msgid "IDS_TASKMGR_POP_CLEARING_HISTORY_ING"
+msgstr "正在清除歷史記錄..."
+
+msgid "IDS_TASKMGR_POP_EXITING_APPLICATIONS_ING"
+msgstr "正在退出應用程式..."
+
+msgid "IDS_TASKMGR_POP_EXITING_APPLICATION_ING"
+msgstr "正在退出應用程式..."
+
+msgid "IDS_TASKMGR_POP_EXIT_ALL_APPLICATIONS_Q"
+msgstr "退出所有應用程式?"
+
+msgid "IDS_TASKMGR_POP_EXIT_APPLICATION_Q"
+msgstr "要退出應用程式嗎?"
+
+msgid "IDS_TASKMGR_POP_NO_APPLICATIONS_RUNNING"
+msgstr "沒有執行中的應用程式"
+
+msgid "IDS_TASKMGR_POP_NO_HISTORY_TO_CLEAR"
+msgstr "沒有要清除的歷史記錄"
+
+msgid "IDS_COM_BODY_END"
+msgstr "結束"
+
+msgid "IDS_COM_OPT_DELETE"
+msgstr "刪除"
+
+msgid "IDS_COM_POP_CANCEL"
+msgstr "取消"
+
+msgid "IDS_COM_SK3_END_ALL_APPLICATIONS"
+msgstr "結束全部應用程式"
+
+msgid "IDS_BMG_POP_NO_TASKS"
+msgstr "無工作"
+
+msgid "IDS_ST_BODY_IN_USE"
+msgstr "使用中"
+
+msgid "IDS_MUSIC_OPT_HISTORY"
+msgstr "歷程記錄"
+
+msgid "IDS_TASKMGR_NO_RUNNING_TASK"
+msgstr "No running task"
+
+msgid "IDS_TASKMGR_NO_TASK_HISTORY"
+msgstr "No task history"
+
+msgid "IDS_TASKMGR_CANNOT_LAUNCH_APPLICATION"
+msgstr "Cannot launch application"
+
+msgid "IDS_TASKMGR_END_ALL_TASKS"
+msgstr "End all tasks"
+
+msgid "IDS_TASKMGR_DELETE_ALL_HISTORY"
+msgstr "Delete all history"
+
+msgid "IDS_TASKMGR_INFO_MESSAGE"
+msgstr "Select a task which you wish to return to from a task list."
+
+msgid "IDS_TASKMGR_WARNNING_TERMINATE_ALL_TASKS"
+msgstr "Terminate all tasks?<br><br>This may cause data loss!"
+
+msgid "IDS_TASKMGR_ASK_TERMINATE_TASK"
+msgstr "Are you sure to terminate<br> %s task?<br><br>This may cause data loss!"
+
+msgid "IDS_TASKMGR_ASK_CLEAR_HISTORY"
+msgstr "Are you sure to clear<br> %s history?"
+
+msgid "IDS_TASKMGR_DELETING_HISTORY"
+msgstr "Deleting history!"
+
+msgid "IDS_TASKMGR_ASK_DELETE_ALL_HISTORY"
+msgstr "Delete all task history?"
+
+msgid "IDS_TASKMGR_TERMINATING_TASK"
+msgstr "Terminating task!"
+
+msgid "IDS_TASKMGR_TERMINATING_ALL_TASKS"
+msgstr "Terminating all tasks!"
+
+msgid "IDS_TASKMGR_NO_TASK_TO_TERMINATE"
+msgstr "No task to terminate!"
+
+msgid "IDS_TASKMGR_NO_TASK"
+msgstr "No task"
diff --git a/po/zh_TW.po b/po/zh_TW.po
new file mode 100644
index 0000000..2c52289
--- /dev/null
+++ b/po/zh_TW.po
@@ -0,0 +1,95 @@
+msgid "IDS_TASKMGR_BODY_APPLICATION"
+msgstr "應用程式"
+
+msgid "IDS_TASKMGR_BUTTON_CLEAR_ALL"
+msgstr "全部清除"
+
+msgid "IDS_TASKMGR_HEADER_TASK_SWITCHER"
+msgstr "程式切換"
+
+msgid "IDS_TASKMGR_POP_CLEARING_HISTORY_ING"
+msgstr "清除歷程…"
+
+msgid "IDS_TASKMGR_POP_EXITING_APPLICATIONS_ING"
+msgstr "退出應用程式..."
+
+msgid "IDS_TASKMGR_POP_EXITING_APPLICATION_ING"
+msgstr "退出應用程式..."
+
+msgid "IDS_TASKMGR_POP_EXIT_ALL_APPLICATIONS_Q"
+msgstr "退出所有應用程式"
+
+msgid "IDS_TASKMGR_POP_EXIT_APPLICATION_Q"
+msgstr "要退出應用程式嗎?"
+
+msgid "IDS_TASKMGR_POP_NO_APPLICATIONS_RUNNING"
+msgstr "沒有執行的應用程式"
+
+msgid "IDS_TASKMGR_POP_NO_HISTORY_TO_CLEAR"
+msgstr "沒有歷程可被清除"
+
+msgid "IDS_COM_BODY_END"
+msgstr "結束"
+
+msgid "IDS_COM_OPT_DELETE"
+msgstr "刪除"
+
+msgid "IDS_COM_POP_CANCEL"
+msgstr "取消"
+
+msgid "IDS_COM_SK3_END_ALL_APPLICATIONS"
+msgstr "結束所有應用程式"
+
+msgid "IDS_BMG_POP_NO_TASKS"
+msgstr "沒有任務"
+
+msgid "IDS_ST_BODY_IN_USE"
+msgstr "使用中"
+
+msgid "IDS_MUSIC_OPT_HISTORY"
+msgstr "歷程記錄"
+
+msgid "IDS_TASKMGR_NO_RUNNING_TASK"
+msgstr "No running task"
+
+msgid "IDS_TASKMGR_NO_TASK_HISTORY"
+msgstr "No task history"
+
+msgid "IDS_TASKMGR_CANNOT_LAUNCH_APPLICATION"
+msgstr "Cannot launch application"
+
+msgid "IDS_TASKMGR_END_ALL_TASKS"
+msgstr "End all tasks"
+
+msgid "IDS_TASKMGR_DELETE_ALL_HISTORY"
+msgstr "Delete all history"
+
+msgid "IDS_TASKMGR_INFO_MESSAGE"
+msgstr "Select a task which you wish to return to from a task list."
+
+msgid "IDS_TASKMGR_WARNNING_TERMINATE_ALL_TASKS"
+msgstr "Terminate all tasks?<br><br>This may cause data loss!"
+
+msgid "IDS_TASKMGR_ASK_TERMINATE_TASK"
+msgstr "Are you sure to terminate<br> %s task?<br><br>This may cause data loss!"
+
+msgid "IDS_TASKMGR_ASK_CLEAR_HISTORY"
+msgstr "Are you sure to clear<br> %s history?"
+
+msgid "IDS_TASKMGR_DELETING_HISTORY"
+msgstr "Deleting history!"
+
+msgid "IDS_TASKMGR_ASK_DELETE_ALL_HISTORY"
+msgstr "Delete all task history?"
+
+msgid "IDS_TASKMGR_TERMINATING_TASK"
+msgstr "Terminating task!"
+
+msgid "IDS_TASKMGR_TERMINATING_ALL_TASKS"
+msgstr "Terminating all tasks!"
+
+msgid "IDS_TASKMGR_NO_TASK_TO_TERMINATE"
+msgstr "No task to terminate!"
+
+msgid "IDS_TASKMGR_NO_TASK"
+msgstr "No task"
diff --git a/src/_cpu.c b/src/_cpu.c
new file mode 100644
index 0000000..1d89737
--- /dev/null
+++ b/src/_cpu.c
@@ -0,0 +1,104 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 <unistd.h>
+#include <stdio.h>
+#include <sys/time.h>
+
+#include "_util_log.h"
+#include "_cpu.h"
+
+int _get_sysconf(int *ncpu, long *tick)
+{
+ *ncpu = sysconf(_SC_NPROCESSORS_ONLN);
+ *ncpu = *ncpu < 1 ? 1 : *ncpu;
+ *tick = sysconf(_SC_CLK_TCK);
+ return 0;
+}
+
+int _get_stat_info(pid_t pid, unsigned int *ut, unsigned int *st)
+{
+ FILE *fp;
+ char buf[128] = {0, };
+ unsigned long cutime, cstime;
+ int i;
+
+ snprintf(buf, sizeof(buf), "/proc/%d/stat", (int)pid);
+
+ *ut = *st = 0;
+ cutime = cstime = 0;
+ fp = fopen(buf, "r");
+ if (fp) {
+ retvm_if(fp == NULL, -1, "Failed to open %s\n", buf);
+ fscanf(fp, "%*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %lu %lu %ld %ld",
+ ut, st, &cutime, &cstime);
+ *ut += cutime;
+ *st += cstime;
+ fclose(fp);
+
+ return 0;
+ }
+ return -1;
+}
+
+double _get_cpu_ratio(void *data, int ncpu, long tick)
+{
+ struct _task_info *tinfo = (struct _task_info *)data;
+ unsigned int utime, stime;
+ struct timeval timev;
+ double usr, sys;
+ int r;
+ unsigned long long jiffy;
+
+ retvm_if(tinfo == NULL, -1, "Invalid argument: tinfo is NULL\n");
+
+ utime = 0;
+ stime = 0;
+ r = _get_stat_info(tinfo->pid, &utime, &stime);
+ if (r < 0) {
+ _D("failed\n");
+ return 0;
+ }
+ /* retvm_if(r < 0, -1, "Failed to get stat info\n"); */
+
+ gettimeofday(&timev, NULL);
+ jiffy = (timev.tv_sec - tinfo->oldtimev.tv_sec) * tick +
+ ((timev.tv_usec - tinfo->oldtimev.tv_usec) * tick) / 1000000;
+
+ if(utime >= tinfo->oldutime) {
+ usr = ((double)(utime - tinfo->oldutime) * 100 / jiffy) / ncpu;
+ } else {
+ usr = 0.0;
+ }
+ if(stime >= tinfo->oldstime) {
+ sys = ((double)(stime - tinfo->oldstime) * 100 / jiffy) / ncpu;
+ } else {
+ sys = 0.0;
+ }
+
+ /* _D("per:%lf] %lf %lf/ %u %u/ %u %u/ %u\n",
+ usr+sys, usr, sys, utime, stime, tinfo->oldutime, tinfo->oldstime, jiffy);
+ */
+
+ tinfo->oldutime = utime;
+ tinfo->oldstime = stime;
+ tinfo->oldtimev = timev;
+
+ return usr + sys;
+}
+
+
diff --git a/src/_cpu.h b/src/_cpu.h
new file mode 100644
index 0000000..11171d8
--- /dev/null
+++ b/src/_cpu.h
@@ -0,0 +1,27 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 __TASKMANAGER_CPU_H__
+#define __TASKMANAGER_CPU_H__
+
+#include "taskmanager.h"
+
+int _get_sysconf(int *ncpu, long *tick);
+double _get_cpu_ratio(void *data, int ncpu, long tick);
+
+#endif
+/* __TASKMANAGER_CPU_H__ */
diff --git a/src/_eina.c b/src/_eina.c
new file mode 100644
index 0000000..6a0ed22
--- /dev/null
+++ b/src/_eina.c
@@ -0,0 +1,304 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+
+#include <Eina.h>
+#include <ail.h>
+#include <aul.h>
+#include <rua.h>
+
+#include "taskmanager.h"
+#include "_util_log.h"
+
+#define TASKMANAGER_ICON_NAME "org.tizen.taskmgr.png"
+
+static int grp_cnt[TS_MAX];
+
+void _init_grp_cnt(void)
+{
+ int i;
+
+ for(i = 0; i < TS_MAX; i++) {
+ grp_cnt[i] = 0;
+ }
+}
+
+int _get_grp_cnt(int which)
+{
+ return grp_cnt[which];
+}
+
+int runapp_info_get(const aul_app_info *ainfo, void *data)
+{
+ ail_appinfo_h handle;
+ ail_error_e ret;
+
+ int i;
+ int vali;
+ char *valc;
+ bool valb;
+ char *icn_path;
+ char buf[1024] = { 0, };
+ struct appdata *ad = data;
+ struct _task_info *info;
+ float usr = 0.0, sys = 0.0;
+
+ retvm_if(ainfo == NULL, -1, "Invalid argument: ainfo is NULL\n");
+ retvm_if(data == NULL, -1, "Invalid argument: data is NULL\n");
+
+ retvm_if(ainfo->pid <= 0, -1, "Invalid pid(%u)\n", ainfo->pid);
+
+ /* filtering */
+ if (ainfo->pid == getpid()) {
+ return 0;
+ }
+
+ retvm_if(ainfo->pkg_name == NULL, 0, "Invalid pkg_name(%s)\n", ainfo->pkg_name);
+
+// _D("running app is (%s)\n", ainfo->pkg_name);
+ ret = ail_package_get_appinfo(ainfo->pkg_name, &handle);
+ retvm_if(ret != AIL_ERROR_OK, -1,
+ "Failed to get appinfo, pkg_name:%s\n", ainfo->pkg_name);
+
+ ret = ail_appinfo_get_bool(handle, AIL_PROP_X_SLP_TASKMANAGE_BOOL, &valb);
+ if (valb == 0) {
+ goto exit;
+ }
+ info = calloc(1, sizeof(struct _task_info));
+ if (info == NULL) {
+ _E("Failed to calloc task_info\n");
+ goto exit;
+ }
+ info->pkg_name = strdup(ainfo->pkg_name);
+
+ ret = ail_appinfo_get_str(handle, AIL_PROP_NAME_STR, &valc);
+ if (valc == NULL) {
+ _D("%s: Failed to get ail name\n", ainfo->pkg_name);
+ valc = "Unknown";
+ }
+ info->app_name = strdup(valc);
+
+ ret = ail_appinfo_get_str(handle, AIL_PROP_ICON_STR, &valc);
+ if (valc == NULL || (ecore_file_exists(valc) == EINA_FALSE)) {
+ _D("%s: Failed to get ail icon\n", ainfo->pkg_name);
+ valc = TASKMANAGER_ICON_NAME;
+ }
+
+ snprintf(buf, sizeof(buf), "%s", valc);
+ info->icn_path = strdup(buf);
+// _D("get app name[%s] set [%s], icon path[%s]\n", ainfo->pkg_name, info->app_name, buf);
+
+ info->ad = ad;
+ info->pid = ainfo->pid;
+ info->category = TS_INUSE;
+// info->mem_total = ad->mem_total;
+ _D("%s/pid(%d)\n", info->app_name, info->pid);
+
+ ad->applist[TS_INUSE] = eina_list_prepend(ad->applist[TS_INUSE], info);
+ grp_cnt[TS_INUSE]++;
+
+ exit:
+ ret = ail_package_destroy_appinfo(handle);
+ retvm_if(ret != AIL_ERROR_OK, -1, "Failed to destroy appinfo\n");
+ return 0;
+}
+
+int taskmanager_get_history_app_info(void *data)
+{
+ struct appdata *ad = data;
+ struct _task_info *info, *info_r;
+ Eina_List *l_r;
+ int flag = 0;
+
+ struct rua_rec rec_result = { 0, };
+ char *val;
+ char **table = NULL;
+ char buf[1024] = { 0, };
+ int nrows = 0, ncols = 0;
+ int row = 0;
+ int i, cnt;
+
+ ail_appinfo_h handle;
+ ail_error_e ret;
+ bool valb;
+ char *valc;
+ int vali;
+
+ retvm_if(data == NULL, -1, "Invalid argument: data is NULL\n");
+ retvm_if(rua_init() == -1, -1, "Failed to rua_init\n");
+
+ if (rua_history_load_db(&table, &nrows, &ncols) == -1) {
+ rua_fini();
+ return -1;
+ }
+
+ if (nrows == 0) {
+ rua_history_unload_db(&table);
+ rua_fini();
+ return 0;
+ }
+
+ ad->applist[TS_HISTORY] = eina_list_nth_list(ad->applist[TS_HISTORY], 0);
+ for (row = 0; row < nrows; row++) {
+ rua_history_get_rec(&rec_result, table, nrows, ncols, row);
+
+ /* filtering
+ * pkg_name could be NULL or 0 length because it is launch by fork.
+ */
+ if (rec_result.pkg_name == NULL
+ || strlen(rec_result.pkg_name) < 1) {
+ continue;
+ }
+ ret = ail_package_get_appinfo(rec_result.pkg_name, &handle);
+ if (ret != AIL_ERROR_OK) {
+ _D("Failed to get appinfo(%d)\n", ret);
+ continue;
+ }
+
+ ret = ail_appinfo_get_bool(handle, AIL_PROP_X_SLP_TASKMANAGE_BOOL, &valb);
+ if(valb == 0) {
+ goto cont;
+ }
+
+ EINA_LIST_FOREACH(ad->applist[TS_INUSE], l_r, info_r) {
+ if (info_r != NULL) {
+ if (!strcmp
+ (rec_result.pkg_name, info_r->pkg_name)) {
+ flag = 1;
+ break;
+ }
+ }
+ }
+
+ if (flag == 0) {
+ info = calloc(1, sizeof(struct _task_info));
+ retvm_if(info == NULL, -1, "Failed to calloc _task_info\n");
+
+ info->pkg_name = strdup(rec_result.pkg_name);
+
+ ret = ail_appinfo_get_str(handle, AIL_PROP_NAME_STR, &valc);
+ if (valc == NULL) {
+ _D("Failed to get ail name\n");
+ valc = "Unknown";
+ }
+ info->app_name = strdup(valc);
+
+ ret = ail_appinfo_get_str(handle, AIL_PROP_ICON_STR, &valc);
+ if (valc == NULL || (ecore_file_exists(valc) == EINA_FALSE)) {
+ _D("Failed to get ail icon\n");
+ valc = TASKMANAGER_ICON_NAME;
+ }
+ snprintf(buf, sizeof(buf), "%s", valc);
+ info->icn_path = strdup(buf);
+
+ info->ad = ad;
+ info->pid = 0;
+ info->category = TS_HISTORY;
+
+ if (rec_result.arg != NULL) {
+ if (strlen(rec_result.arg) > 0) {
+ info->b = bundle_decode(
+ (const bundle_raw *)rec_result.arg,
+ strlen(rec_result.arg));
+ }
+ }
+
+ ad->applist[TS_HISTORY] =
+ eina_list_append(ad->applist[TS_HISTORY], info);
+ grp_cnt[TS_HISTORY]++;
+
+ }
+
+ flag = 0;
+
+cont:
+ ret = ail_package_destroy_appinfo(handle);
+ }
+
+ rua_history_unload_db(&table);
+ rua_fini();
+
+ return 0;
+}
+
+int _free_einalist_all(struct appdata *ad)
+{
+ Eina_List *l;
+ struct _task_info *info = NULL;
+ int i;
+
+ if (ad == NULL) {
+ printf("[Error] Invalid argument: appdata is NULL\n");
+ return -1;
+ }
+
+ for (i = 0; i < TS_MAX; i++) {
+ if (ad->applist[i] == NULL)
+ continue;
+
+ EINA_LIST_FOREACH(ad->applist[i], l, info) {
+ if (info != NULL) {
+ if (info->b)
+ bundle_free(info->b);
+
+ taskmanager_free_info(info);
+ info = NULL;
+ }
+ }
+
+ eina_list_free(ad->applist[i]);
+ ad->applist[i] = NULL;
+ }
+
+ return 0;
+}
+
+int _subt_einalist_item(struct appdata *ad, int pid)
+{
+_D("func\n");
+ Eina_List *l, *l_next;
+ int ret = -1;
+ struct _task_info *info;
+
+ retvm_if(ad == NULL, -1, "Invalid argument: appdata is NULL\n");
+ retvm_if(ad->applist[TS_INUSE] == NULL, -1, "applist is NULL\n");
+
+ EINA_LIST_FOREACH(ad->applist[TS_INUSE], l, info) {
+ _D("pid(%u):(%u)\n", pid, info->pid);
+ if (info == NULL) {
+ _E("Failed to get info\n");
+ continue;
+ }
+
+ if (pid > 0 && pid == info->pid) {
+ if(info->app_name) _D("killed [%s]\n", info->app_name);
+ ad->applist[TS_INUSE] =
+ eina_list_remove_list(ad->applist[TS_INUSE], l);
+ taskmanager_free_info(info);
+ info = NULL;
+ ret = 0;
+ }
+ }
+ return ret;
+}
+
+
+
+
diff --git a/src/_eina.h b/src/_eina.h
new file mode 100644
index 0000000..1a57c21
--- /dev/null
+++ b/src/_eina.h
@@ -0,0 +1,33 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 __TASKMANAGER_EINA_H__
+#define __TASKMANAGER_EINA_H__
+
+#include <aul.h>
+
+#include "taskmanager.h"
+
+void _init_grp_cnt(void);
+int _get_grp_cnt(int which);
+int runapp_info_get(const aul_app_info *ainfo, void *data);
+int taskmanager_get_history_app_info(void *data);
+int _free_einalist_all(struct appdata *ad);
+int _subt_einalist_item(struct appdata *ad, int pid);
+
+#endif
+/* __TASKMANAGER_EINA_H__ */
diff --git a/src/_genlist.c b/src/_genlist.c
new file mode 100644
index 0000000..75e7246
--- /dev/null
+++ b/src/_genlist.c
@@ -0,0 +1,992 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 <stdio.h>
+#include <unistd.h>
+#include <appcore-efl.h>
+#include <vconf.h>
+#include <utilX.h>
+#include <aul.h>
+#include <Ecore_X.h>
+#include <Eina.h>
+#include <unistd.h>
+#include <time.h>
+#include <sys/time.h>
+#include <pthread.h>
+
+#include "taskmanager.h"
+#include "_genlist.h"
+#include "_util_log.h"
+#include "_util_efl.h"
+#include "_logic.h"
+#include "_cpu.h"
+#include "_eina.h"
+#include "_info.h"
+#include "_progressbar.h"
+
+pthread_t pt;
+pthread_cond_t pc;
+pthread_mutex_t pm;
+pthread_mutex_t mutex_for_graph_update = PTHREAD_MUTEX_INITIALIZER;
+static Elm_Object_Item *g_egi;
+
+/* group list:gl, data list:dl, button list:bl, no list: nl */
+static Elm_Genlist_Item_Class itc_gl;
+static Elm_Genlist_Item_Class itc_hl;
+static Elm_Genlist_Item_Class itc_dl;
+static Elm_Genlist_Item_Class itc_bl;
+static Elm_Genlist_Item_Class itc_nl;
+static Elm_Genlist_Item_Class itc_separator4;
+static Elm_Genlist_Item_Class itc_separator2;
+
+static char *button_text[TS_MAX] = {
+ "IDS_COM_SK3_END_ALL_APPLICATIONS",
+ "IDS_TASKMGR_DELETE_ALL_HISTORY"
+};
+
+static void end_all_inuse_cb(void *data, Evas_Object *obj, void *event_info);
+static void delete_all_history_cb(void *data, Evas_Object *obj,
+ void *event_info);
+void (*func_del[TS_MAX]) (void *data, Evas_Object *obj, void *event_info) = {
+&end_all_inuse_cb, &delete_all_history_cb};
+
+static char *icon_text[TS_MAX] = {
+ "IDS_COM_BODY_END",
+ "IDS_COM_OPT_DELETE"
+};
+
+static void end_inuse_cb(void *data, Evas_Object *obj, void *event_info);
+static void delete_history_cb(void *data, Evas_Object *obj, void *event_info);
+void (*func_end[TS_MAX]) (void *data, Evas_Object *obj, void *event_info) = {
+&end_inuse_cb, &delete_history_cb};
+
+static char *group_name[TS_MAX] = {
+ "IDS_ST_BODY_IN_USE",
+ "IDS_MUSIC_OPT_HISTORY"
+};
+
+static char *nolist_text[TS_MAX] = {
+ "IDS_TASKMGR_NO_RUNNING_TASK",
+ "IDS_TASKMGR_NO_TASK_HISTORY"
+};
+
+void taskmanager_free_info(struct _task_info *info);
+Eina_Bool _update_list(void *data);
+
+static void clear_genlist(void *data)
+{
+ ret_if(data == NULL);
+
+ struct appdata *ad = data;
+
+ if (ad->gl) {
+ elm_genlist_clear(ad->gl);
+ }
+}
+
+void clear_task_manager_list(void *data)
+{
+ ret_if(data == NULL);
+
+ struct appdata *ad = data;
+ _free_einalist_all(ad);
+ clear_genlist(ad);
+}
+
+static void app_genlist_item_update(void *data)
+{
+ ret_if(data == NULL);
+
+ struct appdata *ad = (struct appdata *)data;
+
+ Elm_Object_Item *it_r;
+ Eina_List *realized_item_list, *l_r;
+ unsigned int cnt = 0;
+
+ realized_item_list = elm_genlist_realized_items_get(ad->gl);
+ cnt = eina_list_count(realized_item_list);
+ if (cnt > 0) {
+ EINA_LIST_FOREACH(realized_item_list, l_r, it_r) {
+ if (it_r != NULL) {
+ elm_genlist_item_update(it_r);
+ }
+ }
+ }
+}
+
+Eina_Bool alert_app_info(void *data)
+{
+ retv_if(data == NULL, -1);
+
+ struct appdata *ad = (struct appdata *)data;
+
+ app_genlist_item_update(ad);
+ return ECORE_CALLBACK_CANCEL;
+}
+
+static void end_all_inuse_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ ret_if(data == NULL);
+
+ struct appdata *ad = data;
+ char buf[_BUF_MAX] = { 0, };
+
+ ad->mode = MODE_END_ALL_INUSE;
+ snprintf(buf, sizeof(buf), _("IDS_TASKMGR_WARNNING_TERMINATE_ALL_TASKS"));
+ if (ad->popup_ask) {
+ evas_object_del(ad->popup_ask);
+ ad->popup_ask = NULL;
+ }
+ ad->popup_ask = _add_popup_ask(ad->win, buf, ad);
+}
+
+static void
+delete_all_history_cb(void *data, Evas_Object *obj, void *event_info)
+{
+_D("func\n");
+ ret_if(data == NULL);
+
+ struct appdata *ad = data;
+ char buf[_BUF_MAX] = { 0, };
+
+// refresh_app_info(ad);
+
+ ad->mode = MODE_DEL_ALL_HISTORY;
+ snprintf(buf, sizeof(buf), _("IDS_TASKMGR_ASK_DELETE_ALL_HISTORY"));
+ if (ad->popup_ask) {
+ evas_object_del(ad->popup_ask);
+ ad->popup_ask = NULL;
+ }
+ ad->popup_ask = _add_popup_ask(ad->win, buf, ad);
+}
+
+static void end_inuse_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ ret_if(data == NULL);
+
+ struct _task_info *info_ev = (struct _task_info *)data;
+ struct appdata *ad = info_ev->ad;
+ char buf[_BUF_MAX] = { 0, };
+
+ ad->mode = MODE_END_INUSE;
+ snprintf(buf, _BUF_MAX, _("IDS_TASKMGR_ASK_TERMINATE_TASK"), info_ev->app_name);
+ if (ad->popup_ask) {
+ evas_object_del(ad->popup_ask);
+ ad->popup_ask = NULL;
+ }
+ ad->popup_ask = _add_popup_ask(ad->win, buf, ad);
+ g_egi = (void *)info_ev->it;
+// evas_object_data_set(ad->popup_ask, "selected_egi", (void *)info_ev->it);
+}
+
+static void delete_history_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ ret_if(data == NULL);
+
+ struct _task_info *info_ev = (struct _task_info *)data;
+ struct appdata *ad = info_ev->ad;
+ char buf[_BUF_MAX] = { 0, };
+
+ ad->mode = MODE_DEL_HISTORY;
+
+ snprintf(buf, _BUF_MAX, _("IDS_TASKMGR_ASK_CLEAR_HISTORY"), info_ev->app_name);
+ if (ad->popup_ask) {
+ evas_object_del(ad->popup_ask);
+ ad->popup_ask = NULL;
+ }
+ ad->popup_ask = _add_popup_ask(ad->win, buf, ad);
+ g_egi = (void *)info_ev->it;
+// evas_object_data_set(ad->popup_ask, "selected_egi", (void *)info_ev->it);
+}
+
+static void nl_sel(void *data, Evas_Object *obj, void *event_info)
+{
+_D("func\n");
+ Elm_Object_Item *item = (Elm_Object_Item *) event_info;
+ elm_genlist_item_selected_set(item, EINA_FALSE);
+ return;
+}
+
+static char *nl_text_get(void *data, Evas_Object *obj, const char *part)
+{
+ char buf[_BUF_MAX] = { 0, };
+
+ if (!strcmp(part, "elm.text")) {
+ snprintf(buf, sizeof(buf), "%s", _(nolist_text[(int)data]));
+
+ return strdup(buf);
+ }
+ return NULL;
+}
+
+static void _gl_sel_app(void *data, Evas_Object *obj, void *event_info)
+{
+_D("func\n");
+ Elm_Object_Item *item = (Elm_Object_Item *) event_info;
+ struct appdata *ad = (struct appdata *)data;
+ struct _task_info *info;
+ /* parameter to block double click */
+ static int selected = 0;
+
+ retm_if(ad == NULL, "Invalid argument: appdata is NULL\n");
+
+ _fini_pthread();
+ if (ad->update_timer) {
+ ecore_timer_del(ad->update_timer);
+ ad->update_timer = NULL;
+ }
+
+ if (selected == 1)
+ return;
+ selected = 1;
+
+ if (item == NULL) {
+ _E("[Error] Cannot find genlist item\n");
+ selected = 0;
+ return;
+ }
+
+ info = (struct _task_info *)elm_object_item_data_get(item);
+ if (info == NULL) {
+ _E("[Error] Cannot get item data: info\n");
+ selected = 0;
+ return;
+ }
+
+ if (info->pid) {
+ /* when application is alive */
+ aul_resume_pid(info->pid);
+ elm_exit();
+
+ } else {
+ /* when application is dead */
+ if (info->pkg_name == NULL) {
+ util_show_popup_with_message(info->ad->win,
+ 3.0,
+ _("IDS_TASKMGR_CANNOT_LAUNCH_APPLICATION"));
+ selected = 0;
+
+ } else {
+ _unset_notification_level(info->ad->win);
+
+ if (!strcmp(info->pkg_name, "org.tizen.phone")) {
+ /* exception : Because dialer doesn't need bundle
+ * since being unifyed dialer, voice call and video call
+ */
+ aul_launch_app(info->pkg_name, NULL);
+
+ } else {
+ aul_launch_app(info->pkg_name, info->b);
+
+ }
+ }
+ }
+}
+
+static Evas_Object *_gl_content_get_app(void *data, Evas_Object *obj,
+ const char *part)
+{
+ struct _task_info *info = (struct _task_info *)data;
+ char buf[_BUF_MAX] = { 0, };
+
+ Evas_Object *icon = NULL;
+ Evas_Object *btn = NULL;
+
+ Evas_Object *rt, *icon_ly = NULL;
+
+ retvm_if(data == NULL, NULL, "Invalid argument: task info is NULL\n");
+
+ if (!strcmp(part, "elm.icon.1")) {
+ snprintf(buf, sizeof(buf), "%s", info->icn_path);
+ retvm_if(buf == NULL, NULL, "%s icon is NULL\n", info->app_name);
+ if (!ecore_file_exists(buf) || strlen(buf) < 4)
+ snprintf((char *)buf, (size_t) sizeof(buf),
+ (const char *)IMAGEDIR "/icon_taskmgr.png");
+
+ if (!strncmp(&buf[strlen(buf) - 3], "edj", 3)) {
+ icon_ly = _add_layout(obj, buf, "icon");
+
+ } else {
+ icon_ly = elm_icon_add(obj);
+ elm_icon_file_set(icon_ly, buf, NULL);
+ }
+
+ icon = _add_layout(obj, EDJ_NAME, "icon");
+ retvm_if(icon == NULL, NULL, "Cannot add layout: icon\n");
+
+ rt = evas_object_rectangle_add(evas_object_evas_get(obj));
+ retvm_if(rt == NULL, NULL, "Failed to add rectangle\n");
+
+ evas_object_color_set(rt, 0, 0, 0, 0);
+ evas_object_size_hint_min_set(rt, 50, 50);
+// evas_object_size_hint_min_set(rt, (int)(50.0 * scale),
+// (int)(50.0 * scale));
+// evas_object_size_hint_max_set(rt, (int)(50.0 * scale),
+// (int)(50.0 * scale));
+ elm_object_part_content_set(icon, "icon_ly", rt);
+
+ elm_object_part_content_set(icon, "icon", icon_ly);
+
+ return icon;
+
+ } else if (!strcmp(part, "elm.icon.2")) {
+ btn = elm_button_add(obj);
+ elm_object_text_set(btn, _("IDS_COM_BODY_END"));
+ elm_object_style_set(btn, "default");
+
+ evas_object_smart_callback_add(btn, "clicked",
+ func_end[info->category], info);
+ elm_object_focus_set(btn, EINA_FALSE);
+
+// evas_object_size_hint_min_set(btn, (int)(90.0 * scale),
+// (int)(47.0 * scale));
+// evas_object_size_hint_max_set(btn, (int)(90.0 * scale),
+// (int)(47.0 * scale));
+
+ evas_object_propagate_events_set(btn, EINA_FALSE);
+
+ return btn;
+ }
+
+ return NULL;
+}
+
+static char *_gl_text_get_app(void *data, Evas_Object *obj, const char *part)
+{
+ struct _task_info *info = (struct _task_info *)data;
+ char buf[_BUF_MAX] = { 0, };
+ Evas_Object *eo;
+
+ retvm_if(data == NULL, NULL, "Invalid argument: task info is NULL\n");
+ retvm_if(part == NULL, NULL, "Invalid argument: part is NULL\n");
+
+ if (!strcmp(part, "elm.text.1")) {
+ snprintf(buf, _BUF_MAX, "%s", info->app_name);
+ return strdup(buf);
+
+ } else if (!strcmp(part, "elm.text.2")) {
+ if (info->category == TS_INUSE) {
+ snprintf(buf, _BUF_MAX, "CPU: %.1f%%", info->cpu);
+ return strdup(buf);
+
+ } else {
+ if (info->it) {
+ elm_object_signal_emit(info->it, "prog.hide.mem","taskmanager");
+ }
+ return NULL;
+ }
+ }
+ return NULL;
+}
+
+static void _bl_sel(void *data, Evas_Object *obj, void *event_info)
+{
+_D("func\n");
+ int mode = (int)data;
+ struct appdata *ad;
+ Elm_Object_Item *item = (Elm_Object_Item *) event_info;
+
+ elm_genlist_item_selected_set(item, EINA_FALSE);
+}
+
+static char *_bl_text_get(void *data, Evas_Object *obj, const char *part)
+{
+ if (!strcmp(part, "elm.text")) {
+ return strdup(_(button_text[(int)data]));
+
+ }
+ return NULL;
+}
+
+static Evas_Object *_bl_content_get(void *data, Evas_Object *obj,
+ const char *part)
+{
+ Evas_Object *btn = NULL;
+ struct appdata *ad = evas_object_data_get(obj, "appdata");
+
+ if (!strcmp(part, "elm.icon")) {
+
+ btn = elm_button_add(obj);
+ elm_object_style_set(btn, "default");
+
+ elm_object_text_set(btn, _(button_text[(int)data]));
+ evas_object_smart_callback_add(btn, "clicked",
+ func_del[(int)data], ad);
+ elm_object_focus_set(btn, EINA_FALSE);
+
+ evas_object_size_hint_min_set(btn, 0, 50);
+ evas_object_size_hint_max_set(btn, 0, 50);
+// evas_object_size_hint_min_set(btn, 0, (int)(47.0 * scale));
+// evas_object_size_hint_max_set(btn, 0, (int)(47.0 * scale));
+
+ evas_object_propagate_events_set(btn, EINA_FALSE);
+
+ return btn;
+
+ }
+ return NULL;
+}
+
+static char *_gl_text_get_title(void *data, Evas_Object *obj, const char *part)
+{
+ char buf[_BUF_MAX];
+
+ if (!strcmp(part, "elm.text")) {
+ snprintf(buf, sizeof(buf), "%s (%d)", _(group_name[(int)data]),
+ _get_grp_cnt((int)data));
+ return strdup(buf);
+ }
+ return NULL;
+}
+
+static char *_gl_text_get_his(void *data, Evas_Object *obj, const char *part)
+{
+ struct _task_info *info = (struct _task_info *)data;
+ char buf[_BUF_MAX] = { 0, };
+ Evas_Object *eo;
+
+ if (!strcmp(part, "elm.text")) {
+ snprintf(buf, _BUF_MAX, "%s", info->app_name);
+ return strdup(buf);
+ }
+ return NULL;
+}
+
+static Evas_Object *_gl_content_get_his(void *data, Evas_Object *obj,
+ const char *part)
+{
+ struct _task_info *info = (struct _task_info *)data;
+ char buf[_BUF_MAX] = { 0, };
+
+ Evas_Object *icon = NULL;
+ Evas_Object *btn = NULL;
+
+ Evas_Object *rt, *icon_ly = NULL;
+ retvm_if(data == NULL, NULL, "Invalid argument: task info is NULL\n");
+
+ if (!strcmp(part, "elm.icon.1")) {
+ snprintf(buf, sizeof(buf), "%s", info->icn_path);
+ retvm_if(buf == NULL, NULL, "%s icon is NULL\n", info->app_name);
+ if (!ecore_file_exists(buf) || strlen(buf) < 4)
+ snprintf((char *)buf, (size_t) sizeof(buf),
+ (const char *)IMAGEDIR "/icon_taskmgr.png");
+
+ if (!strncmp(&buf[strlen(buf) - 3], "edj", 3)) {
+ icon_ly = _add_layout(obj, buf, "icon");
+
+ } else {
+ icon_ly = elm_icon_add(obj);
+ elm_icon_file_set(icon_ly, buf, NULL);
+ }
+
+ icon = _add_layout(obj, EDJ_NAME, "icon");
+ retvm_if (icon == NULL, NULL, "Cannot add layout: icon\n");
+
+ rt = evas_object_rectangle_add(evas_object_evas_get(obj));
+ retvm_if (rt == NULL, NULL, "Failed to add rectangle\n");
+
+ evas_object_color_set(rt, 0, 0, 0, 0);
+ evas_object_size_hint_min_set(rt, 50, 50);
+// evas_object_size_hint_min_set(rt, (int)(50.0 * scale),
+// (int)(50.0 * scale));
+// evas_object_size_hint_max_set(rt, (int)(50.0 * scale),
+// (int)(50.0 * scale));
+ elm_object_part_content_set(icon, "icon_ly", rt);
+
+ elm_object_part_content_set(icon, "icon", icon_ly);
+
+ return icon;
+
+ } else if (!strcmp(part, "elm.icon.2")) {
+ btn = elm_button_add(obj);
+ elm_object_text_set(btn, _("IDS_COM_OPT_DELETE"));
+ elm_object_style_set(btn, "default");
+
+ evas_object_smart_callback_add(btn, "clicked",
+ func_end[info->category], info);
+ elm_object_focus_set(btn, EINA_FALSE);
+
+ // evas_object_size_hint_min_set(btn, (int)(90.0 * scale),
+ // (int)(47.0 * scale));
+ // evas_object_size_hint_max_set(btn, (int)(90.0 * scale),
+ // (int)(47.0 * scale));
+
+ evas_object_propagate_events_set(btn, EINA_FALSE);
+
+ return btn;
+ }
+
+ return NULL;
+
+}
+
+void _set_itc(void)
+{
+ itc_gl.item_style = "grouptitle";
+ itc_gl.func.text_get = _gl_text_get_title;
+
+ itc_dl.item_style = "2text.2icon.4";
+ itc_dl.func.text_get = _gl_text_get_app;
+ itc_dl.func.content_get = _gl_content_get_app;
+
+ itc_hl.item_style = "1text.2icon.4";
+ itc_hl.func.text_get = _gl_text_get_his;
+ itc_hl.func.content_get = _gl_content_get_his;
+
+ itc_separator4.item_style = "dialogue/seperator.4";
+ itc_separator2.item_style = "dialogue/seperator.2";
+
+ itc_bl.item_style = "dialogue/bg/1icon";
+// itc_bl.item_style = "1icon";
+ itc_bl.func.content_get = _bl_content_get;
+
+ itc_nl.item_style = "1text";
+ itc_nl.func.text_get = nl_text_get;
+
+}
+
+int check_genlist(struct appdata *ad)
+{
+ Elm_Object_Item *egi;
+ struct _task_info *info;
+ int i = 1;
+
+ egi = elm_genlist_first_item_get(ad->gl);
+ while(egi) {
+ info = (struct _task_info *)elm_object_item_data_get(egi);
+ if(info) {
+ _D("%s info[0x%x]\n", (int)info < 3 ? "-" : info->app_name, info);
+ } else {
+ _D("group\n");
+ }
+ egi = elm_genlist_item_next_get(egi);
+ }
+
+ return 0;
+}
+
+int _set_genlist_from_eina(struct appdata *ad)
+{
+_D("func\n");
+ Eina_List *l;
+ Elm_Object_Item *git, *item;
+ struct _task_info *info;
+ int i;
+
+ retvm_if(ad == NULL, -1, "Invalid argument: appdata is NULL\n");
+ retvm_if(ad->gl == NULL, -1, "Invalid argument:genlist is NULL\n");
+
+ for (i = 0; i < TS_MAX; i++) {
+ git = elm_genlist_item_append(ad->gl, &itc_gl,
+ (void *)i, NULL,
+ ELM_GENLIST_ITEM_NONE,
+ NULL, NULL);
+ retvm_if(git == NULL, -1, "Failed append item\n");
+ elm_genlist_item_select_mode_set(git, EINA_TRUE);
+
+ if (eina_list_count(ad->applist[i]) > 0) {
+
+ item = elm_genlist_item_append(ad->gl, &itc_separator4,
+ NULL, git,
+ ELM_GENLIST_ITEM_NONE,
+ NULL, NULL);
+ elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+
+
+ item = elm_genlist_item_append(ad->gl, &itc_bl,
+ (void *)i, git,
+ ELM_GENLIST_ITEM_NONE,
+ _bl_sel, (void *)i);
+
+ item = elm_genlist_item_append(ad->gl, &itc_separator2,
+ NULL, git,
+ ELM_GENLIST_ITEM_NONE,
+ NULL, NULL);
+ elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+
+ ad->applist[i] = eina_list_nth_list(ad->applist[i], 0);
+ EINA_LIST_FOREACH(ad->applist[i], l, info) {
+ if (info != NULL) {
+ info->it = elm_genlist_item_append(ad->gl,
+ (i == TS_INUSE) ? &itc_dl : &itc_hl,
+ (void *)info, git,
+ ELM_GENLIST_ITEM_NONE,
+ _gl_sel_app, ad);
+ }
+ }
+ } else {
+ item = elm_genlist_item_append(ad->gl, &itc_nl,
+ (void *)i, git,
+ ELM_GENLIST_ITEM_NONE,
+ nl_sel, NULL);
+ }
+ }
+ return 0;
+}
+
+Eina_Bool _update_list(void *data)
+{
+_D("func\n");
+ struct appdata *ad = data;
+ Eina_List *l, *l_next;
+ struct _task_info *info;
+
+ pthread_mutex_lock(&mutex_for_graph_update);
+
+ if(ad->applist[TS_INUSE] == NULL) {
+ _D("inuse is NULL\n");
+ return ECORE_CALLBACK_CANCEL;
+ }
+ ad->applist[TS_INUSE] = eina_list_nth_list(ad->applist[TS_INUSE], 0);
+ _D("%d\n", eina_list_count(ad->applist[TS_INUSE]));
+
+ EINA_LIST_FOREACH_SAFE(ad->applist[TS_INUSE], l, l_next, info) {
+ elm_genlist_item_update(info->it);
+
+ }
+ pthread_mutex_unlock(&mutex_for_graph_update);
+ return ECORE_CALLBACK_RENEW;
+}
+
+void *_update_pthread_cb(void *data)
+{
+_D("func\n");
+ struct appdata *ad = data;
+ long tick;
+ int ncpu;
+ Eina_List *l, *l_next;
+ struct _task_info *info;
+
+ while(1) {
+
+ if (ad->ending == EINA_FALSE) {
+ if(ad->applist[TS_INUSE] == NULL) {
+ _D("in use list is NULL\n");
+ return ECORE_CALLBACK_CANCEL;
+ }
+
+ _get_sysconf(&ncpu, &tick);
+
+ ad->applist[TS_INUSE] = eina_list_nth_list(ad->applist[TS_INUSE], 0);
+ if (eina_list_count(ad->applist[TS_INUSE]) < 1) {
+ _D("list count is 0\n");
+ return NULL;
+ }
+
+ EINA_LIST_FOREACH_SAFE(ad->applist[TS_INUSE], l, l_next, info) {
+ if (info) {
+ info->cpu = _get_cpu_ratio(info, ncpu, tick);
+ _D("%d / %lf\n", info->pid, info->cpu);
+ }
+
+ }
+ sleep(2);
+ }
+ }
+
+ return NULL;
+
+}
+
+void _set_genlist(struct appdata *ad)
+{
+_D("func\n");
+ int ret;
+ retm_if(ad == NULL, "Invalid argument: appdata is NULL\n");
+
+ _init_grp_cnt();
+
+ aul_app_get_running_app_info(runapp_info_get, ad);
+ taskmanager_get_history_app_info(ad);
+ ret = _set_genlist_from_eina(ad);
+ if (ret < 0) {
+ elm_exit();
+ }
+}
+
+void _init_pthread(void)
+{
+ pthread_mutex_init(&pm, NULL);
+ pthread_cond_init(&pc, NULL);
+}
+
+void _fini_pthread(void)
+{
+_D("func\n");
+ if (pt) {
+ pthread_cancel(pt);
+ }
+}
+
+void refresh_app_info(struct appdata *ad)
+{
+_D("func\n");
+ retm_if(ad == NULL, "Invalid argument: appdata is NULL\n");
+
+ _free_einalist_all(ad);
+ clear_genlist(ad);
+
+ _set_genlist(ad);
+
+ alert_app_info(ad);
+
+}
+
+void _del_popup_timer(struct appdata *ad)
+{
+ if (ad->popup_timer) {
+ ecore_timer_del(ad->popup_timer);
+ ad->popup_timer = NULL;
+ }
+}
+
+void taskmanager_free_info(struct _task_info *info)
+{
+ if (info) {
+ if (info->app_name) {
+ free(info->app_name);
+ info->app_name = NULL;
+ }
+ if (info->pkg_name) {
+ free(info->pkg_name);
+ info->pkg_name = NULL;
+ }
+ if (info->icn_path) {
+ free(info->icn_path);
+ info->icn_path = NULL;
+ }
+
+ free(info);
+ }
+}
+
+void _restart_pthread(struct appdata *ad)
+{
+_D("func\n");
+ pthread_cancel(pt);
+ if (eina_list_count(ad->applist[TS_INUSE]) > 0) {
+
+ pthread_create(&pt, NULL, _update_pthread_cb, ad);
+ pthread_detach(pt);
+ if (ad->update_timer) {
+ ecore_timer_del(ad->update_timer);
+ ad->update_timer = NULL;
+ }
+ ad->update_timer = ecore_timer_add(2.0, _update_list, ad);
+ }
+}
+int response_end_inuse(struct appdata *ad)
+{
+_D("func\n");
+ Eina_List *l, *l_next;
+ struct _task_info *info;
+ Elm_Object_Item *egi;
+
+ retvm_if(ad == NULL, -1, "Invalid argument: appdata is NULL\n");
+
+ ad->ending = EINA_TRUE;
+
+ EINA_LIST_FOREACH_SAFE(ad->applist[TS_INUSE], l, l_next, info) {
+ if (info->it == g_egi) {
+ if (info->pid > 0) {
+ if (aul_terminate_pid(info->pid) < 0) {
+ kill(info->pid, SIGKILL);
+ }
+// ad->applist[TS_INUSE] =
+// eina_list_remove_list(ad->applist[TS_INUSE], l);
+ }
+ break;
+ }
+ }
+ ad->ending = EINA_FALSE;
+
+ return 0;
+}
+
+Eina_Bool _refresh_idler_cb(void *data)
+{
+_D("func\n");
+ struct appdata *ad = (struct appdata *)data;
+ retvm_if(data == NULL, ECORE_CALLBACK_CANCEL, "Invalid argument: appdata is NULL\n:");
+
+ _del_popup_timer(ad);
+ _del_progressbar(ad);
+ refresh_app_info(ad);
+ return ECORE_CALLBACK_CANCEL;
+}
+
+int response_end_all_inuse(struct appdata *ad)
+{
+ Eina_List *l;
+ struct _task_info *info;
+
+ retvm_if(ad == NULL, -1, "Invalid argument: appdata is NULL\n");
+
+ ad->ending = EINA_TRUE;
+
+ if(ad->update_timer) {
+ ecore_timer_del(ad->update_timer);
+ ad->update_timer = NULL;
+ }
+
+ ad->endcnt = eina_list_count(ad->applist[TS_INUSE]);
+ _D("set end count (%d)\n", ad->endcnt);
+
+ EINA_LIST_FOREACH(ad->applist[TS_INUSE], l, info) {
+ if (info != NULL) {
+ if (info->pid > 0) {
+ if (aul_terminate_pid(info->pid) < 0) {
+ kill(info->pid, SIGKILL);
+ }
+ _D("terminated\n");
+// ad->applist[TS_INUSE] =
+// eina_list_remove_list(ad->applist[TS_INUSE], l);
+ }
+ }
+ }
+ ad->ending = EINA_FALSE;
+ return 0;
+}
+
+int response_del_history(struct appdata *ad)
+{
+ Eina_List *l, *l_next;
+ struct _task_info *info;
+ Elm_Object_Item *egi;
+
+ retvm_if(ad == NULL, -1, "Invalid argument: appdata is NULL\n");
+
+ _show_progressbar(ad);
+ EINA_LIST_FOREACH_SAFE(ad->applist[TS_HISTORY], l, l_next, info) {
+ if (info->it == g_egi) {
+
+ if (rua_init() == -1) {
+ break;
+ }
+ rua_delete_history_with_pkgname(info->pkg_name);
+ rua_fini();
+
+ ad->applist[TS_HISTORY] =
+ eina_list_remove_list(ad->applist[TS_HISTORY], l);
+
+ if (info->b) {
+ bundle_free(info->b);
+ }
+
+ elm_object_item_del(info->it);
+ taskmanager_free_info(info);
+ break;
+ }
+ }
+ alert_app_info(ad);
+ refresh_app_info(ad);
+ _del_popup_timer(ad);
+ _del_progressbar(ad);
+
+ ad->mode = MODE_NONE;
+ return 0;
+}
+
+int response_del_all_history(struct appdata *ad)
+{
+ Eina_List *l;
+ struct _task_info *info;
+
+ retvm_if(ad == NULL, -1, "Invalid argument: appdata is NULL\n");
+
+ if(ad->update_timer) {
+ _D("update timer is deleted\n");
+ ecore_timer_del(ad->update_timer);
+ ad->update_timer = NULL;
+ }
+
+
+ _show_progressbar(ad);
+
+ if (rua_init() == -1) {
+ return -1;
+ }
+
+ EINA_LIST_FOREACH(ad->applist[TS_HISTORY], l, info) {
+ if (info != NULL) {
+ rua_delete_history_with_pkgname(info->pkg_name);
+ }
+ }
+
+ if (eina_list_count(ad->applist[TS_INUSE]) == 0) {
+ rua_clear_history();
+ }
+
+ rua_fini();
+ refresh_app_info(ad);
+ _del_popup_timer(ad);
+ _del_progressbar(ad);
+
+ ad->mode = MODE_NONE;
+ return 0;
+}
+
+int response_kill_inuse(struct appdata *ad)
+{
+ Eina_List *l, *l_next;
+ struct _task_info *info;
+ Elm_Object_Item *egi;
+
+ retvm_if(ad == NULL, -1, "Invalid argument: appdata is NULL\n");
+
+ _show_progressbar(ad);
+
+ EINA_LIST_FOREACH_SAFE(ad->applist[TS_INUSE], l, l_next, info) {
+ if (info->it == g_egi) {
+ if (info->pid > 0) {
+ kill(info->pid, SIGKILL);
+ }
+
+ ad->applist[TS_INUSE] =
+ eina_list_remove_list(ad->applist[TS_INUSE], l);
+ taskmanager_free_info(info);
+ break;
+ }
+ }
+ refresh_app_info(ad);
+ _del_progressbar(ad);
+
+ return 0;
+}
+
+int response_kill_all_inuse(struct appdata *ad)
+{
+ Eina_List *l;
+ struct _task_info *info;
+
+ retvm_if(ad == NULL, -1, "Invalid argument: appdata is NULL\n");
+
+ _show_progressbar(ad);
+
+ EINA_LIST_FOREACH(ad->applist[TS_INUSE], l, info) {
+ if (info != NULL) {
+ if (info->pid > 0) {
+ kill(info->pid, SIGKILL);
+ }
+ }
+ }
+ refresh_app_info(ad);
+ _del_progressbar(ad);
+
+ return 0;
+}
+
diff --git a/src/_genlist.h b/src/_genlist.h
new file mode 100644
index 0000000..b6a3fa8
--- /dev/null
+++ b/src/_genlist.h
@@ -0,0 +1,42 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 __TASKMANAGER_GENLIST_H__
+#define __TASKMANAGER_GENLIST_H__
+
+#include <Elementary.h>
+#include "taskmanager.h"
+
+Eina_Bool alert_app_info(void *data);
+void clear_task_manager_list(void *data);
+void refresh_app_info(struct appdata *ad);
+void load_task_manager_list(struct appdata *ad);
+void _set_itc(void);
+void _set_genlist(struct appdata *ad);
+void _del_popup_timer(struct appdata *ad);
+int response_end_inuse(struct appdata *ad);
+int response_end_all_inuse(struct appdata *ad);
+int response_del_history(struct appdata *ad);
+int response_del_all_history(struct appdata *ad);
+int response_kill_inuse(struct appdata *ad);
+int response_kill_all_inuse(struct appdata *ad);
+void _fini_pthread(void);
+Eina_Bool _update_list(void *data);
+void _restart_pthread(struct appdata *ad);
+
+#endif
+/* __TASKMANAGER_GENLIST_H__ */
diff --git a/src/_info.c b/src/_info.c
new file mode 100644
index 0000000..bf45470
--- /dev/null
+++ b/src/_info.c
@@ -0,0 +1,131 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 <stdio.h>
+
+#include <appcore-common.h>
+
+#include "taskmanager.h"
+#include "_util_log.h"
+#include "_util_efl.h"
+
+static void ctxpopup_clear(void *data)
+{
+ struct appdata *ad = data;
+
+ retm_if(data == NULL, "Invalid argument: appdata is NULL\n");
+
+ if (ad->info_timer) {
+ ecore_timer_del(ad->info_timer);
+ ad->info_timer = NULL;
+ }
+
+ if (ad->info_ctxpopup) {
+ evas_object_del(ad->info_ctxpopup);
+ ad->info_ctxpopup = NULL;
+ }
+
+}
+
+static void label_resize_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+ Evas_Object *ly = (Evas_Object *)data;
+ Evas_Coord w, h;
+ Evas_Coord pw, ph;
+
+ retm_if(ly == NULL, "Invalid argument: Evas_Object is NULL\n");
+
+ edje_object_part_geometry_get(_EDJ(ly),
+ "padding/t", NULL, NULL, &pw, &ph);
+ evas_object_geometry_get(obj, NULL, NULL, &w, &h);
+ evas_object_size_hint_min_set(ly, (w + ph * 2), (h + ph * 2));
+}
+
+static void _ctxpopup_hide_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ struct appdata *ad = (struct appdata *)data;
+ ctxpopup_clear(ad);
+}
+
+int _util_move_ctxpopup(Evas_Object *eo, Evas_Object *target)
+{
+ double scale;
+ Evas_Coord tx, ty, tw, th;
+ Evas_Coord cx, cy;
+
+ retvm_if(eo == NULL, -1, "Invalid argument: ctxpopup is NULL\n");
+
+ scale = elm_config_scale_get();
+
+ evas_object_geometry_get(target, &tx, &ty, &tw, &th);
+
+ cx = tx + (int)(tw * 0.5);
+ cy = ty + (int)(10.0 * scale);
+
+ evas_object_move(eo, cx, cy);
+
+ return 0;
+}
+
+static Eina_Bool info_hide_cb(void *data)
+{
+ struct appdata *ad = data;
+
+ ctxpopup_clear(ad);
+
+ return ECORE_CALLBACK_CANCEL;
+}
+
+void create_info_ctxpopup(void *data, Evas_Object *obj, void *event_info)
+{
+ struct appdata *ad = (struct appdata *)data;
+ Evas_Object *lb, *ly;
+ double scale = 0.0;
+ char buf[128] = {0, };
+
+ retm_if(data == NULL, "Invalid argument: appdata is NULL\n");
+
+ if (ad->info_ctxpopup) {
+ evas_object_del(ad->info_ctxpopup);
+ ad->info_ctxpopup = NULL;
+ }
+
+ scale = elm_config_scale_get();
+
+ ad->info_ctxpopup = _add_ctxpopup(ad->win);
+ evas_object_smart_callback_add(ad->info_ctxpopup, "dismissed",
+ _ctxpopup_hide_cb, ad);
+
+ ly = _add_layout(ad->info_ctxpopup, EDJ_NAME, "info");
+ evas_object_resize(ly, (int)(240.0 * scale), (int)(105.0 * scale));
+ elm_object_content_set(ad->info_ctxpopup, ly);
+
+ snprintf(buf, sizeof(buf),
+ "<font_size=22>%s<font_size>", _("IDS_TASKMGR_INFO_MESSAGE"));
+ lb = _add_label(ly, buf);
+ evas_object_event_callback_add(lb, EVAS_CALLBACK_RESIZE,
+ label_resize_cb, ly);
+ elm_layout_content_set(ly, "swallow", lb);
+
+ _util_move_ctxpopup(ad->info_ctxpopup, ad->info_btn);
+
+ ad->info_timer = ecore_timer_add(3, info_hide_cb, ad);
+
+ evas_object_show(ad->info_ctxpopup);
+}
+
+
diff --git a/src/_info.h b/src/_info.h
new file mode 100644
index 0000000..45cac1e
--- /dev/null
+++ b/src/_info.h
@@ -0,0 +1,25 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 __TASKMANAGER_INFO_H__
+#define __TASKMANAGER_INFO_H__
+
+void create_info_ctxpopup(void *data, Evas_Object *obj, void *event_info);
+
+#endif
+/* __TASKMANAGER_INFO_H__ */
+
diff --git a/src/_logic.c b/src/_logic.c
new file mode 100644
index 0000000..655deb1
--- /dev/null
+++ b/src/_logic.c
@@ -0,0 +1,361 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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-common.h>
+#include <aul.h>
+#include <Ecore_X.h>
+#include <vconf.h>
+
+#include "taskmanager.h"
+#include "_util_log.h"
+#include "_util_efl.h"
+#include "_genlist.h"
+#include "_eina.h"
+#include "_progressbar.h"
+#include "_info.h"
+
+
+int _dead_cb(int pid, void *data)
+{
+_D("func\n");
+ /* redraw list */
+ struct appdata *ad = (struct appdata *)data;
+ retvm_if(ad == NULL, -1, "Invalid argument: appdata is NULL\n");
+
+ _fini_pthread();
+ if (ad->update_timer) {
+ ecore_timer_del(ad->update_timer);
+ ad->update_timer = NULL;
+ }
+ _subt_einalist_item(ad, pid);
+
+ _D("mode(%d) count(%d)\n", ad->mode, ad->endcnt);
+ switch (ad->mode) {
+ default:
+ case MODE_END_INUSE:
+ case MODE_DEL_HISTORY:
+ case MODE_DEL_ALL_HISTORY:
+ case MODE_KILL_INUSE:
+ _D("aa\n");
+ _del_popup_timer(ad);
+ _del_progressbar(ad);
+ refresh_app_info(ad);
+ _restart_pthread(ad);
+ break;
+
+ case MODE_END_ALL_INUSE:
+ case MODE_KILL_ALL_INUSE:
+ _D("bb\n");
+ if (ad->endcnt <= 1) {
+ _D("count set 0\n");
+ _del_popup_timer(ad);
+ _del_progressbar(ad);
+ refresh_app_info(ad);
+ _restart_pthread(ad);
+
+ } else {
+ ad->endcnt--;
+ }
+ break;
+ }
+}
+
+static void _back_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ struct appdata *ad = (struct appdata *)data;
+ /*
+ _unset_notification_level(ad->win);
+ */
+ elm_exit();
+
+}
+
+static void _drag_start_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ _D("func\n");
+ struct appdata *ad = (struct appdata *)data;
+ if (ad->update_timer) {
+ ecore_timer_del(ad->update_timer);
+ ad->update_timer = NULL;
+ }
+}
+
+static void _drag_stop_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ _D("func\n");
+ struct appdata *ad = (struct appdata *)data;
+ if (ad->update_timer) {
+ ecore_timer_del(ad->update_timer);
+ ad->update_timer = NULL;
+ }
+ ad->update_timer = ecore_timer_add(2.0, _update_list, ad);
+}
+
+
+static void _anim_start_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ _D("func\n");
+ struct appdata *ad = (struct appdata *)data;
+ if (ad->update_timer) {
+ ecore_timer_del(ad->update_timer);
+ ad->update_timer = NULL;
+ }
+}
+
+static void _anim_stop_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ _D("func\n");
+ struct appdata *ad = (struct appdata *)data;
+ if (ad->update_timer) {
+ ecore_timer_del(ad->update_timer);
+ ad->update_timer = NULL;
+ }
+ ad->update_timer = ecore_timer_add(2.0, _update_list, ad);
+}
+
+static void _moved_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ _D("func\n");
+}
+
+int _app_create(struct appdata *ad)
+{
+ Evas_Object *ly, *bg, *nv, *bt, *gl;
+
+ retvm_if(ad == NULL, -1, "Invalid argument: appdata is NULL\n");
+ ad->ending = EINA_FALSE;
+
+ ly = _add_layout_main(ad->win, EINA_TRUE, EINA_FALSE);
+ retvm_if(ly == NULL, -1, "Failed to add layout main\n");
+
+ bg = _add_bg(ad->win, "group_list");
+ retvm_if(bg == NULL, -1, "Failed to add bg\n");
+ elm_object_part_content_set(ly, "elm.swallow.bg", bg);
+
+ nv = _add_naviframe(ly);
+ retvm_if(nv == NULL, -1, "Failed to add naviframe\n");
+ evas_object_show(nv);
+ ad->nv = nv;
+
+ ly = _add_layout(ad->nv, EDJ_NAME, GRP_TM);
+ retvm_if(ly == NULL, -1, "Failed to add layout\n");
+ ad->ly = ly;
+
+ /* Load default content (running task) */
+ gl = _add_genlist(ly);
+ retvm_if(gl == NULL, -1, "Failed to add genlist\n");
+ elm_genlist_block_count_set(gl, 20);
+ evas_object_data_set(gl, "appdata", ad);
+ elm_object_part_content_set(ly, "list", gl);
+ evas_object_smart_callback_add(gl, "scroll,drag,start", _drag_start_cb, ad);
+ evas_object_smart_callback_add(gl, "scroll,drag,stop", _drag_stop_cb, ad);
+ evas_object_smart_callback_add(gl, "scroll,anim,start", _anim_start_cb, ad);
+ evas_object_smart_callback_add(gl, "scroll,anim,stop", _anim_stop_cb, ad);
+// evas_object_smart_callback_add(gl, "edge,bottom", _moved_cb, ad);
+ evas_object_show(gl);
+ ad->gl = gl;
+
+ bt = elm_button_add(nv);
+ retvm_if(bt == NULL, -1, "Failed to add button\n");
+ elm_object_style_set(bt, "naviframe/end_btn/default");
+ evas_object_smart_callback_add(bt, "clicked", _back_cb, ad);
+
+ elm_naviframe_item_push(nv,
+ _("IDS_TASKMGR_HEADER_TASK_SWITCHER"),
+ bt, NULL, ly, NULL);
+
+ return 0;
+}
+
+static void _get_win_geometry(struct appdata *ad)
+{
+ Ecore_X_Window focus_win;
+ Ecore_X_Window root_win;
+
+ focus_win = ecore_x_window_focus_get();
+ root_win = ecore_x_window_root_get(focus_win);
+ ecore_x_window_size_get(root_win, &ad->root_w, &ad->root_h);
+}
+
+static void _vconf_noti_cb(keynode_t *node, void *data)
+{
+ elm_exit();
+}
+
+static void _set_vconf_noti(void *data)
+{
+ vconf_notify_key_changed(VCONFKEY_IDLE_LOCK_STATE,
+ _vconf_noti_cb, NULL);
+}
+
+/* this func is to exit taskmanager after launching application */
+static Eina_Bool __climsg_cb(void *data, int type, void *event)
+{
+ static Atom a_deact;
+ pid_t pid_a, pid_d;
+
+ Ecore_X_Event_Client_Message *ev = event;
+
+ if(ev == NULL) {
+ _E("Invalid argument: event is NULL\n");
+ ecore_timer_add(1.5, _exit_cb, NULL);
+ return ECORE_CALLBACK_CANCEL;
+ }
+
+ pid_a = ev->data.l[1];
+ pid_d = ev->data.l[3];
+ a_deact = ecore_x_atom_get("_X_ILLUME_DEACTIVATE_WINDOW");
+
+ /* when pid_a == pid_d, this is useless data */
+ if (pid_a == pid_d) {
+ return ECORE_CALLBACK_RENEW;
+ }
+
+ if (ev->message_type == a_deact) {
+ _D("exit after 1.0 sec\n");
+ ecore_timer_add(1.5, _exit_cb, NULL);
+ return ECORE_CALLBACK_CANCEL;
+ } else {
+ _D("messagre is act\n");
+
+ }
+
+ return ECORE_CALLBACK_CANCEL;
+}
+
+static Eina_Bool _ask_kill_process(void *data)
+{
+ struct appdata *ad = data;
+
+ _del_progressbar(ad);
+
+ ad->mode *= 2;
+ /* why? check enum in taskmgr.h */
+
+ switch (ad->mode) {
+ case MODE_KILL_INUSE:
+ _D("kill all inuse\n");
+ response_kill_inuse(ad);
+ break;
+
+ case MODE_KILL_ALL_INUSE:
+ _D("kill all inuse\n");
+ response_kill_all_inuse(ad);
+ break;
+ }
+/*
+ if (ad->popup_ask) {
+ evas_object_del(ad->popup_ask);
+ ad->popup_ask = NULL;
+ }
+ ad->popup_ask = _add_popup_ask(ad->win,
+ "It might be an invalid process. Do you want to kill this proceess anyway?",
+ ad);
+*/
+ return ECORE_CALLBACK_CANCEL;
+}
+
+void _ok_response_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ struct appdata *ad = (struct appdata *)data;
+
+ retm_if(data == NULL, "Invalid argument: appdata is NULL\n");
+ if (ad->popup_ask) {
+ evas_object_del(ad->popup_ask);
+ ad->popup_ask = NULL;
+ }
+
+ switch (ad->mode) {
+ case MODE_END_INUSE:
+ _D("end inuse\n");
+ _del_popup_timer(ad);
+ ad->popup_timer = ecore_timer_add(7.0, _ask_kill_process, ad);
+ _show_progressbar(ad);
+ response_end_inuse(ad);
+ _restart_pthread(ad);
+ break;
+
+ case MODE_END_ALL_INUSE:
+ _D("end all inuse\n");
+ _del_popup_timer(ad);
+ ad->popup_timer = ecore_timer_add(7.0, _ask_kill_process, ad);
+ _show_progressbar(ad);
+ response_end_all_inuse(ad);
+ break;
+
+ case MODE_DEL_HISTORY:
+ _D("del inuse\n");
+ _del_popup_timer(ad);
+ ad->popup_timer = ecore_timer_add(5.0, _ask_kill_process, ad);
+ response_del_history(ad);
+ break;
+
+ case MODE_DEL_ALL_HISTORY:
+ _D("del all inuse\n");
+ _del_popup_timer(ad);
+ ad->popup_timer = ecore_timer_add(5.0, _ask_kill_process, ad);
+ response_del_all_history(ad);
+ break;
+
+ case MODE_KILL_INUSE:
+ _D("kill all inuse\n");
+ response_kill_inuse(ad);
+ break;
+
+ case MODE_KILL_ALL_INUSE:
+ _D("kill all inuse\n");
+ response_kill_all_inuse(ad);
+ break;
+
+ default:
+ printf("[Wanning] taskmanager: check mode [%d]\n",
+ ad->mode);
+ break;
+ }
+}
+
+void _cancel_response_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ struct appdata *ad = (struct appdata *)data;
+
+ retm_if(data == NULL, "Invalid argument: appdata is NULL\n");
+ if (ad->popup_ask) {
+ evas_object_del(ad->popup_ask);
+ ad->popup_ask = NULL;
+ }
+}
+
+Eina_Bool _create_idler_cb(void *data)
+{
+ Evas_Object *pu, *bt1, *bt2;
+ struct appdata *ad = (struct appdata *)data;
+ retvm_if(ad == NULL, ECORE_CALLBACK_CANCEL, "Invalid argument\n");
+
+ evas_object_show(ad->win);
+
+ _key_grab(ad);
+
+ _init_pthread();
+ _get_win_geometry(ad);
+ _set_vconf_noti(ad);
+ ecore_event_handler_add(ECORE_X_EVENT_CLIENT_MESSAGE, __climsg_cb, NULL);
+
+ return ECORE_CALLBACK_CANCEL;
+}
+
+
+
diff --git a/src/_logic.h b/src/_logic.h
new file mode 100644
index 0000000..61f8b88
--- /dev/null
+++ b/src/_logic.h
@@ -0,0 +1,30 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 __TASKMANAGER_LOGIC_H__
+#define __TASKMANAGER_LOGIC_H__
+
+#include "taskmanager.h"
+
+int _dead_cb(int pid, void *data);
+Eina_Bool _create_idler_cb(void *data);
+int _app_create(struct appdata *ad);
+void _ok_response_cb(void *data, Evas_Object *obj, void *event_info);
+void _cancel_response_cb(void *data, Evas_Object *obj, void *event_info);
+
+#endif
+/* __TASKMANAGER_LOGIC_H__ */
diff --git a/src/_progressbar.c b/src/_progressbar.c
new file mode 100644
index 0000000..e961735
--- /dev/null
+++ b/src/_progressbar.c
@@ -0,0 +1,46 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 "taskmanager.h"
+#include "_util_log.h"
+#include "_util_efl.h"
+
+void _del_progressbar(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ retm_if(ad == NULL, "Invalid argument: appdata is NULL\n");
+
+ if (ad->popup_progressbar) {
+ evas_object_hide(ad->popup_progressbar);
+ evas_object_del(ad->popup_progressbar);
+ ad->popup_progressbar = NULL;
+ }
+}
+
+void _show_progressbar(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ retm_if(ad == NULL, "Invalid argument: appdata is NULL\n");
+
+ if (ad->popup_progressbar)
+ _del_progressbar(ad);
+
+ ad->popup_progressbar = _add_progressbar(ad->win, "list_process",
+ ad->root_w, ad->root_h);
+
+ evas_object_show(ad->popup_progressbar);
+}
diff --git a/src/_progressbar.h b/src/_progressbar.h
new file mode 100644
index 0000000..f983cf3
--- /dev/null
+++ b/src/_progressbar.h
@@ -0,0 +1,25 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 __TASKMANAGER_PROGRESSBAR_H__
+#define __TASKMANAGER_PROGRESSBAR_H__
+
+void _show_progressbar(void *data);
+void _del_progressbar(void *data);
+
+#endif
+/* __TASKMANAGER_PROGRESSBAR_H__ */
diff --git a/src/_util_efl.c b/src/_util_efl.c
new file mode 100644
index 0000000..def79ce
--- /dev/null
+++ b/src/_util_efl.c
@@ -0,0 +1,267 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 "taskmanager.h"
+#include "_util_log.h"
+#include "_util_efl.h"
+#include "_logic.h"
+
+Evas_Object *_add_window(const char *name)
+{
+ Evas_Object *eo;
+ int w, h;
+
+ eo = elm_win_add(NULL, name, ELM_WIN_BASIC);
+ if (eo) {
+ elm_win_title_set(eo, name);
+ elm_win_borderless_set(eo, EINA_TRUE);
+ ecore_x_window_size_get(ecore_x_window_root_first_get(),
+ &w, &h);
+ evas_object_resize(eo, w, h);
+ }
+
+ return eo;
+}
+
+Evas_Object *_add_bg(Evas_Object *parent, char *style)
+{
+ Evas_Object *bg;
+
+ bg = elm_bg_add(parent);
+ retvm_if(bg == NULL, NULL, "Failed to add bg\n");
+ if (style) elm_object_style_set(bg, style);
+ evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND,
+ EVAS_HINT_EXPAND);
+ evas_object_show(bg);
+ return bg;
+}
+
+Evas_Object *_add_genlist(Evas_Object *parent)
+{
+ Evas_Object *eo;
+
+ eo = elm_genlist_add(parent);
+ if (eo == NULL) {
+ printf("[Error] Cannot add genlist\n");
+ return NULL;
+ }
+
+ evas_object_size_hint_weight_set(eo, EVAS_HINT_EXPAND,
+ EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(eo, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+ return eo;
+}
+
+Evas_Object *_add_icon(Evas_Object *parent, const char *png)
+{
+ Evas_Object *eo;
+ char buf[128] = { 0, };
+
+ eo = elm_icon_add(parent);
+ if (eo == NULL) {
+ printf("[Error] Cannot add button\n");
+ return NULL;
+ }
+
+ snprintf(buf, sizeof(buf), "%s/%s", IMAGEDIR, png);
+ elm_icon_file_set(eo, buf, NULL);
+ elm_icon_resizable_set(eo, 1, 1);
+ evas_object_size_hint_aspect_set(eo, EVAS_ASPECT_CONTROL_VERTICAL, 1,
+ 1);
+
+ return eo;
+}
+
+Evas_Object *_add_layout(Evas_Object *parent, const char *file,
+ const char *group)
+{
+ Evas_Object *eo = NULL;
+ int r;
+
+ eo = elm_layout_add(parent);
+ if (eo == NULL) {
+ printf("[Error] Cannot add layout\n");
+ return NULL;
+ }
+
+ r = elm_layout_file_set(eo, file, group);
+ if (!r) {
+ printf("[Error] Cannot set file layout\n");
+ evas_object_del(eo);
+ return NULL;
+ }
+
+ evas_object_size_hint_weight_set(eo, EVAS_HINT_EXPAND,
+ EVAS_HINT_EXPAND);
+
+ return eo;
+}
+
+Evas_Object *_add_ctxpopup(Evas_Object *parent)
+{
+ Evas_Object *eo = NULL;
+
+ eo = elm_ctxpopup_add(parent);
+ if (eo == NULL) {
+ printf("[Error] Cannot add ctxpopup\n");
+ return NULL;
+ }
+
+ elm_ctxpopup_horizontal_set(eo, EINA_TRUE);
+ elm_ctxpopup_direction_priority_set(eo,
+ ELM_CTXPOPUP_DIRECTION_DOWN,
+ ELM_CTXPOPUP_DIRECTION_UP,
+ ELM_CTXPOPUP_DIRECTION_LEFT,
+ ELM_CTXPOPUP_DIRECTION_RIGHT);
+
+ return eo;
+}
+
+Evas_Object *_add_label(Evas_Object *parent, const char *msg)
+{
+ Evas_Object *eo = NULL;
+
+ eo = elm_label_add(parent);
+ if (eo == NULL) {
+ printf("[Error] Cannot add label\n");
+ return NULL;
+ }
+
+ elm_label_line_wrap_set(eo, ELM_WRAP_WORD);
+ elm_object_text_set(eo, msg);
+
+ return eo;
+}
+
+static Eina_Bool _disappear_popup(void *data)
+{
+ Evas_Object *eo = (Evas_Object *)data;
+ if (eo == NULL) {
+ printf("[Error] Invalid argument: popup is NULL\n");
+ return ECORE_CALLBACK_CANCEL;
+ }
+ evas_object_del(eo);
+ return ECORE_CALLBACK_CANCEL;
+}
+
+Evas_Object *_add_popup_ask(Evas_Object *parent, char *text, void *data)
+{
+ Evas_Object *pu, *bt1, *bt2;
+ retvm_if(parent == NULL, NULL, "Invalid argument: parent is NULL\n");
+
+ pu = elm_popup_add(parent);
+ retvm_if(pu == NULL, NULL, "Falied to add popup\n");
+ evas_object_size_hint_weight_set(pu, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ elm_object_part_text_set(pu, "title,text", D_("IDS_COM_POP_WARNING"));
+ elm_object_text_set(pu, text);
+ evas_object_show(pu);
+
+ bt1 = elm_button_add(pu);
+ elm_object_text_set(bt1, D_("IDS_COM_SK_OK"));
+ elm_object_part_content_set(pu, "button1", bt1);
+ evas_object_smart_callback_add(bt1, "clicked", _ok_response_cb, data);
+
+ bt2 = elm_button_add(pu);
+ elm_object_text_set(bt2, _("IDS_COM_POP_CANCEL"));
+ elm_object_part_content_set(pu, "button2", bt2);
+ evas_object_smart_callback_add(bt2, "clicked", _cancel_response_cb, data);
+
+
+ return pu;
+}
+
+void util_show_popup_with_message(Evas_Object *parent, double in,
+ const char *msg)
+{
+ Evas_Object *eo = NULL;
+
+ eo = elm_popup_add(parent);
+ if (eo == NULL) {
+ printf("[Error] Cannot add popup\n");
+ return;
+ }
+
+ evas_object_size_hint_weight_set(eo, EVAS_HINT_EXPAND,
+ EVAS_HINT_EXPAND);
+ elm_object_text_set(eo, msg);
+
+ ecore_timer_add(in, _disappear_popup, eo);
+}
+
+Evas_Object *_add_naviframe(Evas_Object *parent)
+{
+ Evas_Object *nv;
+
+ retv_if(parent == NULL, NULL);
+
+ nv = elm_naviframe_add(parent);
+ retvm_if(nv == NULL, NULL, "Failed to add naviframe\n");
+ elm_object_part_content_set(parent, "elm.swallow.content", nv);
+
+ evas_object_show(nv);
+
+ return nv;
+}
+
+Evas_Object *_add_layout_main(Evas_Object *parent,
+ Eina_Bool content, Eina_Bool transparent)
+{
+ Evas_Object *ly;
+
+ retv_if(parent == NULL, NULL);
+
+ ly = elm_layout_add(parent);
+ retvm_if(ly == NULL, NULL, "Failed elm_layout_add.\n");
+
+ elm_layout_theme_set(ly, "layout", "application", "default");
+ evas_object_size_hint_weight_set(ly,
+ EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ elm_win_resize_object_add(parent, ly);
+ if (content)
+ elm_object_signal_emit(ly, "elm,state,show,content", "elm");
+ if (transparent)
+ elm_object_signal_emit(ly, "elm,bg,show,transparent", "elm");
+ evas_object_show(ly);
+ return ly;
+}
+
+Evas_Object *_add_progressbar(Evas_Object *parent, const char *style,
+ Evas_Coord w, Evas_Coord h)
+{
+ Evas_Object *pb;
+ double scale;
+
+ retvm_if(parent == NULL, NULL, "Invalid argument: parent is NULL\n");
+
+ scale = elm_config_scale_get();
+
+ pb = elm_progressbar_add(parent);
+ retvm_if(pb == NULL, NULL, "Failed to add progressbar\n");
+
+ elm_object_style_set(pb, style);
+ evas_object_resize(pb, w, (int)(60 * scale));
+ evas_object_move(pb, 0, h / 2);
+ elm_progressbar_pulse(pb, EINA_TRUE);
+ evas_object_show(pb);
+
+ return pb;
+}
+
+
diff --git a/src/_util_efl.h b/src/_util_efl.h
new file mode 100644
index 0000000..c933233
--- /dev/null
+++ b/src/_util_efl.h
@@ -0,0 +1,39 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 __TASKMANAGER_UTIL_EFL_H__
+#define __TASKMANAGER_UTIL_EFL_H__
+
+#include <Elementary.h>
+
+Evas_Object *_add_window(const char *name);
+Evas_Object *_add_bg(Evas_Object *parent, char *style);
+Evas_Object *_add_genlist(Evas_Object *parent);
+Evas_Object *_add_icon(Evas_Object *parent, const char *png);
+Evas_Object *_add_layout(Evas_Object *parent, const char *file, const char *group);
+Evas_Object *_add_ctxpopup(Evas_Object *parent);
+Evas_Object *_add_label(Evas_Object *parent, const char *msg);
+Evas_Object *_add_naviframe(Evas_Object *parent);
+Evas_Object *_add_layout_main(Evas_Object *parent,
+ Eina_Bool content, Eina_Bool transparent);
+Evas_Object *_add_progressbar(Evas_Object *parent, const char *style,
+ Evas_Coord w, Evas_Coord h);
+Evas_Object *_add_popup_ask(Evas_Object *parent, char *text, void *data);
+void util_show_popup_with_message(Evas_Object *parent, double in, const char *msg);
+
+#endif
+/* __TASKMANAGER_UTIL_EFL_H__ */
diff --git a/src/_util_log.h b/src/_util_log.h
new file mode 100644
index 0000000..c65a3d0
--- /dev/null
+++ b/src/_util_log.h
@@ -0,0 +1,60 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 __TASKMANAGER_UTIL_LOG_H__
+#define __TASKMANAGER_UTIL_LOG_H__
+
+#include <unistd.h>
+#include <dlog.h>
+
+#undef LOG_TAG
+#define LOG_TAG "TASKMANAGER"
+#define _E(fmt, arg...) LOGE("[%s,%d] "fmt,__FUNCTION__,__LINE__,##arg)
+#define _D(fmt, arg...) LOGD("[%s,%d] "fmt,__FUNCTION__,__LINE__,##arg)
+
+#define retvm_if(expr, val, fmt, arg...) do { \
+ if(expr) { \
+ _E(fmt, ##arg); \
+ _E("(%s) -> %s() return", #expr, __FUNCTION__); \
+ return (val); \
+ } \
+} while (0)
+
+#define retv_if(expr, val) do { \
+ if(expr) { \
+ _E("(%s) -> %s() return", #expr, __FUNCTION__); \
+ return (val); \
+ } \
+} while (0)
+
+#define retm_if(expr, fmt, arg...) do { \
+ if(expr) { \
+ _E(fmt, ##arg); \
+ _E("(%s) -> %s() return", #expr, __FUNCTION__); \
+ return; \
+ } \
+} while (0)
+
+#define ret_if(expr) do { \
+ if(expr) { \
+ _E("(%s) -> %s() return", #expr, __FUNCTION__); \
+ return; \
+ } \
+} while (0)
+
+#endif
+/* __TASKMANAGER_UTIL_LOG_H__ */
diff --git a/src/taskmanager.c b/src/taskmanager.c
new file mode 100644
index 0000000..2c0264e
--- /dev/null
+++ b/src/taskmanager.c
@@ -0,0 +1,267 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 <stdio.h>
+#include <unistd.h>
+#include <appcore-efl.h>
+#include <Elementary.h>
+#include <Ecore_X.h>
+#include <utilX.h>
+#include <vconf.h>
+#include <aul.h>
+#include <sysman.h>
+
+#include "taskmanager.h"
+#include "_util_log.h"
+#include "_util_efl.h"
+#include "_logic.h"
+#include "_genlist.h"
+
+struct text_part {
+ char *part;
+ char *msgid;
+};
+
+static struct text_part main_txt[] = {
+};
+
+static void update_ts(Evas_Object *eo, struct text_part *tp, int size)
+{
+ int i;
+
+ if (eo == NULL || tp == NULL || size < 0)
+ return;
+
+ for (i = 0; i < size; i++) {
+ if (tp[i].part && tp[i].msgid)
+ edje_object_part_text_set(eo,
+ tp[i].part, _(tp[i].msgid));
+ }
+}
+
+static int _lang_changed(void *data)
+{
+ struct appdata *ad = data;
+
+ if (ad->ly == NULL)
+ return 0;
+
+ update_ts(elm_layout_edje_get(ad->ly),
+ main_txt, sizeof(main_txt) / sizeof(main_txt[0]));
+
+ return 0;
+}
+
+static int rotate(enum appcore_rm m, void *data)
+{
+ struct appdata *ad = data;
+ int r;
+
+ if (ad == NULL || ad->win == NULL)
+ return 0;
+
+ switch (m) {
+ case APPCORE_RM_PORTRAIT_NORMAL:
+ r = 0;
+ break;
+ case APPCORE_RM_PORTRAIT_REVERSE:
+ r = 180;
+ break;
+ case APPCORE_RM_LANDSCAPE_NORMAL:
+ r = 270;
+ break;
+ case APPCORE_RM_LANDSCAPE_REVERSE:
+ r = 90;
+ break;
+ default:
+ r = -1;
+ break;
+ }
+
+ if (r >= 0)
+ elm_win_rotation_with_resize_set(ad->win, r);
+
+ return 0;
+}
+
+Eina_Bool _exit_cb(void *data)
+{
+ elm_exit();
+ return ECORE_CALLBACK_CANCEL;
+}
+
+void _key_grab(struct appdata *ad)
+{
+ int ret = 0;
+ Ecore_X_Window xwin; /* key grab */
+ Ecore_X_Display *disp; /* key grab */
+
+ /* Key Grab */
+ disp = ecore_x_display_get();
+ xwin = elm_win_xwindow_get(ad->win);
+
+ ret = utilx_grab_key(disp, xwin, KEY_SELECT, SHARED_GRAB);
+ retm_if(ret < 0, "Failed to grab home key\n");
+}
+
+int _set_launch_effect(Evas_Object *win)
+{
+ Ecore_X_Window xwin = 0;
+ static Ecore_X_Atom ATOM_WM_WINDOW_ROLE = 0;
+ static Ecore_X_Atom ATOM_NET_WM_NAME = 0;
+ retvm_if(win == NULL, -1, "[Error] Invalid argument: win is NULL\n");
+
+ ATOM_WM_WINDOW_ROLE = ecore_x_atom_get("WM_WINDOW_ROLE");
+ if (!ATOM_WM_WINDOW_ROLE) {
+ fprintf(stderr,
+ "[App] %s(%d) XInternAtom(WM_WINDOW_ROLE) failed.\n",
+ __func__, __LINE__);
+ }
+
+ ATOM_NET_WM_NAME = ecore_x_atom_get("_NET_WM_NAME");
+ if (!ATOM_NET_WM_NAME) {
+ fprintf(stderr,
+ "[App] %s(%d) XInternAtom(ATOM_NET_WM_NAME) failed.\n",
+ __func__, __LINE__);
+ }
+
+ xwin = elm_win_xwindow_get(win);
+ ecore_x_window_prop_string_set(xwin, ATOM_WM_WINDOW_ROLE,
+ "TASK_MANAGER");
+ ecore_x_window_prop_string_set(xwin, ATOM_NET_WM_NAME, "TASK_MANAGER");
+
+ ecore_x_icccm_name_class_set(xwin, "TASK_MANAGER", "TASK_MANAGER");
+ return 0;
+}
+
+int _unset_notification_level(Evas_Object *win)
+{
+ Ecore_X_Window xwin;
+
+ xwin = elm_win_xwindow_get(win);
+ ecore_x_netwm_window_type_set(xwin, ECORE_X_WINDOW_TYPE_NORMAL);
+ return 0;
+}
+
+
+int _set_notification_level(Evas_Object *win, Utilx_Notification_Level level)
+{
+ Ecore_X_Window xwin = 0;
+
+ xwin = elm_win_xwindow_get(win);
+ ecore_x_netwm_window_type_set(xwin, ECORE_X_WINDOW_TYPE_NOTIFICATION);
+ utilx_set_system_notification_level(ecore_x_display_get(), xwin, level);
+ return 0;
+}
+
+int app_create(void *data)
+{
+ Evas_Object *win;
+ struct appdata *ad = data;
+ int r;
+
+ win = _add_window(PACKAGE);
+ retv_if(win == NULL, -1);
+ elm_win_indicator_mode_set(win, ELM_WIN_INDICATOR_SHOW);
+ ad->win = win;
+
+ _set_launch_effect(win);
+// _set_notification_level(win, UTILX_NOTIFICATION_LEVEL_NORMAL);
+
+ elm_theme_extension_add(NULL, EDJ_THEME);
+
+ _app_create(ad);
+ _set_itc();
+ _set_genlist(ad);
+
+ /* set dead signal listener */
+ aul_listen_app_dead_signal(_dead_cb, ad);
+
+ /* init internationalization */
+ r = appcore_set_i18n(PACKAGE, LOCALEDIR);
+ retvm_if(r < 0, -1, "Failed to set i18n\n");
+ _lang_changed(ad);
+
+ appcore_set_event_callback(APPCORE_EVENT_LANG_CHANGE,
+ _lang_changed, ad);
+
+ _restart_pthread(ad);
+ ecore_idler_add(_create_idler_cb, ad);
+
+ return 0;
+}
+
+static int app_terminate(void *data)
+{
+_D("func\n");
+ struct appdata *ad = data;
+ evas_object_del(ad->win);
+ return 0;
+}
+
+static int app_pause(void *data)
+{
+_D("func\n");
+ _fini_pthread();
+ elm_exit();
+ return 0;
+}
+
+static int app_resume(void *data)
+{
+_D("func\n");
+// elm_exit();
+ return 0;
+}
+
+static int app_reset(bundle *b, void *data)
+{
+ struct appdata *ad = data;
+
+ /* appcore measure time example */
+ printf("from AUL to %s(): %d msec\n", __func__,
+ appcore_measure_time_from("APP_START_TIME"));
+ printf("from create to %s(): %d msec\n", __func__,
+ appcore_measure_time());
+
+ if (ad->win)
+ elm_win_activate(ad->win);
+ return 0;
+}
+
+int main(int argc, char *argv[])
+{
+ sysconf_set_mempolicy(OOM_IGNORE);
+
+ struct appdata ad;
+ struct appcore_ops ops = {
+ .create = app_create,
+ .terminate = app_terminate,
+ .pause = app_pause,
+ .resume = app_resume,
+ .reset = app_reset,
+ };
+
+ /* appcore measure time example */
+ _D("from AUL to %s(): %d msec\n", __func__,
+ appcore_measure_time_from("APP_START_TIME"));
+
+ memset(&ad, 0x0, sizeof(struct appdata));
+ ops.data = &ad;
+
+ return appcore_efl_main(PACKAGE, &argc, &argv, &ops);
+}
diff --git a/src/taskmanager.h b/src/taskmanager.h
new file mode 100644
index 0000000..d77b835
--- /dev/null
+++ b/src/taskmanager.h
@@ -0,0 +1,123 @@
+ /*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 __TASKMANAGER_H__
+#define __TASKMANAGER_H__
+
+#include <Elementary.h>
+#include <Ecore_X.h>
+#include <utilX.h>
+#include <bundle.h>
+
+#if !defined(PACKAGE)
+#define PACKAGE "taskmanager"
+#endif
+
+#ifndef PREFIX
+#define PREFIX "/opt/apps/org.tizen."PACKAGE
+#endif
+
+#if !defined(RESDIR)
+# define RESDIR PREFIX"/res"
+#endif
+
+#if !defined(LOCALEDIR)
+#define LOCALEDIR RESDIR"/locale"
+#endif
+
+#if !defined(EDJDIR)
+#define EDJDIR RESDIR"/edje"PACKAGE
+#endif
+
+#if !defined(IMAGEDIR)
+# define IMAGEDIR RESDIR"/images/"PACKAGE
+#endif
+
+#define EDJ_NAME EDJDIR"/taskmgr.edj"
+#define EDJ_THEME EDJDIR"/theme_taskmanager.edj"
+#define GRP_TM "task_manager"
+
+#define D_(str) dgettext("sys_string", str)
+#define _BUF_MAX 256
+#define _EDJ(x) elm_layout_edje_get(x)
+
+#define POPUP_TIMER 1.0
+#define POPUP_TERMINATE_TIMER 1.5
+
+struct appdata {
+ Evas *evas;
+ Evas_Object *win, *ly, *nv, *gl;
+
+ Evas_Coord root_w, root_h;
+
+ Eina_List *applist[2];
+ /* runapp : 0, history: 1 */
+
+ Ecore_Timer *popup_timer;
+ Evas_Object *popup_ask;
+ Evas_Object *popup_progressbar;
+
+ Ecore_Timer *update_timer;
+
+ double mem_total;
+
+ int mode;
+ int ending;
+ int endcnt;
+};
+
+struct _task_info {
+ char *app_name;
+ char *pkg_name;
+ char *icn_path;
+ pid_t pid;
+ struct appdata *ad;
+ double mem, mem_total;
+ double cpu;
+ Elm_Object_Item *it;
+ int category;
+ bundle *b;
+ unsigned int oldutime, oldstime;
+ struct timeval oldtimev;
+};
+
+ /* MODE_KILL_INUSE = MODE_END_INUSE * 2
+ * MODE_KILL_ALL_INUSE = MODE_END_ALL_INUSE * 2
+ */
+enum task_mode {
+ MODE_NONE = 0,
+ MODE_END_INUSE,
+ MODE_KILL_INUSE,
+ MODE_END_ALL_INUSE,
+ MODE_DEL_HISTORY,
+ MODE_DEL_ALL_HISTORY,
+ MODE_KILL_ALL_INUSE,
+};
+
+enum task_status {
+ TS_INUSE = 0,
+ TS_HISTORY,
+ TS_MAX,
+};
+
+Evas_Object *load_edj(Evas_Object *parent, const char *file, const char *group);
+int _unset_notification_level(Evas_Object *win);
+int _set_notification_level(Evas_Object *win, Utilx_Notification_Level level);
+Eina_Bool _exit_cb(void *data);
+
+#endif
+/* __TASKMANAGER_H___ */