File: mapwindow.c

package info (click to toggle)
xgalaga 2.0.34-41
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 1,568 kB
  • ctags: 1,222
  • sloc: ansic: 15,819; sh: 2,634; perl: 816; makefile: 155
file content (128 lines) | stat: -rw-r--r-- 2,750 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#include "allincludes.h"

void
W_MapWindow(window)
    W_Window window;
{
    struct window *win;

#ifdef DEBUG
    printf("Mapping %d\n", window);
#endif
    win = W_Void2Window(window);
    if(win->type != WIN_BORDER && win->borderwin) {
      W_MapWindow(win->borderwin);
    }
    if (win->wm_window)
      W_MapWindow(win->wm_window);
    if (win->mapped)
	return;
    win->mapped = 1;
    XMapRaised(W_Display, win->window);
}

void
W_UnmapWindow(window)
    W_Window window;
{
    struct window *win;

#ifdef DEBUG
    printf("UnMapping %d\n", window);
#endif
    win = W_Void2Window(window);
    if (win->mapped == 0)
	return;
    win->mapped = 0;
    XUnmapWindow(W_Display, win->window);
    if(win->type != WIN_BORDER && win->borderwin) {
      W_UnmapWindow(win->borderwin);
    }
    if (win->wm_window)
      W_UnmapWindow(win->wm_window);
}

int
W_IsMapped(window)
    W_Window window;
{
    struct window *win;

    win = W_Void2Window(window);
    if (win == NULL)
	return (0);
    return (win->mapped);
}

static void
deleteWindow(window)
    struct window *window;
{
    struct windowlist **rm;
    struct windowlist *temp;

    rm = &hashtable[hash(window->window)];
    while (*rm != NULL && (*rm)->window != window) {
	rm = &((*rm)->next);
    }
    if (*rm == NULL) {
	printf("Attempt to delete non-existent window!\n");
	return;
    }
    temp = *rm;
    *rm = temp->next;
    free((char *) temp);
}

void
W_DestroyWindow(window)
    W_Window window;
{
    struct window *win;
    W_Window wm_window;
#ifdef DEBUG
    printf("Destroying %d\n", window);
#endif
    win = W_Void2Window(window);
    wm_window = win->wm_window;
    
    if(win->fs_window != None)
      W_ToggleFullscreen(window);
    
    deleteWindow(win);
    XDestroyWindow(W_Display, win->window);
    if(win->buffer) XFreePixmap(W_Display, win->buffer);
    if(win->type != WIN_BORDER && win->borderwin) 
      W_DestroyWindow(win->borderwin);
    free((char *) win);
    
    if (wm_window)
      W_DestroyWindow(wm_window);
}

void
W_ResizeWindow(window, neww, newh)	/* TSH 2/93 */
    W_Window window;
    int     neww, newh;
{
    struct window *win = W_Void2Window(window);

    XResizeWindow(W_Display, win->window, 
                  (unsigned int) neww, 
                  (unsigned int) newh);
    /* resize the border to match [BDyess] */
    XResizeWindow(W_Display, W_Void2Window(win->borderwin)->window, 
                  (unsigned int) neww + win->border * 2,
                  (unsigned int) newh + win->border * 2);
}

void
W_Deiconify(window)
    W_Window window;
{
    struct window *win;
    win = W_Void2Window(window);
    /* according to ICCCM 4.1.4, this is how you deiconify a window. */
    XMapWindow(W_Display, win->window);
}