From f26a9b64624c91e7632a7683338932952483e924 Mon Sep 17 00:00:00 2001 From: Hyunho Kang Date: Mon, 28 Nov 2016 21:56:24 +0900 Subject: [PATCH 2/2] Initial commit - screen_connector_watcher - screen_connector_watcher_evas Change-Id: I884dcd1139825dc67a5b3a18e7cbe18d92cc150d Signed-off-by: Hyunho Kang --- CMakeLists.txt | 7 + LICENSE | 204 ++++++ packaging/libscreen_connector.spec | 143 ++++ packaging/libscreen_connector_provider.manifest | 5 + packaging/libscreen_connector_watcher.manifest | 5 + .../libscreen_connector_watcher_evas.manifest | 5 + screen_connector_provider/CMakeLists.txt | 47 ++ screen_connector_provider/LICENSE | 204 ++++++ .../include/screen_connector_provider.h | 33 + .../screen_connector_provider.pc.in | 11 + .../src/screen_connector_provider.c | 191 +++++ screen_connector_watcher/CMakeLists.txt | 47 ++ screen_connector_watcher/LICENSE | 204 ++++++ .../include/screen_connector_watcher.h | 61 ++ .../screen_connector_watcher.pc.in | 11 + .../src/screen_connector_watcher.c | 790 +++++++++++++++++++++ screen_connector_watcher_evas/CMakeLists.txt | 44 ++ screen_connector_watcher_evas/LICENSE | 204 ++++++ .../include/screen_connector_watcher_evas.h | 69 ++ .../screen_connector_watcher_evas.pc.in | 12 + .../src/screen_connector_watcher_evas.c | 129 ++++ 21 files changed, 2426 insertions(+) create mode 100644 CMakeLists.txt create mode 100644 LICENSE create mode 100644 packaging/libscreen_connector.spec create mode 100644 packaging/libscreen_connector_provider.manifest create mode 100644 packaging/libscreen_connector_watcher.manifest create mode 100644 packaging/libscreen_connector_watcher_evas.manifest create mode 100644 screen_connector_provider/CMakeLists.txt create mode 100644 screen_connector_provider/LICENSE create mode 100644 screen_connector_provider/include/screen_connector_provider.h create mode 100644 screen_connector_provider/screen_connector_provider.pc.in create mode 100644 screen_connector_provider/src/screen_connector_provider.c create mode 100644 screen_connector_watcher/CMakeLists.txt create mode 100644 screen_connector_watcher/LICENSE create mode 100644 screen_connector_watcher/include/screen_connector_watcher.h create mode 100644 screen_connector_watcher/screen_connector_watcher.pc.in create mode 100644 screen_connector_watcher/src/screen_connector_watcher.c create mode 100644 screen_connector_watcher_evas/CMakeLists.txt create mode 100644 screen_connector_watcher_evas/LICENSE create mode 100644 screen_connector_watcher_evas/include/screen_connector_watcher_evas.h create mode 100644 screen_connector_watcher_evas/screen_connector_watcher_evas.pc.in create mode 100644 screen_connector_watcher_evas/src/screen_connector_watcher_evas.c diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..8d5a8a9 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,7 @@ +CMAKE_MINIMUM_REQUIRED(VERSION 2.6) + +ADD_SUBDIRECTORY(screen_connector_provider) +ADD_SUBDIRECTORY(screen_connector_watcher) +ADD_SUBDIRECTORY(screen_connector_watcher_evas) + +ADD_DEPENDENCIES(screen_connector_watcher_evas screen_connector_watcher) \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..9c13a9b --- /dev/null +++ b/LICENSE @@ -0,0 +1,204 @@ +Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + 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. + + 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, + 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 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 in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) 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 + + (d) 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 Apache License to your work. + + To apply the Apache 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 Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + diff --git a/packaging/libscreen_connector.spec b/packaging/libscreen_connector.spec new file mode 100644 index 0000000..c419aa0 --- /dev/null +++ b/packaging/libscreen_connector.spec @@ -0,0 +1,143 @@ +Name: libscreen_connector +Summary: Library for developing the application +Version: 1.0 +Release: 1 +Group: Applications/Core Applications +License: Apache-2.0 +Source0: %{name}-%{version}.tar.gz +Source1001: %{name}_watcher.manifest +Source1002: %{name}_watcher_evas.manifest +Source1003: %{name}_provider.manifest +BuildRequires: cmake +BuildRequires: pkgconfig(dlog) +BuildRequires: pkgconfig(aul) +BuildRequires: pkgconfig(glib-2.0) +BuildRequires: pkgconfig(gio-2.0) +BuildRequires: pkgconfig(wayland-tbm-client) +BuildRequires: pkgconfig(elementary) +BuildRequires: pkgconfig(wayland-client) +BuildRequires: pkgconfig(ecore-wayland) + +%description +API for creating a new instance of the widget and managing its life-cycle. + +%package devel +Summary: Development Library for widget Viewer Application (dev) +Group: Development/Libraries +Requires: %{name} = %{version}-%{release} + +%description devel +Header and package configuration files for the widget viewer development + +%prep +%setup -q +cp %{SOURCE1001} . +cp %{SOURCE1002} . +cp %{SOURCE1003} . + +%build +%cmake . -DTZ_SYS_SHARE=/usr/share +make %{?jobs:-j%jobs} + +%install +rm -rf %{buildroot} +%make_install + + +################################################# +# libscreen_connector_watcher +################################################# +%package -n %{name}_watcher +Summary: Library for developing the screen connector watcher +Group: Applications/Core Applications +License: Apache-2.0 + +%description -n %{name}_watcher +Provider APIs to develop the screen connector watcher application. + +%package -n %{name}_watcher-devel +Summary: Screen connector watcher application development library (dev) +Group: Development/Libraries +Requires: %{name}_watcher + +%description -n %{name}_watcher-devel +Header & package configuration files to support development of the widget viewer applications. + +%post -n %{name}_watcher -p /sbin/ldconfig +%postun -n %{name}_watcher -p /sbin/ldconfig + +%files -n %{name}_watcher +%manifest %{name}_watcher.manifest +%attr(0644,root,root) %{_libdir}/%{name}_watcher.so* +%{_datarootdir}/license/%{name}_watcher + +%files -n %{name}_watcher-devel +%{_includedir}/screen_connector_watcher/*.h +%{_libdir}/pkgconfig/screen_connector_watcher.pc + + +################################################# +# libscreen_connector_provider +################################################# +%package -n %{name}_provider +Summary: Library for developing the screen connector provider +Group: Applications/Core Applications +License: Apache-2.0 + +%description -n %{name}_provider +Provider APIs to develop the screen connector provider application. + +%package -n %{name}_provider-devel +Summary: Screen connector provider application development library (dev) +Group: Development/Libraries +Requires: %{name}_provider + +%description -n %{name}_provider-devel +Header & package configuration files to support development of the widget viewer applications. + +%post -n %{name}_provider -p /sbin/ldconfig +%postun -n %{name}_provider -p /sbin/ldconfig + +%files -n %{name}_provider +%manifest %{name}_provider.manifest +%attr(0644,root,root) %{_libdir}/%{name}_provider.so* +%{_datarootdir}/license/%{name}_provider + +%files -n %{name}_provider-devel +%{_includedir}/screen_connector_provider/*.h +%{_libdir}/pkgconfig/screen_connector_provider.pc + + +################################################# +# libscreen_connector_watcher_evas +################################################# +%package -n %{name}_watcher_evas +Summary: Library for developing the screen connector watcher evas +Group: Applications/Core Applications +License: Apache-2.0 + +%description -n %{name}_watcher_evas +Provider APIs to develop the widget viewer EFL application. + +%package -n %{name}_watcher_evas-devel +Summary: Screen connector watcher evas application development library (dev) +Group: Development/Libraries +Requires: %{name}_watcher_evas + +%description -n %{name}_watcher_evas-devel +Header & package configuration files to support development of the widget viewer applications. + +%post -n %{name}_watcher_evas -p /sbin/ldconfig +%postun -n %{name}_watcher_evas -p /sbin/ldconfig + +%files -n %{name}_watcher_evas +%manifest %{name}_watcher_evas.manifest +%attr(0644,root,root) %{_libdir}/%{name}_watcher_evas.so* +%{_datarootdir}/license/%{name}_watcher_evas + +%files -n %{name}_watcher_evas-devel +%{_includedir}/screen_connector_watcher_evas/*.h +%{_libdir}/pkgconfig/screen_connector_watcher_evas.pc + + +# End of a file \ No newline at end of file diff --git a/packaging/libscreen_connector_provider.manifest b/packaging/libscreen_connector_provider.manifest new file mode 100644 index 0000000..a76fdba --- /dev/null +++ b/packaging/libscreen_connector_provider.manifest @@ -0,0 +1,5 @@ + + + + + diff --git a/packaging/libscreen_connector_watcher.manifest b/packaging/libscreen_connector_watcher.manifest new file mode 100644 index 0000000..a76fdba --- /dev/null +++ b/packaging/libscreen_connector_watcher.manifest @@ -0,0 +1,5 @@ + + + + + diff --git a/packaging/libscreen_connector_watcher_evas.manifest b/packaging/libscreen_connector_watcher_evas.manifest new file mode 100644 index 0000000..a76fdba --- /dev/null +++ b/packaging/libscreen_connector_watcher_evas.manifest @@ -0,0 +1,5 @@ + + + + + diff --git a/screen_connector_provider/CMakeLists.txt b/screen_connector_provider/CMakeLists.txt new file mode 100644 index 0000000..d509838 --- /dev/null +++ b/screen_connector_provider/CMakeLists.txt @@ -0,0 +1,47 @@ +CMAKE_MINIMUM_REQUIRED(VERSION 2.6) +PROJECT(screen_connector_provider C) + +SET(PREFIX "${CMAKE_INSTALL_PREFIX}") +SET(PROJECT_NAME "${PROJECT_NAME}") +SET(LIBDIR ${LIB_INSTALL_DIR}) +SET(INCLUDEDIR "\${prefix}/include/${PROJECT_NAME}") +SET(VERSION_MAJOR 1) +SET(VERSION "${VERSION_MAJOR}.0.0") + +INCLUDE(FindPkgConfig) +pkg_check_modules(screen_connector_provider REQUIRED + dlog + aul + wayland-tbm-client + elementary + wayland-client + ecore-wayland + tizen-remote-surface-client +) + +FOREACH(flag ${screen_connector_provider_CFLAGS}) + SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}") +ENDFOREACH(flag) +SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} -fvisibility=hidden -Wall -Werror -Winline") + +SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS}") +SET(CMAKE_C_FLAGS_DEBUG "-O0 -g") +SET(CMAKE_C_FLAGS_RELEASE "-O2") + +INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/include) + +AUX_SOURCE_DIRECTORY(src SOURCES) +ADD_LIBRARY (${PROJECT_NAME} SHARED ${SOURCES}) + +SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES SOVERSION ${VERSION_MAJOR}) +SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES VERSION ${VERSION}) + +TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${screen_connector_provider_LDFLAGS} "-lpthread") + +CONFIGURE_FILE(${PROJECT_NAME}.pc.in ${PROJECT_NAME}.pc @ONLY) +SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${PROJECT_NAME}.pc") + +INSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${LIB_INSTALL_DIR}) +INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc DESTINATION ${LIB_INSTALL_DIR}/pkgconfig) +INSTALL(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/include/ DESTINATION include/${PROJECT_NAME} FILES_MATCHING PATTERN "*.h") +INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE DESTINATION /usr/share/license RENAME "lib${PROJECT_NAME}") diff --git a/screen_connector_provider/LICENSE b/screen_connector_provider/LICENSE new file mode 100644 index 0000000..9c13a9b --- /dev/null +++ b/screen_connector_provider/LICENSE @@ -0,0 +1,204 @@ +Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + 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. + + 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, + 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 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 in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) 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 + + (d) 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 Apache License to your work. + + To apply the Apache 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 Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + diff --git a/screen_connector_provider/include/screen_connector_provider.h b/screen_connector_provider/include/screen_connector_provider.h new file mode 100644 index 0000000..4f3dab6 --- /dev/null +++ b/screen_connector_provider/include/screen_connector_provider.h @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __SCREEN_CONNECTOR_PROVIDER_H__ +#define __SCREEN_CONNECTOR_PROVIDER_H__ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif +int screen_connector_provider_remote_enable(const char *id, struct wl_surface *surface); +int screen_connector_provider_init(); +int screen_connector_provider_fini(); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/screen_connector_provider/screen_connector_provider.pc.in b/screen_connector_provider/screen_connector_provider.pc.in new file mode 100644 index 0000000..31589fe --- /dev/null +++ b/screen_connector_provider/screen_connector_provider.pc.in @@ -0,0 +1,11 @@ +prefix=@PREFIX@ +exec_prefix=@EXEC_PREFIX@ +libdir=@LIBDIR@ +includedir=@INCLUDEDIR@ + +Name: screen_connector_provider +Description: Support development of the Screen Connector Provider library +Version: @VERSION@ +Libs: -L${libdir} -lscreen_connector_provider +Cflags: -I${includedir} +cppflags: -I${includedir} diff --git a/screen_connector_provider/src/screen_connector_provider.c b/screen_connector_provider/src/screen_connector_provider.c new file mode 100644 index 0000000..26575fe --- /dev/null +++ b/screen_connector_provider/src/screen_connector_provider.c @@ -0,0 +1,191 @@ +/* + * Screen Connector Watcher + * Copyright (c) 2016 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include "screen_connector_provider.h" + +#ifdef LOG_TAG +#undef LOG_TAG +#endif + +#define LOG_TAG "SC_PROVIDER" + +static int __init_count; +static struct tizen_remote_surface_manager *__rsm; + +struct __remote_surface_s { + struct wl_surface *surface; + struct tizen_remote_surface_provider *rsp; + char *id; + Ecore_Wl_Window *win; +}; + +static void __rsp_resource_id_cb(void *data, struct tizen_remote_surface_provider *provider, uint32_t res_id) +{ + + LOGE("add app screen : %d", res_id); + aul_screen_connector_add_app_screen(res_id); +} + +static void __rsp_visibility_cb(void *data, struct tizen_remote_surface_provider *provider, uint32_t visibility) +{ + struct __remote_surface_s *remote = (struct __remote_surface_s *)data; + Ecore_Wl_Event_Window_Visibility_Change *ev; + + ev = calloc(1, sizeof(Ecore_Wl_Event_Window_Visibility_Change)); + if (!ev) { + LOGE("out of memory"); + return; + } + + ev->win = ecore_wl_window_id_get(remote->win); + + if (visibility == TIZEN_REMOTE_SURFACE_VISIBILITY_TYPE_VISIBLE) + ev->fully_obscured = 0; + else + ev->fully_obscured = 1; + + LOGD("visibility changed:%d", visibility); + + ecore_event_add(ECORE_WL_EVENT_WINDOW_VISIBILITY_CHANGE, ev, NULL, NULL); +} + +static const struct tizen_remote_surface_provider_listener __rsp_listener = { + __rsp_resource_id_cb, + __rsp_visibility_cb, +}; + +EXPORT_API int screen_connector_provider_remote_enable(const char *id, struct wl_surface *surface) +{ + struct __remote_surface_s *remote; + struct wl_display *display; + + if (!__rsm) { + LOGE("__rsm is not ready"); + return -1; + } + + if (!surface || !id) { + LOGE("invalid parameter"); + return -1; + } + + display = ecore_wl_display_get(); + if (!display) { + LOGE("Fail to get"); + return -1; + } + + remote = (struct __remote_surface_s *)malloc(sizeof(struct __remote_surface_s)); + if (!remote) { + LOGE("out of memory"); + return -1; + } + + remote->surface = surface; + remote->win = ecore_wl_window_surface_find(surface); + if (!remote->win) { + LOGE("failed to find win"); + free(remote); + return -1; + } + + remote->rsp = tizen_remote_surface_manager_create_provider(__rsm, surface); + if (!remote->rsp) { + LOGE("failed to create provider"); + free(remote); + return -1; + } + + remote->id = strdup(id); + if (!remote->id) { + free(remote); + LOGE("out of memory"); + return -1; + } + + tizen_remote_surface_provider_add_listener(remote->rsp, &__rsp_listener, remote); + + wl_display_roundtrip(display); + LOGD("%d surface remote enable"); + + return 0; +} + +EXPORT_API int screen_connector_provider_init() +{ + int ret = 0; + struct wl_registry *registry; + Ecore_Wl_Global *global; + Eina_Inlist *globals; + + if (__init_count > 0) { + return 0; + } + ecore_wl_init(NULL); + + registry = ecore_wl_registry_get(); + globals = ecore_wl_globals_get(); + + if (!registry || !globals) { + LOGE("could not get registry(%p) or global list(%p)", registry, + globals); + return -1; + } + + EINA_INLIST_FOREACH(globals, global) { + if (!strcmp(global->interface, "tizen_remote_surface_manager")) { + __rsm = wl_registry_bind(registry, global->id, + &tizen_remote_surface_manager_interface, 1); + } + } + + if (!__rsm) { + LOGE("could not get remote surface manager"); + return -1; + } + __init_count++; + + return ret; +} + +EXPORT_API int screen_connector_provider_fini() +{ + int ret = 0; + + if (__init_count > 1) + return 0; + + if (__rsm) + tizen_remote_surface_manager_destroy(__rsm); + + ecore_wl_shutdown(); + + __init_count--; + return ret; +} diff --git a/screen_connector_watcher/CMakeLists.txt b/screen_connector_watcher/CMakeLists.txt new file mode 100644 index 0000000..56ac0a4 --- /dev/null +++ b/screen_connector_watcher/CMakeLists.txt @@ -0,0 +1,47 @@ +CMAKE_MINIMUM_REQUIRED(VERSION 2.6) +PROJECT(screen_connector_watcher C) + +SET(PREFIX "${CMAKE_INSTALL_PREFIX}") +SET(PROJECT_NAME "${PROJECT_NAME}") +SET(LIBDIR ${LIB_INSTALL_DIR}) +SET(INCLUDEDIR "\${prefix}/include/${PROJECT_NAME}") +SET(VERSION_MAJOR 1) +SET(VERSION "${VERSION_MAJOR}.0.0") + +INCLUDE(FindPkgConfig) +pkg_check_modules(screen_connector_watcher REQUIRED + dlog + aul + wayland-tbm-client + elementary + wayland-client + ecore-wayland + tizen-remote-surface-client +) + +FOREACH(flag ${screen_connector_watcher_CFLAGS}) + SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}") +ENDFOREACH(flag) +SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} -fvisibility=hidden -Wall -Werror -Winline") + +SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS}") +SET(CMAKE_C_FLAGS_DEBUG "-O0 -g") +SET(CMAKE_C_FLAGS_RELEASE "-O2") + +INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/include) + +AUX_SOURCE_DIRECTORY(src SOURCES) +ADD_LIBRARY (${PROJECT_NAME} SHARED ${SOURCES}) + +SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES SOVERSION ${VERSION_MAJOR}) +SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES VERSION ${VERSION}) + +TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${screen_connector_watcher_LDFLAGS} "-lpthread") + +CONFIGURE_FILE(${PROJECT_NAME}.pc.in ${PROJECT_NAME}.pc @ONLY) +SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${PROJECT_NAME}.pc") + +INSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${LIB_INSTALL_DIR}) +INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc DESTINATION ${LIB_INSTALL_DIR}/pkgconfig) +INSTALL(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/include/ DESTINATION include/${PROJECT_NAME} FILES_MATCHING PATTERN "*.h") +INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE DESTINATION /usr/share/license RENAME "lib${PROJECT_NAME}") diff --git a/screen_connector_watcher/LICENSE b/screen_connector_watcher/LICENSE new file mode 100644 index 0000000..9c13a9b --- /dev/null +++ b/screen_connector_watcher/LICENSE @@ -0,0 +1,204 @@ +Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + 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. + + 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, + 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 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 in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) 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 + + (d) 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 Apache License to your work. + + To apply the Apache 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 Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + diff --git a/screen_connector_watcher/include/screen_connector_watcher.h b/screen_connector_watcher/include/screen_connector_watcher.h new file mode 100644 index 0000000..7179bad --- /dev/null +++ b/screen_connector_watcher/include/screen_connector_watcher.h @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __SCREEN_CONNECTOR_WATCHER_H__ +#define __SCREEN_CONNECTOR_WATCHER_H__ + +#include +#include +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum { + VISIBILITY_TYPE_UNOBSCURED = 0, + VISIBILITY_TYPE_PARTIALLY_OBSCURED, + VISIBILITY_TYPE_FULLY_OBSCURED, +} visibility_type; + +typedef void (*screen_connector_watcher_added_cb)(const char *appid, Evas_Object *image, void *data); +typedef void (*screen_connector_watcher_removed_cb)(const char *appid, void *data); +typedef void (*screen_connector_watcher_updated_cb)(const char *appid, Evas_Object *image, void *data); + +typedef struct _screen_connector_watcher_ops { + screen_connector_watcher_added_cb added; + screen_connector_watcher_removed_cb removed; + screen_connector_watcher_updated_cb updated; +} screen_connector_watcher_ops; + +typedef struct _screen_connector_watcher_h *screen_connector_watcher_h; + +int screen_connector_watcher_init(Evas_Object *win); +int screen_connector_watcher_fini(); +screen_connector_watcher_h screen_connector_watcher_add(screen_connector_watcher_ops *ops, char *id, void *data); +int screen_connector_watcher_remove(screen_connector_watcher_h h); +int screen_connector_watcher_update(const char *appid); + +int screen_connector_watcher_start_visibility_notify(); +int screen_connector_watcher_stop_visibility_notify(); +int screen_connector_watcher_freeze_visibility(Evas_Object *obj, visibility_type type); +int screen_connector_watcher_thaw_visibility(Evas_Object *obj); +int screen_connector_watcher_send_mouse_up(Evas_Object *obj); +int screen_connector_watcher_send_touch_cancel(Evas_Object *obj); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/screen_connector_watcher/screen_connector_watcher.pc.in b/screen_connector_watcher/screen_connector_watcher.pc.in new file mode 100644 index 0000000..fdc9a3d --- /dev/null +++ b/screen_connector_watcher/screen_connector_watcher.pc.in @@ -0,0 +1,11 @@ +prefix=@PREFIX@ +exec_prefix=@EXEC_PREFIX@ +libdir=@LIBDIR@ +includedir=@INCLUDEDIR@ + +Name: screen_connector_watcher +Description: Support development of the Screen Connector Watcher library +Version: @VERSION@ +Libs: -L${libdir} -lscreen_connector_watcher +Cflags: -I${includedir} +cppflags: -I${includedir} diff --git a/screen_connector_watcher/src/screen_connector_watcher.c b/screen_connector_watcher/src/screen_connector_watcher.c new file mode 100644 index 0000000..8a6ce7a --- /dev/null +++ b/screen_connector_watcher/src/screen_connector_watcher.c @@ -0,0 +1,790 @@ +/* + * Screen Connector Watcher + * Copyright (c) 2016 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include "screen_connector_watcher.h" + +#ifdef LOG_TAG +#undef LOG_TAG +#endif + +#define LOG_TAG "SC_WATCHER" + +struct _screen_connector_watcher_h{ + void *surface_info; +}; + +typedef struct _screen_connector_surface_info { + int pid; + int surface_id; + char *appid; + struct tizen_remote_surface *surface; + int freeze; + bool is_init; + bool cancel_touch; + Evas_Object *img_tbm; + Evas_Object *img_file; + screen_connector_watcher_ops *ops; + void *data; +}screen_connector_surface_info; + +static Ecore_Event_Handler *__visibility_listener; +static struct tizen_remote_surface_manager *__rsm; +static struct wayland_tbm_client *__tbm_client; +static struct wl_tbm *__tbm; +static int __init_count; +static Evas_Object *__viewer_win; +static GHashTable *__surface_tbl; +static GList *__surface_list; +static GList *__pending_surface_list; +static aul_screen_viewer_handler __aul_cbs; + +static bool __obj_is_visible(Evas_Object *obj) +{ + int x, y, w, h; + Ecore_Wl_Window *window = NULL; + int window_x, window_y, window_w, window_h; + int rotation; + + window = elm_win_wl_window_get(__viewer_win); + ecore_wl_window_geometry_get(window, &window_x, &window_y, &window_w, &window_h); + evas_object_geometry_get(obj, &x, &y, &w, &h); + rotation = ecore_wl_window_rotation_get(window); + + if (x >= 0 && x < window_w && + y >= 0 && y < window_h && + (rotation == 0 || rotation == 180)) { + LOGD("x %d, y %d w %d h %d, window_w %d window_h %d rotation %d", + x, y, w, h, window_w, window_h, rotation); + return true; + } else if (x >= 0 && x < window_h && + y >= 0 && y < window_w && + (rotation == 90 || rotation == 270)) { + LOGD("x %d, y %d w %d h %d, window_w %d window_h %d rotation %d", + x, y, w, h, window_w, window_h, rotation); + return true; + } + return false; +} + +static int __set_visibility(screen_connector_surface_info *surface_info, visibility_type type) +{ + int obscured; + + if (!surface_info) { + LOGE("obj not found"); + return -1; + } + + switch (type) { + case VISIBILITY_TYPE_UNOBSCURED: + case VISIBILITY_TYPE_PARTIALLY_OBSCURED: + obscured = TIZEN_REMOTE_SURFACE_VISIBILITY_TYPE_VISIBLE; + break; + case VISIBILITY_TYPE_FULLY_OBSCURED: + obscured = TIZEN_REMOTE_SURFACE_VISIBILITY_TYPE_INVISIBLE; + break; + default: + return -1; + } + + if (surface_info->surface) + tizen_remote_surface_transfer_visibility(surface_info->surface, obscured); + + return 0; +} + +static void __obj_move_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + screen_connector_surface_info *surface_info = (screen_connector_surface_info *)data; + + if (!surface_info->is_init) { + surface_info->is_init = true; + return; + } + + if (__obj_is_visible(obj)) + __set_visibility(surface_info, VISIBILITY_TYPE_UNOBSCURED); + else + __set_visibility(surface_info, VISIBILITY_TYPE_FULLY_OBSCURED); +} + +static void __rs_cb_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + screen_connector_surface_info *surface_info = (screen_connector_surface_info *)data; + Evas_Event_Mouse_Down *ev = event_info; + const char *desc = evas_device_description_get(ev->dev); + int x; + int y; + int w; + int h; + + evas_object_geometry_get(obj, &x, &y, &w, &h); + + LOGD("mouse down: %d %d", ev->canvas.x - x, ev->canvas.y - y); + + if (desc == NULL) + desc = ""; + + tizen_remote_surface_transfer_mouse_event(surface_info->surface, + TIZEN_REMOTE_SURFACE_EVENT_TYPE_MOUSE_DOWN, + 0, + ev->button, + ev->canvas.x - x, + ev->canvas.y - y, + wl_fixed_from_double(ev->radius_x), + wl_fixed_from_double(ev->radius_y), + wl_fixed_from_double(ev->pressure), + wl_fixed_from_double(ev->angle), + evas_device_class_get(ev->dev), + evas_device_subclass_get(ev->dev), + desc, + ev->timestamp); +} + +static void __rs_cb_mouse_up(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + screen_connector_surface_info *surface_info = (screen_connector_surface_info *)data; + Evas_Event_Mouse_Up *ev = event_info; + const char *desc = evas_device_description_get(ev->dev); + int x; + int y; + int w; + int h; + + evas_object_geometry_get(obj, &x, &y, &w, &h); + + LOGD("mouse up: %d %d", ev->canvas.x - x, ev->canvas.y - y); + + if (desc == NULL) + desc = ""; + + tizen_remote_surface_transfer_mouse_event(surface_info->surface, + TIZEN_REMOTE_SURFACE_EVENT_TYPE_MOUSE_UP, + 0, + ev->button, + ev->canvas.x - x, + ev->canvas.y - y, + wl_fixed_from_double(ev->radius_x), + wl_fixed_from_double(ev->radius_y), + wl_fixed_from_double(ev->pressure), + wl_fixed_from_double(ev->angle), + evas_device_class_get(ev->dev), + evas_device_subclass_get(ev->dev), + desc, + ev->timestamp); + +} + +static void __rs_cb_mouse_move(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + screen_connector_surface_info *surface_info = (screen_connector_surface_info *)data; + Evas_Event_Mouse_Move *ev = event_info; + const char *desc = evas_device_description_get(ev->dev); + int x; + int y; + int w; + int h; + + evas_object_geometry_get(obj, &x, &y, &w, &h); + + LOGD("mouse move: %d %d", ev->cur.canvas.x - x, ev->cur.canvas.y - y); + + if (desc == NULL) + desc = ""; + + tizen_remote_surface_transfer_mouse_event(surface_info->surface, + TIZEN_REMOTE_SURFACE_EVENT_TYPE_MOUSE_MOVE, + 0, + 0, + ev->cur.canvas.x - x, + ev->cur.canvas.y - y, + wl_fixed_from_double(ev->radius_x), + wl_fixed_from_double(ev->radius_y), + wl_fixed_from_double(ev->pressure), + wl_fixed_from_double(ev->angle), + evas_device_class_get(ev->dev), + evas_device_subclass_get(ev->dev), + desc, + ev->timestamp); + +} + +static void __rs_cb_mouse_wheel(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + screen_connector_surface_info *surface_info = (screen_connector_surface_info *)data; + Evas_Event_Mouse_Wheel *ev = event_info; + const char *desc = evas_device_description_get(ev->dev); + + LOGD("mouse wheel"); + + if (desc == NULL) + desc = ""; + + tizen_remote_surface_transfer_mouse_wheel(surface_info->surface, + ev->direction, + ev->z, + evas_device_class_get(ev->dev), + evas_device_subclass_get(ev->dev), + desc, + ev->timestamp); + +} + +static void __rs_cb_show(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + LOGD("show"); +} + +static void __rs_cb_hide(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + LOGD("hide"); +} + +static void __buffer_changed(void *data, struct tizen_remote_surface *trs, uint32_t type, struct wl_buffer *tbm, + int32_t img_file_fd, uint32_t img_file_size, uint32_t time, struct wl_array *keys) +{ + screen_connector_surface_info *surface_info; + bool is_added = false; + Evas_Native_Surface ns; + tbm_surface_h tbm_surface; + int width, height; + char *map; + char format[] = "png"; + char plug_id[256]; + + surface_info = (screen_connector_surface_info *)data; + if (surface_info->img_tbm == NULL) { + + LOGD("first added !!!! %d, %d %s", (surface_info->img_tbm == NULL), type, surface_info->appid); + surface_info->img_tbm = evas_object_image_filled_add( + evas_object_evas_get(__viewer_win)); + + /* Image alpha set */ + evas_object_image_alpha_set(surface_info->img_tbm, 1); + + evas_object_event_callback_add(surface_info->img_tbm, + EVAS_CALLBACK_MOUSE_DOWN, + __rs_cb_mouse_down, surface_info); + evas_object_event_callback_add(surface_info->img_tbm, + EVAS_CALLBACK_MOUSE_UP, + __rs_cb_mouse_up, surface_info); + evas_object_event_callback_add(surface_info->img_tbm, + EVAS_CALLBACK_MOUSE_MOVE, + __rs_cb_mouse_move, surface_info); + evas_object_event_callback_add(surface_info->img_tbm, + EVAS_CALLBACK_MOUSE_WHEEL, + __rs_cb_mouse_wheel, surface_info); + evas_object_event_callback_add(surface_info->img_tbm, + EVAS_CALLBACK_SHOW, + __rs_cb_show, surface_info); + evas_object_event_callback_add(surface_info->img_tbm, + EVAS_CALLBACK_HIDE, + __rs_cb_hide, surface_info); + + /* Store surface_info */ + g_hash_table_insert(__surface_tbl, surface_info->img_tbm, surface_info); + + /* Set data to use in accessibility */ + snprintf(plug_id, sizeof(plug_id), "%s:%d", surface_info->appid, surface_info->pid); + evas_object_data_set(surface_info->img_tbm, "___PLUGID", strdup(plug_id)); + evas_object_event_callback_add(surface_info->img_tbm, + EVAS_CALLBACK_MOVE, __obj_move_cb, surface_info); + + is_added = true; + } + + /* check type of given buffer */ + if (type == 0) {//if (type == TIZEN_REMOTE_SURFACE_BUFFER_TYPE_TBM) { + + /* get tbm surface from buffer */ + tbm_surface = wl_buffer_get_user_data(tbm); + width = tbm_surface_get_width(tbm_surface); + height = tbm_surface_get_height(tbm_surface); + + memset(&ns, 0, sizeof(Evas_Native_Surface)); + ns.version = EVAS_NATIVE_SURFACE_VERSION; + ns.type = EVAS_NATIVE_SURFACE_TBM; + ns.data.tbm.buffer = tbm_surface; + + evas_object_resize(surface_info->img_tbm, width, height); + evas_object_image_size_set(surface_info->img_tbm, width, height); + evas_object_image_native_surface_set(surface_info->img_tbm, &ns); /* set native surface */ + evas_object_image_pixels_dirty_set(surface_info->img_tbm, EINA_TRUE); /* set dirty for image updating */ + + //evas_object_del(surface_info->img_file); /* delete previous object for the image file type */ + + } else if (type == 1) {//} else if (type == TIZEN_REMOTE_SURFACE_BUFFER_TYPE_IMAGE_FILE) { + + if (!surface_info->img_file) { + surface_info->img_file = evas_object_image_filled_add( + evas_object_evas_get(__viewer_win)); + } + + map = mmap(NULL, img_file_size, PROT_READ, MAP_SHARED, img_file_fd, 0); + evas_object_image_memfile_set(surface_info->img_file, map, img_file_size, format, NULL); + evas_object_image_size_get(surface_info->img_tbm, &width, &height); + evas_object_image_fill_set(surface_info->img_file, 0, 0, width, height); + evas_object_resize(surface_info->img_file, width, height); + munmap(map, img_file_size); + close(img_file_fd); /* close passed fd */ + + evas_object_image_native_surface_set(surface_info->img_tbm, NULL); /* set null to previous object for the tbm type */ + } + + if (is_added) { + LOGD("call added !!!! %s", surface_info->appid); + surface_info->ops->added(surface_info->appid, surface_info->img_tbm, + surface_info->data); + } else { + LOGD("call updated !!!! %s", surface_info->appid); + surface_info->ops->updated(surface_info->appid, surface_info->img_tbm, + surface_info->data); + } + +} + +static void __buffer_updated(void *data, struct tizen_remote_surface *trs, struct wl_buffer *buffer, uint32_t time) +{ + __buffer_changed(data, trs, 0, buffer, 0, 0, 0, NULL); +} + +static void __free_surface_info(screen_connector_surface_info *surface_info) +{ + if (!surface_info) + return; + + if (surface_info->appid) + free(surface_info->appid); + + if (surface_info->img_tbm) { + evas_object_del(surface_info->img_tbm); + surface_info->img_tbm = NULL; + } + + if (surface_info->ops) + free(surface_info->ops); + + free(surface_info); +} + +static void __buffer_missing(void *data, struct tizen_remote_surface *trs) +{ + screen_connector_surface_info *surface_info; + char *plug_id; + + LOGD("missing"); + surface_info = (screen_connector_surface_info *)data; + if (!surface_info) { + LOGE("Null surface_info"); + return; + } + + g_hash_table_remove(__surface_tbl, surface_info->img_tbm); + + /* Remove data used in accessibility */ + plug_id = evas_object_data_del(surface_info->img_tbm, "___PLUGID"); + free(plug_id); + + surface_info->ops->removed(surface_info->appid, surface_info->data); + __free_surface_info(surface_info); +} + +#if 0 +static const struct tizen_remote_surface_listener __rs_listener = { + __buffer_updated, + __buffer_missing, + __buffer_changed, +}; +#else +static const struct tizen_remote_surface_listener __rs_listener = { + __buffer_updated, + __buffer_missing, +}; +#endif + + +static void __app_removed(const char *appid, const int pid, void *data) +{ +} + +static void __redirect_surface(screen_connector_surface_info *surface_info) +{ + surface_info->surface = + tizen_remote_surface_manager_create_surface(__rsm, (uint32_t)surface_info->surface_id, __tbm); + tizen_remote_surface_add_listener(surface_info->surface, &__rs_listener, + surface_info); + tizen_remote_surface_redirect(surface_info->surface); + +} + +static screen_connector_surface_info *__create_surface_info(char *appid) +{ + screen_connector_surface_info *surface_info = NULL; + surface_info = (screen_connector_surface_info *)calloc(1, sizeof(screen_connector_surface_info)); + if (surface_info == NULL) { + LOGE("surface_info calloc fail"); + return NULL; + } + + surface_info->img_file = NULL; + surface_info->img_tbm = NULL; + surface_info->appid = strdup(appid); + + return surface_info; +} + +static void __app_added(const char *appid, const int pid, const unsigned int surface_id, void *data) +{ + LOGD("__app_added pid: %d, surface_id: %d, appid: %s", pid, surface_id, appid); + screen_connector_surface_info *surface_info = NULL; + screen_connector_surface_info *cur_info = NULL; + GList *surface_list = __surface_list; + + for (; surface_list != NULL; surface_list = surface_list->next) { + cur_info = (screen_connector_surface_info *)surface_list->data; + if (strcmp(cur_info->appid, appid) == 0) { + surface_info = cur_info; + __surface_list = g_list_remove(__surface_list, cur_info); + break; + } + } + + if (surface_info == NULL) { + surface_info = __create_surface_info((char *)appid); + surface_info->pid = pid; + surface_info->surface_id = surface_id; + __pending_surface_list = g_list_append(__pending_surface_list, surface_info); + return; + } + + surface_info->surface_id = surface_id; + surface_info->pid = pid; + if (surface_id > 0) + __redirect_surface(surface_info); + else + LOGE("bad tbm message received. missing arguments"); + +} + +static void __send_visibility(gpointer key, gpointer value, gpointer user_data) +{ + screen_connector_surface_info *surface_info = (screen_connector_surface_info *)value; + Evas_Object *evas_obj = (Evas_Object *)key; + unsigned int event = GPOINTER_TO_INT(user_data); + int ret; + visibility_type type; + + if (surface_info->freeze) + return; + + if (!__obj_is_visible(evas_obj)) + return; + + if (event) + type = VISIBILITY_TYPE_FULLY_OBSCURED; + else + type = VISIBILITY_TYPE_UNOBSCURED; + + ret = __set_visibility(surface_info, type); + if (ret == -1) + LOGE("failed to set object visibility set %p to %d", evas_obj, type); +} + +static Eina_Bool __visibility_cb(void *data, int type, void *event) +{ + Ecore_Wl_Event_Window_Visibility_Change *ev = event; + + LOGD("visibility change: %d %d", (unsigned int)ev->win, + (unsigned int)ev->fully_obscured); + + if (!__surface_tbl) + return ECORE_CALLBACK_RENEW; + + g_hash_table_foreach(__surface_tbl, __send_visibility, + GINT_TO_POINTER(ev->fully_obscured)); + + return ECORE_CALLBACK_RENEW; +} + +EXPORT_API int screen_connector_watcher_start_visibility_notify() +{ + if (__visibility_listener) + return 0; + + __visibility_listener = ecore_event_handler_add( + ECORE_WL_EVENT_WINDOW_VISIBILITY_CHANGE, __visibility_cb, NULL); + + return 0; +} + + +EXPORT_API int screen_connector_watcher_stop_visibility_notify() +{ + if (!__visibility_listener) + return 0; + + ecore_event_handler_del(__visibility_listener); + __visibility_listener = NULL; + + return 0; +} + +EXPORT_API int screen_connector_watcher_freeze_visibility(Evas_Object *obj, visibility_type type) +{ + screen_connector_surface_info *surface_info; + + surface_info = (screen_connector_surface_info *)g_hash_table_lookup(__surface_tbl, obj); + if (!surface_info) { + LOGE("obj not found"); + return -1; + } + surface_info->freeze = 1; + + return __set_visibility(surface_info, type); +} + +EXPORT_API int screen_connector_watcher_thaw_visibility(Evas_Object *obj) +{ + screen_connector_surface_info *surface_info; + + surface_info = (screen_connector_surface_info *)g_hash_table_lookup(__surface_tbl, obj); + if (!surface_info) { + LOGE("obj not found"); + return -1; + } + surface_info->freeze = 0; + + return 0; +} + +EXPORT_API int screen_connector_watcher_send_mouse_up(Evas_Object *obj) +{ + screen_connector_surface_info *surface_info; + int x; + int y; + int w; + int h; + unsigned int timestamp; + + surface_info = g_hash_table_lookup(__surface_tbl, obj); + if (!surface_info) { + LOGE("unknown object. not widget object."); + return -1; + } + + if (!surface_info->img_tbm) { + LOGE("surface not yet initialized."); + return -1; + } + + evas_object_geometry_get(obj, &x, &y, &w, &h); + timestamp = (unsigned int)((unsigned long long)(ecore_time_get() * 1000.0) & 0xffffffff); + tizen_remote_surface_transfer_mouse_event(surface_info->surface, + TIZEN_REMOTE_SURFACE_EVENT_TYPE_MOUSE_UP, + 0, + 1, + w / 2, + h / 2, + 0, + 0, + 0, + 0, + TIZEN_INPUT_DEVICE_CLAS_MOUSE, + TIZEN_INPUT_DEVICE_SUBCLAS_NONE, + "", + timestamp); + + return 0; +} + +EXPORT_API int screen_connector_watcher_send_touch_cancel(Evas_Object *obj) +{ + screen_connector_surface_info *surface_info; + + surface_info = g_hash_table_lookup(__surface_tbl, obj); + if (!surface_info) { + LOGE("unknown object. not widget object."); + return -1; + } + + if (surface_info->img_tbm) { + tizen_remote_surface_transfer_touch_cancel(surface_info->surface); + surface_info->cancel_touch = true; + } else { + LOGE("surface not yet initialized."); + return -1; + } + + return 0; +} + +EXPORT_API int screen_connector_watcher_init(Evas_Object *win) +{ + int ret = 0; + struct wl_registry *registry; + Ecore_Wl_Global *global; + Eina_Inlist *globals; + + __viewer_win = win; + + if (__init_count > 0) { + return 0; + } + ecore_wl_init(NULL); + + registry = ecore_wl_registry_get(); + globals = ecore_wl_globals_get(); + + if (!registry || !globals) { + LOGE("could not get registry(%p) or global list(%p)", registry, + globals); + return -1; + } + + EINA_INLIST_FOREACH(globals, global) { + if (!strcmp(global->interface, "tizen_remote_surface_manager")) { + __rsm = wl_registry_bind(registry, global->id, + &tizen_remote_surface_manager_interface, 1); + } + } + + if (!__rsm) { + LOGE("could not get remote surface manager"); + return -1; + } + + __tbm_client = (struct wayland_tbm_client *)wayland_tbm_client_init(ecore_wl_display_get()); + if (!__tbm_client) { + LOGE("could not get tbm client"); + return -1; + } + + __tbm = (struct wl_tbm *)wayland_tbm_client_get_wl_tbm(__tbm_client); + if (!__tbm) { + LOGE("could not get tbm"); + return -1; + } + + __surface_tbl = g_hash_table_new(g_direct_hash, g_direct_equal); + if (!__surface_tbl) { + LOGE("failed to create table"); + return -1; + } + + __aul_cbs.app_added = __app_added; + __aul_cbs.app_removed = __app_removed; + aul_screen_connector_add_screen_viewer(&__aul_cbs, NULL); + + __init_count++; + + return ret; +} + +EXPORT_API int screen_connector_watcher_fini() +{ + int ret = 0; + + if (__init_count > 1) + return 0; + + if (__tbm_client) + wayland_tbm_client_deinit(__tbm_client); + + if (__rsm) + tizen_remote_surface_manager_destroy(__rsm); + + if (__surface_tbl) + g_hash_table_destroy(__surface_tbl); + + ecore_wl_shutdown(); + + __init_count--; + return ret; +} + +EXPORT_API screen_connector_watcher_h screen_connector_watcher_add(screen_connector_watcher_ops *ops, char *id, void *data) +{ + + screen_connector_watcher_h w_handle; + screen_connector_watcher_ops *watcher_ops; + screen_connector_surface_info *surface_info = NULL; + screen_connector_surface_info *cur_info = NULL; + GList *surface_list = __pending_surface_list; + + watcher_ops = (screen_connector_watcher_ops *)calloc(1, sizeof(screen_connector_watcher_ops *)); + if (watcher_ops == NULL) { + LOGE("watcher_ops calloc fail"); + return NULL; + } + + watcher_ops->added = ops->added; + watcher_ops->removed = ops->removed; + watcher_ops->updated = ops->updated; + + w_handle = (screen_connector_watcher_h)calloc(1, sizeof(struct _screen_connector_watcher_h)); + if (watcher_ops == NULL) { + LOGE("w_handle calloc fail"); + return NULL; + } + + for (; surface_list != NULL; surface_list = surface_list->next) { + cur_info = (screen_connector_surface_info *)surface_list->data; + if (strcmp(cur_info->appid, id) == 0) { + surface_info = cur_info; + __pending_surface_list = g_list_remove(__pending_surface_list, cur_info); + break; + } + } + + if (surface_info != NULL) { + surface_info->ops = watcher_ops; + surface_info->data = data; + __redirect_surface(surface_info); + } else { + surface_info = __create_surface_info(id); + surface_info->ops = watcher_ops; + surface_info->data = data; + __surface_list = g_list_append(__surface_list, surface_info); + } + + w_handle->surface_info = surface_info; + return w_handle; +} + +EXPORT_API int screen_connector_watcher_remove(screen_connector_watcher_h h) +{ + int ret = 0; + return ret; +} + +EXPORT_API int screen_connector_watcher_update(const char *appid) +{ + int ret = 0; + return ret; +} diff --git a/screen_connector_watcher_evas/CMakeLists.txt b/screen_connector_watcher_evas/CMakeLists.txt new file mode 100644 index 0000000..bb8e182 --- /dev/null +++ b/screen_connector_watcher_evas/CMakeLists.txt @@ -0,0 +1,44 @@ +CMAKE_MINIMUM_REQUIRED(VERSION 2.6) +PROJECT(screen_connector_watcher_evas C) + +SET(PREFIX "${CMAKE_INSTALL_PREFIX}") +SET(PROJECT_NAME "${PROJECT_NAME}") +SET(LIBDIR ${LIB_INSTALL_DIR}) +SET(INCLUDEDIR "\${prefix}/include/${PROJECT_NAME}") +SET(VERSION_MAJOR 1) +SET(VERSION "${VERSION_MAJOR}.0.0") + +INCLUDE(FindPkgConfig) +pkg_check_modules(screen_connector_watcher_evas REQUIRED + elementary + dlog + aul +) + +FOREACH(flag ${screen_connector_watcher_evas_CFLAGS}) + SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}") +ENDFOREACH(flag) +SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} -fvisibility=hidden -Wall -Werror -Winline") + +SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS}") +SET(CMAKE_C_FLAGS_DEBUG "-O0 -g") +SET(CMAKE_C_FLAGS_RELEASE "-O2") + +INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/include) +INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../screen_connector_watcher/include) + +AUX_SOURCE_DIRECTORY(src SOURCES) +ADD_LIBRARY (${PROJECT_NAME} SHARED ${SOURCES}) + +SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES SOVERSION ${VERSION_MAJOR}) +SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES VERSION ${VERSION}) + +TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${screen_connector_watcher_evas_LDFLAGS} "-lpthread") + +CONFIGURE_FILE(${PROJECT_NAME}.pc.in ${PROJECT_NAME}.pc @ONLY) +SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${PROJECT_NAME}.pc") + +INSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${LIB_INSTALL_DIR}) +INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc DESTINATION ${LIB_INSTALL_DIR}/pkgconfig) +INSTALL(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/include/ DESTINATION include/${PROJECT_NAME} FILES_MATCHING PATTERN "*.h") +INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE DESTINATION /usr/share/license RENAME "lib${PROJECT_NAME}") diff --git a/screen_connector_watcher_evas/LICENSE b/screen_connector_watcher_evas/LICENSE new file mode 100644 index 0000000..a06208b --- /dev/null +++ b/screen_connector_watcher_evas/LICENSE @@ -0,0 +1,204 @@ +Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + 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. + + 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, + 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 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 in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) 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 + + (d) 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 Apache License to your work. + + To apply the Apache 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 Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + diff --git a/screen_connector_watcher_evas/include/screen_connector_watcher_evas.h b/screen_connector_watcher_evas/include/screen_connector_watcher_evas.h new file mode 100644 index 0000000..06ebdf7 --- /dev/null +++ b/screen_connector_watcher_evas/include/screen_connector_watcher_evas.h @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __SCREEN_CONNECTOR_WATCHER_EVAS_H +#define __SCREEN_CONNECTOR_WATCHER_EVAS_H + +#include +#include +#include + +#include "screen_connector_watcher.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @file screen_connector_watcher_evas.h + * @brief This file declares API of libscreen_connector library + * @since_tizen 3.0 + */ + +/** + * @addtogroup CAPI_SCREEN_CONNECTOR_WATCHER_EVAS_MODULE + * @{ + */ + +typedef void (*screen_connector_watcher_evas_added_cb)(const char *appid, Evas_Object *image, void *data); +typedef void (*screen_connector_watcher_evas_removed_cb)(const char *appid, void *data); +typedef void (*screen_connector_watcher_evas_updated_cb)(const char *appid, Evas_Object *image, void *data); + +typedef struct _screen_connector_watcher_evas_ops { + screen_connector_watcher_evas_added_cb added; + screen_connector_watcher_evas_removed_cb removed; + screen_connector_watcher_evas_updated_cb updated; +}screen_connector_watcher_evas_ops; + +typedef struct _screen_connector_watcher_evas_h *screen_connector_watcher_evas_h; + +int screen_connector_watcher_evas_init(Evas_Object *win); +int screen_connector_watcher_evas_fini(); +screen_connector_watcher_evas_h screen_connector_watcher_evas_add(screen_connector_watcher_evas_ops *ops, char *id, void *data); +int screen_connector_watcher_evas_remove(screen_connector_watcher_evas_h handle); +int screen_connector_watcher_evas_update(const char *appid); + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif + +/* End of a file */ diff --git a/screen_connector_watcher_evas/screen_connector_watcher_evas.pc.in b/screen_connector_watcher_evas/screen_connector_watcher_evas.pc.in new file mode 100644 index 0000000..a86b8a4 --- /dev/null +++ b/screen_connector_watcher_evas/screen_connector_watcher_evas.pc.in @@ -0,0 +1,12 @@ +prefix=@PREFIX@ +exec_prefix=@EXEC_PREFIX@ +libdir=@LIBDIR@ +includedir=@INCLUDEDIR@ + +Name: screen_connector_watcher_evas +Description: Support development of the screen connector watcher EVAS library +Version: @VERSION@ +Requires: screen_connector_watcher +Libs: -L${libdir} -lscreen_connector_watcher_evas -lscreen_connector_watcher +Cflags: -I${includedir} +cppflags: -I${includedir} diff --git a/screen_connector_watcher_evas/src/screen_connector_watcher_evas.c b/screen_connector_watcher_evas/src/screen_connector_watcher_evas.c new file mode 100644 index 0000000..ffd1589 --- /dev/null +++ b/screen_connector_watcher_evas/src/screen_connector_watcher_evas.c @@ -0,0 +1,129 @@ +/* + * Screen Connector Watcher Evas + * Copyright (c) 2016 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include + +#include + +#include "screen_connector_watcher.h" +#include "screen_connector_watcher_evas.h" + +#ifdef LOG_TAG +#undef LOG_TAG +#endif + +#define LOG_TAG "SC_WATCHER_EVAS" + +struct _screen_connector_watcher_evas_h { + screen_connector_watcher_evas_ops *ops; + screen_connector_watcher_h watcher_h; + void *data; +}; + +static void __destroy_watcher_evas_handle(screen_connector_watcher_evas_h h) +{ + if (!h) + return; + free(h->ops); + free(h); +} + +EXPORT_API int screen_connector_watcher_evas_init(Evas_Object *win) +{ + int ret = 0; + ret = screen_connector_watcher_init(win); + return ret; +} + +EXPORT_API int screen_connector_watcher_evas_fini() +{ + int ret = 0; + ret = screen_connector_watcher_fini(); + return ret; +} + +static void __watcher_added_cb(const char *appid, Evas_Object *image, void *data) +{ + screen_connector_watcher_evas_h handle; + + handle = (screen_connector_watcher_evas_h)data; + handle->ops->added(appid, image, handle->data); +} + +static void __watcher_removed_cb(const char *appid, void *data) +{ + screen_connector_watcher_evas_h handle; + + handle = (screen_connector_watcher_evas_h)data; + handle->ops->removed(appid, handle->data); +} + +static void __watcher_updated_cb(const char *appid, Evas_Object *image, void *data) +{ + screen_connector_watcher_evas_h handle; + + handle = (screen_connector_watcher_evas_h)data; + handle->ops->updated(appid, image, handle->data); +} + +EXPORT_API screen_connector_watcher_evas_h screen_connector_watcher_evas_add(screen_connector_watcher_evas_ops *ops, char *id, void *data) +{ + screen_connector_watcher_evas_h handle; + screen_connector_watcher_evas_ops *evas_ops; + screen_connector_watcher_ops *watcher_ops; + + watcher_ops = (screen_connector_watcher_ops *)calloc(1, sizeof(screen_connector_watcher_ops)); + watcher_ops->added = __watcher_added_cb; + watcher_ops->removed = __watcher_removed_cb; + watcher_ops->updated = __watcher_updated_cb; + + evas_ops = (screen_connector_watcher_evas_ops *)calloc(1, sizeof(screen_connector_watcher_evas_ops)); + if (evas_ops == NULL) { + LOGE("evas_ops calloc fail"); + return NULL; + } + + memcpy(evas_ops, ops, sizeof(screen_connector_watcher_evas_ops)); + handle = (screen_connector_watcher_evas_h)calloc(1, sizeof(struct _screen_connector_watcher_evas_h)); + if (handle == NULL) { + LOGE("handle calloc fail"); + return NULL; + } + handle->ops = evas_ops; + handle->data = data; + handle->watcher_h = screen_connector_watcher_add(watcher_ops, id, handle); + + return handle; +} + +EXPORT_API int screen_connector_watcher_evas_remove(screen_connector_watcher_evas_h handle) +{ + int ret = 0; + ret = screen_connector_watcher_remove(handle->watcher_h); + __destroy_watcher_evas_handle(handle); + return ret; +} + +EXPORT_API int screen_connector_watcher_evas_update(const char *appid) +{ + int ret = 0; + ret = screen_connector_watcher_update(appid); + return ret; +} +/* End of a file */ -- 2.7.4