diff options
| author | Dana Jansens <danakj@orodu.net> | 2003-09-18 07:43:33 +0000 |
|---|---|---|
| committer | Dana Jansens <danakj@orodu.net> | 2003-09-18 07:43:33 +0000 |
| commit | 4f6908feed54691d4b6e418fccde90c4ddfc1617 (patch) | |
| tree | 99ca65c984626d817ce86e5b1d134c10780e6fb9 /tools/gnome-panel-control | |
| parent | fdd1c3c8a7eac8ba1246ae64cbfca6f922294c51 (diff) | |
add gnomepanelproxy
Diffstat (limited to 'tools/gnome-panel-control')
| -rw-r--r-- | tools/gnome-panel-control/.cvsignore | 4 | ||||
| -rw-r--r-- | tools/gnome-panel-control/Makefile | 4 | ||||
| -rw-r--r-- | tools/gnome-panel-control/gnome-panel-control.c | 100 |
3 files changed, 108 insertions, 0 deletions
diff --git a/tools/gnome-panel-control/.cvsignore b/tools/gnome-panel-control/.cvsignore new file mode 100644 index 00000000..190cf9eb --- /dev/null +++ b/tools/gnome-panel-control/.cvsignore @@ -0,0 +1,4 @@ +.deps +.dirstamp +.libs +gnomepanelproxy diff --git a/tools/gnome-panel-control/Makefile b/tools/gnome-panel-control/Makefile new file mode 100644 index 00000000..cfc46539 --- /dev/null +++ b/tools/gnome-panel-control/Makefile @@ -0,0 +1,4 @@ +all clean install: + $(MAKE) -C ../.. -$(MAKEFLAGS) $@ + +.PHONY: all clean install diff --git a/tools/gnome-panel-control/gnome-panel-control.c b/tools/gnome-panel-control/gnome-panel-control.c new file mode 100644 index 00000000..fe84a4f1 --- /dev/null +++ b/tools/gnome-panel-control/gnome-panel-control.c @@ -0,0 +1,100 @@ +#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: gnomepanelproxy ACTION\n\n"); + 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; +} |
