From 084d912cb688c5a9257b3446b2f5f40260d16c6f Mon Sep 17 00:00:00 2001 From: Fabio Mello Date: Fri, 14 Feb 2014 10:35:57 -0200 Subject: [PATCH] Apps should not require ecore_x. The current UG_INIT_EFL() macro forces the applications who uses it to depend on ecore_x. This patch uses a higher level of abstraction in this macro, this approach lets ui-gadget-1 handle the display server without expose this to its dependents. Signed-off-by: Leandro Dorileo Signed-off-by: Fabio Mello Conflicts: CMakeLists.txt Change-Id: I9a1683df1ee64b2d997b0edfedc6bfc695aed9e7 --- CMakeLists.txt | 2 +- include/ug-manager.h | 3 +++ include/ui-gadget.h | 35 +++++++++++++++++++++++++++++++---- packaging/ui-gadget-1.spec | 1 + src/manager.c | 11 +++++++++++ src/ug.c | 15 +++++++++++++++ 6 files changed, 62 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c665300..ed72a99 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -26,7 +26,7 @@ SET(SRCS src/ug.c ADD_LIBRARY(${PROJECT_NAME} SHARED ${SRCS}) -SET(PKGS_CHECK_MODULES "glib-2.0 bundle dlog capi-appfw-application appsvc capi-appfw-app-manager ecore libtzplatform-config") +SET(PKGS_CHECK_MODULES "glib-2.0 bundle dlog capi-appfw-application appsvc capi-appfw-app-manager ecore elementary libtzplatform-config") IF (with_x) PKG_CHECK_MODULES(PKGS REQUIRED ${PKGS_CHECK_MODULES} utilX x11) ENDIF(with_x) diff --git a/include/ug-manager.h b/include/ug-manager.h index f5ac47e..7c7e059 100644 --- a/include/ug-manager.h +++ b/include/ug-manager.h @@ -26,6 +26,7 @@ #include #endif +#include #include "ug.h" int ugman_ug_add(ui_gadget_h parent, ui_gadget_h ug); @@ -41,6 +42,8 @@ int ugman_ug_del_all(void); int ugman_init(Display *disp, Window xid, void *win, enum ug_option opt); #endif +int ugman_init_efl(Evas_Object *win, enum ug_option opt); + int ugman_resume(void); int ugman_pause(void); int ugman_send_event(enum ug_event event); diff --git a/include/ui-gadget.h b/include/ui-gadget.h index 41f5637..bc4a1e8 100644 --- a/include/ui-gadget.h +++ b/include/ui-gadget.h @@ -58,6 +58,7 @@ #include #endif +#include #include #ifdef __cplusplus @@ -163,11 +164,8 @@ struct ug_cbs { * Easy-to-use macro of ug_init() for EFL * @see ug_init() */ -#ifndef WAYLAND #define UG_INIT_EFL(win, opt) \ - ug_init((Display *)ecore_x_display_get(), elm_win_xwindow_get(win), \ - win, opt) -#endif + ug_init_efl(win, opt) /** * Easy-to-use macro of ug_init() for GTK @@ -222,6 +220,35 @@ struct ug_cbs { #ifndef WAYLAND int ug_init(Display *disp, Window xid, void *win, enum ug_option opt); #endif + +/** + * \par Description: + * This function initializes default window and indicator state. + * + * @param[in] win A pointer to window evas object. + * @param[in] opt Default indicator state to restore application's indicator state + * @return 0 on success, -1 on error + * + * \pre None + * \post None + * \see UG_INIT_EFL() + * \remarks None + * + * \par Sample code: + * \code + * #include + * ... + * Evas_Object *win; + * ... + * // create window + * ... + * ug_init_efl(win, UG_OPT_INDICATOR_ENABLE); + * // for convenience you can use following macro: ELM_INIT_EFL(win, UG_OPT_INDICATOR_ENABLE); + * ... + * \endcode + */ +int ug_init_efl(Evas_Object *win, enum ug_option opt); + /** * \par Description: * This function creates a UI gadget diff --git a/packaging/ui-gadget-1.spec b/packaging/ui-gadget-1.spec index 3c084a9..e8e5113 100644 --- a/packaging/ui-gadget-1.spec +++ b/packaging/ui-gadget-1.spec @@ -20,6 +20,7 @@ BuildRequires: pkgconfig(utilX) BuildRequires: pkgconfig(x11) %endif BuildRequires: pkgconfig(appsvc) +BuildRequires: pkgconfig(elementary) BuildRequires: pkgconfig(capi-appfw-application) BuildRequires: pkgconfig(capi-appfw-app-manager) BuildRequires: pkgconfig(vconf) diff --git a/src/manager.c b/src/manager.c index 015e1eb..5c9cbed 100644 --- a/src/manager.c +++ b/src/manager.c @@ -29,6 +29,7 @@ #include #include #include +#include #endif #include @@ -910,6 +911,16 @@ int ugman_init(Display *disp, Window xid, void *win, enum ug_option opt) } #endif +int ugman_init_efl(Evas_Object *win, enum ug_option opt) +{ +#ifndef WAYLAND + Ecore_X_Window xwin = elm_win_xwindow_get(win); + if (xwin) + return ugman_init((Display *)ecore_x_display_get(), xwin, win, opt); +#endif + return -1; +} + int ugman_resume(void) { /* RESUME */ diff --git a/src/ug.c b/src/ug.c index af5bc47..60719bc 100644 --- a/src/ug.c +++ b/src/ug.c @@ -111,6 +111,21 @@ UG_API int ug_init(Display *disp, Window xid, void *win, enum ug_option opt) } #endif +UG_API int ug_init_efl(Evas_Object *win, enum ug_option opt) +{ + if (!win) { + _ERR("ug_init_efl() failed: Invalid arguments"); + return -1; + } + + if (opt < UG_OPT_INDICATOR_ENABLE || opt >= UG_OPT_MAX) { + _ERR("ug_init_efl() failed: Invalid option"); + return -1; + } + + return ugman_init_efl(win, opt); +} + UG_API int ug_pause(void) { return ugman_pause(); -- 2.7.4