summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt5
-rw-r--r--packaging/app-core.spec3
-rwxr-xr-xsrc/appcore-X.c53
3 files changed, 60 insertions, 1 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index fa4255e..c3c334a 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -38,9 +38,12 @@ SET(HEADERS_common appcore-common.h)
INCLUDE(FindPkgConfig)
SET(APPCORE_PKG_CHECK_MODULES "dbus-1 vconf sensor aul dlog libtzplatform-config ecore")
IF (with_x11)
- SET(APPCORE_PKG_CHECK_MODULES "${APPCORE_PKG_CHECK_MODULES} x11 ecore-x")
+ SET(APPCORE_PKG_CHECK_MODULES "${APPCORE_PKG_CHECK_MODULES} x11 eina ecore-x")
+ELSEIF (with_wayland)
+ SET(APPCORE_PKG_CHECK_MODULES "${APPCORE_PKG_CHECK_MODULES} ecore-wayland")
ENDIF (with_x11)
+
pkg_check_modules(pkg_common REQUIRED ${APPCORE_PKG_CHECK_MODULES})
FOREACH(flag ${pkg_common_CFLAGS})
diff --git a/packaging/app-core.spec b/packaging/app-core.spec
index 2428648..5746efb 100644
--- a/packaging/app-core.spec
+++ b/packaging/app-core.spec
@@ -11,6 +11,9 @@ Source0: app-core-%{version}.tar.gz
%if %{with x}
BuildRequires: pkgconfig(x11)
BuildRequires: pkgconfig(ecore-x)
+BuildRequires: pkgconfig(eina)
+%else if %{with wayland}
+BuildRequires: pkgconfig(ecore-wayland)
%endif
Source1001: app-core.manifest
BuildRequires: pkgconfig(dbus-1)
diff --git a/src/appcore-X.c b/src/appcore-X.c
index c0a7e66..cec8eb4 100755
--- a/src/appcore-X.c
+++ b/src/appcore-X.c
@@ -26,6 +26,7 @@
#include <errno.h>
#include <signal.h>
+#include <Eina.h>
#include <X11/Xlib.h>
#include <X11/Xatom.h>
@@ -103,6 +104,58 @@ static int __find_win(Display *d, Window *win, pid_t pid)
return 0;
}
+static void __add_win_list(Eina_List **list, Window *win)
+{
+ Window w;
+ Eina_List *l;
+
+ if (!list || !win)
+ return;
+
+ EINA_LIST_FOREACH(*list, l, w) {
+ if (w == *win)
+ return;
+ }
+
+ *list = eina_list_append(*list, *win);
+}
+
+static void __foreach_win(Eina_List **list, Display *d, Window *win, pid_t pid)
+{
+ int i;
+ int r;
+ pid_t p;
+ unsigned int n;
+ Window root, parent, *child;
+
+ p = __get_win_pid(d, *win);
+ if (p == pid)
+ __add_win_list(list, win);
+
+ r = XQueryTree(d, *win, &root, &parent, &child, &n);
+ if (r) {
+ for (i = 0; i < n; i++) {
+ __foreach_win(list, d, &child[i], pid);
+ }
+ XFree(child);
+ }
+}
+
+static int __iconify_win(Eina_List *list, Display *d)
+{
+ Window w;
+ Eina_List *l;
+
+ if (!list || !d)
+ return -1;
+
+ EINA_LIST_FOREACH(list, l, w) {
+ XIconifyWindow(d, w, 0);
+ }
+
+ return 0;
+}
+
static int __raise_win(Display *d, Window win)
{
XEvent xev;