1
0
mirror of https://github.com/gryf/wmaker.git synced 2025-12-19 20:38:08 +01:00
Files
wmaker/test/notest.c
Carlos R. Mafra 688a56e8ab Change to the linux kernel coding style
for arq in `git ls-files *.c`; do
    echo $arq;
    indent -linux -l115 $arq;
    done

The different line break at 115 columns is because
I use a widescreen monitor :-)
2009-08-20 00:59:40 +02:00

123 lines
3.0 KiB
C

/* quick and dirty test application that demonstrates: Notify grabbing
*
* TODO: remake
*/
#include <stdio.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/Xproto.h>
#include <WMaker.h>
Display *dpy;
Window leader;
WMAppContext *app;
Atom delete_win;
Atom prots[6];
XWMHints *hints;
WMMenu *menu;
static void quit(void *foo, int item, Time time)
{
exit(0);
}
static void hide(void *foo, int item, Time time)
{
WMHideApplication(app);
}
int notify_print(int id, XEvent * event, void *data)
{
printf("Got notification 0x%x, window 0x%lx, data '%s'\n", id, event->xclient.data.l[1], (char *)data);
return True;
}
static void newwin(void *foo, int item, Time time)
{
Window win;
XClassHint classhint;
char title[100];
win = XCreateSimpleWindow(dpy, DefaultRootWindow(dpy), 0, 0, 200, 100, 0, 0, 0);
prots[0] = delete_win;
XSetWMProtocols(dpy, win, prots, 1);
sprintf(title, "Notify Test Window");
XStoreName(dpy, win, title);
/* set class hint */
classhint.res_name = "notest";
classhint.res_class = "Notest";
XSetClassHint(dpy, win, &classhint);
hints = XAllocWMHints();
/* set window group leader */
hints->window_group = leader;
hints->flags = WindowGroupHint;
XSetWMHints(dpy, win, hints);
WMAppAddWindow(app, win);
XMapWindow(dpy, win);
}
int main(int argc, char **argv)
{
XClassHint classhint;
dpy = XOpenDisplay("");
if (!dpy) {
puts("could not open display!");
exit(1);
}
delete_win = XInternAtom(dpy, "WM_DELETE_WINDOW", False);
leader = XCreateSimpleWindow(dpy, DefaultRootWindow(dpy), 10, 10, 10, 10, 0, 0, 0);
/* set class hint */
classhint.res_name = "notest";
classhint.res_class = "Notest";
XSetClassHint(dpy, leader, &classhint);
/* set window group leader to self */
hints = XAllocWMHints();
hints->window_group = leader;
hints->flags = WindowGroupHint;
XSetWMHints(dpy, leader, hints);
/* create app context */
app = WMAppCreateWithMain(dpy, DefaultScreen(dpy), leader);
menu = WMMenuCreate(app, "Notify Test Menu");
WMMenuAddItem(menu, "Hide", (WMMenuAction) hide, NULL, NULL, NULL);
WMMenuAddItem(menu, "Quit", (WMMenuAction) quit, NULL, NULL, NULL);
WMAppSetMainMenu(app, menu);
WMRealizeMenus(app);
/* Get some WindowMaker notifications */
WMNotifySet(app, WMN_APP_START, notify_print, (void *)"App start");
WMNotifySet(app, WMN_APP_EXIT, notify_print, (void *)"App end");
WMNotifySet(app, WMN_WIN_FOCUS, notify_print, (void *)"Focus in");
WMNotifySet(app, WMN_WIN_UNFOCUS, notify_print, (void *)"Focus out");
WMNotifySet(app, WMN_NOTIFY_ALL, notify_print, (void *)"Unknown type");
WMNotifyMaskUpdate(app); /* Mask isn't actually set till we do this */
/* set command to use to startup this */
XSetCommand(dpy, leader, argv, argc);
/* create first window */
newwin(NULL, 0, 0);
XFlush(dpy);
while (1) {
XEvent ev;
XNextEvent(dpy, &ev);
if (ev.type == ClientMessage) {
if (ev.xclient.data.l[0] == delete_win) {
XDestroyWindow(dpy, ev.xclient.window);
break;
}
}
WMProcessEvent(app, &ev);
}
exit(0);
}