source: trunk/src/lib/x11/CreateWindow.c@ 30

Last change on this file since 30 was 30, checked in by shadow, 19 years ago

bugfixes (crashes) and some code for InputOnly windows

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 3.1 KB
Line 
1#include "X11.h"
2
3Window 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
12fprintf(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
58int 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
64Window 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
80int 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}
Note: See TracBrowser for help on using the repository browser.