1 /*
2 xraise 0.2 - A small tool to send a X application
3 to the foreground
4 Copyright 2010 - socol
5 Copyright 2007 - Hd Luc
6 */
7 /**
8 * gcc -g -o xraise xraise.c `pkg-config gtk+-2.0 --cflags --libs gthread-2.0 x11`
9 */
10
11
12
13 #include <X11/Xos.h>
14 #include <X11/Xlib.h>
15 #include <X11/Xutil.h>
16 #include <stdio.h>
17 #include <unistd.h>
18 #include <stdlib.h>
19
20 /* "borrowed" from xwininfo/dsimple.c */
21
22 Window Window_With_Name(dpy, top, name)
23 Display *dpy;
24 Window top;
25 char *name;
26 {
27 Window *children, dummy;
28 unsigned int nchildren;
29 int i;
30 Window w=0;
31 char *window_name;
32 XClassHint *class_hint;
33 class_hint = XAllocClassHint();
34 int ret = 0;
35 #if 0
36 // find by WM_NAME(STRING) = "window - tilte"
37 if (XFetchName(dpy, top, &window_name) && (strstr(window_name, name) == window_name))
38 return(top);
39 #else
40 // find by WM_CLASS(STRING) = "mywindow", "MyWindow"
41 if (XGetClassHint(dpy, top, class_hint)) {
42 if (strstr(class_hint->res_name, name) == class_hint->res_name) {
43 ret = 1;
44 }
45 if (!class_hint->res_class) {
46 XFree(class_hint->res_class);
47 XFree(class_hint->res_name);
48 }
49 if (ret)
50 return(top);
51 }
52 #endif
53
54 if (!XQueryTree(dpy, top, &dummy, &dummy, &children, &nchildren))
55 return(0);
56
57 for (i=0; i<nchildren; i++)
58 {
59 w = Window_With_Name(dpy, children[i], name);
60 if (w)
61 break;
62 }
63 if (children) XFree ((char *)children);
64 return(w);
65 }
66
67 int main(int argc, char **argv)
68 {
69 Window window;
70 Display *dpy;
71
72 if (argc < 2)
73 {
74 fprintf(stderr, "Usage: %s window-name\n", argv[0]);
75 exit(1);
76 }
77
78 dpy = XOpenDisplay(":0");
79 if (!dpy)
80 {
81 fprintf(stderr, "Cannot open display.\n");
82 exit(1);
83 }
84
85 window = Window_With_Name(dpy, DefaultRootWindow(dpy), argv[1]);
86 if (!window)
87 {
88 fprintf(stderr, "Cannot find a window by that name.\n");
89 exit(1);
90 }
91
92 XSetInputFocus(dpy, window, RevertToPointerRoot, CurrentTime);
93
94 if(!XRaiseWindow(dpy, window))
95 {
96 fprintf(stderr, "XRaiseWindow error?\n");
97 exit(1);
98 }
99 XCloseDisplay(dpy);
100 return 0;
101 }
转载fromhttp://socol.iteye.com/blog/788653