openbox/tools/gnome-panel-control/gnome-panel-control.c

101 lines
2.5 KiB
C
Raw Normal View History

2003-09-18 07:43:33 +00:00
#include <X11/Xlib.h>
#include <string.h>
#include <stdio.h>
#include <assert.h>
typedef enum
{
NONE,
MAIN_MENU,
RUN_DIALOG
} Action;
int main(int argc, char **argv)
{
int i;
Action a = NONE;
for (i = 1; i < argc; ++i) {
if (!strcmp(argv[i], "--help")) {
a = NONE;
break;
}
if (!strcmp(argv[i], "--main-menu")) {
a = MAIN_MENU;
break;
}
if (!strcmp(argv[i], "--run-dialog")) {
a = RUN_DIALOG;
break;
}
}
if (!a) {
printf("Usage: gnome-panel-control ACTION\n\n");
2003-09-18 07:43:33 +00:00
printf("Actions:\n");
printf(" --help Display this help and exit\n");
printf(" --main-menu Show the main menu\n");
printf(" --run-dialog Show the run dialog\n\n");
return 0;
}
{
Display *d;
Window root;
XClientMessageEvent ce;
Atom act_atom;
Time timestamp;
d = XOpenDisplay(NULL);
if (!d) {
fprintf(stderr,
"Unable to open the X display specified by the DISPLAY "
"environment variable. Ensure you have permission to "
"connect to the display.");
return 1;
}
root = RootWindowOfScreen(DefaultScreenOfDisplay(d));
switch (a) {
case MAIN_MENU:
act_atom = XInternAtom(d, "_GNOME_PANEL_ACTION_MAIN_MENU", False);
break;
case RUN_DIALOG:
act_atom = XInternAtom(d, "_GNOME_PANEL_ACTION_RUN_DIALOG", False);
break;
default:
assert(0);
}
/* Generate a timestamp */
{
XEvent event;
Window win;
win = XCreateSimpleWindow(d, root, 0, 0, 1, 1, 0, 0, 0);
XSelectInput(d, win, PropertyChangeMask);
XChangeProperty(d, win, act_atom, act_atom, 8,
PropModeAppend, NULL, 0);
XWindowEvent(d, win, PropertyChangeMask, &event);
XDestroyWindow(d, win);
timestamp = event.xproperty.time;
}
ce.type = ClientMessage;
ce.window = root;
ce.message_type = XInternAtom(d, "_GNOME_PANEL_ACTION", False);
ce.format = 32;
ce.data.l[0] = act_atom;
ce.data.l[1] = timestamp;
XSendEvent(d, root, False, StructureNotifyMask, (XEvent*) &ce);
XCloseDisplay(d);
}
return 0;
}