mirror of
https://github.com/gryf/wmaker.git
synced 2025-12-18 12:00:31 +01:00
It was removed on 67a8a82670 with the assumption that
nothing was using it. But that was not really the case - FSViewer
used it.
I've just tested it. After a trivial fix regarding the change in
the function definition of WMWritePropListToFile(), FSViewer
compiles and even seems to work (didn't test much though).
So let's not be unfair with FSViewer and put wmlib back. FSViewer
might even be used for educational purposes for people wanting to
write apps using WINGs etc.
123 lines
3.0 KiB
C
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);
|
|
}
|