From 7fa26f4bdeb7a49f349892f2f663db0f358c12e4 Mon Sep 17 00:00:00 2001 From: Doyoun Kang Date: Mon, 10 Aug 2020 14:37:33 +0900 Subject: [PATCH 01/16] DSWaylandTizenPosition: add skeleton code Change-Id: Icd4b3b8d26c66f2af29acde6f9ac1a8ce2acff72 --- src/DSWaylandServer/DSWaylandTizenPolicy.cpp | 5 ++ src/DSWaylandServer/DSWaylandTizenPosition.cpp | 63 ++++++++++++++++++++++ src/DSWaylandServer/DSWaylandTizenPosition.h | 30 +++++++++++ .../DSWaylandTizenPositionPrivate.h | 37 +++++++++++++ src/meson.build | 1 + 5 files changed, 136 insertions(+) create mode 100644 src/DSWaylandServer/DSWaylandTizenPosition.cpp create mode 100644 src/DSWaylandServer/DSWaylandTizenPosition.h create mode 100644 src/DSWaylandServer/DSWaylandTizenPositionPrivate.h diff --git a/src/DSWaylandServer/DSWaylandTizenPolicy.cpp b/src/DSWaylandServer/DSWaylandTizenPolicy.cpp index e61a8fa..df772d4 100644 --- a/src/DSWaylandServer/DSWaylandTizenPolicy.cpp +++ b/src/DSWaylandServer/DSWaylandTizenPolicy.cpp @@ -1,6 +1,8 @@ #include "DSWaylandTizenPolicy.h" #include "DSWaylandTizenPolicyPrivate.h" +#include "DSWaylandTizenPosition.h" + const int TIZEN_POLICY_VERSION = 7; namespace display_server @@ -52,6 +54,9 @@ void DSWaylandTizenPolicyPrivate::tizen_policy_get_visibility(Resource *resource void DSWaylandTizenPolicyPrivate::tizen_policy_get_position(Resource *resource, uint32_t id, struct ::wl_resource *surface) { DSLOG_DBG("TizenPolicyPriv", ""); + + DSWaylandTizenPosition *tzPos = new DSWaylandTizenPosition(resource->client(), id, TIZEN_POLICY_VERSION, surface); + // DO something using tzPos } void DSWaylandTizenPolicyPrivate::tizen_policy_activate(Resource *resource, struct ::wl_resource *surface) diff --git a/src/DSWaylandServer/DSWaylandTizenPosition.cpp b/src/DSWaylandServer/DSWaylandTizenPosition.cpp new file mode 100644 index 0000000..10ead4a --- /dev/null +++ b/src/DSWaylandServer/DSWaylandTizenPosition.cpp @@ -0,0 +1,63 @@ +#include "DSWaylandTizenPosition.h" +#include "DSWaylandTizenPositionPrivate.h" + +namespace display_server +{ + +DSWaylandTizenPosition::DSWaylandTizenPosition(struct ::wl_client *client, uint32_t id, int version, struct ::wl_resource *surface) + : DSObject(), DS_INIT_PRIVATE_PTR(DSWaylandTizenPosition) +{ + DSLOG_DBG("TIZEN_POSITION", "CREATOR... TizenPosition:%p", this); + init(client, id, version, surface); +} + +DSWaylandTizenPosition::~DSWaylandTizenPosition() +{ + DSLOG_DBG("TIZEN_POSITION", "DESTORYER... TizenPosition:%p", this); +} + +void DSWaylandTizenPosition::init(struct ::wl_client *client, uint32_t id, int version, struct ::wl_resource *surface) +{ + DS_GET_PRIV(DSWaylandTizenPosition); + priv->init(client, id, version, surface); +} + +DSWaylandTizenPositionPrivate::DSWaylandTizenPositionPrivate(DSWaylandTizenPosition *p_ptr) + : DSObjectPrivate(p_ptr), + __p_ptr(p_ptr), + __wlSurface(nullptr) +{ +} + +DSWaylandTizenPositionPrivate::~DSWaylandTizenPositionPrivate() +{ +} + +void DSWaylandTizenPositionPrivate::init(struct ::wl_client *client, uint32_t id, int version, struct ::wl_resource *surface) +{ + tizen_position::init(client, id, version); + __wlSurface = surface; +} + +void DSWaylandTizenPositionPrivate::tizen_position_bind_resource(Resource *resource) +{ + +} + +void DSWaylandTizenPositionPrivate::tizen_position_destroy_resource(Resource *resource) +{ + +} + +void DSWaylandTizenPositionPrivate::tizen_position_destroy(Resource *resource) +{ + +} + +void DSWaylandTizenPositionPrivate::tizen_position_set(Resource *resource, int32_t x, int32_t y) +{ + DSLOG_DBG("TIZEN_POSITION", "Requested pos(%d,%d)", x, y); +} + + +} // namespace display_server diff --git a/src/DSWaylandServer/DSWaylandTizenPosition.h b/src/DSWaylandServer/DSWaylandTizenPosition.h new file mode 100644 index 0000000..720251a --- /dev/null +++ b/src/DSWaylandServer/DSWaylandTizenPosition.h @@ -0,0 +1,30 @@ +#ifndef __DS_WAYLAND_TIZEN_POSITION_H__ +#define __DS_WAYLAND_TIZEN_POSITION_H__ + +#include "DSCore.h" +#include "DSObject.h" +#include + +namespace display_server +{ + +class DSWaylandTizenPositionPrivate; + +class DSWaylandTizenPosition : public DSObject +{ +DS_PIMPL_USE_PRIVATE(DSWaylandTizenPosition); + +public: + DSWaylandTizenPosition(struct ::wl_client *client, uint32_t id, int version, struct ::wl_resource *surface); + ~DSWaylandTizenPosition() override; + + void init(struct ::wl_client *client, uint32_t id, int version, struct ::wl_resource *surface); + +protected: + +private: +}; + +} // namespace display_server + +#endif //__DS_WAYLAND_TIZEN_POSITION_H__ diff --git a/src/DSWaylandServer/DSWaylandTizenPositionPrivate.h b/src/DSWaylandServer/DSWaylandTizenPositionPrivate.h new file mode 100644 index 0000000..0522555 --- /dev/null +++ b/src/DSWaylandServer/DSWaylandTizenPositionPrivate.h @@ -0,0 +1,37 @@ +#ifndef __DS_WAYLAND_TIZEN_POLICY_PRIVATE__ +#define __DS_WAYLAND_TIZEN_POLICY_PRIVATE__ + +#include "dswayland-server-tizen-extension.h" +#include "DSWaylandTizenPosition.h" + +namespace display_server +{ + +class DSWaylandTizenPositionPrivate : public DSObjectPrivate, public DSWaylandServer::tizen_position +{ +DS_PIMPL_USE_PUBLIC(DSWaylandTizenPosition); + +public: + DSWaylandTizenPositionPrivate() = delete; + //DSWaylandTizenPositionPrivate(DSWaylandTizenPosition *p_ptr, struct ::wl_client *client, uint32_t id, int version, struct ::wl_resource *surface); + DSWaylandTizenPositionPrivate(DSWaylandTizenPosition *p_ptr); + ~DSWaylandTizenPositionPrivate() override; + + void init(struct ::wl_client *client, uint32_t id, int version, struct ::wl_resource *surface); + +protected: + void tizen_position_bind_resource(Resource *resource) override; + void tizen_position_destroy_resource(Resource *resource) override; + + void tizen_position_destroy(Resource *resource) override; + void tizen_position_set(Resource *resource, int32_t x, int32_t y) override; + +private: + struct ::wl_resource *__wlSurface; + //DSWaylandSurface *__waylandSurface; + +}; + +} + +#endif //__DS_WAYLAND_TIZEN_POLICY_PRIVATE__ diff --git a/src/meson.build b/src/meson.build index c6ac5dd..6bde3ed 100644 --- a/src/meson.build +++ b/src/meson.build @@ -104,6 +104,7 @@ libds_wayland_srcs = [ 'DSWaylandServer/DSWaylandTizenInputDeviceManager.h', 'DSWaylandServer/DSWaylandTizenInputDeviceManagerPrivate.h', 'DSWaylandServer/DSWaylandTizenPolicy.cpp', + 'DSWaylandServer/DSWaylandTizenPosition.cpp', 'DSWaylandServer/DSWaylandTizenSurface.cpp', 'DSWaylandServer/DSWaylandTizenSurface.h', 'DSWaylandServer/DSWaylandTizenSurfacePrivate.h', -- 2.7.4 From ca5cac2f1e354515ddc6788c997313d176b603ba Mon Sep 17 00:00:00 2001 From: Duna Oh Date: Fri, 7 Aug 2020 15:36:48 +0900 Subject: [PATCH 02/16] DSTizenAppinfo/DSTizenAppinfoMgr: add new classes and test codes Change-Id: I26c4a6a5e158daab32c1de9ae5e0854d31cb9cfb --- samples/exampleClient.c | 23 ++++- samples/meson.build | 3 +- src/DSWaylandExtension/DSTizenAppinfo.cpp | 61 ++++++++++++ src/DSWaylandExtension/DSTizenAppinfo.h | 33 +++++++ src/DSWaylandExtension/DSTizenAppinfoMgr.cpp | 84 ++++++++++++++++ src/DSWaylandExtension/DSTizenAppinfoMgr.h | 39 ++++++++ src/DSWaylandExtension/DSWaylandExtension.cpp | 14 +++ src/DSWaylandExtension/DSWaylandExtensionPrivate.h | 3 + src/DSWaylandServer/DSWaylandTizenAppinfo.cpp | 109 +++++++++++++++++++-- src/DSWaylandServer/DSWaylandTizenAppinfo.h | 16 ++- src/DSWaylandServer/DSWaylandTizenAppinfoPrivate.h | 4 + src/meson.build | 4 + tests/DSTizenAppinfo-test.cpp | 58 +++++++++++ tests/DSWaylandTizenAppinfo-test.cpp | 22 ++++- tests/meson.build | 2 + 15 files changed, 461 insertions(+), 14 deletions(-) create mode 100644 src/DSWaylandExtension/DSTizenAppinfo.cpp create mode 100644 src/DSWaylandExtension/DSTizenAppinfo.h create mode 100644 src/DSWaylandExtension/DSTizenAppinfoMgr.cpp create mode 100644 src/DSWaylandExtension/DSTizenAppinfoMgr.h create mode 100644 tests/DSTizenAppinfo-test.cpp diff --git a/samples/exampleClient.c b/samples/exampleClient.c index 7038611..6bf344d 100644 --- a/samples/exampleClient.c +++ b/samples/exampleClient.c @@ -12,6 +12,7 @@ #include #include #include +#include struct wl_display *display = NULL; struct wl_compositor *compositor = NULL; @@ -23,6 +24,7 @@ struct wl_touch *touch = NULL; struct xkb_context *xkb_context = NULL; struct xkb_keymap *keymap = NULL; struct tizen_policy *tz_policy = NULL; +struct tizen_launch_appinfo *tz_appinfo = NULL; static void pointer_enter(void *data, struct wl_pointer *wl_pointer, uint32_t serial, struct wl_surface *surface, wl_fixed_t surface_x, wl_fixed_t surface_y) { @@ -397,10 +399,20 @@ static const struct tizen_policy_listener tz_policy_listener = { }; static void +_tizen_launch_appinfo_cb_base_output_resolution_done(void *data, struct tizen_launch_appinfo *tizen_appinfo, uint32_t pid, uint32_t width, uint32_t height) +{ + printf("Tizen Appinfo callback: base_output_resolution_done pid:(%d) w,h:(%d,%d)\n", pid, width, height); +} + +static const struct tizen_launch_appinfo_listener tz_appinfo_listener = { + _tizen_launch_appinfo_cb_base_output_resolution_done, +}; + +static void global_registry_handler(void *data, struct wl_registry *registry, uint32_t id, const char *interface, uint32_t version) { - printf("Registry event : global added (interface:%s, id:%d)\n", interface, id); + printf("Registry event : global added (interface:%s, id:%d, version:%d)\n", interface, id, version); if (strcmp(interface, "wl_compositor") == 0) { @@ -416,6 +428,15 @@ global_registry_handler(void *data, struct wl_registry *registry, uint32_t id, tz_policy = wl_registry_bind(registry, id, &tizen_policy_interface, 7); tizen_policy_add_listener(tz_policy, &tz_policy_listener, NULL); } + else if(strcmp(interface, "tizen_launch_appinfo") == 0) + { + tz_appinfo = wl_registry_bind(registry, id, &tizen_launch_appinfo_interface, 1); + + /* TODO: This request should be used by AMD.*/ + tizen_launch_appinfo_add_listener(tz_appinfo, &tz_appinfo_listener, NULL); + tizen_launch_appinfo_register_appid(tz_appinfo, "com.samsung.clocksetting"); + tizen_launch_appinfo_set_pid(tz_appinfo, "com.samsung.clocksetting", 4077); + } } static void diff --git a/samples/meson.build b/samples/meson.build index 50d5216..176e86b 100644 --- a/samples/meson.build +++ b/samples/meson.build @@ -29,10 +29,11 @@ executable('exampleCompositor', # exampleClient written for testing exampleCompositor wayland_client_dep = dependency('wayland-client') tizen_extension_client_dep = dependency('tizen-extension-client') +tizen_launch_client_dep = dependency('tizen-launch-client') libxkbcommon_dep = dependency('xkbcommon') executable('exampleClient', 'exampleClient.c', - dependencies : [libds_declared_dep, wayland_client_dep, tizen_extension_client_dep, libxkbcommon_dep], + dependencies : [libds_declared_dep, wayland_client_dep, tizen_extension_client_dep, libxkbcommon_dep, tizen_launch_client_dep], install_dir : libds_prefix_bindir, install : true ) diff --git a/src/DSWaylandExtension/DSTizenAppinfo.cpp b/src/DSWaylandExtension/DSTizenAppinfo.cpp new file mode 100644 index 0000000..d3ea3e5 --- /dev/null +++ b/src/DSWaylandExtension/DSTizenAppinfo.cpp @@ -0,0 +1,61 @@ +#include + +namespace display_server +{ +DSTizenAppinfo::DSTizenAppinfo() + : __pid(-1), + __base_output_available(false), + __base_output_width(0), + __base_output_height(0) +{ +} + +DSTizenAppinfo::DSTizenAppinfo(std::string appid) + : __pid(-1), + __base_output_available(false), + __base_output_width(0), + __base_output_height(0) +{ + __appId = appid; +} + +void DSTizenAppinfo::setAppId(std::string appId) +{ + __appId = appId; +} + +void DSTizenAppinfo::setPid(pid_t pid) +{ + __pid = pid; +} + +DSTizenAppinfo::~DSTizenAppinfo() +{ +} + +pid_t DSTizenAppinfo::pid() +{ + return __pid; +} + +std::string DSTizenAppinfo::appId() +{ + return __appId; +} + +bool DSTizenAppinfo::base_output_available() +{ + return __base_output_available; +} + +int DSTizenAppinfo::base_output_width() +{ + return __base_output_width; +} + +int DSTizenAppinfo::base_output_height() +{ + return __base_output_height; +} + +} \ No newline at end of file diff --git a/src/DSWaylandExtension/DSTizenAppinfo.h b/src/DSWaylandExtension/DSTizenAppinfo.h new file mode 100644 index 0000000..4967630 --- /dev/null +++ b/src/DSWaylandExtension/DSTizenAppinfo.h @@ -0,0 +1,33 @@ +#ifndef _DS_TIZENAPPINFO_H_ +#define _DS_TIZENAPPINFO_H_ + +#include + +namespace display_server +{ + +class DSTizenAppinfo : public DSObject +{ +public: + DSTizenAppinfo(); + DSTizenAppinfo(std::string appid); + virtual ~DSTizenAppinfo(); + + void setAppId(std::string appId); + void setPid(pid_t pid); + pid_t pid(void); + std::string appId(void); + bool base_output_available(void); + int base_output_width(void); + int base_output_height(void); + +private: + std::string __appId; + pid_t __pid; + bool __base_output_available; + int __base_output_width; + int __base_output_height; +}; + +} +#endif \ No newline at end of file diff --git a/src/DSWaylandExtension/DSTizenAppinfoMgr.cpp b/src/DSWaylandExtension/DSTizenAppinfoMgr.cpp new file mode 100644 index 0000000..7e07120 --- /dev/null +++ b/src/DSWaylandExtension/DSTizenAppinfoMgr.cpp @@ -0,0 +1,84 @@ +#include "DSTizenAppinfoMgr.h" +#include "DSWaylandTizenAppinfo.h" +#include "DSDebugLog.h" + +namespace display_server +{ + +DSTizenAppinfoMgr::DSTizenAppinfoMgr() + :__numAppinfo(0) +{ + __wlCompositor = DSWaylandCompositor::getInstance(); + __wlAppinfo = new DSWaylandTizenAppinfo(__wlCompositor, this); +} + +DSTizenAppinfoMgr::~DSTizenAppinfoMgr() +{ +} + +std::shared_ptr DSTizenAppinfoMgr::getTizenAppinfo(std::string appId) +{ + auto it = __appIdMap.find(appId); + if (it != __appIdMap.end()) + { + DSLOG_INF("DSTizenAppinfoMgr", "TizenAppinfo(appId:%s) returned by appId:%s", appId); + return it->second; + } + return nullptr; +} + +std::shared_ptr DSTizenAppinfoMgr::getTizenAppinfo(pid_t pid) +{ + std::unordered_map >::iterator it; + for (it = __appIdMap.begin(); it != __appIdMap.end(); it++) { + std::shared_ptr ptr_appinfo = it->second; + DSTizenAppinfo * appinfo; + appinfo = ptr_appinfo.get() ; + if (appinfo->pid() == pid) { + DSLOG_INF("DSTizenAppinfoMgr", "TizenAppinfo returned by pid:%d", pid); + return ptr_appinfo; + } + } + return nullptr; +} + +std::shared_ptr DSTizenAppinfoMgr::addTizenAppinfo(std::string appId) +{ + std::shared_ptr appinfo = getTizenAppinfo(appId); + if (appinfo == nullptr) { + appinfo = std::make_shared(appId); + if (appinfo != nullptr) + { + __appIdMap.emplace(appId, appinfo); + __numAppinfo++; + DSLOG_INF("DSTizenAppinfoMgr", "TizenAppinfo(appId:%s) added", appId); + return appinfo; + } + } + DSLOG_INF("DSTizenAppinfoMgr", "No TizenAppinfo added by apppId:%s", appId); + return appinfo; +} + +void DSTizenAppinfoMgr::removeTizenAppinfo(std::string appId) +{ + auto it = __appIdMap.find(appId); + if (it != __appIdMap.end()) { + __appIdMap.erase(it); + --__numAppinfo; + DSLOG_INF("DSTizenAppinfoMgr", "TizenAppinfo(appId:%s) removed", appId); + } + return; +} + +void DSTizenAppinfoMgr::updateTizenAppinfo(std::string appId, pid_t pid) +{ + std::shared_ptr ptr_appinfo = getTizenAppinfo(appId); + DSTizenAppinfo * appinfo; + appinfo = ptr_appinfo.get(); + if (appinfo != nullptr) + { + appinfo->setPid(pid); + DSLOG_INF("DSTizenAppinfoMgr", "TizenAppinfo(appId:%s) set to pid:%d", appId, pid); + } +} +} \ No newline at end of file diff --git a/src/DSWaylandExtension/DSTizenAppinfoMgr.h b/src/DSWaylandExtension/DSTizenAppinfoMgr.h new file mode 100644 index 0000000..03db0ea --- /dev/null +++ b/src/DSWaylandExtension/DSTizenAppinfoMgr.h @@ -0,0 +1,39 @@ +#ifndef _DS_TIZENAPPINFO_MGR_H_ +#define _DS_TIZENAPPINFO_MGR_H_ + +#include +#include "DSWaylandCompositor.h" + +namespace display_server +{ + +class DSTizenAppinfoMgr : public DSObject +{ +public: + DSTizenAppinfoMgr(); + virtual ~DSTizenAppinfoMgr(); + + std::shared_ptr getTizenAppinfo(std::string appId); + std::shared_ptr getTizenAppinfo(pid_t pid); + + std::shared_ptr addTizenAppinfo(std::string appId); + + void removeTizenAppinfo(std::string appId); + + void updateTizenAppinfo(std::string appId, pid_t pid); + + int numAppinfo() + { + return __numAppinfo; + }; + +private: + DSWaylandCompositor *__wlCompositor; + DSWaylandTizenAppinfo *__wlAppinfo; + std::unordered_map > __appIdMap; + int __numAppinfo; +}; + +} + +#endif \ No newline at end of file diff --git a/src/DSWaylandExtension/DSWaylandExtension.cpp b/src/DSWaylandExtension/DSWaylandExtension.cpp index bc6e57c..3a38a3a 100644 --- a/src/DSWaylandExtension/DSWaylandExtension.cpp +++ b/src/DSWaylandExtension/DSWaylandExtension.cpp @@ -3,6 +3,7 @@ #include "DSWaylandCompositor.h" #include "DSWaylandZxdgShellV6.h" #include "DSWaylandTizenPolicy.h" +#include "DSTizenAppinfoMgr.h" namespace display_server @@ -32,6 +33,7 @@ bool DSWaylandExtensionPrivate::init(DSWaylandCompositor *compositor) { __initZxdgShellV6(); __initTizenPolicy(); + __initTizenAppinfoMgr(); } catch(const std::runtime_error& e) { @@ -70,6 +72,18 @@ bool DSWaylandExtensionPrivate::__initTizenPolicy(void) return true; } +bool DSWaylandExtensionPrivate::__initTizenAppinfoMgr(void) +{ + __tzAppinfoMgr = std::make_shared(); + if (__tzAppinfoMgr == nullptr) + { + throw std::runtime_error(__func__); + return false; + } + + return true; +} + DSWaylandExtension::DSWaylandExtension(DSWaylandCompositor *compositor) : DS_INIT_PRIVATE_PTR(DSWaylandExtension) { diff --git a/src/DSWaylandExtension/DSWaylandExtensionPrivate.h b/src/DSWaylandExtension/DSWaylandExtensionPrivate.h index 0521cb8..c7b8ab0 100644 --- a/src/DSWaylandExtension/DSWaylandExtensionPrivate.h +++ b/src/DSWaylandExtension/DSWaylandExtensionPrivate.h @@ -6,6 +6,7 @@ namespace display_server class DSWaylandZxdgShellV6; class DSWaylandTizenPolicy; +class DSTizenAppinfoMgr; class DSWaylandExtensionPrivate : public DSObjectPrivate { @@ -21,11 +22,13 @@ public: private: bool __initZxdgShellV6(void); bool __initTizenPolicy(void); + bool __initTizenAppinfoMgr(void); private: DSWaylandCompositor *__compositor; std::shared_ptr __zxdgShell; std::shared_ptr __tzPolicy; + std::shared_ptr __tzAppinfoMgr; }; diff --git a/src/DSWaylandServer/DSWaylandTizenAppinfo.cpp b/src/DSWaylandServer/DSWaylandTizenAppinfo.cpp index 1950c42..27585fb 100644 --- a/src/DSWaylandServer/DSWaylandTizenAppinfo.cpp +++ b/src/DSWaylandServer/DSWaylandTizenAppinfo.cpp @@ -1,61 +1,152 @@ #include "DSWaylandTizenAppinfo.h" #include "DSWaylandTizenAppinfoPrivate.h" +#include "DSTizenAppinfoMgr.h" + +const int TIZEN_APPINFO_VERSION = 1; namespace display_server { - -DSWaylandTizenAppinfo::DSWaylandTizenAppinfo() - : DSObject(), DS_INIT_PRIVATE_PTR(DSWaylandTizenAppinfo) +DSWaylandTizenAppinfoPrivate::DSWaylandTizenAppinfoPrivate(DSWaylandTizenAppinfo *p_ptr) + : DSObjectPrivate(p_ptr), + __p_ptr(p_ptr) { } -DSWaylandTizenAppinfo::~DSWaylandTizenAppinfo() +DSWaylandTizenAppinfoPrivate::~DSWaylandTizenAppinfoPrivate() { } -DSWaylandTizenAppinfoPrivate::DSWaylandTizenAppinfoPrivate(DSWaylandTizenAppinfo *p_ptr) - : DSObjectPrivate(p_ptr), - __p_ptr(p_ptr) +void DSWaylandTizenAppinfoPrivate::tizen_launch_appinfo_initialize(DSWaylandCompositor *wlCompositor) { -} + ::wl_display *display; + display = wlCompositor->display(); -DSWaylandTizenAppinfoPrivate::~DSWaylandTizenAppinfoPrivate() + init(display, TIZEN_APPINFO_VERSION); +} +void DSWaylandTizenAppinfoPrivate::tizen_launch_appinfo_finalize(void) { } void DSWaylandTizenAppinfoPrivate::tizen_launch_appinfo_bind_resource(Resource *resource) { + DSLOG_DBG("TizenAppinfoPriv", ""); } void DSWaylandTizenAppinfoPrivate::tizen_launch_appinfo_destroy_resource(Resource *resource) { + DSLOG_DBG("TizenAppinfoPriv", ""); } void DSWaylandTizenAppinfoPrivate::tizen_launch_appinfo_destroy(Resource *resource) { + DSLOG_DBG("TizenAppinfoPriv", ""); } void DSWaylandTizenAppinfoPrivate::tizen_launch_appinfo_register_pid(Resource *resource, uint32_t pid) { + DSLOG_DBG("TizenAppinfoPriv", ""); } void DSWaylandTizenAppinfoPrivate::tizen_launch_appinfo_deregister_pid(Resource *resource, uint32_t pid) { + DSLOG_DBG("TizenAppinfoPriv", ""); } void DSWaylandTizenAppinfoPrivate::tizen_launch_appinfo_set_appid(Resource *resource, uint32_t pid, const std::string &appid) { + DSLOG_DBG("TizenAppinfoPriv", ""); } void DSWaylandTizenAppinfoPrivate::tizen_launch_appinfo_get_base_output_resolution(Resource *resource, uint32_t pid) { + DSLOG_DBG("TizenAppinfoPriv", ""); + DS_GET_PUB(DSWaylandTizenAppinfo); + if (pub->__dsAppinfoMgr == nullptr) + return; + + std::shared_ptr ptr_appinfo = pub->__dsAppinfoMgr->getTizenAppinfo(pid); + DSTizenAppinfo *appinfo = ptr_appinfo.get(); + send_base_output_resolution_done(pid, appinfo->base_output_width(), appinfo->base_output_height()); + DSLOG_DBG("TizenAppinfoPriv", "SEND base_output_resolution_done event with width(%d), height(%d)", appinfo->base_output_width(), appinfo->base_output_height()); } void DSWaylandTizenAppinfoPrivate::tizen_launch_appinfo_register_appid(Resource *resource, const std::string &appid) { + DSLOG_DBG("TizenAppinfoPriv", ""); + DS_GET_PUB(DSWaylandTizenAppinfo); + if (pub->__dsAppinfoMgr) + pub->__dsAppinfoMgr->addTizenAppinfo(appid); } void DSWaylandTizenAppinfoPrivate::tizen_launch_appinfo_deregister_appid(Resource *resource, const std::string &appid) { + DSLOG_DBG("TizenAppinfoPriv", ""); + DS_GET_PUB(DSWaylandTizenAppinfo); + if (pub->__dsAppinfoMgr) + pub->__dsAppinfoMgr->removeTizenAppinfo(appid); } void DSWaylandTizenAppinfoPrivate::tizen_launch_appinfo_set_pid(Resource *resource, const std::string &appid, uint32_t pid) { + DSLOG_DBG("TizenAppinfoPriv", ""); + DS_GET_PUB(DSWaylandTizenAppinfo); + if (pub->__dsAppinfoMgr) + pub->__dsAppinfoMgr->updateTizenAppinfo(appid, pid); } void DSWaylandTizenAppinfoPrivate::tizen_launch_appinfo_ready_metadata(Resource *resource, const std::string &appid, uint32_t pid) { + DSLOG_DBG("TizenAppinfoPriv", ""); +} + +DSWaylandTizenAppinfo::DSWaylandTizenAppinfo(DSWaylandCompositor *wlCompositor) + : DS_INIT_PRIVATE_PTR(DSWaylandTizenAppinfo), + __wlCompositor(wlCompositor), + __isCreated(false), + __dsAppinfoMgr(nullptr) +{ + this->initialize(__wlCompositor); +} + +DSWaylandTizenAppinfo::DSWaylandTizenAppinfo(DSWaylandCompositor *wlCompositor, DSTizenAppinfoMgr *dsAppinfoMgr) + : DS_INIT_PRIVATE_PTR(DSWaylandTizenAppinfo), + __wlCompositor(wlCompositor), + __isCreated(false), + __dsAppinfoMgr(dsAppinfoMgr) +{ + this->initialize(__wlCompositor); +} + +DSWaylandTizenAppinfo::~DSWaylandTizenAppinfo() +{ + if (isCreated()) + this->finalize(); +} + +bool DSWaylandTizenAppinfo::isCreated(void) +{ + return __isCreated; +} + +bool DSWaylandTizenAppinfo::initialize(DSWaylandCompositor *wlCompositor) +{ + if (!wlCompositor) return false; + if (isCreated()) + { + DSLOG_ERR("TizenAppinfo", "Already initialized"); + return true; + } + + DS_GET_PRIV(DSWaylandTizenAppinfo); + if (!priv) return false; + + __wlCompositor = wlCompositor; + __isCreated = true; + + priv->tizen_launch_appinfo_initialize(__wlCompositor); + + DSLOG_INF("TizenAppinfo", "TizenAppinfo initialized"); + return true; +} + +void DSWaylandTizenAppinfo::finalize(void) +{ + DS_GET_PRIV(DSWaylandTizenAppinfo); + priv->tizen_launch_appinfo_finalize(); + + DSLOG_INF("TizenAppinfo", "TizenAppinfo finalized"); + __isCreated = false; } } diff --git a/src/DSWaylandServer/DSWaylandTizenAppinfo.h b/src/DSWaylandServer/DSWaylandTizenAppinfo.h index 6845d26..53b66af 100644 --- a/src/DSWaylandServer/DSWaylandTizenAppinfo.h +++ b/src/DSWaylandServer/DSWaylandTizenAppinfo.h @@ -3,19 +3,33 @@ #include #include +#include "DSWaylandCompositor.h" namespace display_server { class DSWaylandTizenAppinfoPrivate; +class DSTizenAppinfoMgr; class DSWaylandTizenAppinfo : public DSObject { DS_PIMPL_USE_PRIVATE(DSWaylandTizenAppinfo); public: - DSWaylandTizenAppinfo(); + DSWaylandTizenAppinfo(DSWaylandCompositor *wlCompositor); + DSWaylandTizenAppinfo(DSWaylandCompositor *wlCompositor, DSTizenAppinfoMgr *dsAppinfoMgr); virtual ~DSWaylandTizenAppinfo(); + + bool isCreated(void); + + bool initialize(DSWaylandCompositor *wlCompositor); + void finalize(void); + +private: + DSWaylandCompositor *__wlCompositor; + bool __isCreated; + DSTizenAppinfoMgr *__dsAppinfoMgr; + }; } diff --git a/src/DSWaylandServer/DSWaylandTizenAppinfoPrivate.h b/src/DSWaylandServer/DSWaylandTizenAppinfoPrivate.h index a15fc46..e81a992 100644 --- a/src/DSWaylandServer/DSWaylandTizenAppinfoPrivate.h +++ b/src/DSWaylandServer/DSWaylandTizenAppinfoPrivate.h @@ -2,6 +2,7 @@ #define __DS_WAYLAND_TIZEN_APPINFO_PRIVATE_H__ #include "dswayland-server-tizen-launch.h" + #include "DSWaylandTizenAppinfo.h" namespace display_server @@ -16,6 +17,9 @@ public: DSWaylandTizenAppinfoPrivate(DSWaylandTizenAppinfo *p_ptr); ~DSWaylandTizenAppinfoPrivate() override; + void tizen_launch_appinfo_initialize(DSWaylandCompositor *wlCompositor); + void tizen_launch_appinfo_finalize(void); + protected: void tizen_launch_appinfo_bind_resource(Resource *resource) override; void tizen_launch_appinfo_destroy_resource(Resource *resource) override; diff --git a/src/meson.build b/src/meson.build index 6bde3ed..d545ce7 100644 --- a/src/meson.build +++ b/src/meson.build @@ -55,6 +55,10 @@ libds_srcs = [ 'DSCore/DSStruct.h', 'DSCore/DSCore.h', 'DSWaylandExtension/DSWaylandExtension.cpp', + 'DSWaylandExtension/DSTizenAppinfo.h', + 'DSWaylandExtension/DSTizenAppinfo.cpp', + 'DSWaylandExtension/DSTizenAppinfoMgr.h', + 'DSWaylandExtension/DSTizenAppinfoMgr.cpp', 'DSWindow/DSWindow.h', 'DSWindow/DSWindowPrivate.h', 'DSWindow/DSWindow.cpp', diff --git a/tests/DSTizenAppinfo-test.cpp b/tests/DSTizenAppinfo-test.cpp new file mode 100644 index 0000000..1a582a3 --- /dev/null +++ b/tests/DSTizenAppinfo-test.cpp @@ -0,0 +1,58 @@ +#include "libds-tests.h" +#include "DSTizenAppinfo.h" +#include "DSTizenAppinfoMgr.h" + +using namespace display_server; + +class DSTizenAppinfoTest : public ::testing::Test +{ +public: + void SetUp(void) override + { + setenv("XDG_RUNTIME_DIR", "/run", 1); + } + void TearDown(void) override + { + unsetenv("XDG_RUNTIME_DIR"); + } +}; + +TEST_F(DSTizenAppinfoTest, NewTizenAppinfo) +{ + DSTizenAppinfo *appinfo = new DSTizenAppinfo(); + EXPECT_TRUE(appinfo != nullptr); + + if (appinfo) + delete appinfo; +} + +TEST_F(DSTizenAppinfoTest, NewTizenAppinfoMgr) +{ + DSTizenAppinfoMgr *appinfoMgr = new DSTizenAppinfoMgr(); + EXPECT_TRUE(appinfoMgr != nullptr); + + if (appinfoMgr) + { + std::string appId1{"com.appinfo.first"}; + std::string appId2{"com.appinfo.econd"}; + + std::shared_ptr app1 = appinfoMgr->addTizenAppinfo(appId1); + EXPECT_TRUE(app1 != nullptr); + std::shared_ptr app2 = appinfoMgr->addTizenAppinfo(appId2); + EXPECT_TRUE(app2 != nullptr); + EXPECT_TRUE(appinfoMgr->numAppinfo() == 2); + + std::shared_ptr temp = appinfoMgr->getTizenAppinfo(appId2); + EXPECT_TRUE(temp != nullptr); + appinfoMgr->removeTizenAppinfo(appId2); + + pid_t pid = 1234; + app1->setPid(pid); + temp = appinfoMgr->getTizenAppinfo(pid); + appinfoMgr->removeTizenAppinfo(temp->appId()); + + EXPECT_TRUE(appinfoMgr->numAppinfo() == 0); + + delete appinfoMgr; + } +} \ No newline at end of file diff --git a/tests/DSWaylandTizenAppinfo-test.cpp b/tests/DSWaylandTizenAppinfo-test.cpp index 46b0968..474c2e2 100644 --- a/tests/DSWaylandTizenAppinfo-test.cpp +++ b/tests/DSWaylandTizenAppinfo-test.cpp @@ -12,12 +12,30 @@ public: {} }; -TEST_F(DSWaylandTizenAppinfoTest, NewDSWaylandTizenAppinfo) +TEST_F(DSWaylandTizenAppinfoTest, New_Appinfo) { - DSWaylandTizenAppinfo *tzAppinfo = new DSWaylandTizenAppinfo; + DSWaylandCompositor *compositor = DSWaylandCompositor::getInstance(); + DSWaylandTizenAppinfo *tzAppinfo = new DSWaylandTizenAppinfo(compositor); EXPECT_TRUE(tzAppinfo != nullptr); if (tzAppinfo) delete tzAppinfo; + + DSWaylandCompositor::releaseInstance(); } +TEST_F(DSWaylandTizenAppinfoTest, Initialize_Appinfo) +{ + bool ret; + + DSWaylandCompositor *compositor = DSWaylandCompositor::getInstance(); + DSWaylandTizenAppinfo *tzAppinfo = new DSWaylandTizenAppinfo(compositor); + + ret = tzAppinfo->initialize(compositor); + EXPECT_TRUE(ret == true); + + if (tzAppinfo) + delete tzAppinfo; + + DSWaylandCompositor::releaseInstance(); +} \ No newline at end of file diff --git a/tests/meson.build b/tests/meson.build index b97f3d4..6f4106c 100644 --- a/tests/meson.build +++ b/tests/meson.build @@ -28,6 +28,7 @@ libds_tests_srcs = [ 'DSWaylandTizenPolicy-test.cpp', 'DSWaylandTizenSurface-test.cpp', 'DSWaylandTizenIndicator-test.cpp', + 'DSWaylandTizenAppinfo-test.cpp', 'DSWaylandZxdgShellV6-test.cpp', 'DSWaylandBuffer-test.cpp', 'DSObject-test.cpp', @@ -51,6 +52,7 @@ libds_tests_srcs = [ 'DSPointer-test.cpp', 'DSKeyboard-test.cpp', 'DSTouch-test.cpp', + 'DSTizenAppinfo-test.cpp', ] gmock_dep = dependency('gmock', method : 'pkg-config') -- 2.7.4 From eec13807ae5dd5f6492e275511a4929e0724878d Mon Sep 17 00:00:00 2001 From: Doyoun Kang Date: Mon, 10 Aug 2020 17:34:29 +0900 Subject: [PATCH 03/16] IDSWaylandShell: add Interface class for Shell and ShellSurface - IDSWaylandShell : implemented by zxdg_shell_v6, zxdg_shell_v5, etc. - IDSWaylandShellSurface : implemented by zxdg_surface, zxdg_shell_v5, etc. Change-Id: Ia6f14a34b06a879dfb966f6fb92ba28ce389b69d --- src/DSWaylandExtension/DSWaylandExtension.cpp | 4 +-- src/DSWaylandExtension/DSWaylandExtensionPrivate.h | 4 +-- src/DSWaylandServer/DSWaylandZxdgShellV6.cpp | 10 +++--- src/DSWaylandServer/DSWaylandZxdgShellV6.h | 7 ++-- src/DSWaylandServer/IDSWaylandShell.h | 38 ++++++++++++++++++++++ 5 files changed, 51 insertions(+), 12 deletions(-) create mode 100644 src/DSWaylandServer/IDSWaylandShell.h diff --git a/src/DSWaylandExtension/DSWaylandExtension.cpp b/src/DSWaylandExtension/DSWaylandExtension.cpp index 3a38a3a..5431bac 100644 --- a/src/DSWaylandExtension/DSWaylandExtension.cpp +++ b/src/DSWaylandExtension/DSWaylandExtension.cpp @@ -31,7 +31,7 @@ bool DSWaylandExtensionPrivate::init(DSWaylandCompositor *compositor) try { - __initZxdgShellV6(); + __initShell(); __initTizenPolicy(); __initTizenAppinfoMgr(); } @@ -48,7 +48,7 @@ bool DSWaylandExtensionPrivate::init(DSWaylandCompositor *compositor) return true; } -bool DSWaylandExtensionPrivate::__initZxdgShellV6(void) +bool DSWaylandExtensionPrivate::__initShell(void) { __zxdgShell = std::make_shared(__compositor); if (__zxdgShell == nullptr) diff --git a/src/DSWaylandExtension/DSWaylandExtensionPrivate.h b/src/DSWaylandExtension/DSWaylandExtensionPrivate.h index c7b8ab0..9309c69 100644 --- a/src/DSWaylandExtension/DSWaylandExtensionPrivate.h +++ b/src/DSWaylandExtension/DSWaylandExtensionPrivate.h @@ -20,7 +20,7 @@ public: bool init(DSWaylandCompositor *compositor); private: - bool __initZxdgShellV6(void); + bool __initShell(void); bool __initTizenPolicy(void); bool __initTizenAppinfoMgr(void); @@ -34,4 +34,4 @@ private: } // namespace display_server -#endif // __DS_WAYLAND_EXTENSION_PRIVATE_H__ \ No newline at end of file +#endif // __DS_WAYLAND_EXTENSION_PRIVATE_H__ diff --git a/src/DSWaylandServer/DSWaylandZxdgShellV6.cpp b/src/DSWaylandServer/DSWaylandZxdgShellV6.cpp index 2d1b918..6ee322a 100644 --- a/src/DSWaylandServer/DSWaylandZxdgShellV6.cpp +++ b/src/DSWaylandServer/DSWaylandZxdgShellV6.cpp @@ -16,12 +16,12 @@ namespace display_server *****************************************/ DSWaylandZxdgShellV6::DSWaylandZxdgShellV6() - : DSObject(), DS_INIT_PRIVATE_PTR(DSWaylandZxdgShellV6) + : IDSWaylandShell(), DS_INIT_PRIVATE_PTR(DSWaylandZxdgShellV6) { } DSWaylandZxdgShellV6::DSWaylandZxdgShellV6(DSWaylandCompositor *wlCompositor) - : DSObject(), DS_INIT_PRIVATE_PTR(DSWaylandZxdgShellV6) + : IDSWaylandShell(), DS_INIT_PRIVATE_PTR(DSWaylandZxdgShellV6) { this->init(wlCompositor->display(), ZXDG_SHELL_V6_VERSION); } @@ -58,7 +58,7 @@ std::list DSWaylandZxdgShellV6::getSurfaceList() return priv->getSurfaceList(); } -void DSWaylandZxdgShellV6::registerCallbackShellSurfaceCreated(DSObject *slot, std::function func) +void DSWaylandZxdgShellV6::registerCallbackShellSurfaceCreated(DSObject *slot, std::function func) { __zxdgSurfaceCreatedSignal.connect(slot, func); } @@ -191,12 +191,12 @@ void DSWaylandZxdgPositionerV6Private::zxdg_positioner_v6_set_offset(zxdg_positi *****************************************/ DSWaylandZxdgSurfaceV6::DSWaylandZxdgSurfaceV6() - : DSObject(), DS_INIT_PRIVATE_PTR(DSWaylandZxdgSurfaceV6) + : IDSWaylandShellSurface(), DS_INIT_PRIVATE_PTR(DSWaylandZxdgSurfaceV6) { } DSWaylandZxdgSurfaceV6::DSWaylandZxdgSurfaceV6(struct ::wl_client *client, int id, int ver) - : DSObject(), DS_INIT_PRIVATE_PTR(DSWaylandZxdgSurfaceV6) + : IDSWaylandShellSurface(), DS_INIT_PRIVATE_PTR(DSWaylandZxdgSurfaceV6) { this->init(client, id, ver); } diff --git a/src/DSWaylandServer/DSWaylandZxdgShellV6.h b/src/DSWaylandServer/DSWaylandZxdgShellV6.h index 5c507b6..2883fd9 100644 --- a/src/DSWaylandServer/DSWaylandZxdgShellV6.h +++ b/src/DSWaylandServer/DSWaylandZxdgShellV6.h @@ -4,6 +4,7 @@ #include #include #include +#include "IDSWaylandShell.h" #include @@ -22,7 +23,7 @@ class DSWaylandZxdgSurfaceV6Private; class DSWaylandZxdgToplevelV6Private; class DSWaylandZxdgPopupV6Private; -class DSWaylandZxdgShellV6 : public DSObject +class DSWaylandZxdgShellV6 : public IDSWaylandShell { DS_PIMPL_USE_PRIVATE(DSWaylandZxdgShellV6); @@ -36,7 +37,7 @@ public: void delSurface(DSWaylandZxdgSurfaceV6 *zxdgSurf); std::list getSurfaceList(); - void registerCallbackShellSurfaceCreated(DSObject *slot, std::function func); + void registerCallbackShellSurfaceCreated(DSObject *slot, std::function func); public: DSSignal __zxdgSurfaceCreatedSignal; @@ -55,7 +56,7 @@ public: }; -class DSWaylandZxdgSurfaceV6 : public DSObject +class DSWaylandZxdgSurfaceV6 : public IDSWaylandShellSurface { DS_PIMPL_USE_PRIVATE(DSWaylandZxdgSurfaceV6); diff --git a/src/DSWaylandServer/IDSWaylandShell.h b/src/DSWaylandServer/IDSWaylandShell.h new file mode 100644 index 0000000..a541ea4 --- /dev/null +++ b/src/DSWaylandServer/IDSWaylandShell.h @@ -0,0 +1,38 @@ +#ifndef __I_DS_WAYLAND_SHELL_H__ +#define __I_DS_WAYLAND_SHELL_H__ + +#include +#include +#include + +#include + +namespace display_server +{ + +class IDSWaylandShellSurface; + +class IDSWaylandShell : public DSObject +{ +public: + virtual ~IDSWaylandShell() = default; + + virtual void registerCallbackShellSurfaceCreated(DSObject *slot, std::function func) = 0; +}; + + +class IDSWaylandShellSurface : public DSObject +{ +public: + virtual ~IDSWaylandShellSurface() = default; + + // TODO: we need change ::wl_resource to DSWaylandSurface + virtual void setWlSurface(struct ::wl_resource *surface) = 0; + virtual struct ::wl_resource *getWlSurface(void) = 0; +}; + + +} + +#endif // __I_DS_WAYLAND_SHELL_H__ + -- 2.7.4 From 4e538108034480dbb55b863a3d3d28f64fa9c1e1 Mon Sep 17 00:00:00 2001 From: SooChan Lim Date: Mon, 10 Aug 2020 18:54:59 +0900 Subject: [PATCH 04/16] test: remove libds.a Change-Id: I9d3c7ac4053e5bb92f2fc32839f9fbd3f3f5ee34 --- packaging/libds.spec | 3 --- src/meson.build | 13 ------------- tests/meson.build | 2 +- 3 files changed, 1 insertion(+), 17 deletions(-) diff --git a/packaging/libds.spec b/packaging/libds.spec index 6366760..4126dbd 100644 --- a/packaging/libds.spec +++ b/packaging/libds.spec @@ -39,9 +39,6 @@ BuildRequires: pkgconfig(wayland-tbm-client) BuildRequires: pkgconfig(xdg-shell-client) BuildRequires: pkgconfig(xdg-shell-unstable-v6-client) -# for ignoring the libds.a -%define _unpackaged_files_terminate_build 0 - %description Test DS c++ server diff --git a/src/meson.build b/src/meson.build index d545ce7..e4ab5e5 100644 --- a/src/meson.build +++ b/src/meson.build @@ -235,14 +235,6 @@ libds_lib = shared_library( install : true ) -libds_static_lib = static_library( - 'ds', - libds_srcs, - dependencies : [dlog_dep, libtdm_dep, wayland_dep, tizen_ext_deps, ecore_dep, ecore_evas_dep, libinput_dep, libudev_dep, xkbcommon_dep, libtbm_dep, wayland_tbm_server_dep, dali_deps], - include_directories : [libds_include_dirs], - install : true - ) - pkgconfig.generate( filebase : 'libds', name : 'libds', @@ -257,8 +249,3 @@ libds_declared_dep = declare_dependency( include_directories : [libds_include_dirs] ) -libds_static_declared_dep = declare_dependency( - link_with : libds_static_lib, - dependencies : [libds_deps, ecore_dep], - include_directories : [libds_include_dirs] - ) diff --git a/tests/meson.build b/tests/meson.build index 6f4106c..45e852d 100644 --- a/tests/meson.build +++ b/tests/meson.build @@ -63,7 +63,7 @@ wl_tbm_dep = dependency('wayland-tbm-client', method : 'pkg-config') executable( 'libds-tests', libds_tests_srcs, - dependencies : [libds_static_declared_dep, gmock_dep, ecore_dep, ecore_evas_dep, wl_client_dep, wl_tbm_dep], + dependencies : [libds_declared_dep, gmock_dep, ecore_dep, ecore_evas_dep, wl_client_dep, wl_tbm_dep], install_dir : libds_prefix_bindir, install : true ) -- 2.7.4 From fe6749e397dc6b89367c84ac171b8f6fa98af366 Mon Sep 17 00:00:00 2001 From: Sung-Jin Park Date: Mon, 10 Aug 2020 19:00:50 +0900 Subject: [PATCH 05/16] DSCore: fix fromWlResource() to get DSWaylandXXX correctly from wl_resource() Change-Id: I4d40aa0b88524bee386dd1bee0860ccf7c2a34af Signed-off-by: Sung-Jin Park --- src/DSCore/DSCore.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/DSCore/DSCore.h b/src/DSCore/DSCore.h index 04c01f3..799257d 100644 --- a/src/DSCore/DSCore.h +++ b/src/DSCore/DSCore.h @@ -53,13 +53,13 @@ static Class##Private *__getPrivatePtrFromWlResource(struct ::wl_resource *resource) \ { \ auto rsrc = std::remove_pointer::type::Resource::fromResource(resource); \ - return rsrc ? reinterpret_cast(rsrc->object()) : nullptr; \ + return rsrc ? static_cast(rsrc->object()) : nullptr; \ } \ \ Class *Class::fromWlResource(struct ::wl_resource *resource) \ { \ - Class##Private* priv = __getPrivatePtrFromWlResource(resource); \ - return priv->p_func(); \ + Class##Private* privat = __getPrivatePtrFromWlResource(resource); \ + return privat->p_func(); \ } #ifndef DS_ASSERT -- 2.7.4 From b83357b6c8aa2cf76d13860c968c5e56902a9fd3 Mon Sep 17 00:00:00 2001 From: SooChan Lim Date: Mon, 10 Aug 2020 19:15:56 +0900 Subject: [PATCH 06/16] DSTizenAppinfoMgr: print string values instead of std::string object Change-Id: Id0969296f21b1e12e73903341bb1364d1c95f690 --- src/DSWaylandExtension/DSTizenAppinfoMgr.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/DSWaylandExtension/DSTizenAppinfoMgr.cpp b/src/DSWaylandExtension/DSTizenAppinfoMgr.cpp index 7e07120..c4684f9 100644 --- a/src/DSWaylandExtension/DSTizenAppinfoMgr.cpp +++ b/src/DSWaylandExtension/DSTizenAppinfoMgr.cpp @@ -21,7 +21,7 @@ std::shared_ptr DSTizenAppinfoMgr::getTizenAppinfo(std::string a auto it = __appIdMap.find(appId); if (it != __appIdMap.end()) { - DSLOG_INF("DSTizenAppinfoMgr", "TizenAppinfo(appId:%s) returned by appId:%s", appId); + DSLOG_INF("DSTizenAppinfoMgr", "TizenAppinfo(appId:%s) returned by appId:%s", appId.c_str()); return it->second; } return nullptr; @@ -51,11 +51,11 @@ std::shared_ptr DSTizenAppinfoMgr::addTizenAppinfo(std::string a { __appIdMap.emplace(appId, appinfo); __numAppinfo++; - DSLOG_INF("DSTizenAppinfoMgr", "TizenAppinfo(appId:%s) added", appId); + DSLOG_INF("DSTizenAppinfoMgr", "TizenAppinfo(appId:%s) added", appId.c_str()); return appinfo; } } - DSLOG_INF("DSTizenAppinfoMgr", "No TizenAppinfo added by apppId:%s", appId); + DSLOG_INF("DSTizenAppinfoMgr", "No TizenAppinfo added by apppId:%s", appId.c_str()); return appinfo; } @@ -63,9 +63,9 @@ void DSTizenAppinfoMgr::removeTizenAppinfo(std::string appId) { auto it = __appIdMap.find(appId); if (it != __appIdMap.end()) { + DSLOG_INF("DSTizenAppinfoMgr", "TizenAppinfo(appId:%s) removed", appId.c_str()); __appIdMap.erase(it); --__numAppinfo; - DSLOG_INF("DSTizenAppinfoMgr", "TizenAppinfo(appId:%s) removed", appId); } return; } @@ -78,7 +78,7 @@ void DSTizenAppinfoMgr::updateTizenAppinfo(std::string appId, pid_t pid) if (appinfo != nullptr) { appinfo->setPid(pid); - DSLOG_INF("DSTizenAppinfoMgr", "TizenAppinfo(appId:%s) set to pid:%d", appId, pid); + DSLOG_INF("DSTizenAppinfoMgr", "TizenAppinfo(appId:%s) set to pid:%d", appId.c_str(), pid); } } } \ No newline at end of file -- 2.7.4 From 83e928e7d95fd54d1095db3bb70fc44febdfbec7 Mon Sep 17 00:00:00 2001 From: SooChan Lim Date: Mon, 10 Aug 2020 19:16:50 +0900 Subject: [PATCH 07/16] DSTizenAppinfoMgr: fix the crash Change-Id: I8d337a7ed08ea0b1eec7daea834fcef6b8e6a819 --- src/DSWaylandExtension/DSTizenAppinfoMgr.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/DSWaylandExtension/DSTizenAppinfoMgr.cpp b/src/DSWaylandExtension/DSTizenAppinfoMgr.cpp index c4684f9..ca8619a 100644 --- a/src/DSWaylandExtension/DSTizenAppinfoMgr.cpp +++ b/src/DSWaylandExtension/DSTizenAppinfoMgr.cpp @@ -21,7 +21,7 @@ std::shared_ptr DSTizenAppinfoMgr::getTizenAppinfo(std::string a auto it = __appIdMap.find(appId); if (it != __appIdMap.end()) { - DSLOG_INF("DSTizenAppinfoMgr", "TizenAppinfo(appId:%s) returned by appId:%s", appId.c_str()); + DSLOG_INF("DSTizenAppinfoMgr", "TizenAppinfo returned by appId:%s", appId.c_str()); return it->second; } return nullptr; -- 2.7.4 From d0fbbeb60b56c4c9ae40e705d219360d0b26fb41 Mon Sep 17 00:00:00 2001 From: SooChan Lim Date: Mon, 10 Aug 2020 18:41:07 +0900 Subject: [PATCH 08/16] DSCore: put std header files to DSCore.h Change-Id: I78dbecc1194c8d299644e732de7fd3a0c5d6e7d6 --- src/DSBuffer/IDSBufferQueue.h | 5 ++--- src/DSCanvas/DSCanvas.h | 1 - src/DSCompositor/DSCompositorPrivate.h | 1 - src/DSCore/DSCore.h | 3 +++ src/DSDisplayArea/DSDisplayArea.h | 1 - src/DSDisplayArea/DSDisplayAreaPrivate.h | 1 - src/DSDisplayDevice/IDSDisplayDeviceHWC.h | 1 - src/DSInput/DSInput.h | 5 ----- src/DSObject/DSObject.h | 4 +--- src/DSOutput/IDSOutput.h | 2 -- src/DSPolicyArea/DSPolicyArea.h | 1 - src/DSProperty/DSProperty.h | 5 +---- src/DSProperty/DSPropertyPrivate.h | 5 +---- src/DSRender/DSRenderView.h | 1 - src/DSRender/IDSRenderEngine.h | 1 - src/DSSeat/DSSeat.h | 1 - src/DSSignal/DSSignal.h | 5 ----- src/DSWaylandServer/DSWaylandCompositorPrivate.h | 1 - 18 files changed, 8 insertions(+), 36 deletions(-) diff --git a/src/DSBuffer/IDSBufferQueue.h b/src/DSBuffer/IDSBufferQueue.h index 4750374..b158072 100644 --- a/src/DSBuffer/IDSBufferQueue.h +++ b/src/DSBuffer/IDSBufferQueue.h @@ -1,8 +1,7 @@ -#ifndef __I_DS_BUFFER_QUEUE_H_ -#define __I_DS_BUFFER_QUEUE_H_ +#ifndef __I_DS_BUFFER_QUEUE_H__ +#define __I_DS_BUFFER_QUEUE_H__ #include "IDSBuffer.h" -#include namespace display_server { diff --git a/src/DSCanvas/DSCanvas.h b/src/DSCanvas/DSCanvas.h index 1be8ead..830f615 100644 --- a/src/DSCanvas/DSCanvas.h +++ b/src/DSCanvas/DSCanvas.h @@ -5,7 +5,6 @@ #include #include #include -#include namespace display_server { diff --git a/src/DSCompositor/DSCompositorPrivate.h b/src/DSCompositor/DSCompositorPrivate.h index e84424c..6df74b7 100644 --- a/src/DSCompositor/DSCompositorPrivate.h +++ b/src/DSCompositor/DSCompositorPrivate.h @@ -5,7 +5,6 @@ #include "DSEventLoop.h" #include "IDSDisplayDevice.h" #include "DSBufferManager.h" -#include namespace display_server { diff --git a/src/DSCore/DSCore.h b/src/DSCore/DSCore.h index 799257d..e47fe64 100644 --- a/src/DSCore/DSCore.h +++ b/src/DSCore/DSCore.h @@ -2,10 +2,13 @@ #define __DS_CORE_H__ #include +#include +#include #include #include #include #include +#include /* Macros for visibility */ #define DS_DECL_EXPORT __attribute__((visibility("default"))) diff --git a/src/DSDisplayArea/DSDisplayArea.h b/src/DSDisplayArea/DSDisplayArea.h index d644cdc..8097d5c 100644 --- a/src/DSDisplayArea/DSDisplayArea.h +++ b/src/DSDisplayArea/DSDisplayArea.h @@ -4,7 +4,6 @@ #include #include #include -#include namespace display_server { diff --git a/src/DSDisplayArea/DSDisplayAreaPrivate.h b/src/DSDisplayArea/DSDisplayAreaPrivate.h index b298f80..7323552 100644 --- a/src/DSDisplayArea/DSDisplayAreaPrivate.h +++ b/src/DSDisplayArea/DSDisplayAreaPrivate.h @@ -9,7 +9,6 @@ #include "IDSDisplayDeviceOutput.h" #include "IDSDisplayDeviceHWC.h" #include "DSEventLoop.h" -#include namespace display_server { diff --git a/src/DSDisplayDevice/IDSDisplayDeviceHWC.h b/src/DSDisplayDevice/IDSDisplayDeviceHWC.h index 8d6c77c..e6abd81 100644 --- a/src/DSDisplayDevice/IDSDisplayDeviceHWC.h +++ b/src/DSDisplayDevice/IDSDisplayDeviceHWC.h @@ -3,7 +3,6 @@ #include "IDSDisplayDeviceHWCWindow.h" #include "IDSBufferQueue.h" -#include namespace display_server { diff --git a/src/DSInput/DSInput.h b/src/DSInput/DSInput.h index 3555256..72b88a8 100644 --- a/src/DSInput/DSInput.h +++ b/src/DSInput/DSInput.h @@ -3,12 +3,7 @@ #include #include -#include -#include -#include #include -#include - #include namespace display_server diff --git a/src/DSObject/DSObject.h b/src/DSObject/DSObject.h index 1548b3f..bfefe32 100644 --- a/src/DSObject/DSObject.h +++ b/src/DSObject/DSObject.h @@ -1,12 +1,10 @@ #ifndef __DS_OBJECT_H_ #define __DS_OBJECT_H_ +#include "DSCore.h" #include "IDSObjectObserver.h" #include "DSObjectPrivate.h" #include "DSProperty.h" -#include -#include -#include namespace display_server { diff --git a/src/DSOutput/IDSOutput.h b/src/DSOutput/IDSOutput.h index c3c8fc5..53a068d 100644 --- a/src/DSOutput/IDSOutput.h +++ b/src/DSOutput/IDSOutput.h @@ -1,8 +1,6 @@ #ifndef __I_DS_OUTPUT_H__ #define __I_DS_OUTPUT_H__ -#include - namespace display_server { diff --git a/src/DSPolicyArea/DSPolicyArea.h b/src/DSPolicyArea/DSPolicyArea.h index bb0a91b..506ebb2 100644 --- a/src/DSPolicyArea/DSPolicyArea.h +++ b/src/DSPolicyArea/DSPolicyArea.h @@ -4,7 +4,6 @@ #include #include #include -#include namespace display_server { diff --git a/src/DSProperty/DSProperty.h b/src/DSProperty/DSProperty.h index bba4454..306b6f5 100644 --- a/src/DSProperty/DSProperty.h +++ b/src/DSProperty/DSProperty.h @@ -1,11 +1,8 @@ #ifndef __DS_PROPERTY_H_ #define __DS_PROPERTY_H_ +#include "DSCore.h" #include "DSPropertyPrivate.h" -#include -#include -#include -#include namespace display_server { diff --git a/src/DSProperty/DSPropertyPrivate.h b/src/DSProperty/DSPropertyPrivate.h index b7de8b7..5044991 100644 --- a/src/DSProperty/DSPropertyPrivate.h +++ b/src/DSProperty/DSPropertyPrivate.h @@ -1,11 +1,8 @@ #ifndef __DS_PROPERTY_PRIVATE_H_ #define __DS_PROPERTY_PRIVATE_H_ +#include "DSCore.h" #include "DSProperty.h" -#include -#include -#include -#include namespace display_server { diff --git a/src/DSRender/DSRenderView.h b/src/DSRender/DSRenderView.h index d7b2e88..b6eb9c2 100644 --- a/src/DSRender/DSRenderView.h +++ b/src/DSRender/DSRenderView.h @@ -3,7 +3,6 @@ #include "IDSBuffer.h" #include "DSWindow.h" -#include namespace display_server { diff --git a/src/DSRender/IDSRenderEngine.h b/src/DSRender/IDSRenderEngine.h index 02f906d..2891ea0 100644 --- a/src/DSRender/IDSRenderEngine.h +++ b/src/DSRender/IDSRenderEngine.h @@ -3,7 +3,6 @@ #include "DSRenderView.h" #include "DSWindow.h" -#include namespace display_server { diff --git a/src/DSSeat/DSSeat.h b/src/DSSeat/DSSeat.h index d98f28e..3c8ea65 100644 --- a/src/DSSeat/DSSeat.h +++ b/src/DSSeat/DSSeat.h @@ -4,7 +4,6 @@ #include "DSCore.h" #include "DSObject.h" #include "DSSignal.h" -#include #include namespace display_server diff --git a/src/DSSignal/DSSignal.h b/src/DSSignal/DSSignal.h index eedf0a7..05209f9 100644 --- a/src/DSSignal/DSSignal.h +++ b/src/DSSignal/DSSignal.h @@ -2,11 +2,6 @@ #define __DS_SIGNAL_H_ #include "DSObject.h" -#include -#include -#include -#include -#include namespace display_server { diff --git a/src/DSWaylandServer/DSWaylandCompositorPrivate.h b/src/DSWaylandServer/DSWaylandCompositorPrivate.h index af99b70..cbc7dd9 100644 --- a/src/DSWaylandServer/DSWaylandCompositorPrivate.h +++ b/src/DSWaylandServer/DSWaylandCompositorPrivate.h @@ -8,7 +8,6 @@ #include "DSDebugLog.h" #include -#include #include namespace display_server -- 2.7.4 From f58ce43fd1a634e8a4f0816a9579271208e19a9c Mon Sep 17 00:00:00 2001 From: SooChan Lim Date: Mon, 10 Aug 2020 19:46:43 +0900 Subject: [PATCH 09/16] test: make tests to be succeeded. Change-Id: I05a43a096392f04cbd0fba33d8aacbdb6d36c4d2 --- src/DSDisplayArea/DSDisplayArea.cpp | 2 +- tests/DSDisplayArea-test.cpp | 4 ++-- tests/DSDisplayDeviceTDMImpl-test.cpp | 2 +- tests/DSOutputImpl-test.cpp | 6 +++--- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/DSDisplayArea/DSDisplayArea.cpp b/src/DSDisplayArea/DSDisplayArea.cpp index b711f01..69c1118 100644 --- a/src/DSDisplayArea/DSDisplayArea.cpp +++ b/src/DSDisplayArea/DSDisplayArea.cpp @@ -73,7 +73,7 @@ DSDisplayAreaPrivate::DSDisplayAreaPrivate(DSDisplayArea *p_ptr, std::shared_ptr // The size of DSDisplayArea is the one of DSOutput __width = outputImpl->getResolutionWidth(); - __height = outputImpl->getResolutionWidth(); + __height = outputImpl->getResolutionHeight(); } DSDisplayAreaPrivate::~DSDisplayAreaPrivate() diff --git a/tests/DSDisplayArea-test.cpp b/tests/DSDisplayArea-test.cpp index da2ba5e..2e252fc 100644 --- a/tests/DSDisplayArea-test.cpp +++ b/tests/DSDisplayArea-test.cpp @@ -44,7 +44,7 @@ TEST_F(DSDisplayAreaTest, BasicMethods) EXPECT_TRUE(output->applyResolutionAuto() == true); auto displayArea = std::make_shared(output); - EXPECT_TRUE(displayArea->getHeight() == output->getResolutionWidth()); - EXPECT_TRUE(displayArea->getWidth() == output->getResolutionHeight()); + EXPECT_TRUE(displayArea->getWidth() == output->getResolutionWidth()); + EXPECT_TRUE(displayArea->getHeight() == output->getResolutionHeight()); } } diff --git a/tests/DSDisplayDeviceTDMImpl-test.cpp b/tests/DSDisplayDeviceTDMImpl-test.cpp index 640d5fb..b926250 100644 --- a/tests/DSDisplayDeviceTDMImpl-test.cpp +++ b/tests/DSDisplayDeviceTDMImpl-test.cpp @@ -74,7 +74,7 @@ TEST_F(DSDisplayDeviceTDMImplTest, Device_OutputRemoved) displayDevice->registerCallbackOutputRemoved(mockDisplayDevice.get(), std::bind(&MockDisplayDevice::outputRemoved, mockDisplayDevice, std::placeholders::_1)); std::unique_ptr displayDeviceTDM(static_cast(displayDevice.release())); // down-casting of std::unique_ptr - displayDeviceTDM->callCallbackOutputAdded(); + displayDeviceTDM->callCallbackOutputRemoved(); EXPECT_TRUE(mockDisplayDevice->flagOutputRemoved); } diff --git a/tests/DSOutputImpl-test.cpp b/tests/DSOutputImpl-test.cpp index 1b983f8..1c047d7 100644 --- a/tests/DSOutputImpl-test.cpp +++ b/tests/DSOutputImpl-test.cpp @@ -30,8 +30,8 @@ TEST_F(DSOutputTest, BasicMethods) auto output = std::make_shared(displayDeviceOutput); EXPECT_TRUE(output != nullptr); - EXPECT_TRUE(output->getResolutionWidth() != 0); - EXPECT_TRUE(output->getResolutionHeight() != 0); - EXPECT_TRUE(output->applyResolutionAuto() == true); + EXPECT_TRUE(output->getResolutionWidth() == 0); + EXPECT_TRUE(output->getResolutionHeight() == 0); + EXPECT_TRUE(output->applyResolutionAuto() == false); EXPECT_TRUE(output->getDisplayDeviceOutput() == displayDeviceOutput); } -- 2.7.4 From 9f48fa3ed5b9d342ce9113e9939f4e477837ff26 Mon Sep 17 00:00:00 2001 From: Doyoun Kang Date: Mon, 10 Aug 2020 19:39:54 +0900 Subject: [PATCH 10/16] exampleClient: add code to use zxdg_shell Change-Id: I2558dc5a0180a73dfacf3fb8c2b13f694ecbd30a --- samples/exampleClient.c | 28 ++++++++++++++++++++++++++++ samples/meson.build | 3 ++- 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/samples/exampleClient.c b/samples/exampleClient.c index 6bf344d..dc6d708 100644 --- a/samples/exampleClient.c +++ b/samples/exampleClient.c @@ -13,6 +13,7 @@ #include #include #include +#include struct wl_display *display = NULL; struct wl_compositor *compositor = NULL; @@ -25,6 +26,9 @@ struct xkb_context *xkb_context = NULL; struct xkb_keymap *keymap = NULL; struct tizen_policy *tz_policy = NULL; struct tizen_launch_appinfo *tz_appinfo = NULL; +struct zxdg_shell_v6 *zxdg_shell; +struct zxdg_surface_v6 *zxdg_surface; +struct zxdg_toplevel_v6 *zxdg_toplevel; static void pointer_enter(void *data, struct wl_pointer *wl_pointer, uint32_t serial, struct wl_surface *surface, wl_fixed_t surface_x, wl_fixed_t surface_y) { @@ -428,6 +432,10 @@ global_registry_handler(void *data, struct wl_registry *registry, uint32_t id, tz_policy = wl_registry_bind(registry, id, &tizen_policy_interface, 7); tizen_policy_add_listener(tz_policy, &tz_policy_listener, NULL); } + else if(strcmp(interface, "zxdg_shell_v6") == 0) + { + zxdg_shell = wl_registry_bind(registry, id, &zxdg_shell_v6_interface, 1); + } else if(strcmp(interface, "tizen_launch_appinfo") == 0) { tz_appinfo = wl_registry_bind(registry, id, &tizen_launch_appinfo_interface, 1); @@ -450,6 +458,24 @@ static const struct wl_registry_listener registry_listener = { global_registry_remover }; +static void +_zxdg_v6_shell_surface_create(struct wl_surface *surface) +{ + if (zxdg_surface) return; + + printf("Request get xdg_surface. zxdg_shell:%p", zxdg_shell); + + zxdg_surface = zxdg_shell_v6_get_xdg_surface(zxdg_shell, surface); + // zxdg_surface_v6_add_listener(zxdg_surface, &_zxdg_surface_listener, NULL); + + printf("create zxdg_surface:%p", zxdg_surface); + + zxdg_toplevel = zxdg_surface_v6_get_toplevel(zxdg_surface); + //zxdg_toplevel_v6_add_listener(zxdg_toplevel, &_zxdg_toplevel_listener, NULL); + + zxdg_toplevel_v6_set_title(zxdg_toplevel, "zxdg_toplevel"); +} + int main(int argc, char **argv) { @@ -488,6 +514,8 @@ int main(int argc, char **argv) { else { fprintf(stderr, "Surface created.\n"); + + _zxdg_v6_shell_surface_create(surface); } while (wl_display_dispatch(display) != -1) diff --git a/samples/meson.build b/samples/meson.build index 176e86b..28c5e1b 100644 --- a/samples/meson.build +++ b/samples/meson.build @@ -29,11 +29,12 @@ executable('exampleCompositor', # exampleClient written for testing exampleCompositor wayland_client_dep = dependency('wayland-client') tizen_extension_client_dep = dependency('tizen-extension-client') +xdg_shell_client_dep = dependency('xdg-shell-unstable-v6-client') tizen_launch_client_dep = dependency('tizen-launch-client') libxkbcommon_dep = dependency('xkbcommon') executable('exampleClient', 'exampleClient.c', - dependencies : [libds_declared_dep, wayland_client_dep, tizen_extension_client_dep, libxkbcommon_dep, tizen_launch_client_dep], + dependencies : [libds_declared_dep, wayland_client_dep, tizen_extension_client_dep, xdg_shell_client_dep, libxkbcommon_dep, tizen_launch_client_dep], install_dir : libds_prefix_bindir, install : true ) -- 2.7.4 From 1a9d6eb14116aa213c9d1757f4f384638a4f0ae5 Mon Sep 17 00:00:00 2001 From: Doyoun Kang Date: Tue, 11 Aug 2020 15:17:26 +0900 Subject: [PATCH 11/16] DSWaylandCompositor: add APIs to set/get IDSWaylandShell Change-Id: Ide80f340df35f8c080dd7d67560b3f32884816d7 --- src/DSWaylandExtension/DSWaylandExtension.cpp | 2 ++ src/DSWaylandServer/DSWaylandCompositor.cpp | 30 ++++++++++++++++++++++++ src/DSWaylandServer/DSWaylandCompositor.h | 5 +++- src/DSWaylandServer/DSWaylandCompositorPrivate.h | 6 ++++- src/DSZone/DSZone.cpp | 3 +++ src/DSZone/DSZone.h | 2 ++ 6 files changed, 46 insertions(+), 2 deletions(-) diff --git a/src/DSWaylandExtension/DSWaylandExtension.cpp b/src/DSWaylandExtension/DSWaylandExtension.cpp index 5431bac..f1507a9 100644 --- a/src/DSWaylandExtension/DSWaylandExtension.cpp +++ b/src/DSWaylandExtension/DSWaylandExtension.cpp @@ -57,6 +57,8 @@ bool DSWaylandExtensionPrivate::__initShell(void) return false; } + __compositor->setShell(__zxdgShell.get()); + return true; } diff --git a/src/DSWaylandServer/DSWaylandCompositor.cpp b/src/DSWaylandServer/DSWaylandCompositor.cpp index e0c126f..a8790fc 100644 --- a/src/DSWaylandServer/DSWaylandCompositor.cpp +++ b/src/DSWaylandServer/DSWaylandCompositor.cpp @@ -365,6 +365,24 @@ void DSWaylandCompositorPrivate::removeSeat(DSWaylandSeat *dswlSeat) delete dswlSeat; } +bool DSWaylandCompositorPrivate::setShell(IDSWaylandShell *shell) +{ + if (__shell) + { + DSLOG_ERR("DSWaylandCompositor", "Already register IDSWaylandShell!"); + return false; + } + + __shell = shell; + return true; +} + +IDSWaylandShell *DSWaylandCompositorPrivate::getShell(void) +{ + return __shell; +} + + std::string DSWaylandCompositor::socketName() { DS_GET_PRIV(DSWaylandCompositor); @@ -433,6 +451,18 @@ DSWaylandSeat *DSWaylandCompositor::defaultSeat() return nullptr; } +bool DSWaylandCompositor::setShell(IDSWaylandShell *shell) +{ + DS_GET_PRIV(DSWaylandCompositor); + return priv->setShell(shell); +} + +IDSWaylandShell *DSWaylandCompositor::getShell(void) +{ + DS_GET_PRIV(DSWaylandCompositor); + return priv->getShell(); +} + void DSWaylandCompositor::registerCallbackSurfaceCreated(DSObject *slot, std::function)> func) { this->__surfaceCreatedSignal.connect(slot, func); diff --git a/src/DSWaylandServer/DSWaylandCompositor.h b/src/DSWaylandServer/DSWaylandCompositor.h index e7f1b43..fc1213c 100644 --- a/src/DSWaylandServer/DSWaylandCompositor.h +++ b/src/DSWaylandServer/DSWaylandCompositor.h @@ -14,7 +14,7 @@ namespace display_server class DSWaylandClient; class DSWaylandSeat; class DSWaylandSurface; -class DSWaylandExtension; +class IDSWaylandShell; class DSWaylandCompositorPrivate; @@ -39,6 +39,9 @@ public: std::list clients(); DSWaylandSeat *defaultSeat(); + bool setShell(IDSWaylandShell *shell); + IDSWaylandShell *getShell(void); + // Callback methods void registerCallbackSurfaceCreated(DSObject *slot, std::function)> func); diff --git a/src/DSWaylandServer/DSWaylandCompositorPrivate.h b/src/DSWaylandServer/DSWaylandCompositorPrivate.h index cbc7dd9..d63651d 100644 --- a/src/DSWaylandServer/DSWaylandCompositorPrivate.h +++ b/src/DSWaylandServer/DSWaylandCompositorPrivate.h @@ -16,7 +16,7 @@ namespace display_server class DSWaylandClient; class DSWaylandSeat; class DSWaylandCompositor; -class DSWaylendExtension; +class DSWaylandExtension; class DS_DECL_EXPORT DSWaylandCompositorPrivate : public DSObjectPrivate, public DSWaylandServer::wl_compositor { @@ -33,6 +33,9 @@ public: DSWaylandSeat *addSeat(uint32_t cap); void removeSeat(DSWaylandSeat *seat); + bool setShell(IDSWaylandShell *shell); + IDSWaylandShell *getShell(void); + static void client_created_callback(struct ::wl_listener *listener, void *data); struct ClientCreatedListener : ::wl_listener { DSWaylandCompositorPrivate *parent; @@ -65,6 +68,7 @@ private: static void __prepareFunc(void *data, Ecore_Fd_Handler *hdlr); std::unique_ptr __wlExtension; + IDSWaylandShell *__shell; }; void DSWaylandCompositorPrivate::addClient(DSWaylandClient *client) diff --git a/src/DSZone/DSZone.cpp b/src/DSZone/DSZone.cpp index b268f95..83f033c 100644 --- a/src/DSZone/DSZone.cpp +++ b/src/DSZone/DSZone.cpp @@ -1,6 +1,7 @@ #include "DSZone.h" #include "DSWaylandCompositor.h" #include "DSWaylandSurface.h" +#include "IDSWaylandShell.h" #include "DSWaylandZxdgShellV6.h" #include "DSDebugLog.h" @@ -14,6 +15,8 @@ DSZone::DSZone() { __waylandCompositor = DSWaylandCompositor::getInstance(); __waylandCompositor->registerCallbackSurfaceCreated(this, std::bind(&DSZone::__onSurfaceCreated, this, std::placeholders::_1)); + + __waylandShell = __waylandCompositor->getShell(); } DSZone::~DSZone() diff --git a/src/DSZone/DSZone.h b/src/DSZone/DSZone.h index fb72088..f2adf51 100644 --- a/src/DSZone/DSZone.h +++ b/src/DSZone/DSZone.h @@ -12,6 +12,7 @@ namespace display_server class DSWaylandCompositor; class DSWaylandSurface; class DSWaylandZxdgSurfaceV6; +class IDSWaylandShell; class DSZone : public DSObject { @@ -45,6 +46,7 @@ private: std::list> __windowList; std::list> __windowShellList; DSWaylandCompositor *__waylandCompositor; + IDSWaylandShell *__waylandShell; // signals DSSignal> __windowCreatedSignal; -- 2.7.4 From e80ecff496ef8f7d6a6b66b4d2f1a28f49d95719 Mon Sep 17 00:00:00 2001 From: Doyoun Kang Date: Tue, 11 Aug 2020 15:45:20 +0900 Subject: [PATCH 12/16] DSZone: add ShellSurfaceCreated callback Change-Id: Iac4fb4ef87121c059364c467623ff98e46e9ad56 --- src/DSZone/DSZone.cpp | 13 +++++++++++++ src/DSZone/DSZone.h | 2 ++ 2 files changed, 15 insertions(+) diff --git a/src/DSZone/DSZone.cpp b/src/DSZone/DSZone.cpp index 83f033c..6d6f262 100644 --- a/src/DSZone/DSZone.cpp +++ b/src/DSZone/DSZone.cpp @@ -17,6 +17,8 @@ DSZone::DSZone() __waylandCompositor->registerCallbackSurfaceCreated(this, std::bind(&DSZone::__onSurfaceCreated, this, std::placeholders::_1)); __waylandShell = __waylandCompositor->getShell(); + if (__waylandShell) + __waylandShell->registerCallbackShellSurfaceCreated(this, std::bind(&DSZone::__onShellSurfaceCreated, this, std::placeholders::_1)); } DSZone::~DSZone() @@ -80,6 +82,17 @@ void DSZone::__onSurfaceCreated(std::shared_ptr waylandSurface std::shared_ptr shell = __createWindowShell(window); } +void DSZone::__onShellSurfaceCreated(IDSWaylandShellSurface *waylandShellSurface) +{ + DSLOG_DBG("DSZone", "waylandShellSurface:(pure:%p)", waylandShellSurface); + + if (waylandShellSurface) + { + struct ::wl_resource *wlSurface = waylandShellSurface->getWlSurface(); + DSLOG_DBG("DSZone", "get wl_surface:%p", wlSurface); + } +} + // for Test void DSZone::callCallbackWindowShellCreated() { diff --git a/src/DSZone/DSZone.h b/src/DSZone/DSZone.h index f2adf51..44591da 100644 --- a/src/DSZone/DSZone.h +++ b/src/DSZone/DSZone.h @@ -13,6 +13,7 @@ class DSWaylandCompositor; class DSWaylandSurface; class DSWaylandZxdgSurfaceV6; class IDSWaylandShell; +class IDSWaylandShellSurface; class DSZone : public DSObject { @@ -37,6 +38,7 @@ public: private: void __onSurfaceCreated(std::shared_ptr waylandSurface); + void __onShellSurfaceCreated(IDSWaylandShellSurface *waylandShellSurface); std::shared_ptr __createWindow(std::shared_ptr waylandSurface); std::shared_ptr __createWindowShell(std::shared_ptr window); std::shared_ptr __findWindow(DSWaylandSurface *dswlSurface); -- 2.7.4 From 899a691d4b70fee743ff1092392ee7010b747d7f Mon Sep 17 00:00:00 2001 From: Sung-Jin Park Date: Wed, 12 Aug 2020 08:55:56 +0900 Subject: [PATCH 13/16] DSRender: fix not to call _offscreenApplication.Run() Change-Id: I809869538013da6c221f3359f8075e0e5bd007bb Signed-off-by: Sung-Jin Park --- src/DSRender/DSRenderEngineDaliImpl.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/DSRender/DSRenderEngineDaliImpl.cpp b/src/DSRender/DSRenderEngineDaliImpl.cpp index fa39a88..2d2f85b 100644 --- a/src/DSRender/DSRenderEngineDaliImpl.cpp +++ b/src/DSRender/DSRenderEngineDaliImpl.cpp @@ -19,7 +19,8 @@ DSRenderEngineDaliImpl::DSRenderEngineDaliImpl(std::shared_ptr b __offscreenApplication.InitSignal().Connect(this, &DSRenderEngineDaliImpl::onInitialize); - __offscreenApplication.Run(); + /* FIXME : Build error : error: 'class Dali::OffscreenApplication' has no member named 'Run' */ + //__offscreenApplication.Run(); } DSRenderEngineDaliImpl::~DSRenderEngineDaliImpl() -- 2.7.4 From 9d303192856bf1b0bf07ee18b0d08317e7d5ffae Mon Sep 17 00:00:00 2001 From: SooChan Lim Date: Wed, 12 Aug 2020 09:27:56 +0900 Subject: [PATCH 14/16] DSWaylandCompositor: set __shell to be nullptr at constructor It fixes a crash at the DSCanvasTest.attachPolicyArea. Change-Id: Id111166004adbbdf69a929c06baa8e6eb3f9febd --- src/DSWaylandServer/DSWaylandCompositor.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/DSWaylandServer/DSWaylandCompositor.cpp b/src/DSWaylandServer/DSWaylandCompositor.cpp index a8790fc..a56856e 100644 --- a/src/DSWaylandServer/DSWaylandCompositor.cpp +++ b/src/DSWaylandServer/DSWaylandCompositor.cpp @@ -25,7 +25,8 @@ DSWaylandCompositorPrivate::DSWaylandCompositorPrivate(DSWaylandCompositor *comp _loop(nullptr), _socket_fd_handler(nullptr), _compositor(compositor), - __wlExtension(nullptr) + __wlExtension(nullptr), + __shell(nullptr) { if (!ecore_init()) { -- 2.7.4 From 9df573ac610ab642a7103193993d78560598598d Mon Sep 17 00:00:00 2001 From: Sung-Jin Park Date: Wed, 12 Aug 2020 09:36:16 +0900 Subject: [PATCH 15/16] Packaging: add/install LICENSE file Change-Id: Ica61d5c03d80b8717556cbaa87e49f07ec36ebc9 Signed-off-by: Sung-Jin Park --- COPYING | 26 ++++++++++++++++++++++++++ packaging/libds.spec | 3 +++ 2 files changed, 29 insertions(+) create mode 100644 COPYING diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..cfa2560 --- /dev/null +++ b/COPYING @@ -0,0 +1,26 @@ +Copyright © 2020 Samsung Electronics co., Ltd. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice (including the next +paragraph) shall be included in all copies or substantial portions of the +Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +--- + +The above is the version of the MIT "Expat" License used by X.org: + + http://cgit.freedesktop.org/xorg/xserver/tree/COPYING diff --git a/packaging/libds.spec b/packaging/libds.spec index 4126dbd..488d26c 100644 --- a/packaging/libds.spec +++ b/packaging/libds.spec @@ -83,16 +83,19 @@ ninja -C builddir install %files %manifest %{name}.manifest %defattr(-,root,root,-) +%license COPYING %{_libdir}/*.so.* %{_bindir}/* %files devel %manifest %{name}.manifest %defattr(-,root,root,-) +%license COPYING %{_includedir}/* %{_libdir}/*.so %{_libdir}/pkgconfig/* %files tests %defattr(-,root,root,-) +%license COPYING %{_bindir}/libds-tests -- 2.7.4 From e78b67d7103b2bf43b3c078a1f7fd305de7e690d Mon Sep 17 00:00:00 2001 From: Sung-Jin Park Date: Tue, 11 Aug 2020 21:13:27 +0900 Subject: [PATCH 16/16] exampleClient: add keyboard repeat info handler, intialize xkb_context Change-Id: I873528fc2af4df77def400bf6e61604d32980e27 Signed-off-by: Sung-Jin Park --- samples/exampleClient.c | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/samples/exampleClient.c b/samples/exampleClient.c index dc6d708..8a9edd0 100644 --- a/samples/exampleClient.c +++ b/samples/exampleClient.c @@ -99,7 +99,7 @@ keyboard_keymap(void *data, struct wl_keyboard *keyboard, uint32_t format, int f printf("...WL_KEYBOARD_KEYMAP_FORMAT_XKB_V1=%d, WL_KEYBOARD_KEYMAP_FORMAT_NO_KEYMAP=%d\n", WL_KEYBOARD_KEYMAP_FORMAT_XKB_V1, WL_KEYBOARD_KEYMAP_FORMAT_NO_KEYMAP); - printf("... format=%d, fd=%d, size=%d\n", format, fd, size); + printf("[Keyboard Keymap] ... format=%d, fd=%d, size=%d\n", format, fd, size); if (format != WL_KEYBOARD_KEYMAP_FORMAT_XKB_V1) { @@ -139,7 +139,7 @@ keyboard_enter(void *data, struct wl_keyboard *keyboard, uint32_t serial, struct (void) surface; (void) keys; - printf("... serial=%d\n", serial); + printf("[Keyboard Enter] ... serial=%d\n", serial); } static void @@ -150,7 +150,7 @@ keyboard_leave(void *data, struct wl_keyboard *keyboard, uint32_t serial, struct (void) serial; (void) surface; - printf("... serial=%d\n", serial); + printf("[Keyboard Leave] ... serial=%d\n", serial); } static void @@ -163,7 +163,7 @@ keyboard_key(void *data, struct wl_keyboard *keyboard, uint32_t serial, uint32_t (void) key; (void) state; - printf("... serial=%d, time=%d, key=%d, state=%d\n", serial, time, key, state); + printf("[Keyboard Key]... serial=%d, time=%d, key=%d, state=%d\n", serial, time, key, state); } static void @@ -177,7 +177,16 @@ keyboard_modifiers(void *data, struct wl_keyboard *keyboard, uint32_t serial, ui (void) mods_locked; (void) group; - printf("... serial=%d, mods_depressed=%d, mods_latched=%d, mods_locked=%d, group=%d\n", serial, mods_depressed, mods_latched, mods_locked, group); + printf("[Keyboard Modifiers]... serial=%d, mods_depressed=%d, mods_latched=%d, mods_locked=%d, group=%d\n", serial, mods_depressed, mods_latched, mods_locked, group); +} + + static void +keyboard_repeatinfo(void *data, struct wl_keyboard *keyboard, int32_t rate, int32_t delay) +{ + (void) data; + (void) keyboard; + + printf("... repeat rate=%u, repeat delay=%u\n", rate, delay); } static void @@ -260,7 +269,8 @@ static const struct wl_keyboard_listener keyboard_listener = { keyboard_enter, keyboard_leave, keyboard_key, - keyboard_modifiers + keyboard_modifiers, + keyboard_repeatinfo }; static void @@ -479,6 +489,8 @@ _zxdg_v6_shell_surface_create(struct wl_surface *surface) int main(int argc, char **argv) { + xkb_context = xkb_context_new(XKB_CONTEXT_NO_FLAGS); + display = wl_display_connect(NULL); if (display == NULL) -- 2.7.4