From edd65dc36c8805bcc70dc77418c399e2506693e7 Mon Sep 17 00:00:00 2001 From: Jinkun Jang Date: Wed, 13 Mar 2013 01:38:21 +0900 Subject: [PATCH] Tizen 2.1 base --- AUTHORS | 2 + CMakeLists.txt | 104 ++ LICENSE.Flora | 206 ++++ NOTICE | 4 + data/CMakeLists.txt | 20 + data/icons/00_button_01_normal.png | Bin 0 -> 3264 bytes data/icons/00_button_01_press.png | Bin 0 -> 3318 bytes data/icons/taskman_def_content.png | Bin 0 -> 2856 bytes data/icons/taskmgr_title_icon_info.png | Bin 0 -> 3142 bytes data/images/39_multitasking_btn_bg.png | Bin 0 -> 2852 bytes data/images/PUT_IMAGES_HERE | 0 data/taskmgr.edc | 188 +++ data/themes/00_button_02_focus.png | Bin 0 -> 3382 bytes data/themes/00_button_02_press.png | Bin 0 -> 3407 bytes data/themes/00_button_03_focus.png | Bin 0 -> 3288 bytes data/themes/00_button_03_normal.png | Bin 0 -> 3227 bytes data/themes/00_button_03_press.png | Bin 0 -> 3268 bytes data/themes/00_button_delete.png | Bin 0 -> 4128 bytes data/themes/00_button_delete_text.png | Bin 0 -> 4023 bytes data/themes/00_list_bar_press_1x80.png | Bin 0 -> 2872 bytes data/themes/39_mini_controller_bg.png | Bin 0 -> 3138 bytes data/themes/39_mini_controller_button_nor.png | Bin 0 -> 3112 bytes data/themes/39_mini_controller_button_press.png | Bin 0 -> 3158 bytes data/themes/39_multitasking_btn_01.png | Bin 0 -> 3362 bytes data/themes/theme_taskmanager.edc | 1446 +++++++++++++++++++++++ debian/changelog | 20 + debian/compat | 1 + debian/control | 18 + debian/org.tizen.taskmgr.install.in | 3 + debian/org.tizen.taskmgr.postinst | 8 + debian/rules | 119 ++ org.tizen.taskmgr.manifest | 17 + org.tizen.taskmgr.png | Bin 0 -> 5759 bytes org.tizen.taskmgr.xml | 9 + packaging/org.tizen.taskmgr.spec | 48 + po/CMakeLists.txt | 24 + po/POTFILES.in | 10 + po/ar.po | 36 + po/az.po | 36 + po/bg.po | 36 + po/ca.po | 36 + po/cs.po | 36 + po/da.po | 36 + po/de_DE.po | 36 + po/el_GR.po | 36 + po/en.po | 36 + po/en_GB.po | 18 + po/en_PH.po | 36 + po/en_US.po | 36 + po/es_ES.po | 36 + po/es_MX.po | 36 + po/es_US.po | 36 + po/et.po | 36 + po/eu.po | 36 + po/fi.po | 36 + po/fr_CA.po | 36 + po/fr_FR.po | 36 + po/ga.po | 36 + po/gl.po | 36 + po/he.po | 18 + po/hi.po | 36 + po/hr.po | 36 + po/hu.po | 36 + po/hy.po | 36 + po/id.po | 18 + po/is.po | 36 + po/it_IT.po | 36 + po/ja_JP.po | 36 + po/ka.po | 36 + po/kk.po | 36 + po/ko_KR.po | 36 + po/lt.po | 36 + po/lv.po | 36 + po/mk.po | 36 + po/ms.po | 18 + po/nb.po | 36 + po/nl_NL.po | 36 + po/no.po | 18 + po/pl.po | 36 + po/pt_BR.po | 36 + po/pt_PT.po | 36 + po/ro.po | 36 + po/ru_RU.po | 36 + po/sk.po | 36 + po/sl.po | 36 + po/sr.po | 36 + po/sv.po | 36 + po/taskmgr.pot | 58 + po/th.po | 18 + po/tr_TR.po | 36 + po/uk.po | 36 + po/update-po.sh | 57 + po/uz.po | 36 + po/vi.po | 18 + po/zh_CN.po | 36 + po/zh_HK.po | 36 + po/zh_SG.po | 36 + po/zh_TW.po | 36 + src/_cpu.c | 111 ++ src/_cpu.h | 28 + src/_eina.c | 303 +++++ src/_eina.h | 36 + src/_genlist.c | 854 +++++++++++++ src/_genlist.h | 45 + src/_info.c | 134 +++ src/_info.h | 28 + src/_logic.c | 352 ++++++ src/_logic.h | 33 + src/_progressbar.c | 51 + src/_progressbar.h | 28 + src/_util_efl.c | 270 +++++ src/_util_efl.h | 42 + src/_util_log.h | 63 + src/taskmanager.c | 301 +++++ src/taskmanager.h | 133 +++ 115 files changed, 7172 insertions(+) create mode 100644 AUTHORS create mode 100755 CMakeLists.txt create mode 100755 LICENSE.Flora create mode 100755 NOTICE create mode 100755 data/CMakeLists.txt create mode 100644 data/icons/00_button_01_normal.png create mode 100644 data/icons/00_button_01_press.png create mode 100755 data/icons/taskman_def_content.png create mode 100644 data/icons/taskmgr_title_icon_info.png create mode 100755 data/images/39_multitasking_btn_bg.png create mode 100755 data/images/PUT_IMAGES_HERE create mode 100755 data/taskmgr.edc create mode 100755 data/themes/00_button_02_focus.png create mode 100755 data/themes/00_button_02_press.png create mode 100644 data/themes/00_button_03_focus.png create mode 100644 data/themes/00_button_03_normal.png create mode 100644 data/themes/00_button_03_press.png create mode 100644 data/themes/00_button_delete.png create mode 100644 data/themes/00_button_delete_text.png create mode 100755 data/themes/00_list_bar_press_1x80.png create mode 100755 data/themes/39_mini_controller_bg.png create mode 100755 data/themes/39_mini_controller_button_nor.png create mode 100755 data/themes/39_mini_controller_button_press.png create mode 100755 data/themes/39_multitasking_btn_01.png create mode 100755 data/themes/theme_taskmanager.edc create mode 100644 debian/changelog create mode 100755 debian/compat create mode 100644 debian/control create mode 100644 debian/org.tizen.taskmgr.install.in create mode 100755 debian/org.tizen.taskmgr.postinst create mode 100755 debian/rules create mode 100755 org.tizen.taskmgr.manifest create mode 100755 org.tizen.taskmgr.png create mode 100755 org.tizen.taskmgr.xml create mode 100755 packaging/org.tizen.taskmgr.spec create mode 100644 po/CMakeLists.txt create mode 100644 po/POTFILES.in create mode 100644 po/ar.po create mode 100644 po/az.po create mode 100644 po/bg.po create mode 100644 po/ca.po create mode 100644 po/cs.po create mode 100644 po/da.po create mode 100644 po/de_DE.po create mode 100644 po/el_GR.po create mode 100644 po/en.po create mode 100644 po/en_GB.po create mode 100644 po/en_PH.po create mode 100644 po/en_US.po create mode 100644 po/es_ES.po create mode 100644 po/es_MX.po create mode 100644 po/es_US.po create mode 100644 po/et.po create mode 100644 po/eu.po create mode 100644 po/fi.po create mode 100644 po/fr_CA.po create mode 100644 po/fr_FR.po create mode 100644 po/ga.po create mode 100644 po/gl.po create mode 100644 po/he.po create mode 100644 po/hi.po create mode 100644 po/hr.po create mode 100644 po/hu.po create mode 100644 po/hy.po create mode 100644 po/id.po create mode 100644 po/is.po create mode 100644 po/it_IT.po create mode 100644 po/ja_JP.po create mode 100644 po/ka.po create mode 100644 po/kk.po create mode 100644 po/ko_KR.po create mode 100644 po/lt.po create mode 100644 po/lv.po create mode 100644 po/mk.po create mode 100644 po/ms.po create mode 100644 po/nb.po create mode 100644 po/nl_NL.po create mode 100644 po/no.po create mode 100644 po/pl.po create mode 100644 po/pt_BR.po create mode 100644 po/pt_PT.po create mode 100644 po/ro.po create mode 100644 po/ru_RU.po create mode 100644 po/sk.po create mode 100644 po/sl.po create mode 100644 po/sr.po create mode 100644 po/sv.po create mode 100644 po/taskmgr.pot create mode 100644 po/th.po create mode 100644 po/tr_TR.po create mode 100644 po/uk.po create mode 100755 po/update-po.sh create mode 100644 po/uz.po create mode 100644 po/vi.po create mode 100644 po/zh_CN.po create mode 100644 po/zh_HK.po create mode 100644 po/zh_SG.po create mode 100644 po/zh_TW.po create mode 100755 src/_cpu.c create mode 100755 src/_cpu.h create mode 100755 src/_eina.c create mode 100755 src/_eina.h create mode 100755 src/_genlist.c create mode 100755 src/_genlist.h create mode 100755 src/_info.c create mode 100755 src/_info.h create mode 100755 src/_logic.c create mode 100755 src/_logic.h create mode 100755 src/_progressbar.c create mode 100755 src/_progressbar.h create mode 100755 src/_util_efl.c create mode 100755 src/_util_efl.h create mode 100755 src/_util_log.h create mode 100755 src/taskmanager.c create mode 100755 src/taskmanager.h diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 0000000..566bee7 --- /dev/null +++ b/AUTHORS @@ -0,0 +1,2 @@ +Hong Kwon +Minho Kim diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100755 index 0000000..c8d3038 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,104 @@ +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/_info.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 "/opt/usr/apps/org.${VENDOR}.${PACKAGE}/data") +SET(LOCALEDIR "${RESDIR}/locale") +SET(ICONDIR "/usr/share/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}.xml DESTINATION /usr/share/packages) +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/LICENSE.Flora b/LICENSE.Flora new file mode 100755 index 0000000..9c95663 --- /dev/null +++ b/LICENSE.Flora @@ -0,0 +1,206 @@ +Flora License + +Version 1.0, May, 2012 + +http://floralicense.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://floralicense.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 100755 index 0000000..3997999 --- /dev/null +++ b/NOTICE @@ -0,0 +1,4 @@ +Copyright (c) Samsung Electronics Co., Ltd. All rights reserved. +Except as noted, this software is licensed under Flora License, Version 1. +Please, see the LICENSE file for Flora License terms and conditions. + 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 0000000000000000000000000000000000000000..cf6db1577164f36b700e50ac42f043e819182554 GIT binary patch literal 3264 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 yN8p9+xKG0IhXVkw6K2mNw~g!o0000 literal 0 HcmV?d00001 diff --git a/data/icons/00_button_01_press.png b/data/icons/00_button_01_press.png new file mode 100644 index 0000000000000000000000000000000000000000..717924639d4f8d4d3baddc2006c682375e321f68 GIT binary patch literal 3318 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 At^fc4 literal 0 HcmV?d00001 diff --git a/data/icons/taskman_def_content.png b/data/icons/taskman_def_content.png new file mode 100755 index 0000000000000000000000000000000000000000..22e995a28b49abb49b47f935f7c298a26f9c48a6 GIT binary patch literal 2856 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 M07*qoM6N<$g0s0p@&Et; literal 0 HcmV?d00001 diff --git a/data/themes/00_button_02_press.png b/data/themes/00_button_02_press.png new file mode 100755 index 0000000000000000000000000000000000000000..df6c4d0d7eff8bfa855eeb95c8bc5dbaef926e66 GIT binary patch literal 3407 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 literal 0 HcmV?d00001 diff --git a/data/themes/00_button_03_focus.png b/data/themes/00_button_03_focus.png new file mode 100644 index 0000000000000000000000000000000000000000..72d99ec065f21083419aae1618e7aff9239a744e GIT binary patch literal 3288 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 N002ovPDHLkV1gtk05kvq literal 0 HcmV?d00001 diff --git a/data/themes/00_button_03_press.png b/data/themes/00_button_03_press.png new file mode 100644 index 0000000000000000000000000000000000000000..b973210a6034ec6f0cdd74d529647bd2af679373 GIT binary patch literal 3268 zcmV;#3_J6QP)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z0005+Nkl2?0BZ@a~6O_U^Z8sT^^;!(Rd?XvRn?SwR zi2G)`{(5cWZdBgdMwudR)FJ=*8SgAAFnDJPN+E@{G8^}w(m(tVr9Zwp;HBDoRe51d z;Z0cCA}EE}VH-O-Lh>ivlDYlILUO*9h3LV)qij$T)1=wtnR@w7BtY8Y2LI*_X5C31D__DpcD)BG!uXW4K!OF zi(g=Sub|bj08L$M#BYbG?6%q#^_Q*Hwv1BQtu^9zvuu4Q?%E(3OH{pOxPDDjF!O=U zttS}^@psEGktVQnQZJlSa6AF3X96ArduI!d-va&_`_xk;`70000KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z000F`NklH365=wAk4W5D!UnMH*Vet0~rjw8Mbv;n~OSg(&nQ{PU1N^$;nC1dv>Ae zG-hp+wP{~?NFd3{@BE+l`FNj09LK?0UL4l=5-M-boH%IQTlPCWLtOIHXfFOW3y1Kf&ot>R9h6h&y7w%xXE zXqvV&old_UjYcn0N^b$U5DtfbXh^{&fISc3n9Jol(cj;X-rinFl2r4%ZEbA;0FTE5 zN-2hihmlUFcTZ1G?*?$%4DSfSB zKuYO1Jv}|6`}glhYilbU$5}S(>+8dwJ$oPs!Zk|iyLAInO3!WDv?(|;G6F#mRwRXV zb#-Cy-o4;B?lPtH#U%q$Ne_rA32;QaUI}(y3j$ zc7YIrW>gwVDO6Q`D;y3d0erZag28Ruwqf16bxo}p0|NtSX=yoL?P{*-PIk(&9Hf-4 zxNECT5CjAQ0WijnE~H>E5D3iYxMmsv`2Bu}qWC7I^topMDW$DE&mZ>rd`*X|7|-+Y z`FyZ#`$#PXU)i{E1-kYO0By7wH%foFP1YP%IV^f0Sc?tW}F00N*N#vMSw7u~*0Vy-6O+}xaL+xBQE6sjc4rnokr&qGyJBoYZ|ns$1@mS0hn zvvYHEm!i>VC1I}UGEEbjrs3Ybd*C>3)UqsXu`>w+aA9g{3fXKH<#Kt&)T^YFyLa!x zvaIvTWb)jSj-8Q62`9~&D(BoaZXRDx~W%aV)@!$2mJ!NkM_lF8(ibUJ+$K(XG@hch!XbBPf0QYaMq zX>xKBx~{{rtcHTewr%9|c|3gh5YcE9FN0_nM}SDkH=r-d45C?1h`x-5JEr*nJ-(VQVE4ZAw>xJjpzAa z4a2x*nr2-sQzK_gCmM~00elYNl;7{~WQ=Xrb^Qg#m<&JyU^$L6&2d~TlgW$&C^Z`K eWUW7j_-6nM3f5SQbhn}a0000KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z000EyNkl7fvbM$$?v7KHZJQ!nkM z0YTat5IhwM#Wret3fO~GD0u5dFSVyyXiI6U7-9=G$+~}VH?wYbmkhhJ^JaQUtcuaZ z#AGA>;4zmsZ|2MQ_x=5Qn(zBO4<>j{?70DAoIZVe$(yB=I`HQF8UR{>J@e0%m;$Z= z4)68jS|GZ{OzT z&70I}wJ(7)sZ{FDV*B+&hYl?U;$0!cZ@YHw+P`=2-g^wJnRtaD7K_o-(}S+-`-{cm z@kk_+DwoUGmMnHD<%wW0cyVxWkiNb?48vGI5gP`(ckgCsXoz4icwS0*Vo8ihDM#Ac z+D;ufaDYf8(lk-YG))qT1cgH34bwE;a=CnUQAVVc?*;;aF9rq%FijKR_nT^&rpdm2 z`)F-#{Y*;v-XnoXDI-FNi~armghHXF%@?L=(%;{YrfC^u9!@a$|>l&S&#>JA! zBuc5H076P>>biccv$JzUuyH>tot>R%nl>z@3>(0~_V#uR!(gM8^oC*3-rkO7S??IY z;f{_DHez2QgdiG?lF#Q~Gk`teaCpN4*|cdBN~u>2pnD&rSMkW8XSqfhTz z^A*I3+DfHx90#Ck08_SYcLjsNWgYU;*|Y2JR!S*s+Xk36fE(3nbto2#Z8&|nu1mFA zMboqi0bD5-iyKntjYfk~sRZz|p_Ka3vMd^n2D+}JY1)PX;W!SKW#Kr^_ac+Y*q-No zoy+Am3tfqB)oPWgsVOEWC($(R*v!n#sfR&4ZW`}rGMV#_%@wR zADy0_em@)z6OBgMym>RgstofMgzWo1l}d%#*;%U9D!_L_h_SnO@BX?FoffU8m-3x# zHv1Rw!ImvsKCIX4Z{>2i!>;QNdY&hMmsctG{4IoVfj@;1mu=g=T&vaQmin^x;xhCF dkY{864FJ;A`l*>l>3jeH002ovPDHLkV1lfpnt%WR literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..1dc6e15871bddaff608b602833a513c299ea27e1 GIT binary patch literal 2872 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

Uc4vESyYpYKErbyEYun$`hW`~@lS(;& z{K3&~Q#A&7ZCp9?gqb)&~IfmzpoYg(d5Ep9263P_hit&DNs;0000KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z0004jNkl!F}1TQg8?u>=OxFcRMTs&~#z?pyk|12;g+so5z?d5xcB(MPV^0{S! zbs#k}9^aRxxuF52Br}>wFp`*{xuxS%q<>c=bF|N1I!$2hm wvogiz?(J~(vpx@WeSyyb8$fDyvMv2M05fBGTC5MSxc~qF07*qoM6N<$f_)9wcmMzZ literal 0 HcmV?d00001 diff --git a/data/themes/39_multitasking_btn_01.png b/data/themes/39_multitasking_btn_01.png new file mode 100755 index 0000000000000000000000000000000000000000..13a3f74f2c8282dbf3aa4df2c42dc3769ad09c0e GIT binary patch literal 3362 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 Mon, 21 Jan 2013 13:45:25 +0900 + +taskmanager (0.14.3-1) oneiric; urgency=low + + * Fix N_SE-17797 : Running Apps are blinking. + + -- minho07.kim Mon, 07 Jan 2013 15:26:49 +0900 + +taskmanager (0.14.2-1) oneiric; urgency=low + + * Apply open code + * Git : apps/home/taskmanager + * Tag : taskmanager_0.14.2-1 + + -- Hong Kwon Mon, 13 Aug 2012 19:47:16 +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..86b9915 --- /dev/null +++ b/debian/control @@ -0,0 +1,18 @@ +Source: taskmanager +Section: devel +Priority: extra +Maintainer: Junghyun Kim , hhh.kwon +Uploaders: Noha Park +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/org.tizen.taskmgr.install.in b/debian/org.tizen.taskmgr.install.in new file mode 100644 index 0000000..b3f2e22 --- /dev/null +++ b/debian/org.tizen.taskmgr.install.in @@ -0,0 +1,3 @@ +@PREFIX@/* +/usr/share/applications/* +/usr/share/icons/default/small/org.tizen.taskmgr.png diff --git a/debian/org.tizen.taskmgr.postinst b/debian/org.tizen.taskmgr.postinst new file mode 100755 index 0000000..ab566dd --- /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 /usr/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.manifest b/org.tizen.taskmgr.manifest new file mode 100755 index 0000000..9287ef9 --- /dev/null +++ b/org.tizen.taskmgr.manifest @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/org.tizen.taskmgr.png b/org.tizen.taskmgr.png new file mode 100755 index 0000000000000000000000000000000000000000..ef74fd1f771bfaa00f098b1014b903cd3f8f1797 GIT binary patch literal 5759 zcmV-_7J%uAP)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=00004XF*Lt006O$eEU(80000WV@Og>004R=004l4008;_004mL004C` z008P>0026e000+nl3&F}000Y`NklSbz{hs9hBVDiRxnXz2n36bQ7a5498mF-b`Y zG-(?*ac1m!-p4uTV=;GF?~$w|V`nt}-T(Q2kNM7AVrHak^_NHyq@YvK z=}JM5>{82pv)OFU0{9kyTL4gs>-?p)wv9&P*Z1Cg@7?#`fB(^A$Bq$zv)M&=qCv}L z9nEI**8o1)`A?jtDCfYn7jn5A4jw%Cz-_nP_UZZg`7jZ$xe)ZSie~2b0DyDOMp5*# zF{Z-IsoeljN=^8_zX^b_*6sjs6@a4vbfRk8vvmMqB0?C3^VMqguhv@2%&L2PtlQuw zgf13~d&b7brjv)p0OXUnX92iwPAe&znVI7_UW%f~GP4gr5D^p6x`u7qs{&v;ftyP} zI{;B)A3cKx5dnZ;W{;Vr5Q3$YP6)BCVKXxean?mCVW|_)3P5-<*3k)q9UEb#l+jun zrIcIe?!iRVVZh0kNTAb&Sz1quCL#zSKtxt+ZMD`$Yi-v%Xdy(0fn#Q~T<0`V0 zl2hwoz5s0J-*nNHVaGNS>*)67bsr3q*wvjY^Xsk*J5Q3f%GQ+zRC2plqVGYn%B zM1}y!VF6!LSqC#aW|(5ZmtMv%v|90||GZe+bmaNdV+)H-|8%+GNg?3C7|;9h%=B2W z^NpJpXEqj2mva96QmxrA#z`TB9L3CIBtSDWODV;~cz)xla`O#OJpSwzzj^Gr@uv=* z(B*0qK@_7E#1KSaFg#BopYg^wZ5Z2h!_F;NfAr=Z3pelCdMpUS7aPqemU3{g`v!Wo zVKalZmR2b}^NZgfe#iX}{dMB+|2|2zMgZp+o|ceOAmgiUdqJhz!l`l{hn}1Fe)Y(a zna_M=&&IEO;`;yOvg)6$z(j*mc3%~}y094;t+)}ojX!wcsmb3xb_7$U0`gf8LJ*8` zFt+^#08$XNlF%6mA`N34&MY?YouB;4Td34$@BZR@ou}lX*g8W*Vi1tm2xx%8WSu4F z96V1!D~TwwU@)dj1zb5j!G)X$=NL=%fR4Rz2F+Fk-&c@QAfNSMjKz;1dRlJTJhA;t zx4*s2u{lms4ouN&BkN!W7-StIiYz1vT)$(pyJi3OVAnMpmo^l2EuT@bb4<<1`Tspx zpZwYH=Efg==9q*O5JXT)BI7ac`^A&qP1kL`dUi|Ulyfc=LX1QvvSJ=RsAZjVzOS)& z*H-@W9eb-cyme|mr{a^w#Pu+0#$l70NN~ZEbkmOU%$~Qrcl$SfsIUIjqt7belOO<| zmN-*s;*n>bFTHu|u1RCeNg=#d1#PYEeiM6?6-@{tL)Mz|S3kM$^p+{VGMVKU%H?up ziKSIq!_VZQlwu(StaYeVgK(;(4u9&lU1NXw`|-`SdJCSG5Tc!x%pE)BgJ{ec^OBSr zqaf;`do&R!HY~Kn!c9A;pD33r!D6-LGPxpUG8xudvk(HZ?YGR#BA?HR*u?c6*GyGQ z#q8$FQUksx0T7IJIJr=h0QuHfV$TsEc{TmHQyuojI##pj5`xHDiffG^6v|hVlUb5d zvQo-*-i7aakIqRcp`_r@3IKdw1BM95dJ63hjayZbbRhRd(SxdLrIh6RzDzEvyYS+6 z17l{J&t)?Q54}{V)B-3a+VPYfln~f5J#OMS4hAtNxMm8L^OY?+U9n|fmR5pD%5A?q zaCoY`*g!7ZZi6@mgcNw&>~s)^L8CMAx!RC>QT5tu{1ePrAy<0fz>zmTbYM>VTAsZ$ zVPtU4l^d{c=S;a3gjJ~&My1arR`TdUt9rRo9Y9>nWhM_i{rq*`{?VUHK^Q|y0RmvH zLl_&}`Jvrm(YOC&Ad*sIHRn%y4TNh((F}kDOtFxecuaMVB&*ckHO1ZAF+ErV9v5ryjXeEX9eXsQ39}jQ;<)7v# zmpNDIg^|Vn>#lNlfBvQu$n9X(N= zI&^d%V>$2aFJ>I$b06E&oZXWBU$qg`CMQcGm(8%0l1K5a!=5~Ph%cN;kbe10WBkQa zRb(?7l&E=j+eW-|*XC38YW-B9P(&`5byBKfHCn>Xye5&2&FZaAP9nl)!I{@r=^r~Xj`w>I%Cv>Arld0 zGnonPjg7Hm=bR%Dh@G=x7%!3#5i^hS*xkh`dJuhsR|B2(J^x?NSN8t=_lGv*vz{d| zg3w}i+Z28H-EVq^T>KmZ5K@viW}%%T$rSBeuo9lC$*`fPo>Mn`ykOYfX>sghqqgnc>wmIlNA1i~~Jj!H00 z72Ur)I#u+jC^}VjZ~czGfKFjwI-j2AqmxfSPjl!C*mc_A{g~@u0A#HtW)1*&MC6hK zmv$YqCm}@37}N8yf|WoEW~Qa3r7MW&Og^6vnAtk#Vq**s;xNvru4=VfT3A@PN-1^e zidIUMopbp(j!TtF<(;)!ElB#m+)I6bIoop-MY%8xb+K3k5gBH-Xbd!AH`(m+}z2lBMZfE9q zC4o~USIppo8@jAV)=DXq%jLO;AAb1BTCGL^VgQQ(mH;#pm9Gq%h;#zf2T%myC7?rG zaG#O&2s*KfaR3__-Ck_g(YZ@b zE!h@+auw5c{;~<5unRO_Y#tpae;NQStce3g17EHSwtc;zZP!&xtHb44bu5)H);hYc x7 + + + Hong Kwon + Task Manager + + + + diff --git a/packaging/org.tizen.taskmgr.spec b/packaging/org.tizen.taskmgr.spec new file mode 100755 index 0000000..d132269 --- /dev/null +++ b/packaging/org.tizen.taskmgr.spec @@ -0,0 +1,48 @@ +Name: org.tizen.taskmgr +Summary: Task Manager +Version: 0.14.5 +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 "/usr/apps/org.tizen.taskmgr" +%define RESDIR "/usr/apps/org.tizen.taskmgr/res" +%define DATADIR "/opt/usr/apps/org.tizen.taskmgr/data" + +cmake . -DCMAKE_INSTALL_PREFIX=%{PREFIX} + +make %{?jobs:-j%jobs} + +%install +rm -rf %{buildroot} +%make_install + +%files +%manifest org.tizen.taskmgr.manifest +%defattr(-,root,root,-) +/usr/apps/org.tizen.taskmgr/bin/* +/usr/apps/org.tizen.taskmgr/res/* +%attr(-,inhouse,inhouse) +/opt/usr/apps/org.tizen.taskmgr/data +/usr/share/packages/* +/usr/share/icons/default/small/org.tizen.taskmgr.png diff --git a/po/CMakeLists.txt b/po/CMakeLists.txt new file mode 100644 index 0000000..d7a85f7 --- /dev/null +++ b/po/CMakeLists.txt @@ -0,0 +1,24 @@ +# for i18n + +SET(POFILES hy.po az.po eu.po bg.po ca.po zh_CN.po zh_HK.po zh_TW.po hr.po cs.po da.po nl_NL.po en.po en_US.po et.po fi.po fr_FR.po gl.po ka.po de_DE.po el_GR.po hu.po is.po ga.po it_IT.po ja_JP.po kk.po ko_KR.po lv.po lt.po mk.po nb.po pl.po pt_PT.po pt_BR.po ro.po ru_RU.po sr.po sk.po sl.po es_ES.po es_US.po es_MX.po sv.po tr_TR.po uk.po uz.po ar.po zh_SG.po hi.po en_PH.po fr_CA.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/ar.po b/po/ar.po new file mode 100644 index 0000000..707e16f --- /dev/null +++ b/po/ar.po @@ -0,0 +1,36 @@ +msgid "IDS_TASKMGR_BUTTON_CLEAR_HISTORY_ABB" +msgstr "مسح المحفوظات" + +msgid "IDS_TASKMGR_BUTTON_CLOSE_ALL_APPLICATIONS" +msgstr "إغلاق جميع التطبيقات" + +msgid "IDS_TASKMGR_HEADER_RUNNING" +msgstr "تشغيل" + +msgid "IDS_TASKMGR_MBODY_NO_APPS_OPEN" +msgstr "لا توجد تطبيقات مفتوحة" + +msgid "IDS_TASKMGR_MBODY_NO_RECENTLY_USED_APPS" +msgstr "لا توجد تطبيقات مستخدمة مؤخرا" + +msgid "IDS_TASKMGR_MBODY_RECENTLY_USED" +msgstr "المستخدمة مؤخرًا" + +msgid "IDS_TASKMGR_POP_CLEAR_ALL_APP_HISTORY_Q" +msgstr "هل تريد مسح محفوظات التطبيق كافة؟" + +msgid "IDS_TASKMGR_POP_CLEAR_PS_HISTORY_Q" +msgstr "هل تريد مسح محفوظات %s؟" + +msgid "IDS_TASKMGR_POP_CLOSE_ALL_APPS_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "هل تريد إغلاق جميع التطبيقات؟ قد يؤدي ذلك إلى فقد البيانات" + +msgid "IDS_TASKMGR_POP_CLOSE_PS_APP_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "هل تريد إغلاق تطبيق %s؟ قد يؤدي ذلك إلى فقد البيانات" + +msgid "IDS_TASKMGR_POP_UNABLE_TO_OPEN_APPLICATION" +msgstr "يتعذر فتح التطبيق" + +msgid "IDS_TASKMGR_HEADER_TASK_SWITCHER" +msgstr "محول المهام" + diff --git a/po/az.po b/po/az.po new file mode 100644 index 0000000..0e19b31 --- /dev/null +++ b/po/az.po @@ -0,0 +1,36 @@ +msgid "IDS_TASKMGR_BUTTON_CLEAR_HISTORY_ABB" +msgstr "Tarixçəni sil" + +msgid "IDS_TASKMGR_BUTTON_CLOSE_ALL_APPLICATIONS" +msgstr "Bütün proqramları bağla" + +msgid "IDS_TASKMGR_HEADER_RUNNING" +msgstr "İşləyir" + +msgid "IDS_TASKMGR_MBODY_NO_APPS_OPEN" +msgstr "Açıq proqram yoxdur" + +msgid "IDS_TASKMGR_MBODY_NO_RECENTLY_USED_APPS" +msgstr "Son işlənmiş prqrm yoxdur" + +msgid "IDS_TASKMGR_MBODY_RECENTLY_USED" +msgstr "Son istifadə olunan" + +msgid "IDS_TASKMGR_POP_CLEAR_ALL_APP_HISTORY_Q" +msgstr "Bütün proqram tarixçəsi silinsin?" + +msgid "IDS_TASKMGR_POP_CLEAR_PS_HISTORY_Q" +msgstr "%s tarixçəsi silinsin?" + +msgid "IDS_TASKMGR_POP_CLOSE_ALL_APPS_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "Bütün proqramlar bağlansın? Bu məlumatların itirilməsinə səbəb ola bilər" + +msgid "IDS_TASKMGR_POP_CLOSE_PS_APP_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "%s proqramı bağlansın? Bu məlumatların itirilməsinə səbəb ola bilər" + +msgid "IDS_TASKMGR_POP_UNABLE_TO_OPEN_APPLICATION" +msgstr "Proqramı açmaq mümkün deyil" + +msgid "IDS_TASKMGR_HEADER_TASK_SWITCHER" +msgstr "Tapşırıq keçiricisi" + diff --git a/po/bg.po b/po/bg.po new file mode 100644 index 0000000..5f23713 --- /dev/null +++ b/po/bg.po @@ -0,0 +1,36 @@ +msgid "IDS_TASKMGR_BUTTON_CLEAR_HISTORY_ABB" +msgstr "Изтриване хронол." + +msgid "IDS_TASKMGR_BUTTON_CLOSE_ALL_APPLICATIONS" +msgstr "Затвори всички приложения" + +msgid "IDS_TASKMGR_HEADER_RUNNING" +msgstr "Изпълнява се" + +msgid "IDS_TASKMGR_MBODY_NO_APPS_OPEN" +msgstr "Няма отворени приложения" + +msgid "IDS_TASKMGR_MBODY_NO_RECENTLY_USED_APPS" +msgstr "Няма изп. наскоро прил." + +msgid "IDS_TASKMGR_MBODY_RECENTLY_USED" +msgstr "Последно използван" + +msgid "IDS_TASKMGR_POP_CLEAR_ALL_APP_HISTORY_Q" +msgstr "Изтриване на хронологията на всички приложения?" + +msgid "IDS_TASKMGR_POP_CLEAR_PS_HISTORY_Q" +msgstr "Изтриване на хронологията на %s?" + +msgid "IDS_TASKMGR_POP_CLOSE_ALL_APPS_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "Затваряне на всички приложения? Това може да причини загуба на данни" + +msgid "IDS_TASKMGR_POP_CLOSE_PS_APP_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "Затваряне на приложението %s? Това може да причини загуба на данни" + +msgid "IDS_TASKMGR_POP_UNABLE_TO_OPEN_APPLICATION" +msgstr "Приложението не може да се отвори" + +msgid "IDS_TASKMGR_HEADER_TASK_SWITCHER" +msgstr "Превключване на задачи" + diff --git a/po/ca.po b/po/ca.po new file mode 100644 index 0000000..0fc9c8f --- /dev/null +++ b/po/ca.po @@ -0,0 +1,36 @@ +msgid "IDS_TASKMGR_BUTTON_CLEAR_HISTORY_ABB" +msgstr "Netejar l'historial" + +msgid "IDS_TASKMGR_BUTTON_CLOSE_ALL_APPLICATIONS" +msgstr "Tancar totes les aplicacions" + +msgid "IDS_TASKMGR_HEADER_RUNNING" +msgstr "En funcionament" + +msgid "IDS_TASKMGR_MBODY_NO_APPS_OPEN" +msgstr "Cap aplicació oberta" + +msgid "IDS_TASKMGR_MBODY_NO_RECENTLY_USED_APPS" +msgstr "Cap aplic utilitz fa poc" + +msgid "IDS_TASKMGR_MBODY_RECENTLY_USED" +msgstr "Utilitzats recentment" + +msgid "IDS_TASKMGR_POP_CLEAR_ALL_APP_HISTORY_Q" +msgstr "Esborrar tot l'historial d'aplicacions?" + +msgid "IDS_TASKMGR_POP_CLEAR_PS_HISTORY_Q" +msgstr "Esborrar l'historial de %s?" + +msgid "IDS_TASKMGR_POP_CLOSE_ALL_APPS_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "Tancar totes les aplicacions? Aquesta acció pot fer que es perdin dades" + +msgid "IDS_TASKMGR_POP_CLOSE_PS_APP_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "Tancar l'aplicació %s? Aquesta acció pot fer que es perdin dades" + +msgid "IDS_TASKMGR_POP_UNABLE_TO_OPEN_APPLICATION" +msgstr "No es pot obrir l'aplicació" + +msgid "IDS_TASKMGR_HEADER_TASK_SWITCHER" +msgstr "Commutador de tasques" + diff --git a/po/cs.po b/po/cs.po new file mode 100644 index 0000000..2b292d5 --- /dev/null +++ b/po/cs.po @@ -0,0 +1,36 @@ +msgid "IDS_TASKMGR_BUTTON_CLEAR_HISTORY_ABB" +msgstr "Smazat historii" + +msgid "IDS_TASKMGR_BUTTON_CLOSE_ALL_APPLICATIONS" +msgstr "Ukončit všechny aplikace" + +msgid "IDS_TASKMGR_HEADER_RUNNING" +msgstr "Spuštěno" + +msgid "IDS_TASKMGR_MBODY_NO_APPS_OPEN" +msgstr "Žádné otevřené aplikace" + +msgid "IDS_TASKMGR_MBODY_NO_RECENTLY_USED_APPS" +msgstr "Žádné použité aplikace" + +msgid "IDS_TASKMGR_MBODY_RECENTLY_USED" +msgstr "Poslední použitý" + +msgid "IDS_TASKMGR_POP_CLEAR_ALL_APP_HISTORY_Q" +msgstr "Smazat historii všech aplikací?" + +msgid "IDS_TASKMGR_POP_CLEAR_PS_HISTORY_Q" +msgstr "Smazat historii %s?" + +msgid "IDS_TASKMGR_POP_CLOSE_ALL_APPS_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "Ukončit všechny aplikace? Může dojít ke ztrátě dat" + +msgid "IDS_TASKMGR_POP_CLOSE_PS_APP_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "Ukončit aplikaci %s? Může dojít ke ztrátě dat" + +msgid "IDS_TASKMGR_POP_UNABLE_TO_OPEN_APPLICATION" +msgstr "Aplikaci se nepodařilo otevřít" + +msgid "IDS_TASKMGR_HEADER_TASK_SWITCHER" +msgstr "Přepínač úloh" + diff --git a/po/da.po b/po/da.po new file mode 100644 index 0000000..589fc55 --- /dev/null +++ b/po/da.po @@ -0,0 +1,36 @@ +msgid "IDS_TASKMGR_BUTTON_CLEAR_HISTORY_ABB" +msgstr "Ryd historik" + +msgid "IDS_TASKMGR_BUTTON_CLOSE_ALL_APPLICATIONS" +msgstr "Luk alle programmer" + +msgid "IDS_TASKMGR_HEADER_RUNNING" +msgstr "Kører" + +msgid "IDS_TASKMGR_MBODY_NO_APPS_OPEN" +msgstr "Ingen åbne programmer" + +msgid "IDS_TASKMGR_MBODY_NO_RECENTLY_USED_APPS" +msgstr "Ingen sen. brugte progr." + +msgid "IDS_TASKMGR_MBODY_RECENTLY_USED" +msgstr "Senest brugt" + +msgid "IDS_TASKMGR_POP_CLEAR_ALL_APP_HISTORY_Q" +msgstr "Slet al programhistorik?" + +msgid "IDS_TASKMGR_POP_CLEAR_PS_HISTORY_Q" +msgstr "Slet %s historik?" + +msgid "IDS_TASKMGR_POP_CLOSE_ALL_APPS_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "Lukke alle programmer? Dette kan medføre tab af data" + +msgid "IDS_TASKMGR_POP_CLOSE_PS_APP_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "Luk %s program? Dette kan medføre tab af data" + +msgid "IDS_TASKMGR_POP_UNABLE_TO_OPEN_APPLICATION" +msgstr "Kan ikke åbne program" + +msgid "IDS_TASKMGR_HEADER_TASK_SWITCHER" +msgstr "Opgaveskifter" + diff --git a/po/de_DE.po b/po/de_DE.po new file mode 100644 index 0000000..4a8c808 --- /dev/null +++ b/po/de_DE.po @@ -0,0 +1,36 @@ +msgid "IDS_TASKMGR_BUTTON_CLEAR_HISTORY_ABB" +msgstr "Verlauf löschen" + +msgid "IDS_TASKMGR_BUTTON_CLOSE_ALL_APPLICATIONS" +msgstr "Alle Anwendungen schließen." + +msgid "IDS_TASKMGR_HEADER_RUNNING" +msgstr "Ausführen" + +msgid "IDS_TASKMGR_MBODY_NO_APPS_OPEN" +msgstr "Keine Apps geöffnet" + +msgid "IDS_TASKMGR_MBODY_NO_RECENTLY_USED_APPS" +msgstr "Keine kürzli. verw. Apps" + +msgid "IDS_TASKMGR_MBODY_RECENTLY_USED" +msgstr "Kürzlich verwendet" + +msgid "IDS_TASKMGR_POP_CLEAR_ALL_APP_HISTORY_Q" +msgstr "Verlauf für alle Anwendungen löschen?" + +msgid "IDS_TASKMGR_POP_CLEAR_PS_HISTORY_Q" +msgstr "%s-Verlauf löschen?" + +msgid "IDS_TASKMGR_POP_CLOSE_ALL_APPS_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "Alle Anwendungen schließen? Dadurch gehen möglicherweise Daten verloren." + +msgid "IDS_TASKMGR_POP_CLOSE_PS_APP_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "Anwendung %s schließen? Dadurch gehen möglicherweise Daten verloren." + +msgid "IDS_TASKMGR_POP_UNABLE_TO_OPEN_APPLICATION" +msgstr "Öffnen der Anwendung nicht möglich." + +msgid "IDS_TASKMGR_HEADER_TASK_SWITCHER" +msgstr "Task-Switcher" + diff --git a/po/el_GR.po b/po/el_GR.po new file mode 100644 index 0000000..c05eafe --- /dev/null +++ b/po/el_GR.po @@ -0,0 +1,36 @@ +msgid "IDS_TASKMGR_BUTTON_CLEAR_HISTORY_ABB" +msgstr "Εκκαθ. ιστορικού" + +msgid "IDS_TASKMGR_BUTTON_CLOSE_ALL_APPLICATIONS" +msgstr "Κλείσιμο όλων των εφαρμογών" + +msgid "IDS_TASKMGR_HEADER_RUNNING" +msgstr "Σε εκτέλεση" + +msgid "IDS_TASKMGR_MBODY_NO_APPS_OPEN" +msgstr "Καμία ανοιχτή εφαρμογή" + +msgid "IDS_TASKMGR_MBODY_NO_RECENTLY_USED_APPS" +msgstr "Καμία πρόσφ. χρησ. εφαρ." + +msgid "IDS_TASKMGR_MBODY_RECENTLY_USED" +msgstr "Χρησιμοποιήθηκε πρόσφατα" + +msgid "IDS_TASKMGR_POP_CLEAR_ALL_APP_HISTORY_Q" +msgstr "Εκκαθάριση ιστορικού όλων των εφαρμογών;" + +msgid "IDS_TASKMGR_POP_CLEAR_PS_HISTORY_Q" +msgstr "Εκκαθάριση ιστορικού %s;" + +msgid "IDS_TASKMGR_POP_CLOSE_ALL_APPS_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "Να κλείσουν όλες οι εφαρμογές; Αυτό ενδέχεται να προκαλέσει την απώλεια δεδομένων" + +msgid "IDS_TASKMGR_POP_CLOSE_PS_APP_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "Να κλείσει η εφαρμογή %s; Αυτό ενδέχεται να προκαλέσει την απώλεια δεδομένων" + +msgid "IDS_TASKMGR_POP_UNABLE_TO_OPEN_APPLICATION" +msgstr "Δεν είναι δυνατό το άνοιγμα της εφαρμογής" + +msgid "IDS_TASKMGR_HEADER_TASK_SWITCHER" +msgstr "Εφαρμογή εναλλαγής εργασιών" + diff --git a/po/en.po b/po/en.po new file mode 100644 index 0000000..b84af25 --- /dev/null +++ b/po/en.po @@ -0,0 +1,36 @@ +msgid "IDS_TASKMGR_BUTTON_CLEAR_HISTORY_ABB" +msgstr "Clear history" + +msgid "IDS_TASKMGR_BUTTON_CLOSE_ALL_APPLICATIONS" +msgstr "Close all applications" + +msgid "IDS_TASKMGR_HEADER_RUNNING" +msgstr "Running" + +msgid "IDS_TASKMGR_MBODY_NO_APPS_OPEN" +msgstr "No apps open" + +msgid "IDS_TASKMGR_MBODY_NO_RECENTLY_USED_APPS" +msgstr "No recently used apps" + +msgid "IDS_TASKMGR_MBODY_RECENTLY_USED" +msgstr "Recently used" + +msgid "IDS_TASKMGR_POP_CLEAR_ALL_APP_HISTORY_Q" +msgstr "Clear all app history?" + +msgid "IDS_TASKMGR_POP_CLEAR_PS_HISTORY_Q" +msgstr "Clear %s history?" + +msgid "IDS_TASKMGR_POP_CLOSE_ALL_APPS_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "Close all apps? This may cause data to be lost" + +msgid "IDS_TASKMGR_POP_CLOSE_PS_APP_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "Close %s app? This may cause data to be lost" + +msgid "IDS_TASKMGR_POP_UNABLE_TO_OPEN_APPLICATION" +msgstr "Unable to open application" + +msgid "IDS_TASKMGR_HEADER_TASK_SWITCHER" +msgstr "Task switcher" + diff --git a/po/en_GB.po b/po/en_GB.po new file mode 100644 index 0000000..7aaa29e --- /dev/null +++ b/po/en_GB.po @@ -0,0 +1,18 @@ +msgid "IDS_COM_BODY_HIGH_VOLUMES_MAY_HARM_YOUR_HEARING_IF_YOU_LISTEN_FOR_A_LONG_TIME" +msgstr "High volumes may harm your hearing if you listen for a long time" + +msgid "IDS_COM_BODY_ANDROID" +msgstr "Android" + +msgid "IDS_COM_BODY_JAVA" +msgstr "Java" + +msgid "IDS_COM_BODY_WARNING" +msgstr "Warning" + +msgid "IDS_COM_BODY_MEDIA" +msgstr "Media" + +msgid "IDS_COM_OPT_HEADPHONES_ABB" +msgstr "Headphones" + diff --git a/po/en_PH.po b/po/en_PH.po new file mode 100644 index 0000000..b84af25 --- /dev/null +++ b/po/en_PH.po @@ -0,0 +1,36 @@ +msgid "IDS_TASKMGR_BUTTON_CLEAR_HISTORY_ABB" +msgstr "Clear history" + +msgid "IDS_TASKMGR_BUTTON_CLOSE_ALL_APPLICATIONS" +msgstr "Close all applications" + +msgid "IDS_TASKMGR_HEADER_RUNNING" +msgstr "Running" + +msgid "IDS_TASKMGR_MBODY_NO_APPS_OPEN" +msgstr "No apps open" + +msgid "IDS_TASKMGR_MBODY_NO_RECENTLY_USED_APPS" +msgstr "No recently used apps" + +msgid "IDS_TASKMGR_MBODY_RECENTLY_USED" +msgstr "Recently used" + +msgid "IDS_TASKMGR_POP_CLEAR_ALL_APP_HISTORY_Q" +msgstr "Clear all app history?" + +msgid "IDS_TASKMGR_POP_CLEAR_PS_HISTORY_Q" +msgstr "Clear %s history?" + +msgid "IDS_TASKMGR_POP_CLOSE_ALL_APPS_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "Close all apps? This may cause data to be lost" + +msgid "IDS_TASKMGR_POP_CLOSE_PS_APP_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "Close %s app? This may cause data to be lost" + +msgid "IDS_TASKMGR_POP_UNABLE_TO_OPEN_APPLICATION" +msgstr "Unable to open application" + +msgid "IDS_TASKMGR_HEADER_TASK_SWITCHER" +msgstr "Task switcher" + diff --git a/po/en_US.po b/po/en_US.po new file mode 100644 index 0000000..b84af25 --- /dev/null +++ b/po/en_US.po @@ -0,0 +1,36 @@ +msgid "IDS_TASKMGR_BUTTON_CLEAR_HISTORY_ABB" +msgstr "Clear history" + +msgid "IDS_TASKMGR_BUTTON_CLOSE_ALL_APPLICATIONS" +msgstr "Close all applications" + +msgid "IDS_TASKMGR_HEADER_RUNNING" +msgstr "Running" + +msgid "IDS_TASKMGR_MBODY_NO_APPS_OPEN" +msgstr "No apps open" + +msgid "IDS_TASKMGR_MBODY_NO_RECENTLY_USED_APPS" +msgstr "No recently used apps" + +msgid "IDS_TASKMGR_MBODY_RECENTLY_USED" +msgstr "Recently used" + +msgid "IDS_TASKMGR_POP_CLEAR_ALL_APP_HISTORY_Q" +msgstr "Clear all app history?" + +msgid "IDS_TASKMGR_POP_CLEAR_PS_HISTORY_Q" +msgstr "Clear %s history?" + +msgid "IDS_TASKMGR_POP_CLOSE_ALL_APPS_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "Close all apps? This may cause data to be lost" + +msgid "IDS_TASKMGR_POP_CLOSE_PS_APP_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "Close %s app? This may cause data to be lost" + +msgid "IDS_TASKMGR_POP_UNABLE_TO_OPEN_APPLICATION" +msgstr "Unable to open application" + +msgid "IDS_TASKMGR_HEADER_TASK_SWITCHER" +msgstr "Task switcher" + diff --git a/po/es_ES.po b/po/es_ES.po new file mode 100644 index 0000000..093c114 --- /dev/null +++ b/po/es_ES.po @@ -0,0 +1,36 @@ +msgid "IDS_TASKMGR_BUTTON_CLEAR_HISTORY_ABB" +msgstr "Borrar historial" + +msgid "IDS_TASKMGR_BUTTON_CLOSE_ALL_APPLICATIONS" +msgstr "Cerrar todas las aplicaciones" + +msgid "IDS_TASKMGR_HEADER_RUNNING" +msgstr "En uso" + +msgid "IDS_TASKMGR_MBODY_NO_APPS_OPEN" +msgstr "Sin aplicaciones abiertas" + +msgid "IDS_TASKMGR_MBODY_NO_RECENTLY_USED_APPS" +msgstr "Sin aplic usadas recient" + +msgid "IDS_TASKMGR_MBODY_RECENTLY_USED" +msgstr "De uso reciente" + +msgid "IDS_TASKMGR_POP_CLEAR_ALL_APP_HISTORY_Q" +msgstr "¿Borrar todo el historial de aplicaciones?" + +msgid "IDS_TASKMGR_POP_CLEAR_PS_HISTORY_Q" +msgstr "¿Borrar el historial de %s?" + +msgid "IDS_TASKMGR_POP_CLOSE_ALL_APPS_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "¿Cerrar todas las aplicaciones? Esta acción puede provocar la pérdida de datos" + +msgid "IDS_TASKMGR_POP_CLOSE_PS_APP_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "¿Cerrar la aplicación %s? Esta acción puede provocar la pérdida de datos" + +msgid "IDS_TASKMGR_POP_UNABLE_TO_OPEN_APPLICATION" +msgstr "No se puede abrir la aplicación" + +msgid "IDS_TASKMGR_HEADER_TASK_SWITCHER" +msgstr "Conmutador de tareas" + diff --git a/po/es_MX.po b/po/es_MX.po new file mode 100644 index 0000000..75c339b --- /dev/null +++ b/po/es_MX.po @@ -0,0 +1,36 @@ +msgid "IDS_TASKMGR_BUTTON_CLEAR_HISTORY_ABB" +msgstr "Eliminar historial" + +msgid "IDS_TASKMGR_BUTTON_CLOSE_ALL_APPLICATIONS" +msgstr "Cerrar todas las aplicaciones" + +msgid "IDS_TASKMGR_HEADER_RUNNING" +msgstr "En uso" + +msgid "IDS_TASKMGR_MBODY_NO_APPS_OPEN" +msgstr "No hay aplic. abiertas" + +msgid "IDS_TASKMGR_MBODY_NO_RECENTLY_USED_APPS" +msgstr "No hay aplic. usadas rec." + +msgid "IDS_TASKMGR_MBODY_RECENTLY_USED" +msgstr "De uso reciente" + +msgid "IDS_TASKMGR_POP_CLEAR_ALL_APP_HISTORY_Q" +msgstr "¿Eliminar historial de todas las aplicaciones?" + +msgid "IDS_TASKMGR_POP_CLEAR_PS_HISTORY_Q" +msgstr "¿Eliminar historial de %s?" + +msgid "IDS_TASKMGR_POP_CLOSE_ALL_APPS_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "¿Cerrar todas las aplicaciones? Esto puede causar la pérdida de datos" + +msgid "IDS_TASKMGR_POP_CLOSE_PS_APP_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "¿Cerrar aplicación %s? Esto puede causar la pérdida de datos" + +msgid "IDS_TASKMGR_POP_UNABLE_TO_OPEN_APPLICATION" +msgstr "No se pudo abrir la aplicación" + +msgid "IDS_TASKMGR_HEADER_TASK_SWITCHER" +msgstr "Conmutador de tareas" + diff --git a/po/es_US.po b/po/es_US.po new file mode 100644 index 0000000..75c339b --- /dev/null +++ b/po/es_US.po @@ -0,0 +1,36 @@ +msgid "IDS_TASKMGR_BUTTON_CLEAR_HISTORY_ABB" +msgstr "Eliminar historial" + +msgid "IDS_TASKMGR_BUTTON_CLOSE_ALL_APPLICATIONS" +msgstr "Cerrar todas las aplicaciones" + +msgid "IDS_TASKMGR_HEADER_RUNNING" +msgstr "En uso" + +msgid "IDS_TASKMGR_MBODY_NO_APPS_OPEN" +msgstr "No hay aplic. abiertas" + +msgid "IDS_TASKMGR_MBODY_NO_RECENTLY_USED_APPS" +msgstr "No hay aplic. usadas rec." + +msgid "IDS_TASKMGR_MBODY_RECENTLY_USED" +msgstr "De uso reciente" + +msgid "IDS_TASKMGR_POP_CLEAR_ALL_APP_HISTORY_Q" +msgstr "¿Eliminar historial de todas las aplicaciones?" + +msgid "IDS_TASKMGR_POP_CLEAR_PS_HISTORY_Q" +msgstr "¿Eliminar historial de %s?" + +msgid "IDS_TASKMGR_POP_CLOSE_ALL_APPS_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "¿Cerrar todas las aplicaciones? Esto puede causar la pérdida de datos" + +msgid "IDS_TASKMGR_POP_CLOSE_PS_APP_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "¿Cerrar aplicación %s? Esto puede causar la pérdida de datos" + +msgid "IDS_TASKMGR_POP_UNABLE_TO_OPEN_APPLICATION" +msgstr "No se pudo abrir la aplicación" + +msgid "IDS_TASKMGR_HEADER_TASK_SWITCHER" +msgstr "Conmutador de tareas" + diff --git a/po/et.po b/po/et.po new file mode 100644 index 0000000..c75bf12 --- /dev/null +++ b/po/et.po @@ -0,0 +1,36 @@ +msgid "IDS_TASKMGR_BUTTON_CLEAR_HISTORY_ABB" +msgstr "Kustuta ajalugu" + +msgid "IDS_TASKMGR_BUTTON_CLOSE_ALL_APPLICATIONS" +msgstr "Sulge kõik rakendused" + +msgid "IDS_TASKMGR_HEADER_RUNNING" +msgstr "Töötab" + +msgid "IDS_TASKMGR_MBODY_NO_APPS_OPEN" +msgstr "Ükski rak. ei ole avatud" + +msgid "IDS_TASKMGR_MBODY_NO_RECENTLY_USED_APPS" +msgstr "Hiljuti kasut. rak. pole" + +msgid "IDS_TASKMGR_MBODY_RECENTLY_USED" +msgstr "Hiljuti kasutatud" + +msgid "IDS_TASKMGR_POP_CLEAR_ALL_APP_HISTORY_Q" +msgstr "Kas kustutada kogu rakenduste ajalugu?" + +msgid "IDS_TASKMGR_POP_CLEAR_PS_HISTORY_Q" +msgstr "Kas kustutada rakenduse %s ajalugu?" + +msgid "IDS_TASKMGR_POP_CLOSE_ALL_APPS_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "Kas sulgeda kõik vestlused? See võib põhjustada andmekao" + +msgid "IDS_TASKMGR_POP_CLOSE_PS_APP_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "Kas sulgeda rakendus %s? See võib põhjustada andmekao" + +msgid "IDS_TASKMGR_POP_UNABLE_TO_OPEN_APPLICATION" +msgstr "Rakendust ei saa avada" + +msgid "IDS_TASKMGR_HEADER_TASK_SWITCHER" +msgstr "Ülesannete vahetaja" + diff --git a/po/eu.po b/po/eu.po new file mode 100644 index 0000000..8678cd0 --- /dev/null +++ b/po/eu.po @@ -0,0 +1,36 @@ +msgid "IDS_TASKMGR_BUTTON_CLEAR_HISTORY_ABB" +msgstr "Garbitu historia" + +msgid "IDS_TASKMGR_BUTTON_CLOSE_ALL_APPLICATIONS" +msgstr "Itxi aplikazio guztiak" + +msgid "IDS_TASKMGR_HEADER_RUNNING" +msgstr "Funtzionatzen" + +msgid "IDS_TASKMGR_MBODY_NO_APPS_OPEN" +msgstr "Aplikazio irekirik ez" + +msgid "IDS_TASKMGR_MBODY_NO_RECENTLY_USED_APPS" +msgstr "Berriki erabili ez diren apl." + +msgid "IDS_TASKMGR_MBODY_RECENTLY_USED" +msgstr "Berriki erabili da" + +msgid "IDS_TASKMGR_POP_CLEAR_ALL_APP_HISTORY_Q" +msgstr "Garbitu aplikazioen historia osoa?" + +msgid "IDS_TASKMGR_POP_CLEAR_PS_HISTORY_Q" +msgstr "Garbitu %s historia?" + +msgid "IDS_TASKMGR_POP_CLOSE_ALL_APPS_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "Itxi aplikazio guztiak? Baliteke datuak galaraztea" + +msgid "IDS_TASKMGR_POP_CLOSE_PS_APP_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "Itxi %s aplikazioa? Baliteke datuak gala+J135raztea" + +msgid "IDS_TASKMGR_POP_UNABLE_TO_OPEN_APPLICATION" +msgstr "Ezin da aplikazioa ireki" + +msgid "IDS_TASKMGR_HEADER_TASK_SWITCHER" +msgstr "Ataza aldatzailea" + diff --git a/po/fi.po b/po/fi.po new file mode 100644 index 0000000..0fad832 --- /dev/null +++ b/po/fi.po @@ -0,0 +1,36 @@ +msgid "IDS_TASKMGR_BUTTON_CLEAR_HISTORY_ABB" +msgstr "Tyhjennä historia" + +msgid "IDS_TASKMGR_BUTTON_CLOSE_ALL_APPLICATIONS" +msgstr "Sulje kaikki sovellukset" + +msgid "IDS_TASKMGR_HEADER_RUNNING" +msgstr "Käynnissä" + +msgid "IDS_TASKMGR_MBODY_NO_APPS_OPEN" +msgstr "Sovelluksia ei käynnissä" + +msgid "IDS_TASKMGR_MBODY_NO_RECENTLY_USED_APPS" +msgstr "Viim. käyt. sov. ei ole" + +msgid "IDS_TASKMGR_MBODY_RECENTLY_USED" +msgstr "Viimeksi käytetyt" + +msgid "IDS_TASKMGR_POP_CLEAR_ALL_APP_HISTORY_Q" +msgstr "Tyhjennetäänkö koko sovellushistoria?" + +msgid "IDS_TASKMGR_POP_CLEAR_PS_HISTORY_Q" +msgstr "Tyhjennetäänkö kohteen %s historia?" + +msgid "IDS_TASKMGR_POP_CLOSE_ALL_APPS_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "Suljetaanko kaikki sovellukset? Tietoja voidaan menettää" + +msgid "IDS_TASKMGR_POP_CLOSE_PS_APP_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "Suljetaanko sovellus %s? Tietoja voidaan menettää" + +msgid "IDS_TASKMGR_POP_UNABLE_TO_OPEN_APPLICATION" +msgstr "Sovellusta ei voi avata" + +msgid "IDS_TASKMGR_HEADER_TASK_SWITCHER" +msgstr "Tehtävänvaihtaja" + diff --git a/po/fr_CA.po b/po/fr_CA.po new file mode 100644 index 0000000..8b2bc6c --- /dev/null +++ b/po/fr_CA.po @@ -0,0 +1,36 @@ +msgid "IDS_TASKMGR_BUTTON_CLEAR_HISTORY_ABB" +msgstr "Effacer historique" + +msgid "IDS_TASKMGR_BUTTON_CLOSE_ALL_APPLICATIONS" +msgstr "Fermer toutes les applications" + +msgid "IDS_TASKMGR_HEADER_RUNNING" +msgstr "Exécution" + +msgid "IDS_TASKMGR_MBODY_NO_APPS_OPEN" +msgstr "Aucune appli ouverte" + +msgid "IDS_TASKMGR_MBODY_NO_RECENTLY_USED_APPS" +msgstr "Auc appli récemment util" + +msgid "IDS_TASKMGR_MBODY_RECENTLY_USED" +msgstr "Récemment utilisée" + +msgid "IDS_TASKMGR_POP_CLEAR_ALL_APP_HISTORY_Q" +msgstr "Effacer l'historique de toutes les applications ?" + +msgid "IDS_TASKMGR_POP_CLEAR_PS_HISTORY_Q" +msgstr "Effacer l'historique %s ?" + +msgid "IDS_TASKMGR_POP_CLOSE_ALL_APPS_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "Fermer toutes les applications ? Cela peut entrainer la perte de données" + +msgid "IDS_TASKMGR_POP_CLOSE_PS_APP_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "Fermer l'application %s ? Cela peut entrainer la perte de données" + +msgid "IDS_TASKMGR_POP_UNABLE_TO_OPEN_APPLICATION" +msgstr "Impossible d'ouvrir l'application" + +msgid "IDS_TASKMGR_HEADER_TASK_SWITCHER" +msgstr "Sélecteur de tâches" + diff --git a/po/fr_FR.po b/po/fr_FR.po new file mode 100644 index 0000000..d805672 --- /dev/null +++ b/po/fr_FR.po @@ -0,0 +1,36 @@ +msgid "IDS_TASKMGR_BUTTON_CLEAR_HISTORY_ABB" +msgstr "Effacer historique" + +msgid "IDS_TASKMGR_BUTTON_CLOSE_ALL_APPLICATIONS" +msgstr "Fermer toutes les applications" + +msgid "IDS_TASKMGR_HEADER_RUNNING" +msgstr "Exécution" + +msgid "IDS_TASKMGR_MBODY_NO_APPS_OPEN" +msgstr "Aucune appli ouverte" + +msgid "IDS_TASKMGR_MBODY_NO_RECENTLY_USED_APPS" +msgstr "Auc appli récemment util" + +msgid "IDS_TASKMGR_MBODY_RECENTLY_USED" +msgstr "Récemment utilisée" + +msgid "IDS_TASKMGR_POP_CLEAR_ALL_APP_HISTORY_Q" +msgstr "Effacer l'historique de toutes les applications ?" + +msgid "IDS_TASKMGR_POP_CLEAR_PS_HISTORY_Q" +msgstr "Effacer l'historique %s ?" + +msgid "IDS_TASKMGR_POP_CLOSE_ALL_APPS_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "Fermer toutes les applications ? Cela peut entraîner la perte de données" + +msgid "IDS_TASKMGR_POP_CLOSE_PS_APP_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "Fermer l'application %s ? Cela peut entraîner la perte de données" + +msgid "IDS_TASKMGR_POP_UNABLE_TO_OPEN_APPLICATION" +msgstr "Impossible d'ouvrir l'application" + +msgid "IDS_TASKMGR_HEADER_TASK_SWITCHER" +msgstr "Gestionnaire de tâches" + diff --git a/po/ga.po b/po/ga.po new file mode 100644 index 0000000..ebb8c17 --- /dev/null +++ b/po/ga.po @@ -0,0 +1,36 @@ +msgid "IDS_TASKMGR_BUTTON_CLEAR_HISTORY_ABB" +msgstr "Glan stair" + +msgid "IDS_TASKMGR_BUTTON_CLOSE_ALL_APPLICATIONS" +msgstr "Dún gach feidhmchlár" + +msgid "IDS_TASKMGR_HEADER_RUNNING" +msgstr "Ar rith" + +msgid "IDS_TASKMGR_MBODY_NO_APPS_OPEN" +msgstr "Níl fchláir oscailte ann" + +msgid "IDS_TASKMGR_MBODY_NO_RECENTLY_USED_APPS" +msgstr "Níl f'chláir le déanaí ann" + +msgid "IDS_TASKMGR_MBODY_RECENTLY_USED" +msgstr "Úsáidte le déanaí" + +msgid "IDS_TASKMGR_POP_CLEAR_ALL_APP_HISTORY_Q" +msgstr "Glan gach stair feidhmchlár?" + +msgid "IDS_TASKMGR_POP_CLEAR_PS_HISTORY_Q" +msgstr "Glan stair %s?" + +msgid "IDS_TASKMGR_POP_CLOSE_ALL_APPS_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "Dún gach feidhmchlár? Is féidir go gcaillfear sonraí dá bharr" + +msgid "IDS_TASKMGR_POP_CLOSE_PS_APP_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "Dún feidhmchlár %s? Is féidir go gcaillfear sonraí dá bharr" + +msgid "IDS_TASKMGR_POP_UNABLE_TO_OPEN_APPLICATION" +msgstr "Ní féidir an feidhmchlár a oscailt" + +msgid "IDS_TASKMGR_HEADER_TASK_SWITCHER" +msgstr "Malartóir tascanna" + diff --git a/po/gl.po b/po/gl.po new file mode 100644 index 0000000..d2af007 --- /dev/null +++ b/po/gl.po @@ -0,0 +1,36 @@ +msgid "IDS_TASKMGR_BUTTON_CLEAR_HISTORY_ABB" +msgstr "Borrar o historial" + +msgid "IDS_TASKMGR_BUTTON_CLOSE_ALL_APPLICATIONS" +msgstr "Pechar todas as aplicacións" + +msgid "IDS_TASKMGR_HEADER_RUNNING" +msgstr "Executando" + +msgid "IDS_TASKMGR_MBODY_NO_APPS_OPEN" +msgstr "Sen aplicacións abertas" + +msgid "IDS_TASKMGR_MBODY_NO_RECENTLY_USED_APPS" +msgstr "Ning. aplic. usada recen." + +msgid "IDS_TASKMGR_MBODY_RECENTLY_USED" +msgstr "Usado recentemente" + +msgid "IDS_TASKMGR_POP_CLEAR_ALL_APP_HISTORY_Q" +msgstr "Desexas borrar o historial de todas as aplicacións?" + +msgid "IDS_TASKMGR_POP_CLEAR_PS_HISTORY_Q" +msgstr "Desexas borrar o historial de %s?" + +msgid "IDS_TASKMGR_POP_CLOSE_ALL_APPS_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "Desexas pechar todas as aplicacións? É posible que isto provoque a perda de datos" + +msgid "IDS_TASKMGR_POP_CLOSE_PS_APP_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "Desexas pechar a aplicación %s? É posible que isto provoque a perda de datos" + +msgid "IDS_TASKMGR_POP_UNABLE_TO_OPEN_APPLICATION" +msgstr "Non se pode abrir a aplicación" + +msgid "IDS_TASKMGR_HEADER_TASK_SWITCHER" +msgstr "Selector de tarefas" + diff --git a/po/he.po b/po/he.po new file mode 100644 index 0000000..d13bad1 --- /dev/null +++ b/po/he.po @@ -0,0 +1,18 @@ +msgid "IDS_COM_BODY_HIGH_VOLUMES_MAY_HARM_YOUR_HEARING_IF_YOU_LISTEN_FOR_A_LONG_TIME" +msgstr "עוצמות קול גבוהות עלולות לפגוע בשמיעה אם מאזינים להן למשך זמן רב" + +msgid "IDS_COM_BODY_ANDROID" +msgstr "Android" + +msgid "IDS_COM_BODY_JAVA" +msgstr "Java" + +msgid "IDS_COM_BODY_WARNING" +msgstr "אזהרה" + +msgid "IDS_COM_BODY_MEDIA" +msgstr "מדיה" + +msgid "IDS_COM_OPT_HEADPHONES_ABB" +msgstr "אוזניות" + diff --git a/po/hi.po b/po/hi.po new file mode 100644 index 0000000..79f4ada --- /dev/null +++ b/po/hi.po @@ -0,0 +1,36 @@ +msgid "IDS_TASKMGR_BUTTON_CLEAR_HISTORY_ABB" +msgstr "इतिहास साफ़ करें" + +msgid "IDS_TASKMGR_BUTTON_CLOSE_ALL_APPLICATIONS" +msgstr "सभी एप्लीकेशंस बंद करें" + +msgid "IDS_TASKMGR_HEADER_RUNNING" +msgstr "चल रहा है" + +msgid "IDS_TASKMGR_MBODY_NO_APPS_OPEN" +msgstr "कोई ऐप्स खुली नहीं" + +msgid "IDS_TASKMGR_MBODY_NO_RECENTLY_USED_APPS" +msgstr "कोई हाल ही में उपयोग की गई ऐप्स नहीं" + +msgid "IDS_TASKMGR_MBODY_RECENTLY_USED" +msgstr "हाल ही में उपयोग किए" + +msgid "IDS_TASKMGR_POP_CLEAR_ALL_APP_HISTORY_Q" +msgstr "सभी ऐप इतिहास साफ़ करें?" + +msgid "IDS_TASKMGR_POP_CLEAR_PS_HISTORY_Q" +msgstr "%s इतिहास साफ़ करें?" + +msgid "IDS_TASKMGR_POP_CLOSE_ALL_APPS_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "सभी ऐप्स बंद करें? इससे डाटा हानि हो सकती है" + +msgid "IDS_TASKMGR_POP_CLOSE_PS_APP_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "%s ऐप बंद करें? इससे डाटा हानि हो सकती है" + +msgid "IDS_TASKMGR_POP_UNABLE_TO_OPEN_APPLICATION" +msgstr "एप्लीकेशन खोलने में अक्षम" + +msgid "IDS_TASKMGR_HEADER_TASK_SWITCHER" +msgstr "कार्य स्विचर" + diff --git a/po/hr.po b/po/hr.po new file mode 100644 index 0000000..6907f81 --- /dev/null +++ b/po/hr.po @@ -0,0 +1,36 @@ +msgid "IDS_TASKMGR_BUTTON_CLEAR_HISTORY_ABB" +msgstr "Obriši povijest" + +msgid "IDS_TASKMGR_BUTTON_CLOSE_ALL_APPLICATIONS" +msgstr "Zatvori sve aplikacije" + +msgid "IDS_TASKMGR_HEADER_RUNNING" +msgstr "Pokrenuto" + +msgid "IDS_TASKMGR_MBODY_NO_APPS_OPEN" +msgstr "Nema otvorenih aplikacija" + +msgid "IDS_TASKMGR_MBODY_NO_RECENTLY_USED_APPS" +msgstr "Nema nedavnih aplikacija" + +msgid "IDS_TASKMGR_MBODY_RECENTLY_USED" +msgstr "Nedavno korišteno" + +msgid "IDS_TASKMGR_POP_CLEAR_ALL_APP_HISTORY_Q" +msgstr "Obrisati svu povijest aplikacija?" + +msgid "IDS_TASKMGR_POP_CLEAR_PS_HISTORY_Q" +msgstr "Obrisati %s povijest?" + +msgid "IDS_TASKMGR_POP_CLOSE_ALL_APPS_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "Zatvoriti sve aplikacije? To može uzrokovati gubitak podataka" + +msgid "IDS_TASKMGR_POP_CLOSE_PS_APP_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "Zatvoriti %s aplikaciju? To može uzrokovati gubitak podataka" + +msgid "IDS_TASKMGR_POP_UNABLE_TO_OPEN_APPLICATION" +msgstr "Nemoguće otvoriti aplikaciju" + +msgid "IDS_TASKMGR_HEADER_TASK_SWITCHER" +msgstr "Biranje zadatka" + diff --git a/po/hu.po b/po/hu.po new file mode 100644 index 0000000..a4d3775 --- /dev/null +++ b/po/hu.po @@ -0,0 +1,36 @@ +msgid "IDS_TASKMGR_BUTTON_CLEAR_HISTORY_ABB" +msgstr "Előzmények törlése" + +msgid "IDS_TASKMGR_BUTTON_CLOSE_ALL_APPLICATIONS" +msgstr "Összes alkalmazás bezárása" + +msgid "IDS_TASKMGR_HEADER_RUNNING" +msgstr "Futás" + +msgid "IDS_TASKMGR_MBODY_NO_APPS_OPEN" +msgstr "Nincs megnyitott alk." + +msgid "IDS_TASKMGR_MBODY_NO_RECENTLY_USED_APPS" +msgstr "A legut. alk. list. üres" + +msgid "IDS_TASKMGR_MBODY_RECENTLY_USED" +msgstr "Legutóbb használt" + +msgid "IDS_TASKMGR_POP_CLEAR_ALL_APP_HISTORY_Q" +msgstr "Törli az összes alkalmazás előzményeit?" + +msgid "IDS_TASKMGR_POP_CLEAR_PS_HISTORY_Q" +msgstr "Törli a(z) %s előzményeit?" + +msgid "IDS_TASKMGR_POP_CLOSE_ALL_APPS_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "Bezárja az összes alkalmazást? Így adatok veszhetnek el" + +msgid "IDS_TASKMGR_POP_CLOSE_PS_APP_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "Bezár %s alkalmazást? Így adatok veszhetnek el" + +msgid "IDS_TASKMGR_POP_UNABLE_TO_OPEN_APPLICATION" +msgstr "Nem lehet megnyitni az alkalmazást" + +msgid "IDS_TASKMGR_HEADER_TASK_SWITCHER" +msgstr "Feladatváltó" + diff --git a/po/hy.po b/po/hy.po new file mode 100644 index 0000000..36c3e25 --- /dev/null +++ b/po/hy.po @@ -0,0 +1,36 @@ +msgid "IDS_TASKMGR_BUTTON_CLEAR_HISTORY_ABB" +msgstr "Մաքրել պատմությունը" + +msgid "IDS_TASKMGR_BUTTON_CLOSE_ALL_APPLICATIONS" +msgstr "Փակել բոլոր ծրագրերը" + +msgid "IDS_TASKMGR_HEADER_RUNNING" +msgstr "Աշխատեցում" + +msgid "IDS_TASKMGR_MBODY_NO_APPS_OPEN" +msgstr "Բաց ծագրեր չկան" + +msgid "IDS_TASKMGR_MBODY_NO_RECENTLY_USED_APPS" +msgstr "Վերջերս օգտ. ծրագրեր չկան" + +msgid "IDS_TASKMGR_MBODY_RECENTLY_USED" +msgstr "Վերջերս օգտագործված" + +msgid "IDS_TASKMGR_POP_CLEAR_ALL_APP_HISTORY_Q" +msgstr "Մաքրե՞լ բոլոր ծրագրերի պատմությունը:" + +msgid "IDS_TASKMGR_POP_CLEAR_PS_HISTORY_Q" +msgstr "Մաքրե՞լ %s պատմությունը:" + +msgid "IDS_TASKMGR_POP_CLOSE_ALL_APPS_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "Փակե՞լ բոլոր ծրագրերը: Դա կարող է հանգեցնել տվյալների կորստի" + +msgid "IDS_TASKMGR_POP_CLOSE_PS_APP_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "Փակե՞լ %s ծրագիրը: Դա կարող է հանգեցնել տվյալների կորստի" + +msgid "IDS_TASKMGR_POP_UNABLE_TO_OPEN_APPLICATION" +msgstr "Անհնար է բացել ծրագիրը" + +msgid "IDS_TASKMGR_HEADER_TASK_SWITCHER" +msgstr "Առաջադրանքների փոխարկիչ" + diff --git a/po/id.po b/po/id.po new file mode 100644 index 0000000..fb7537c --- /dev/null +++ b/po/id.po @@ -0,0 +1,18 @@ +msgid "IDS_COM_BODY_HIGH_VOLUMES_MAY_HARM_YOUR_HEARING_IF_YOU_LISTEN_FOR_A_LONG_TIME" +msgstr "Volume tinggi dapat membahayakan pendengaran Anda jika Anda mendengarkannya dalam waktu yang lama" + +msgid "IDS_COM_BODY_ANDROID" +msgstr "Android" + +msgid "IDS_COM_BODY_JAVA" +msgstr "Java" + +msgid "IDS_COM_BODY_WARNING" +msgstr "Peringatan" + +msgid "IDS_COM_BODY_MEDIA" +msgstr "Media" + +msgid "IDS_COM_OPT_HEADPHONES_ABB" +msgstr "Headphone" + diff --git a/po/is.po b/po/is.po new file mode 100644 index 0000000..727282c --- /dev/null +++ b/po/is.po @@ -0,0 +1,36 @@ +msgid "IDS_TASKMGR_BUTTON_CLEAR_HISTORY_ABB" +msgstr "Hreinsa feril" + +msgid "IDS_TASKMGR_BUTTON_CLOSE_ALL_APPLICATIONS" +msgstr "Loka öllum forritum" + +msgid "IDS_TASKMGR_HEADER_RUNNING" +msgstr "Í keyrslu" + +msgid "IDS_TASKMGR_MBODY_NO_APPS_OPEN" +msgstr "Engin opin forrit" + +msgid "IDS_TASKMGR_MBODY_NO_RECENTLY_USED_APPS" +msgstr "Engin nýlega notuð forrit" + +msgid "IDS_TASKMGR_MBODY_RECENTLY_USED" +msgstr "Notað nýlega" + +msgid "IDS_TASKMGR_POP_CLEAR_ALL_APP_HISTORY_Q" +msgstr "Hreinsa feril allra forrita?" + +msgid "IDS_TASKMGR_POP_CLEAR_PS_HISTORY_Q" +msgstr "Hreinsa feril %s?" + +msgid "IDS_TASKMGR_POP_CLOSE_ALL_APPS_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "Loka öllum forritum? Gögn gætu mögulega tapast" + +msgid "IDS_TASKMGR_POP_CLOSE_PS_APP_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "Loka %s forritum? Gögn gætu mögulega tapast" + +msgid "IDS_TASKMGR_POP_UNABLE_TO_OPEN_APPLICATION" +msgstr "Mistókst að opna forrit" + +msgid "IDS_TASKMGR_HEADER_TASK_SWITCHER" +msgstr "Verkefnaskipti" + diff --git a/po/it_IT.po b/po/it_IT.po new file mode 100644 index 0000000..b7b4a8a --- /dev/null +++ b/po/it_IT.po @@ -0,0 +1,36 @@ +msgid "IDS_TASKMGR_BUTTON_CLEAR_HISTORY_ABB" +msgstr "Cancella cronologia" + +msgid "IDS_TASKMGR_BUTTON_CLOSE_ALL_APPLICATIONS" +msgstr "Chiudi tutte le applicazioni" + +msgid "IDS_TASKMGR_HEADER_RUNNING" +msgstr "In esecuzione" + +msgid "IDS_TASKMGR_MBODY_NO_APPS_OPEN" +msgstr "Nessuna applicaz. aperta" + +msgid "IDS_TASKMGR_MBODY_NO_RECENTLY_USED_APPS" +msgstr "Ness. utilizz. di recente" + +msgid "IDS_TASKMGR_MBODY_RECENTLY_USED" +msgstr "Utilizzato di recente" + +msgid "IDS_TASKMGR_POP_CLEAR_ALL_APP_HISTORY_Q" +msgstr "Cancellare la cronologia di tutte le applicazioni?" + +msgid "IDS_TASKMGR_POP_CLEAR_PS_HISTORY_Q" +msgstr "Cancellare la cronologia di %s?" + +msgid "IDS_TASKMGR_POP_CLOSE_ALL_APPS_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "Chiudere tutte le applicazioni? Potrebbe verificarsi la perdita di dati" + +msgid "IDS_TASKMGR_POP_CLOSE_PS_APP_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "Chiudere l'applicazione %s? Potrebbe verificarsi la perdita di dati" + +msgid "IDS_TASKMGR_POP_UNABLE_TO_OPEN_APPLICATION" +msgstr "Impossibile aprire l'applicazione" + +msgid "IDS_TASKMGR_HEADER_TASK_SWITCHER" +msgstr "Cambia attività" + diff --git a/po/ja_JP.po b/po/ja_JP.po new file mode 100644 index 0000000..cb06967 --- /dev/null +++ b/po/ja_JP.po @@ -0,0 +1,36 @@ +msgid "IDS_TASKMGR_BUTTON_CLEAR_HISTORY_ABB" +msgstr "履歴を消去" + +msgid "IDS_TASKMGR_BUTTON_CLOSE_ALL_APPLICATIONS" +msgstr "全アプリを終了します。" + +msgid "IDS_TASKMGR_HEADER_RUNNING" +msgstr "実行中" + +msgid "IDS_TASKMGR_MBODY_NO_APPS_OPEN" +msgstr "起動アプリはありません。" + +msgid "IDS_TASKMGR_MBODY_NO_RECENTLY_USED_APPS" +msgstr "最近使ったアプリはありません。" + +msgid "IDS_TASKMGR_MBODY_RECENTLY_USED" +msgstr "最近​使用​された​言語" + +msgid "IDS_TASKMGR_POP_CLEAR_ALL_APP_HISTORY_Q" +msgstr "全てのアプリ履歴を消去しますか?" + +msgid "IDS_TASKMGR_POP_CLEAR_PS_HISTORY_Q" +msgstr "%sの履歴を消去しますか?" + +msgid "IDS_TASKMGR_POP_CLOSE_ALL_APPS_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "全てのアプリを終了しますか?この操作で、データが失われる可能性があります。" + +msgid "IDS_TASKMGR_POP_CLOSE_PS_APP_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "%sアプリを終了しますか?この操作で、データが失われる可能性があります。" + +msgid "IDS_TASKMGR_POP_UNABLE_TO_OPEN_APPLICATION" +msgstr "アプリケーションを起動できません。" + +msgid "IDS_TASKMGR_HEADER_TASK_SWITCHER" +msgstr "タスク切替" + diff --git a/po/ka.po b/po/ka.po new file mode 100644 index 0000000..898b29d --- /dev/null +++ b/po/ka.po @@ -0,0 +1,36 @@ +msgid "IDS_TASKMGR_BUTTON_CLEAR_HISTORY_ABB" +msgstr "ისტორიის წაშლა" + +msgid "IDS_TASKMGR_BUTTON_CLOSE_ALL_APPLICATIONS" +msgstr "ყველა პროგრამის დახურვა" + +msgid "IDS_TASKMGR_HEADER_RUNNING" +msgstr "ჩართული" + +msgid "IDS_TASKMGR_MBODY_NO_APPS_OPEN" +msgstr "პროგრამები არაა გახსნილი" + +msgid "IDS_TASKMGR_MBODY_NO_RECENTLY_USED_APPS" +msgstr "ბოლო პროგრამები არ არის" + +msgid "IDS_TASKMGR_MBODY_RECENTLY_USED" +msgstr "ბოლოს გამოყენებული" + +msgid "IDS_TASKMGR_POP_CLEAR_ALL_APP_HISTORY_Q" +msgstr "წაშლით პროგრამის მთელ ისტორიას?" + +msgid "IDS_TASKMGR_POP_CLEAR_PS_HISTORY_Q" +msgstr "გასუფთავდეს ”%s”-ს ისტორია?" + +msgid "IDS_TASKMGR_POP_CLOSE_ALL_APPS_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "დაიხუროს ყველა პროგრამა? შეიძლება ამან გამოიწვიოს მონაცემთა დაკარგვა" + +msgid "IDS_TASKMGR_POP_CLOSE_PS_APP_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "დაიხუროს პროგრამა ”%s”? შეიძლება ამან გამოიწვიოს მონაცემთა დაკარგვა" + +msgid "IDS_TASKMGR_POP_UNABLE_TO_OPEN_APPLICATION" +msgstr "პროგრამის გახსნა შეუძლებელია" + +msgid "IDS_TASKMGR_HEADER_TASK_SWITCHER" +msgstr "დავალების გადამრთველი" + diff --git a/po/kk.po b/po/kk.po new file mode 100644 index 0000000..643fbde --- /dev/null +++ b/po/kk.po @@ -0,0 +1,36 @@ +msgid "IDS_TASKMGR_BUTTON_CLEAR_HISTORY_ABB" +msgstr "Журналды тазалау" + +msgid "IDS_TASKMGR_BUTTON_CLOSE_ALL_APPLICATIONS" +msgstr "Барлық қолданбаларды жабыңыз" + +msgid "IDS_TASKMGR_HEADER_RUNNING" +msgstr "Іске қосу" + +msgid "IDS_TASKMGR_MBODY_NO_APPS_OPEN" +msgstr "Ашық қолданба жоқ" + +msgid "IDS_TASKMGR_MBODY_NO_RECENTLY_USED_APPS" +msgstr "Соңғы пайда. қолданба жоқ" + +msgid "IDS_TASKMGR_MBODY_RECENTLY_USED" +msgstr "Соңғы пайдаланылған" + +msgid "IDS_TASKMGR_POP_CLEAR_ALL_APP_HISTORY_Q" +msgstr "Барлық қолданба журналын тазалау керек пе?" + +msgid "IDS_TASKMGR_POP_CLEAR_PS_HISTORY_Q" +msgstr "%s журналын тазалау керек пе?" + +msgid "IDS_TASKMGR_POP_CLOSE_ALL_APPS_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "Барлық қолданбаны жабу керек пе? Ол деректердің жоғалуына себеп болуы мүмкін" + +msgid "IDS_TASKMGR_POP_CLOSE_PS_APP_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "%s қолданбасын жабу керек пе? Ол деректердің жоғалуына себеп болуы мүмкін" + +msgid "IDS_TASKMGR_POP_UNABLE_TO_OPEN_APPLICATION" +msgstr "Қолданбаны ашу мүмкін емес" + +msgid "IDS_TASKMGR_HEADER_TASK_SWITCHER" +msgstr "Тапсырма қосқыш" + diff --git a/po/ko_KR.po b/po/ko_KR.po new file mode 100644 index 0000000..4b72422 --- /dev/null +++ b/po/ko_KR.po @@ -0,0 +1,36 @@ +msgid "IDS_TASKMGR_BUTTON_CLEAR_HISTORY_ABB" +msgstr "기록 삭제" + +msgid "IDS_TASKMGR_BUTTON_CLOSE_ALL_APPLICATIONS" +msgstr "모든 애플리케이션을 종료합니다" + +msgid "IDS_TASKMGR_HEADER_RUNNING" +msgstr "실행" + +msgid "IDS_TASKMGR_MBODY_NO_APPS_OPEN" +msgstr "실행 중인 애플리케이션이 없습니다" + +msgid "IDS_TASKMGR_MBODY_NO_RECENTLY_USED_APPS" +msgstr "최근 사용된 애플리케이션이 없습니다" + +msgid "IDS_TASKMGR_MBODY_RECENTLY_USED" +msgstr "최근 사용" + +msgid "IDS_TASKMGR_POP_CLEAR_ALL_APP_HISTORY_Q" +msgstr "애플리케이션 기록을 모두 삭제할까요?" + +msgid "IDS_TASKMGR_POP_CLEAR_PS_HISTORY_Q" +msgstr "%s 기록을 삭제할까요?" + +msgid "IDS_TASKMGR_POP_CLOSE_ALL_APPS_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "애플리케이션을 모두 종료할까요? 데이터가 손실될 수 있습니다" + +msgid "IDS_TASKMGR_POP_CLOSE_PS_APP_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "%s 애플리케이션을 종료할까요? 데이터가 손실될 수 있습니다" + +msgid "IDS_TASKMGR_POP_UNABLE_TO_OPEN_APPLICATION" +msgstr "애플리케이션을 실행하지 못하였습니다" + +msgid "IDS_TASKMGR_HEADER_TASK_SWITCHER" +msgstr "작업 전환기" + diff --git a/po/lt.po b/po/lt.po new file mode 100644 index 0000000..897d8ad --- /dev/null +++ b/po/lt.po @@ -0,0 +1,36 @@ +msgid "IDS_TASKMGR_BUTTON_CLEAR_HISTORY_ABB" +msgstr "Valyti istoriją" + +msgid "IDS_TASKMGR_BUTTON_CLOSE_ALL_APPLICATIONS" +msgstr "Uždaryti visas programas" + +msgid "IDS_TASKMGR_HEADER_RUNNING" +msgstr "Vykdoma" + +msgid "IDS_TASKMGR_MBODY_NO_APPS_OPEN" +msgstr "Nėra atidarytų programų" + +msgid "IDS_TASKMGR_MBODY_NO_RECENTLY_USED_APPS" +msgstr "Nėra neseniai naud.progr." + +msgid "IDS_TASKMGR_MBODY_RECENTLY_USED" +msgstr "Pastarąjį kartą naudota" + +msgid "IDS_TASKMGR_POP_CLEAR_ALL_APP_HISTORY_Q" +msgstr "Išvalyti visą programų istoriją?" + +msgid "IDS_TASKMGR_POP_CLEAR_PS_HISTORY_Q" +msgstr "Išvalyti %s istoriją?" + +msgid "IDS_TASKMGR_POP_CLOSE_ALL_APPS_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "Uždaryti visas programas? Taip galite prarasti duomenis" + +msgid "IDS_TASKMGR_POP_CLOSE_PS_APP_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "Uždaryti programą %s? Taip galite prarasti duomenis" + +msgid "IDS_TASKMGR_POP_UNABLE_TO_OPEN_APPLICATION" +msgstr "Neįmanoma atidaryti programos" + +msgid "IDS_TASKMGR_HEADER_TASK_SWITCHER" +msgstr "Užduočių jungiklis" + diff --git a/po/lv.po b/po/lv.po new file mode 100644 index 0000000..2f75264 --- /dev/null +++ b/po/lv.po @@ -0,0 +1,36 @@ +msgid "IDS_TASKMGR_BUTTON_CLEAR_HISTORY_ABB" +msgstr "Notīrīt vēsturi" + +msgid "IDS_TASKMGR_BUTTON_CLOSE_ALL_APPLICATIONS" +msgstr "Aizvērt visas programmas" + +msgid "IDS_TASKMGR_HEADER_RUNNING" +msgstr "Darbojas" + +msgid "IDS_TASKMGR_MBODY_NO_APPS_OPEN" +msgstr "Nav atvērtu programmu" + +msgid "IDS_TASKMGR_MBODY_NO_RECENTLY_USED_APPS" +msgstr "Nav nesen lietotu progr." + +msgid "IDS_TASKMGR_MBODY_RECENTLY_USED" +msgstr "Nesen lietota" + +msgid "IDS_TASKMGR_POP_CLEAR_ALL_APP_HISTORY_Q" +msgstr "Vai notīrīt visu programmu vēsturi?" + +msgid "IDS_TASKMGR_POP_CLEAR_PS_HISTORY_Q" +msgstr "Vai notīrīt %s vēsturi?" + +msgid "IDS_TASKMGR_POP_CLOSE_ALL_APPS_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "Vai aizvērt visas programmas? Tādejādi var tikt zaudēti dati" + +msgid "IDS_TASKMGR_POP_CLOSE_PS_APP_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "Vai aizvērt %s programmu? Tādejādi var tikt zaudēti dati" + +msgid "IDS_TASKMGR_POP_UNABLE_TO_OPEN_APPLICATION" +msgstr "Nevar atvērt programmu" + +msgid "IDS_TASKMGR_HEADER_TASK_SWITCHER" +msgstr "Uzdevumu pārslēdzējs" + diff --git a/po/mk.po b/po/mk.po new file mode 100644 index 0000000..398a2bd --- /dev/null +++ b/po/mk.po @@ -0,0 +1,36 @@ +msgid "IDS_TASKMGR_BUTTON_CLEAR_HISTORY_ABB" +msgstr "Бриши историја" + +msgid "IDS_TASKMGR_BUTTON_CLOSE_ALL_APPLICATIONS" +msgstr "Затвори ги сите апликации" + +msgid "IDS_TASKMGR_HEADER_RUNNING" +msgstr "Активни" + +msgid "IDS_TASKMGR_MBODY_NO_APPS_OPEN" +msgstr "Нема отворени апликации" + +msgid "IDS_TASKMGR_MBODY_NO_RECENTLY_USED_APPS" +msgstr "Нема последни апликации" + +msgid "IDS_TASKMGR_MBODY_RECENTLY_USED" +msgstr "Последни користени" + +msgid "IDS_TASKMGR_POP_CLEAR_ALL_APP_HISTORY_Q" +msgstr "Да се избрише целата историја на апликацијата?" + +msgid "IDS_TASKMGR_POP_CLEAR_PS_HISTORY_Q" +msgstr "Да се избрише историјата на %s?" + +msgid "IDS_TASKMGR_POP_CLOSE_ALL_APPS_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "Да се затворат сите апликации? Тоа може да предизвика да се изгубат податоци" + +msgid "IDS_TASKMGR_POP_CLOSE_PS_APP_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "Да се затвори апликацијата %s? Тоа може да предизвика да се изгубат податоци" + +msgid "IDS_TASKMGR_POP_UNABLE_TO_OPEN_APPLICATION" +msgstr "Не може да се отвори апликацијата" + +msgid "IDS_TASKMGR_HEADER_TASK_SWITCHER" +msgstr "Менувач на задачи" + diff --git a/po/ms.po b/po/ms.po new file mode 100644 index 0000000..6955d87 --- /dev/null +++ b/po/ms.po @@ -0,0 +1,18 @@ +msgid "IDS_COM_BODY_HIGH_VOLUMES_MAY_HARM_YOUR_HEARING_IF_YOU_LISTEN_FOR_A_LONG_TIME" +msgstr "Kelantangan tinggi mungkin merosakkan pendengaran anda jika anda mendengar untuk masa yang lama" + +msgid "IDS_COM_BODY_ANDROID" +msgstr "Android" + +msgid "IDS_COM_BODY_JAVA" +msgstr "Java" + +msgid "IDS_COM_BODY_WARNING" +msgstr "Amaran" + +msgid "IDS_COM_BODY_MEDIA" +msgstr "Media" + +msgid "IDS_COM_OPT_HEADPHONES_ABB" +msgstr "Fon kepala" + diff --git a/po/nb.po b/po/nb.po new file mode 100644 index 0000000..32acb7a --- /dev/null +++ b/po/nb.po @@ -0,0 +1,36 @@ +msgid "IDS_TASKMGR_BUTTON_CLEAR_HISTORY_ABB" +msgstr "Tøm logg" + +msgid "IDS_TASKMGR_BUTTON_CLOSE_ALL_APPLICATIONS" +msgstr "Lukk alle programmer" + +msgid "IDS_TASKMGR_HEADER_RUNNING" +msgstr "Kjørende" + +msgid "IDS_TASKMGR_MBODY_NO_APPS_OPEN" +msgstr "Ingen programmer åpne" + +msgid "IDS_TASKMGR_MBODY_NO_RECENTLY_USED_APPS" +msgstr "Ingen nylig brukte prog." + +msgid "IDS_TASKMGR_MBODY_RECENTLY_USED" +msgstr "Nylig brukt" + +msgid "IDS_TASKMGR_POP_CLEAR_ALL_APP_HISTORY_Q" +msgstr "Tømme alle programlogger?" + +msgid "IDS_TASKMGR_POP_CLEAR_PS_HISTORY_Q" +msgstr "Tømme %s logg?" + +msgid "IDS_TASKMGR_POP_CLOSE_ALL_APPS_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "Lukke alle programmer? Dette kan føre til at data går tapt" + +msgid "IDS_TASKMGR_POP_CLOSE_PS_APP_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "Lukke %s programmet? Dette kan føre til at data går tapt" + +msgid "IDS_TASKMGR_POP_UNABLE_TO_OPEN_APPLICATION" +msgstr "Kan ikke åpne program" + +msgid "IDS_TASKMGR_HEADER_TASK_SWITCHER" +msgstr "Oppgaveveksler" + diff --git a/po/nl_NL.po b/po/nl_NL.po new file mode 100644 index 0000000..d9e3864 --- /dev/null +++ b/po/nl_NL.po @@ -0,0 +1,36 @@ +msgid "IDS_TASKMGR_BUTTON_CLEAR_HISTORY_ABB" +msgstr "Geschiedenis wissen" + +msgid "IDS_TASKMGR_BUTTON_CLOSE_ALL_APPLICATIONS" +msgstr "Alle toepassingen sluiten" + +msgid "IDS_TASKMGR_HEADER_RUNNING" +msgstr "Actief" + +msgid "IDS_TASKMGR_MBODY_NO_APPS_OPEN" +msgstr "Geen apps open" + +msgid "IDS_TASKMGR_MBODY_NO_RECENTLY_USED_APPS" +msgstr "Geen recent gebruik. apps" + +msgid "IDS_TASKMGR_MBODY_RECENTLY_USED" +msgstr "Recent gebruikt" + +msgid "IDS_TASKMGR_POP_CLEAR_ALL_APP_HISTORY_Q" +msgstr "Alle app-geschiedenis wissen?" + +msgid "IDS_TASKMGR_POP_CLEAR_PS_HISTORY_Q" +msgstr "Geschiedenis %s wissen?" + +msgid "IDS_TASKMGR_POP_CLOSE_ALL_APPS_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "Alle apps sluiten? Hierbij kunnen gegevens verloren gaan" + +msgid "IDS_TASKMGR_POP_CLOSE_PS_APP_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "App %s sluiten? Hierbij kunnen gegevens verloren gaan" + +msgid "IDS_TASKMGR_POP_UNABLE_TO_OPEN_APPLICATION" +msgstr "Kan applicatie niet openen" + +msgid "IDS_TASKMGR_HEADER_TASK_SWITCHER" +msgstr "Taak afwisselen" + diff --git a/po/no.po b/po/no.po new file mode 100644 index 0000000..b14a452 --- /dev/null +++ b/po/no.po @@ -0,0 +1,18 @@ +msgid "IDS_COM_BODY_HIGH_VOLUMES_MAY_HARM_YOUR_HEARING_IF_YOU_LISTEN_FOR_A_LONG_TIME" +msgstr "Høy lydstyrke kan skade hørselen din hvis du lytter til det over lengre perioder" + +msgid "IDS_COM_BODY_ANDROID" +msgstr "Android" + +msgid "IDS_COM_BODY_JAVA" +msgstr "Java" + +msgid "IDS_COM_BODY_WARNING" +msgstr "Advarsel" + +msgid "IDS_COM_BODY_MEDIA" +msgstr "Medier" + +msgid "IDS_COM_OPT_HEADPHONES_ABB" +msgstr "Hodetelefoner" + diff --git a/po/pl.po b/po/pl.po new file mode 100644 index 0000000..97ba671 --- /dev/null +++ b/po/pl.po @@ -0,0 +1,36 @@ +msgid "IDS_TASKMGR_BUTTON_CLEAR_HISTORY_ABB" +msgstr "Wyczyść historię" + +msgid "IDS_TASKMGR_BUTTON_CLOSE_ALL_APPLICATIONS" +msgstr "Zamknij wszystkie aplikacje" + +msgid "IDS_TASKMGR_HEADER_RUNNING" +msgstr "Uruchomione" + +msgid "IDS_TASKMGR_MBODY_NO_APPS_OPEN" +msgstr "Brak otwartych aplikacji" + +msgid "IDS_TASKMGR_MBODY_NO_RECENTLY_USED_APPS" +msgstr "Brak ostat. używ. aplik." + +msgid "IDS_TASKMGR_MBODY_RECENTLY_USED" +msgstr "Ostatnio używany" + +msgid "IDS_TASKMGR_POP_CLEAR_ALL_APP_HISTORY_Q" +msgstr "Wyczyścić historię wszystkich aplikacji?" + +msgid "IDS_TASKMGR_POP_CLEAR_PS_HISTORY_Q" +msgstr "Wyczyścić historię %s?" + +msgid "IDS_TASKMGR_POP_CLOSE_ALL_APPS_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "Zamknąć wszystkie aplikacje? To może spowodować utratę danych" + +msgid "IDS_TASKMGR_POP_CLOSE_PS_APP_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "Zamknąć aplikację %s? To może spowodować utratę danych" + +msgid "IDS_TASKMGR_POP_UNABLE_TO_OPEN_APPLICATION" +msgstr "Nie można otworzyć aplikacji" + +msgid "IDS_TASKMGR_HEADER_TASK_SWITCHER" +msgstr "Menedżer zadań" + diff --git a/po/pt_BR.po b/po/pt_BR.po new file mode 100644 index 0000000..7f755a4 --- /dev/null +++ b/po/pt_BR.po @@ -0,0 +1,36 @@ +msgid "IDS_TASKMGR_BUTTON_CLEAR_HISTORY_ABB" +msgstr "Limpar histórico" + +msgid "IDS_TASKMGR_BUTTON_CLOSE_ALL_APPLICATIONS" +msgstr "Fechar todos os aplicativos" + +msgid "IDS_TASKMGR_HEADER_RUNNING" +msgstr "Em execução" + +msgid "IDS_TASKMGR_MBODY_NO_APPS_OPEN" +msgstr "Sem aplicativos abertos" + +msgid "IDS_TASKMGR_MBODY_NO_RECENTLY_USED_APPS" +msgstr "Sem aplic. usados antes" + +msgid "IDS_TASKMGR_MBODY_RECENTLY_USED" +msgstr "Utilizado recentemente" + +msgid "IDS_TASKMGR_POP_CLEAR_ALL_APP_HISTORY_Q" +msgstr "Limpar todo o histórico do aplicativo?" + +msgid "IDS_TASKMGR_POP_CLEAR_PS_HISTORY_Q" +msgstr "Limpar histórico de %s?" + +msgid "IDS_TASKMGR_POP_CLOSE_ALL_APPS_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "Fechar todos os aplicativos? Isto pode causar perda de dados" + +msgid "IDS_TASKMGR_POP_CLOSE_PS_APP_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "Fechar o aplicativo %s? Isto pode causar perda de dados" + +msgid "IDS_TASKMGR_POP_UNABLE_TO_OPEN_APPLICATION" +msgstr "Não é possível abrir aplicativo" + +msgid "IDS_TASKMGR_HEADER_TASK_SWITCHER" +msgstr "Comutador de tarefas" + diff --git a/po/pt_PT.po b/po/pt_PT.po new file mode 100644 index 0000000..dd7c192 --- /dev/null +++ b/po/pt_PT.po @@ -0,0 +1,36 @@ +msgid "IDS_TASKMGR_BUTTON_CLEAR_HISTORY_ABB" +msgstr "Limpar histórico" + +msgid "IDS_TASKMGR_BUTTON_CLOSE_ALL_APPLICATIONS" +msgstr "Fechar todas as aplicações" + +msgid "IDS_TASKMGR_HEADER_RUNNING" +msgstr "A ser executado" + +msgid "IDS_TASKMGR_MBODY_NO_APPS_OPEN" +msgstr "Sem aplicações abertas" + +msgid "IDS_TASKMGR_MBODY_NO_RECENTLY_USED_APPS" +msgstr "Sem aplics. util. recent." + +msgid "IDS_TASKMGR_MBODY_RECENTLY_USED" +msgstr "Utilizado recentemente" + +msgid "IDS_TASKMGR_POP_CLEAR_ALL_APP_HISTORY_Q" +msgstr "Limpar o histórico de todas as aplicações?" + +msgid "IDS_TASKMGR_POP_CLEAR_PS_HISTORY_Q" +msgstr "Limpar histórico de %s?" + +msgid "IDS_TASKMGR_POP_CLOSE_ALL_APPS_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "Fechar todas as aplicações? Isto pode causar a perda de dados" + +msgid "IDS_TASKMGR_POP_CLOSE_PS_APP_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "Fechar %s aplicações? Isto pode causar a perda de dados" + +msgid "IDS_TASKMGR_POP_UNABLE_TO_OPEN_APPLICATION" +msgstr "Impossível abrir aplicação" + +msgid "IDS_TASKMGR_HEADER_TASK_SWITCHER" +msgstr "Comutador de tarefas" + diff --git a/po/ro.po b/po/ro.po new file mode 100644 index 0000000..18fad11 --- /dev/null +++ b/po/ro.po @@ -0,0 +1,36 @@ +msgid "IDS_TASKMGR_BUTTON_CLEAR_HISTORY_ABB" +msgstr "Ştergere istoric" + +msgid "IDS_TASKMGR_BUTTON_CLOSE_ALL_APPLICATIONS" +msgstr "Închideţi toate aplicaţiile" + +msgid "IDS_TASKMGR_HEADER_RUNNING" +msgstr "În funcţiune" + +msgid "IDS_TASKMGR_MBODY_NO_APPS_OPEN" +msgstr "Nicio aplicaţie deschisă" + +msgid "IDS_TASKMGR_MBODY_NO_RECENTLY_USED_APPS" +msgstr "Nicio aplic. util. recent" + +msgid "IDS_TASKMGR_MBODY_RECENTLY_USED" +msgstr "Utilizată recent" + +msgid "IDS_TASKMGR_POP_CLEAR_ALL_APP_HISTORY_Q" +msgstr "Ştergeţi istoricul tuturor aplicaţiilor?" + +msgid "IDS_TASKMGR_POP_CLEAR_PS_HISTORY_Q" +msgstr "Ştergeţi istoricul %s?" + +msgid "IDS_TASKMGR_POP_CLOSE_ALL_APPS_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "Închideţi toate aplicaţiile? Aceasta poate cauza pierderea datelor" + +msgid "IDS_TASKMGR_POP_CLOSE_PS_APP_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "Închideţi aplicaţia %s? Aceasta poate cauza pierderea datelor" + +msgid "IDS_TASKMGR_POP_UNABLE_TO_OPEN_APPLICATION" +msgstr "Imposibil de deschis aplicaţia" + +msgid "IDS_TASKMGR_HEADER_TASK_SWITCHER" +msgstr "Comutator activităţi" + diff --git a/po/ru_RU.po b/po/ru_RU.po new file mode 100644 index 0000000..5f9a476 --- /dev/null +++ b/po/ru_RU.po @@ -0,0 +1,36 @@ +msgid "IDS_TASKMGR_BUTTON_CLEAR_HISTORY_ABB" +msgstr "Очистить журнал" + +msgid "IDS_TASKMGR_BUTTON_CLOSE_ALL_APPLICATIONS" +msgstr "Закрыть все приложения" + +msgid "IDS_TASKMGR_HEADER_RUNNING" +msgstr "Выполнять" + +msgid "IDS_TASKMGR_MBODY_NO_APPS_OPEN" +msgstr "Нет открытых приложений" + +msgid "IDS_TASKMGR_MBODY_NO_RECENTLY_USED_APPS" +msgstr "Нет последних приложений" + +msgid "IDS_TASKMGR_MBODY_RECENTLY_USED" +msgstr "Недавно использовавшийся" + +msgid "IDS_TASKMGR_POP_CLEAR_ALL_APP_HISTORY_Q" +msgstr "Очистить журнал всех приложений?" + +msgid "IDS_TASKMGR_POP_CLEAR_PS_HISTORY_Q" +msgstr "Очистить журнал %s?" + +msgid "IDS_TASKMGR_POP_CLOSE_ALL_APPS_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "Закрыть все приложения? Это может привести к потере данных" + +msgid "IDS_TASKMGR_POP_CLOSE_PS_APP_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "Закрыть приложение %s? Это может привести к потере данных" + +msgid "IDS_TASKMGR_POP_UNABLE_TO_OPEN_APPLICATION" +msgstr "Не удалось открыть приложение" + +msgid "IDS_TASKMGR_HEADER_TASK_SWITCHER" +msgstr "Диспетчер задач" + diff --git a/po/sk.po b/po/sk.po new file mode 100644 index 0000000..6d57d73 --- /dev/null +++ b/po/sk.po @@ -0,0 +1,36 @@ +msgid "IDS_TASKMGR_BUTTON_CLEAR_HISTORY_ABB" +msgstr "Vymazať históriu" + +msgid "IDS_TASKMGR_BUTTON_CLOSE_ALL_APPLICATIONS" +msgstr "Ukončite všetky aplikácie" + +msgid "IDS_TASKMGR_HEADER_RUNNING" +msgstr "Spustené" + +msgid "IDS_TASKMGR_MBODY_NO_APPS_OPEN" +msgstr "Žiadne otvorené aplikácie" + +msgid "IDS_TASKMGR_MBODY_NO_RECENTLY_USED_APPS" +msgstr "Žiadne nap. použ. aplik." + +msgid "IDS_TASKMGR_MBODY_RECENTLY_USED" +msgstr "Nedávno použité" + +msgid "IDS_TASKMGR_POP_CLEAR_ALL_APP_HISTORY_Q" +msgstr "Vymazať celú históriu aplikácií?" + +msgid "IDS_TASKMGR_POP_CLEAR_PS_HISTORY_Q" +msgstr "Vymazať históriu aplikácie %s?" + +msgid "IDS_TASKMGR_POP_CLOSE_ALL_APPS_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "Ukončiť všetky aplikácie? Môže to spôsobiť stratu údajov" + +msgid "IDS_TASKMGR_POP_CLOSE_PS_APP_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "Ukončiť aplikáciu %s? Môže to spôsobiť stratu údajov" + +msgid "IDS_TASKMGR_POP_UNABLE_TO_OPEN_APPLICATION" +msgstr "Aplikácia sa nedá otvoriť" + +msgid "IDS_TASKMGR_HEADER_TASK_SWITCHER" +msgstr "Prepínanie úloh" + diff --git a/po/sl.po b/po/sl.po new file mode 100644 index 0000000..1acbdbc --- /dev/null +++ b/po/sl.po @@ -0,0 +1,36 @@ +msgid "IDS_TASKMGR_BUTTON_CLEAR_HISTORY_ABB" +msgstr "Počisti zgodovino" + +msgid "IDS_TASKMGR_BUTTON_CLOSE_ALL_APPLICATIONS" +msgstr "Zapri vse programe" + +msgid "IDS_TASKMGR_HEADER_RUNNING" +msgstr "Se izvaja" + +msgid "IDS_TASKMGR_MBODY_NO_APPS_OPEN" +msgstr "Ni odprtih programov" + +msgid "IDS_TASKMGR_MBODY_NO_RECENTLY_USED_APPS" +msgstr "Ni nedavno up. programov" + +msgid "IDS_TASKMGR_MBODY_RECENTLY_USED" +msgstr "Nazadnje uporabljeno" + +msgid "IDS_TASKMGR_POP_CLEAR_ALL_APP_HISTORY_Q" +msgstr "Želite počistiti zgodovino vseh programov?" + +msgid "IDS_TASKMGR_POP_CLEAR_PS_HISTORY_Q" +msgstr "Želite počistiti zgodovino programa %s?" + +msgid "IDS_TASKMGR_POP_CLOSE_ALL_APPS_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "Želite zapreti vse programe? To lahko povzroči izgubo podatkov" + +msgid "IDS_TASKMGR_POP_CLOSE_PS_APP_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "Želite zapreti program %s? To lahko povzroči izgubo podatkov" + +msgid "IDS_TASKMGR_POP_UNABLE_TO_OPEN_APPLICATION" +msgstr "Programa ni mogoče odpreti" + +msgid "IDS_TASKMGR_HEADER_TASK_SWITCHER" +msgstr "Preklopnik med opravili" + diff --git a/po/sr.po b/po/sr.po new file mode 100644 index 0000000..0d3ff15 --- /dev/null +++ b/po/sr.po @@ -0,0 +1,36 @@ +msgid "IDS_TASKMGR_BUTTON_CLEAR_HISTORY_ABB" +msgstr "Obriši istoriju" + +msgid "IDS_TASKMGR_BUTTON_CLOSE_ALL_APPLICATIONS" +msgstr "Zatvori sve aplikacije" + +msgid "IDS_TASKMGR_HEADER_RUNNING" +msgstr "Izvršavanje" + +msgid "IDS_TASKMGR_MBODY_NO_APPS_OPEN" +msgstr "Nema otvorenih aplikacija" + +msgid "IDS_TASKMGR_MBODY_NO_RECENTLY_USED_APPS" +msgstr "Aplik. nisu skoro korišć." + +msgid "IDS_TASKMGR_MBODY_RECENTLY_USED" +msgstr "Nedavno korišćeno" + +msgid "IDS_TASKMGR_POP_CLEAR_ALL_APP_HISTORY_Q" +msgstr "Obrisati istoriju za sve aplikacije?" + +msgid "IDS_TASKMGR_POP_CLEAR_PS_HISTORY_Q" +msgstr "Obrisati %s istoriju?" + +msgid "IDS_TASKMGR_POP_CLOSE_ALL_APPS_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "Zatvoriti sve aplikacije? To može dovesti do gubitka podataka" + +msgid "IDS_TASKMGR_POP_CLOSE_PS_APP_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "Zatvoriti %s aplikaciju? To može dovesti do gubitka podataka" + +msgid "IDS_TASKMGR_POP_UNABLE_TO_OPEN_APPLICATION" +msgstr "Nije moguće otvoriti aplikaciju" + +msgid "IDS_TASKMGR_HEADER_TASK_SWITCHER" +msgstr "Planer zadataka" + diff --git a/po/sv.po b/po/sv.po new file mode 100644 index 0000000..61babd1 --- /dev/null +++ b/po/sv.po @@ -0,0 +1,36 @@ +msgid "IDS_TASKMGR_BUTTON_CLEAR_HISTORY_ABB" +msgstr "Rensa historik" + +msgid "IDS_TASKMGR_BUTTON_CLOSE_ALL_APPLICATIONS" +msgstr "Stäng alla program" + +msgid "IDS_TASKMGR_HEADER_RUNNING" +msgstr "Körs" + +msgid "IDS_TASKMGR_MBODY_NO_APPS_OPEN" +msgstr "Inga öppna program" + +msgid "IDS_TASKMGR_MBODY_NO_RECENTLY_USED_APPS" +msgstr "Inga nyligen anv. program" + +msgid "IDS_TASKMGR_MBODY_RECENTLY_USED" +msgstr "Nyligen använd" + +msgid "IDS_TASKMGR_POP_CLEAR_ALL_APP_HISTORY_Q" +msgstr "Rensa all programhistorik?" + +msgid "IDS_TASKMGR_POP_CLEAR_PS_HISTORY_Q" +msgstr "Rensa historik för %s?" + +msgid "IDS_TASKMGR_POP_CLOSE_ALL_APPS_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "Stäng alla program? Detta kan medföra att data förloras" + +msgid "IDS_TASKMGR_POP_CLOSE_PS_APP_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "Stäng %s program? Detta kan medföra att data förloras" + +msgid "IDS_TASKMGR_POP_UNABLE_TO_OPEN_APPLICATION" +msgstr "Det går inte att öppna program" + +msgid "IDS_TASKMGR_HEADER_TASK_SWITCHER" +msgstr "Aktivitetsväxlare" + 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 , 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 \n" +"Language-Team: LANGUAGE \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/th.po b/po/th.po new file mode 100644 index 0000000..c69ee38 --- /dev/null +++ b/po/th.po @@ -0,0 +1,18 @@ +msgid "IDS_COM_BODY_HIGH_VOLUMES_MAY_HARM_YOUR_HEARING_IF_YOU_LISTEN_FOR_A_LONG_TIME" +msgstr "ระดับ​เสียง​ที่​สูง​อาจ​เป็น​อันตราย​ต่อ​การ​ฟัง​ของ​คุณ​ได้ หาก​คุณ​ฟัง​เป็น​เวลา​นาน" + +msgid "IDS_COM_BODY_ANDROID" +msgstr "Android" + +msgid "IDS_COM_BODY_JAVA" +msgstr "Java" + +msgid "IDS_COM_BODY_WARNING" +msgstr "เตือน" + +msgid "IDS_COM_BODY_MEDIA" +msgstr "มี​เดีย" + +msgid "IDS_COM_OPT_HEADPHONES_ABB" +msgstr "หู​ฟัง" + diff --git a/po/tr_TR.po b/po/tr_TR.po new file mode 100644 index 0000000..848c355 --- /dev/null +++ b/po/tr_TR.po @@ -0,0 +1,36 @@ +msgid "IDS_TASKMGR_BUTTON_CLEAR_HISTORY_ABB" +msgstr "Geçmişi sil" + +msgid "IDS_TASKMGR_BUTTON_CLOSE_ALL_APPLICATIONS" +msgstr "Tüm uygulamaları kapat" + +msgid "IDS_TASKMGR_HEADER_RUNNING" +msgstr "Çalışıyor" + +msgid "IDS_TASKMGR_MBODY_NO_APPS_OPEN" +msgstr "Açık uygulama yok" + +msgid "IDS_TASKMGR_MBODY_NO_RECENTLY_USED_APPS" +msgstr "Son kullanılan uyg yok" + +msgid "IDS_TASKMGR_MBODY_RECENTLY_USED" +msgstr "Son kullanılanlar" + +msgid "IDS_TASKMGR_POP_CLEAR_ALL_APP_HISTORY_Q" +msgstr "Tüm uygulama geçmişi silinsin mi?" + +msgid "IDS_TASKMGR_POP_CLEAR_PS_HISTORY_Q" +msgstr "%s geçmişi silinsin mi?" + +msgid "IDS_TASKMGR_POP_CLOSE_ALL_APPS_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "Tüm uygulamalar kapatılsın mı? Bu veri kaybına neden olabilir" + +msgid "IDS_TASKMGR_POP_CLOSE_PS_APP_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "%s uygulaması kapatılsın mı? Bu veri kaybına neden olabilir" + +msgid "IDS_TASKMGR_POP_UNABLE_TO_OPEN_APPLICATION" +msgstr "Uygulama açılamıyor" + +msgid "IDS_TASKMGR_HEADER_TASK_SWITCHER" +msgstr "Görev değiştirici" + diff --git a/po/uk.po b/po/uk.po new file mode 100644 index 0000000..83807af --- /dev/null +++ b/po/uk.po @@ -0,0 +1,36 @@ +msgid "IDS_TASKMGR_BUTTON_CLEAR_HISTORY_ABB" +msgstr "Очищення історії" + +msgid "IDS_TASKMGR_BUTTON_CLOSE_ALL_APPLICATIONS" +msgstr "Закрити всі програми" + +msgid "IDS_TASKMGR_HEADER_RUNNING" +msgstr "Виконується" + +msgid "IDS_TASKMGR_MBODY_NO_APPS_OPEN" +msgstr "Немає відкритих програм" + +msgid "IDS_TASKMGR_MBODY_NO_RECENTLY_USED_APPS" +msgstr "Немає нещод. вик. програм" + +msgid "IDS_TASKMGR_MBODY_RECENTLY_USED" +msgstr "Нещодавно використані" + +msgid "IDS_TASKMGR_POP_CLEAR_ALL_APP_HISTORY_Q" +msgstr "Очистити всю історію програм?" + +msgid "IDS_TASKMGR_POP_CLEAR_PS_HISTORY_Q" +msgstr "Очистити історію %s?" + +msgid "IDS_TASKMGR_POP_CLOSE_ALL_APPS_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "Закрити усі програми? Це може спричинити втрату даних" + +msgid "IDS_TASKMGR_POP_CLOSE_PS_APP_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "Закрити програму %s? Це може спричинити втрату даних" + +msgid "IDS_TASKMGR_POP_UNABLE_TO_OPEN_APPLICATION" +msgstr "Неможливо відкрити програму" + +msgid "IDS_TASKMGR_HEADER_TASK_SWITCHER" +msgstr "Диспетчер задач" + 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/uz.po b/po/uz.po new file mode 100644 index 0000000..6583e92 --- /dev/null +++ b/po/uz.po @@ -0,0 +1,36 @@ +msgid "IDS_TASKMGR_BUTTON_CLEAR_HISTORY_ABB" +msgstr "Jurnalni tozalash" + +msgid "IDS_TASKMGR_BUTTON_CLOSE_ALL_APPLICATIONS" +msgstr "Barcha ilovalar yopilsin" + +msgid "IDS_TASKMGR_HEADER_RUNNING" +msgstr "Ishlamoqda" + +msgid "IDS_TASKMGR_MBODY_NO_APPS_OPEN" +msgstr "Ochilgan ilovalar yo‘q" + +msgid "IDS_TASKMGR_MBODY_NO_RECENTLY_USED_APPS" +msgstr "Foydalanilmayotgan ilova" + +msgid "IDS_TASKMGR_MBODY_RECENTLY_USED" +msgstr "Oxirgi foydalanilgan" + +msgid "IDS_TASKMGR_POP_CLEAR_ALL_APP_HISTORY_Q" +msgstr "Barcha ilovalar jurnali tozalansinmi?" + +msgid "IDS_TASKMGR_POP_CLEAR_PS_HISTORY_Q" +msgstr "%s jurnali tozalansinmi?" + +msgid "IDS_TASKMGR_POP_CLOSE_ALL_APPS_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "Barcha ilovalar yopilsinmi? Bu ma’lumot yo‘qotilishiga olib kelishi mumkin" + +msgid "IDS_TASKMGR_POP_CLOSE_PS_APP_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "%s ilovasi yopilsinmi? Bu ma’lumot yo‘qotilishiga olib kelishi mumkin" + +msgid "IDS_TASKMGR_POP_UNABLE_TO_OPEN_APPLICATION" +msgstr "Ilovani ochib bo‘lmaydi" + +msgid "IDS_TASKMGR_HEADER_TASK_SWITCHER" +msgstr "Topshiriq almashtiruvchisi" + diff --git a/po/vi.po b/po/vi.po new file mode 100644 index 0000000..aa6c018 --- /dev/null +++ b/po/vi.po @@ -0,0 +1,18 @@ +msgid "IDS_COM_BODY_HIGH_VOLUMES_MAY_HARM_YOUR_HEARING_IF_YOU_LISTEN_FOR_A_LONG_TIME" +msgstr "Nghe âm lượng to trong thời gian dài có thể làm hại thính giác của bạn" + +msgid "IDS_COM_BODY_ANDROID" +msgstr "Android" + +msgid "IDS_COM_BODY_JAVA" +msgstr "Java" + +msgid "IDS_COM_BODY_WARNING" +msgstr "Cảnh báo" + +msgid "IDS_COM_BODY_MEDIA" +msgstr "Media" + +msgid "IDS_COM_OPT_HEADPHONES_ABB" +msgstr "Tai nghe" + diff --git a/po/zh_CN.po b/po/zh_CN.po new file mode 100644 index 0000000..19088c5 --- /dev/null +++ b/po/zh_CN.po @@ -0,0 +1,36 @@ +msgid "IDS_TASKMGR_BUTTON_CLEAR_HISTORY_ABB" +msgstr "清除历史" + +msgid "IDS_TASKMGR_BUTTON_CLOSE_ALL_APPLICATIONS" +msgstr "关闭所有应用程序" + +msgid "IDS_TASKMGR_HEADER_RUNNING" +msgstr "正在运行" + +msgid "IDS_TASKMGR_MBODY_NO_APPS_OPEN" +msgstr "无开启应用程序" + +msgid "IDS_TASKMGR_MBODY_NO_RECENTLY_USED_APPS" +msgstr "无最近使用的应用程序" + +msgid "IDS_TASKMGR_MBODY_RECENTLY_USED" +msgstr "最近使用" + +msgid "IDS_TASKMGR_POP_CLEAR_ALL_APP_HISTORY_Q" +msgstr "是否清除所有应用程序历史?" + +msgid "IDS_TASKMGR_POP_CLEAR_PS_HISTORY_Q" +msgstr "是否清除 %s 历史?" + +msgid "IDS_TASKMGR_POP_CLOSE_ALL_APPS_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "是否关闭所有应用程序?这可能导致数据丢失" + +msgid "IDS_TASKMGR_POP_CLOSE_PS_APP_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "是否关闭 %s 应用程序?这可能导致数据丢失" + +msgid "IDS_TASKMGR_POP_UNABLE_TO_OPEN_APPLICATION" +msgstr "无法打开应用程序" + +msgid "IDS_TASKMGR_HEADER_TASK_SWITCHER" +msgstr "任务切换器" + diff --git a/po/zh_HK.po b/po/zh_HK.po new file mode 100644 index 0000000..916d9c1 --- /dev/null +++ b/po/zh_HK.po @@ -0,0 +1,36 @@ +msgid "IDS_TASKMGR_BUTTON_CLEAR_HISTORY_ABB" +msgstr "清除記錄" + +msgid "IDS_TASKMGR_BUTTON_CLOSE_ALL_APPLICATIONS" +msgstr "關閉所有應用程式" + +msgid "IDS_TASKMGR_HEADER_RUNNING" +msgstr "執行" + +msgid "IDS_TASKMGR_MBODY_NO_APPS_OPEN" +msgstr "無開啟的應用程式" + +msgid "IDS_TASKMGR_MBODY_NO_RECENTLY_USED_APPS" +msgstr "無最近使用的應用程式" + +msgid "IDS_TASKMGR_MBODY_RECENTLY_USED" +msgstr "最近使用" + +msgid "IDS_TASKMGR_POP_CLEAR_ALL_APP_HISTORY_Q" +msgstr "清除所有應用程式記錄嗎?" + +msgid "IDS_TASKMGR_POP_CLEAR_PS_HISTORY_Q" +msgstr "清除 %s 記錄嗎?" + +msgid "IDS_TASKMGR_POP_CLOSE_ALL_APPS_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "關閉所有應用程式嗎?這可能會導致數據遺失" + +msgid "IDS_TASKMGR_POP_CLOSE_PS_APP_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "關閉 %s 應用程式嗎?這可能會導致數據遺失" + +msgid "IDS_TASKMGR_POP_UNABLE_TO_OPEN_APPLICATION" +msgstr "無法開啟應用程式" + +msgid "IDS_TASKMGR_HEADER_TASK_SWITCHER" +msgstr "工作切換器" + diff --git a/po/zh_SG.po b/po/zh_SG.po new file mode 100644 index 0000000..19088c5 --- /dev/null +++ b/po/zh_SG.po @@ -0,0 +1,36 @@ +msgid "IDS_TASKMGR_BUTTON_CLEAR_HISTORY_ABB" +msgstr "清除历史" + +msgid "IDS_TASKMGR_BUTTON_CLOSE_ALL_APPLICATIONS" +msgstr "关闭所有应用程序" + +msgid "IDS_TASKMGR_HEADER_RUNNING" +msgstr "正在运行" + +msgid "IDS_TASKMGR_MBODY_NO_APPS_OPEN" +msgstr "无开启应用程序" + +msgid "IDS_TASKMGR_MBODY_NO_RECENTLY_USED_APPS" +msgstr "无最近使用的应用程序" + +msgid "IDS_TASKMGR_MBODY_RECENTLY_USED" +msgstr "最近使用" + +msgid "IDS_TASKMGR_POP_CLEAR_ALL_APP_HISTORY_Q" +msgstr "是否清除所有应用程序历史?" + +msgid "IDS_TASKMGR_POP_CLEAR_PS_HISTORY_Q" +msgstr "是否清除 %s 历史?" + +msgid "IDS_TASKMGR_POP_CLOSE_ALL_APPS_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "是否关闭所有应用程序?这可能导致数据丢失" + +msgid "IDS_TASKMGR_POP_CLOSE_PS_APP_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "是否关闭 %s 应用程序?这可能导致数据丢失" + +msgid "IDS_TASKMGR_POP_UNABLE_TO_OPEN_APPLICATION" +msgstr "无法打开应用程序" + +msgid "IDS_TASKMGR_HEADER_TASK_SWITCHER" +msgstr "任务切换器" + diff --git a/po/zh_TW.po b/po/zh_TW.po new file mode 100644 index 0000000..89c754b --- /dev/null +++ b/po/zh_TW.po @@ -0,0 +1,36 @@ +msgid "IDS_TASKMGR_BUTTON_CLEAR_HISTORY_ABB" +msgstr "清除歷程記錄" + +msgid "IDS_TASKMGR_BUTTON_CLOSE_ALL_APPLICATIONS" +msgstr "關閉所有應用程式" + +msgid "IDS_TASKMGR_HEADER_RUNNING" +msgstr "執行中" + +msgid "IDS_TASKMGR_MBODY_NO_APPS_OPEN" +msgstr "沒有開啟應用程式" + +msgid "IDS_TASKMGR_MBODY_NO_RECENTLY_USED_APPS" +msgstr "沒有最近使用的應用程式" + +msgid "IDS_TASKMGR_MBODY_RECENTLY_USED" +msgstr "最近使用" + +msgid "IDS_TASKMGR_POP_CLEAR_ALL_APP_HISTORY_Q" +msgstr "清除所有應用程式歷程記錄嗎?" + +msgid "IDS_TASKMGR_POP_CLEAR_PS_HISTORY_Q" +msgstr "清除 %s 歷程記錄嗎?" + +msgid "IDS_TASKMGR_POP_CLOSE_ALL_APPS_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "關閉所有應用程式嗎?這可能會導致資料遺失" + +msgid "IDS_TASKMGR_POP_CLOSE_PS_APP_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST" +msgstr "關閉 %s 應用程式嗎?這可能會導致資料遺失" + +msgid "IDS_TASKMGR_POP_UNABLE_TO_OPEN_APPLICATION" +msgstr "無法開啟應用程式" + +msgid "IDS_TASKMGR_HEADER_TASK_SWITCHER" +msgstr "任務切換" + diff --git a/src/_cpu.c b/src/_cpu.c new file mode 100755 index 0000000..8a7f1df --- /dev/null +++ b/src/_cpu.c @@ -0,0 +1,111 @@ +/* + * org.tizen.taskmgr + * Copyright (c) 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://floralicense.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 +#include +#include + +#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; + int ret = -1; + + 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); + ret = fscanf(fp, "%*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %lu %lu %ld %ld", + ut, st, &cutime, &cstime); + if(ret < 0) + { + _E("Failed to fscanf() \n"); + fclose(fp); + return -1; + } + *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 100755 index 0000000..c3d9717 --- /dev/null +++ b/src/_cpu.h @@ -0,0 +1,28 @@ +/* + * org.tizen.taskmgr + * Copyright (c) 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://floralicense.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 100755 index 0000000..f8f3e24 --- /dev/null +++ b/src/_eina.c @@ -0,0 +1,303 @@ +/* + * org.tizen.taskmgr + * Copyright (c) 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://floralicense.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 +#include +#include + +#include +#include +#include +#include + +#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; + + char *valc; + bool valb; + char buf[1024] = { 0, }; + struct appdata *ad = data; + struct _task_info *info; + + 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 **table = NULL; + char buf[1024] = { 0, }; + int nrows = 0, ncols = 0; + int row = 0; + + ail_appinfo_h handle; + ail_error_e ret; + bool valb; + char *valc; + + 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; + } + + _D("%s\n", rec_result.pkg_name); + 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); + _D("%s\n", info->icn_path); + + 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; + 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 100755 index 0000000..59d2efe --- /dev/null +++ b/src/_eina.h @@ -0,0 +1,36 @@ +/* + * org.tizen.taskmgr + * Copyright (c) 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://floralicense.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 + +#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 100755 index 0000000..0b21d53 --- /dev/null +++ b/src/_genlist.c @@ -0,0 +1,854 @@ +/* + * org.tizen.taskmgr + * Copyright (c) 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://floralicense.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 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#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" + +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_TASKMGR_BUTTON_CLOSE_ALL_APPLICATIONS", + "IDS_TASKMGR_BUTTON_CLEAR_HISTORY_ABB" +}; + +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 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_TASKMGR_HEADER_RUNNING", + "IDS_TASKMGR_MBODY_RECENTLY_USED" +}; + +static char *nolist_text[TS_MAX] = { + "IDS_TASKMGR_MBODY_NO_APPS_OPEN", + "IDS_TASKMGR_MBODY_NO_RECENTLY_USED_APPS" +}; + +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), T_("IDS_TASKMGR_POP_CLOSE_ALL_APPS_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST")); + 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, }; + + ad->mode = MODE_DEL_ALL_HISTORY; + snprintf(buf, sizeof(buf), T_("IDS_TASKMGR_POP_CLEAR_ALL_APP_HISTORY_Q")); + 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, T_("IDS_TASKMGR_POP_CLOSE_PS_APP_Q_THIS_MAY_CAUSE_DATA_TO_BE_LOST"), 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; +} + +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, T_("IDS_TASKMGR_POP_CLEAR_PS_HISTORY_Q"), 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; +} + +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", T_(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; + Elm_Object_Item *it = (Elm_Object_Item *) event_info; + int ret = -1; + + elm_genlist_item_selected_set(it, EINA_FALSE); + + retm_if(ad == NULL, "Invalid argument: appdata is NULL\n"); + + 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 */ + ret = aul_resume_pid(info->pid); + selected = 0; + } else { + /* when application is dead */ + if (info->pkg_name == NULL) { + util_show_popup_with_message(info->ad->win, + 3.0, + T_("IDS_TASKMGR_POP_UNABLE_TO_OPEN_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 + */ + ret = aul_launch_app(info->pkg_name, NULL); + selected = 0; + } else { + ret = aul_launch_app(info->pkg_name, info->b); + selected = 0; + } + } + } + if(ret == 0) { + _D("exit after 0.3 sec\n"); + ad->exit_timer = ecore_timer_add(0.3, _exit_cb, ad); + } +} + + +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_image_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, + (int)72 * elm_config_scale_get(), + (int)72 * elm_config_scale_get()); + 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, S_("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_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, }; + + 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")) { + snprintf(buf, _BUF_MAX, "%s", info->app_name); + return strdup(buf); + + } + return NULL; +} + +static void _bl_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); +} + +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, T_(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_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)", + T_(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, }; + + 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; + + 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"); + + icon = elm_icon_add(obj); + elm_image_file_set(icon, buf, NULL); + elm_image_preload_disabled_set(icon, EINA_TRUE); + + evas_object_size_hint_min_set(icon, + (int)72 * elm_config_scale_get(), + (int)72 * elm_config_scale_get()); + + return icon; + + } else if (!strcmp(part, "elm.icon.2")) { + btn = elm_button_add(obj); + elm_object_text_set(btn, S_("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_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.7"; + itc_dl.item_style = "1text.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"; + itc_separator2.item_style = "dialogue/seperator"; + + 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; + + 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, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY); + + if (eina_list_count(ad->applist[i]) > 0) { + + item = elm_genlist_item_append(ad->gl, &itc_separator4, + NULL, NULL, + ELM_GENLIST_ITEM_NONE, + NULL, NULL); + elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY); + + elm_genlist_item_append(ad->gl, &itc_bl, + (void *)i, NULL, + ELM_GENLIST_ITEM_NONE, + _bl_sel, (void *)i); + + item = elm_genlist_item_append(ad->gl, &itc_separator2, + NULL, NULL, + 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, NULL, + ELM_GENLIST_ITEM_NONE, + _gl_sel_app, ad); + } + } + } else { + item = elm_genlist_item_append(ad->gl, &itc_nl, + (void *)i, NULL, + ELM_GENLIST_ITEM_NONE, + nl_sel, NULL); + elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY); + } + } + return 0; +} + +void _set_genlist(struct appdata *ad) +{ +_D("func\n"); + retm_if(ad == NULL, "Invalid argument: appdata is NULL\n"); + int ret = AUL_R_ERROR; + int retry_cnt = 0; + int sleep_value = 1000; + + _init_grp_cnt(); + + while (ret != AUL_R_OK && retry_cnt < 5) { + usleep(sleep_value); + ret = aul_app_get_running_app_info(runapp_info_get, ad); + + if (ret != AUL_R_OK) { + _D("Fail to get running app information from ail"); + } + + retry_cnt++; + sleep_value *= 2; + } + + taskmanager_get_history_app_info(ad); + _set_genlist_from_eina(ad); + +} + +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); + } +} + +int response_end_inuse(struct appdata *ad) +{ +_D("func\n"); + Eina_List *l, *l_next; + struct _task_info *info; + Eina_Bool dead = EINA_FALSE; + + 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) { + _D("applist pid : %d", info->pid); + if (info->it == g_egi) { + _D("matched applist pid : %d", info->pid); + if (info->pid > 0) { + if (aul_terminate_pid(info->pid) < 0) { + kill(info->pid, SIGKILL); + dead = EINA_TRUE; + } + } + break; + } + } + ad->ending = EINA_FALSE; + + if(!dead){ + _D("matched applist is nothing\n"); + _del_progressbar(ad); + } + + 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) { + _D("applist pid : %d", info->pid); + if (info->pid > 0) { + if (aul_terminate_pid(info->pid) < 0) { + kill(info->pid, SIGKILL); + } + _D("terminated\n"); + } + } + } + ad->ending = EINA_FALSE; + return 0; +} + +int response_del_history(struct appdata *ad) +{ + Eina_List *l, *l_next; + struct _task_info *info; + + 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) { + _D("history applist pid : %d", info->pid); + 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; + + 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) { + _D("kill applist pid : %d", info->pid); + 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) { + _D("kill all applist pid : %d", info->pid); + 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 100755 index 0000000..876f741 --- /dev/null +++ b/src/_genlist.h @@ -0,0 +1,45 @@ +/* + * org.tizen.taskmgr + * Copyright (c) 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://floralicense.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 +#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 100755 index 0000000..bb7419e --- /dev/null +++ b/src/_info.c @@ -0,0 +1,134 @@ +/* + * org.tizen.taskmgr + * Copyright (c) 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://floralicense.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 + +#include + +#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), + "%s", _("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 100755 index 0000000..46b206f --- /dev/null +++ b/src/_info.h @@ -0,0 +1,28 @@ +/* + * org.tizen.taskmgr + * Copyright (c) 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://floralicense.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 100755 index 0000000..41ec8b8 --- /dev/null +++ b/src/_logic.c @@ -0,0 +1,352 @@ +/* + * org.tizen.taskmgr + * Copyright (c) 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://floralicense.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 +#include +#include +#include +#include + +#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"); + + int ret = -1; + + if (ad->update_timer) { + ecore_timer_del(ad->update_timer); + ad->update_timer = NULL; + } + + ret = _subt_einalist_item(ad, pid); + _D("mode(%d) count(%d) pid(%d) \n", ad->mode, ad->endcnt, pid); + + if (ret != -1) { + 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"); + + if(ad->killall_timer) + { + ecore_timer_del(ad->killall_timer); + ad->killall_timer = NULL; + } + + _del_popup_timer(ad); + _del_progressbar(ad); + refresh_app_info(ad); + + } else { + ad->endcnt--; + } + break; + } + } + + return ret; +} + +static void _back_cb(void *data, Evas_Object *obj, void *event_info) +{ + elm_exit(); +} + +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"); + 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); + 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, + T_("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); +} + +/* this func is to exit taskmanager after launching application */ +static Eina_Bool __climsg_cb(void *data, int type, void *event) +{ +_D("%s\n", __func__); + static Atom a_deact; + pid_t pid_a, pid_d; + + struct appdata *ad = (struct appdata *)data; + Ecore_X_Event_Client_Message *ev = event; + + if(ev == NULL) { + _E("Invalid argument: event is NULL\n"); + ad->exit_timer = ecore_timer_add(0.3, _exit_cb, ad); + 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) { + ad->exit_timer = ecore_timer_add(0.3, _exit_cb, ad); + return ECORE_CALLBACK_CANCEL; + } else { + _D("messagre is act\n"); + + } + + return ECORE_CALLBACK_CANCEL; +} + +static int runapp_count = 0; + +int _runapp_info_get_count(const aul_app_info *ainfo, void *data) +{ + ail_appinfo_h handle; + ail_error_e ret; + bool is_taskmanage; + + retvm_if(ainfo == NULL, -1, "Invalid argument: ainfo 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); + + 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, &is_taskmanage); + if (is_taskmanage == 0) { + ret = ail_package_destroy_appinfo(handle); + retvm_if(ret != AIL_ERROR_OK, -1, "Failed to destroy appinfo\n"); + return 0; + } + + ++runapp_count; + _D("running(%s)\n", ainfo->pkg_name); + _D("runapp count : %d\n", runapp_count); + + ret = ail_package_destroy_appinfo(handle); + retvm_if(ret != AIL_ERROR_OK, -1, "Failed to destroy appinfo\n"); + return 0; +} + +Eina_Bool _kill_all_timer_cb(void *data) +{ + _D("func\n"); + + struct appdata *ad = data; + + int ret = AUL_R_ERROR; + int retry_cnt = 0; + int sleep_value = 500; + + runapp_count = 0; + + while(ret != AUL_R_OK && retry_cnt < 5) + { + usleep(sleep_value); + ret = aul_app_get_running_app_info(_runapp_info_get_count, ad); + + if(ret != AUL_R_OK) + { + _D("Fail to get running app information\n"); + } + + retry_cnt++; + sleep_value *= 2; + } + _D("runapp count : %d\n", runapp_count); + + /* count inuse app number */ + /** if(count == 0) dead_cb */ + if(runapp_count == 0) + { + _D("runapp_count == 0\n"); + _del_popup_timer(ad); + _del_progressbar(ad); + refresh_app_info(ad); + //_restart_pthread(ad); + return ECORE_CALLBACK_CANCEL; + } + + return ECORE_CALLBACK_RENEW; +} + +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); + _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); + _show_progressbar(ad); + response_end_all_inuse(ad); + ad->killall_timer = ecore_timer_add(2.0, _kill_all_timer_cb, ad); + break; + + case MODE_DEL_HISTORY: + _D("del inuse\n"); + _del_popup_timer(ad); + response_del_history(ad); + break; + + case MODE_DEL_ALL_HISTORY: + _D("del all inuse\n"); + _del_popup_timer(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) +{ + struct appdata *ad = (struct appdata *)data; + retvm_if(ad == NULL, ECORE_CALLBACK_CANCEL, "Invalid argument\n"); + + _check_show_state(); + + evas_object_show(ad->win); + + _key_grab(ad); + + _get_win_geometry(ad); + ecore_event_handler_add(ECORE_X_EVENT_CLIENT_MESSAGE, __climsg_cb, ad); + + return ECORE_CALLBACK_CANCEL; +} + + + diff --git a/src/_logic.h b/src/_logic.h new file mode 100755 index 0000000..c37c075 --- /dev/null +++ b/src/_logic.h @@ -0,0 +1,33 @@ +/* + * org.tizen.taskmgr + * Copyright (c) 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://floralicense.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 100755 index 0000000..abc615d --- /dev/null +++ b/src/_progressbar.c @@ -0,0 +1,51 @@ +/* + * org.tizen.taskmgr + * Copyright (c) 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://floralicense.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) +{ + _D("%s\n", __func__); + 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) +{ + _D("%s\n", __func__); + 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 100755 index 0000000..bdb2885 --- /dev/null +++ b/src/_progressbar.h @@ -0,0 +1,28 @@ +/* + * org.tizen.taskmgr + * Copyright (c) 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://floralicense.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 100755 index 0000000..5a43787 --- /dev/null +++ b/src/_util_efl.c @@ -0,0 +1,270 @@ +/* + * org.tizen.taskmgr + * Copyright (c) 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://floralicense.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 + +#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_image_file_set(eo, buf, NULL); + elm_image_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", S_("IDS_COM_POP_WARNING")); + elm_object_text_set(pu, text); + evas_object_show(pu); + + bt1 = elm_button_add(pu); + elm_object_text_set(bt1, S_("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, S_("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 100755 index 0000000..ac9cafe --- /dev/null +++ b/src/_util_efl.h @@ -0,0 +1,42 @@ +/* + * org.tizen.taskmgr + * Copyright (c) 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://floralicense.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 + +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 100755 index 0000000..a5aca2f --- /dev/null +++ b/src/_util_log.h @@ -0,0 +1,63 @@ +/* + * org.tizen.taskmgr + * Copyright (c) 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://floralicense.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 +#include + +#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 100755 index 0000000..cc32e30 --- /dev/null +++ b/src/taskmanager.c @@ -0,0 +1,301 @@ +/* + * org.tizen.taskmgr + * Copyright (c) 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://floralicense.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 +#include +#include +#include +#include +#include +#include +#include +#include + +#include "taskmanager.h" +#include "_util_log.h" +#include "_util_efl.h" +#include "_logic.h" +#include "_genlist.h" + +struct text_part { + char *part; + char *msgid; +}; + +enum { + IDLELOCK_OFF = 0x0, + IDLELOCK_ON, + IDLELOCK_MAX, +}; + +enum { + LCD_OFF = 0x0, + LCD_ON, + LCD_MAX, +}; + +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; +} + +int _get_vconf_idlelock(void) +{ + int ret = -1; + int lock = IDLELOCK_OFF; + + ret = vconf_get_int(VCONFKEY_IDLE_LOCK_STATE, &lock); + retvm_if(ret < 0, -1, "Failed to get vconf\n"); + _D("idlelock vconf:%d\n", lock); + + return lock == VCONFKEY_IDLE_LOCK ? IDLELOCK_ON : IDLELOCK_OFF; +} + +int _get_vconf_lcdstate(void) +{ + int ret = -1; + int lcd = 0; + + ret = vconf_get_int(VCONFKEY_PM_STATE, &lcd); + retvm_if(ret < 0, -1, "Failed to get vconf\n"); + _D("lcd vconf:%d\n", lcd); + + return lcd == VCONFKEY_PM_STATE_LCDOFF ? LCD_OFF : LCD_ON; +} + +Eina_Bool _exit_cb(void *data) +{ + int lock = IDLELOCK_ON; + lock = _get_vconf_idlelock(); + + _D("lock(%d)\n", lock); + if(lock == IDLELOCK_OFF){ + _D("normal case\n"); + elm_exit(); + } + else{ + _D("IDLELOCK is set, taskmnager doesn't exit\n"); + return ECORE_CALLBACK_CANCEL; + } + 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; +} + +void _check_show_state(void) +{ + int lcd = LCD_OFF, idlelock = IDLELOCK_OFF; + lcd = _get_vconf_lcdstate(); + idlelock = _get_vconf_idlelock(); + if(lcd == LCD_OFF || idlelock == IDLELOCK_ON) + { + elm_exit(); + } +} + +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); + + /* init internationalization */ + r = appcore_set_i18n(PACKAGE, LOCALEDIR); + retvm_if(r < 0, -1, "Failed to set i18n\n"); + _lang_changed(ad); + + + 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); + + appcore_set_event_callback(APPCORE_EVENT_LANG_CHANGE, + _lang_changed, ad); + + ecore_idler_add(_create_idler_cb, ad); + + return 0; +} + +static int app_terminate(void *data) +{ + return 0; +} + +static int app_pause(void *data) +{ + return 0; +} + +static int app_resume(void *data) +{ +_D("func\n"); + struct appdata *ad = data; + + refresh_app_info(ad); + if (ad->killall_timer) { + ecore_timer_del(ad->killall_timer); + ad->killall_timer = NULL; + } + if (ad->exit_timer) { + ecore_timer_del(ad->exit_timer); + ad->exit_timer = NULL; + } + + 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 100755 index 0000000..d85a2ad --- /dev/null +++ b/src/taskmanager.h @@ -0,0 +1,133 @@ +/* + * org.tizen.taskmgr + * Copyright (c) 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://floralicense.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 +#include +#include +#include + +#if !defined(PACKAGE) +#define PACKAGE "taskmanager" +#endif + +#ifndef PREFIX +#define PREFIX "/usr/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 S_(str) dgettext("sys_string", str) +#define T_(str) gettext(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; + Ecore_Timer *exit_timer; + + Ecore_Timer *killall_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); +void _key_grab(struct appdata *ad); +Eina_Bool _exit_cb(void *data); +void _check_show_state(void); + +#endif +/* __TASKMANAGER_H___ */ -- 2.7.4