4 * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
6 * Contact: Jayoun Lee <airjany@samsung.com>, Sewook Park <sewook7.park@samsung.com>, Jaeho Lee <jaeho81.lee@samsung.com>
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
30 #include <X11/Xatom.h>
32 #include "appcore-internal.h"
36 static pid_t __get_win_pid(Display *d, Window win)
44 unsigned long bytes_after;
45 unsigned char *prop_ret;
47 _retv_if(d == NULL || !a_pid, -1);
50 r = XGetWindowProperty(d, win, a_pid, 0, 1, False, XA_CARDINAL,
51 &a_type, &format, &nitems, &bytes_after,
53 if (r != Success || prop_ret == NULL)
56 if (a_type == XA_CARDINAL && format == 32)
57 pid = *(unsigned long *)prop_ret;
66 static int __find_win(Display *d, Window *win, pid_t pid)
71 Window root, parent, *child;
73 p = __get_win_pid(d, *win);
77 r = XQueryTree(d, *win, &root, &parent, &child, &n);
82 for (i = 0; i < n; i++) {
83 found = __find_win(d, &child[i], pid);
98 static int __raise_win(Display *d, Window win)
100 XWindowAttributes attr;
103 XGetWindowAttributes(d, win, &attr);
104 _retv_if(attr.map_state != IsViewable, -1);
107 * Window Manger sets the Input Focus.
108 * Appcore does not need to enforce this anymore.
110 * XSetInputFocus(d, win, RevertToPointerRoot, CurrentTime);
117 int x_raise_win(pid_t pid)
132 errno = ESRCH; /* No such process */
136 d = XOpenDisplay(NULL);
137 _retv_if(d == NULL, -1);
139 win = XDefaultRootWindow(d);
142 a_pid = XInternAtom(d, "_NET_WM_PID", True);
144 found = __find_win(d, &win, pid);
151 r = __raise_win(d, win);