add gnomepanelproxy
This commit is contained in:
parent
fdd1c3c8a7
commit
4f6908feed
4 changed files with 120 additions and 1 deletions
13
Makefile.am
13
Makefile.am
|
@ -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
|
||||
|
|
4
tools/gnome-panel-control/.cvsignore
Normal file
4
tools/gnome-panel-control/.cvsignore
Normal file
|
@ -0,0 +1,4 @@
|
|||
.deps
|
||||
.dirstamp
|
||||
.libs
|
||||
gnomepanelproxy
|
4
tools/gnome-panel-control/Makefile
Normal file
4
tools/gnome-panel-control/Makefile
Normal file
|
@ -0,0 +1,4 @@
|
|||
all clean install:
|
||||
$(MAKE) -C ../.. -$(MAKEFLAGS) $@
|
||||
|
||||
.PHONY: all clean install
|
100
tools/gnome-panel-control/gnome-panel-control.c
Normal file
100
tools/gnome-panel-control/gnome-panel-control.c
Normal 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;
|
||||
}
|
Loading…
Reference in a new issue