add gnomepanelproxy

This commit is contained in:
Dana Jansens 2003-09-18 07:43:33 +00:00
parent fdd1c3c8a7
commit 4f6908feed
4 changed files with 120 additions and 1 deletions

View file

@ -26,7 +26,8 @@ lib_LTLIBRARIES = \
bin_PROGRAMS = \
openbox/openbox \
tools/kdetrayproxy/kdetrayproxy
tools/kdetrayproxy/kdetrayproxy \
tools/gnomepanelproxy/gnomepanelproxy
## render ##
@ -201,6 +202,16 @@ tools_kdetrayproxy_kdetrayproxy_SOURCES = \
tools/kdetrayproxy/kdetrayproxy.c
## gnomepanelproxy ##
tools_gnomepanelproxy_gnomepanelproxy_CPPFLAGS = \
$(X_CFLAGS)
tools_gnomepanelproxy_gnomepanelproxy_LDADD = \
$(X_LIBS)
tools_gnomepanelproxy_gnomepanelproxy_SOURCES = \
tools/gnomepanelproxy/gnomepanelproxy.c
## themes ##
allegro_themedir = $(themedir)/Allegro/openbox-3

View file

@ -0,0 +1,4 @@
.deps
.dirstamp
.libs
gnomepanelproxy

View file

@ -0,0 +1,4 @@
all clean install:
$(MAKE) -C ../.. -$(MAKEFLAGS) $@
.PHONY: all clean install

View file

@ -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;
}