add gnomepanelproxy
authorDana Jansens <danakj@orodu.net>
Thu, 18 Sep 2003 07:43:33 +0000 (07:43 +0000)
committerDana Jansens <danakj@orodu.net>
Thu, 18 Sep 2003 07:43:33 +0000 (07:43 +0000)
Makefile.am
tools/gnome-panel-control/.cvsignore [new file with mode: 0644]
tools/gnome-panel-control/Makefile [new file with mode: 0644]
tools/gnome-panel-control/gnome-panel-control.c [new file with mode: 0644]

index bda4fce..8612a20 100644 (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
diff --git a/tools/gnome-panel-control/.cvsignore b/tools/gnome-panel-control/.cvsignore
new file mode 100644 (file)
index 0000000..190cf9e
--- /dev/null
@@ -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 (file)
index 0000000..cfc4653
--- /dev/null
@@ -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 (file)
index 0000000..fe84a4f
--- /dev/null
@@ -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;
+}