]> Dogcows Code - chaz/openbox/blob - tools/gnome-panel-control/gnome-panel-control.c
fe84a4f1e60c0ab0410e2eae509e61aca4791bbe
[chaz/openbox] / tools / gnome-panel-control / gnome-panel-control.c
1 #include <X11/Xlib.h>
2 #include <string.h>
3 #include <stdio.h>
4 #include <assert.h>
5
6 typedef enum
7 {
8 NONE,
9 MAIN_MENU,
10 RUN_DIALOG
11 } Action;
12
13 int main(int argc, char **argv)
14 {
15 int i;
16 Action a = NONE;
17
18 for (i = 1; i < argc; ++i) {
19 if (!strcmp(argv[i], "--help")) {
20 a = NONE;
21 break;
22 }
23 if (!strcmp(argv[i], "--main-menu")) {
24 a = MAIN_MENU;
25 break;
26 }
27 if (!strcmp(argv[i], "--run-dialog")) {
28 a = RUN_DIALOG;
29 break;
30 }
31 }
32
33 if (!a) {
34 printf("Usage: gnomepanelproxy ACTION\n\n");
35 printf("Actions:\n");
36 printf(" --help Display this help and exit\n");
37 printf(" --main-menu Show the main menu\n");
38 printf(" --run-dialog Show the run dialog\n\n");
39 return 0;
40 }
41
42 {
43 Display *d;
44 Window root;
45 XClientMessageEvent ce;
46 Atom act_atom;
47 Time timestamp;
48
49 d = XOpenDisplay(NULL);
50 if (!d) {
51 fprintf(stderr,
52 "Unable to open the X display specified by the DISPLAY "
53 "environment variable. Ensure you have permission to "
54 "connect to the display.");
55 return 1;
56 }
57 root = RootWindowOfScreen(DefaultScreenOfDisplay(d));
58
59 switch (a) {
60 case MAIN_MENU:
61 act_atom = XInternAtom(d, "_GNOME_PANEL_ACTION_MAIN_MENU", False);
62 break;
63 case RUN_DIALOG:
64 act_atom = XInternAtom(d, "_GNOME_PANEL_ACTION_RUN_DIALOG", False);
65 break;
66 default:
67 assert(0);
68 }
69
70 /* Generate a timestamp */
71 {
72 XEvent event;
73 Window win;
74
75 win = XCreateSimpleWindow(d, root, 0, 0, 1, 1, 0, 0, 0);
76
77 XSelectInput(d, win, PropertyChangeMask);
78
79 XChangeProperty(d, win, act_atom, act_atom, 8,
80 PropModeAppend, NULL, 0);
81 XWindowEvent(d, win, PropertyChangeMask, &event);
82
83 XDestroyWindow(d, win);
84
85 timestamp = event.xproperty.time;
86 }
87
88 ce.type = ClientMessage;
89 ce.window = root;
90 ce.message_type = XInternAtom(d, "_GNOME_PANEL_ACTION", False);
91 ce.format = 32;
92 ce.data.l[0] = act_atom;
93 ce.data.l[1] = timestamp;
94 XSendEvent(d, root, False, StructureNotifyMask, (XEvent*) &ce);
95
96 XCloseDisplay(d);
97 }
98
99 return 0;
100 }
This page took 0.039012 seconds and 3 git commands to generate.