1 | #include "X11.h"
|
---|
2 |
|
---|
3 | Window XCreateWindow(Display *display, Window parent, int x, int y,
|
---|
4 | unsigned int width, unsigned int height,
|
---|
5 | unsigned int border_width, int depth, unsigned int class,
|
---|
6 | Visual *visual, unsigned long valuemask,
|
---|
7 | XSetWindowAttributes *attributes) {
|
---|
8 | DBUG_ENTER("XCreateWindow")
|
---|
9 | UM_CreateWindow *CreateParams = Xcalloc(1, sizeof(UM_CreateWindow));
|
---|
10 | EB_Window *ebw = Xcalloc(1, sizeof(EB_Window));
|
---|
11 |
|
---|
12 | fprintf(stderr, "Create: %ld, %ld, %ld, %ld (%x->)\n", x, y, width, height, parent);
|
---|
13 |
|
---|
14 | ebw->class = class;
|
---|
15 | ebw->xpm = True;
|
---|
16 | ebw->border_width = border_width;
|
---|
17 | ebw->bit_gravity = ForgetGravity;
|
---|
18 | ebw->win_gravity = NorthWestGravity;
|
---|
19 | ebw->background_pixel = WhitePixel(display, 0);
|
---|
20 | ebw->background_pixmap = None;
|
---|
21 | ebw->border_pixel = -1;
|
---|
22 |
|
---|
23 | if(attributes && valuemask) {
|
---|
24 | if(valuemask & CWOverrideRedirect)
|
---|
25 | ebw->override_redirect = attributes->override_redirect;
|
---|
26 | if(valuemask & CWSaveUnder)
|
---|
27 | ebw->save_under = attributes->save_under;
|
---|
28 | if(valuemask & CWDontPropagate)
|
---|
29 | ebw->do_not_propagate_mask = attributes->do_not_propagate_mask;
|
---|
30 | if(valuemask & CWBitGravity)
|
---|
31 | ebw->bit_gravity = attributes->bit_gravity;
|
---|
32 | if(valuemask & CWWinGravity)
|
---|
33 | ebw->win_gravity = attributes->win_gravity;
|
---|
34 | if(valuemask & CWBackPixel)
|
---|
35 | ebw->background_pixel = attributes->background_pixel;
|
---|
36 | if(valuemask & CWBackPixmap)
|
---|
37 | ebw->background_pixmap = (EB_Resource *)attributes->background_pixmap;
|
---|
38 | if(valuemask & CWCursor)
|
---|
39 | ebw->cursor = attributes->cursor;
|
---|
40 | if(valuemask & CWBorderPixel)
|
---|
41 | ebw->border_pixel = attributes->border_pixel;
|
---|
42 |
|
---|
43 | if(valuemask & CWEventMask)
|
---|
44 | CreateParams->event_mask = attributes->event_mask;
|
---|
45 | }
|
---|
46 | CreateParams->x = x;
|
---|
47 | CreateParams->y = y;
|
---|
48 | CreateParams->width = width;
|
---|
49 | CreateParams->height = height;
|
---|
50 | CreateParams->parent = parent;
|
---|
51 | CreateParams->process = process;
|
---|
52 | CreateParams->newwind = ebw;
|
---|
53 |
|
---|
54 | Window win = (Window)Daemon_exec(process, UM_CREATEWINDOW, CreateParams);
|
---|
55 | DBUG_RETURN(win);
|
---|
56 | }
|
---|
57 |
|
---|
58 | int XDestroyWindow(Display *display, Window window) {
|
---|
59 | DBUG_ENTER("XDestroyWindow")
|
---|
60 | int ret = (int)Daemon_exec(process, UM_DESTROYWINDOW, (EB_Resource *)window);
|
---|
61 | DBUG_RETURN(ret);
|
---|
62 | }
|
---|
63 |
|
---|
64 | Window XCreateSimpleWindow(Display* display, Window parent, int x, int y,
|
---|
65 | unsigned int width, unsigned int height,
|
---|
66 | unsigned int border_width, unsigned long border,
|
---|
67 | unsigned long background) {
|
---|
68 | DBUG_ENTER("XCreateSimpleWindow")
|
---|
69 | XSetWindowAttributes attrib;
|
---|
70 | EB_Window *ebw = getResource(EBWINDOW, parent);
|
---|
71 |
|
---|
72 | attrib.background_pixel = background;
|
---|
73 | attrib.border_pixel = border;
|
---|
74 | Window win = XCreateWindow(display, parent, x, y, width, height,
|
---|
75 | border_width, 32, ebw->class, DefaultVisual(display, 1),
|
---|
76 | CWBackPixel | CWBorderPixel, &attrib);
|
---|
77 | DBUG_RETURN(win);
|
---|
78 | }
|
---|
79 |
|
---|
80 | int XDestroySubwindows(Display *display, Window window)
|
---|
81 | {
|
---|
82 | DBUG_ENTER("XDestroySubwindows")
|
---|
83 | EB_Window *ebw = getResource(EBWINDOW, window);
|
---|
84 | HENUM henum = WinBeginEnumWindows(ebw->hwnd);
|
---|
85 | HWND child;
|
---|
86 |
|
---|
87 | if (!henum)
|
---|
88 | DBUG_RETURN(0);
|
---|
89 |
|
---|
90 | while((child = WinQueryWindow(WinGetNextWindow(henum), QW_TOP))) {
|
---|
91 | Window w = (EB_Resource *)getWindow(child, TRUE, NULL);
|
---|
92 | XDestroySubwindows(display, w);
|
---|
93 | Daemon_exec(process, UM_DESTROYWINDOW, w);
|
---|
94 | }
|
---|
95 |
|
---|
96 | WinEndEnumWindows(henum);
|
---|
97 | DBUG_RETURN(True);
|
---|
98 | }
|
---|