@@ -40,6 +40,19 @@ static void spawn(char **com) {
40
40
wait (NULL );
41
41
}
42
42
43
+ static void fullclient (char * * com ) {
44
+ UNUSED (com );
45
+ uint32_t vals [4 ];
46
+ vals [0 ] = 0 - BORDER_WIDTH ;
47
+ vals [1 ] = 0 - BORDER_WIDTH ;
48
+ vals [2 ] = scre -> width_in_pixels ;
49
+ vals [3 ] = scre -> height_in_pixels ;
50
+ xcb_configure_window (dpy , win , XCB_CONFIG_WINDOW_X |
51
+ XCB_CONFIG_WINDOW_Y | XCB_CONFIG_WINDOW_WIDTH |
52
+ XCB_CONFIG_WINDOW_HEIGHT , vals );
53
+ xcb_flush (dpy );
54
+ }
55
+
43
56
static void handleButtonPress (xcb_generic_event_t * ev ) {
44
57
xcb_button_press_event_t * e = (xcb_button_press_event_t * ) ev ;
45
58
win = e -> child ;
@@ -73,8 +86,8 @@ static void handleMotionNotify(xcb_generic_event_t * ev) {
73
86
if (!((poin -> root_x <= geom -> x ) || (poin -> root_y <= geom -> y ))) {
74
87
values [0 ] = poin -> root_x - geom -> x - BORDER_WIDTH ;
75
88
values [1 ] = poin -> root_y - geom -> y - BORDER_WIDTH ;
76
- if ((values [0 ] >= (uint32_t )(WINDOW_MIN_X )) &&
77
- (values [1 ] >= (uint32_t )(WINDOW_MIN_Y ))) {
89
+ if ((values [0 ] >= (uint32_t )(WINDOW_MIN_WIDTH )) &&
90
+ (values [1 ] >= (uint32_t )(WINDOW_MIN_HEIGHT ))) {
78
91
xcb_configure_window (dpy , win , XCB_CONFIG_WINDOW_WIDTH
79
92
| XCB_CONFIG_WINDOW_HEIGHT , values );
80
93
}
@@ -105,7 +118,7 @@ static void setFocus(xcb_drawable_t window) {
105
118
}
106
119
}
107
120
108
- static void setBorderColor (xcb_window_t window , int focus ) {
121
+ static void setFocusColor (xcb_window_t window , int focus ) {
109
122
if ((BORDER_WIDTH > 0 ) && (scre -> root != window ) && (0 != window )) {
110
123
uint32_t vals [1 ];
111
124
vals [0 ] = focus ? BORDER_COLOR_FOCUSED : BORDER_COLOR_UNFOCUSED ;
@@ -114,37 +127,6 @@ static void setBorderColor(xcb_window_t window, int focus) {
114
127
}
115
128
}
116
129
117
- static void setBorderWidth (xcb_window_t window ) {
118
- if ((BORDER_WIDTH > 0 ) && (scre -> root != window ) && (0 != window )) {
119
- uint32_t vals [2 ];
120
- vals [0 ] = BORDER_WIDTH ;
121
- xcb_configure_window (dpy , window , XCB_CONFIG_WINDOW_BORDER_WIDTH , vals );
122
- xcb_flush (dpy );
123
- }
124
- }
125
-
126
- static void setWindowDimensions (xcb_window_t window ) {
127
- if ((scre -> root != window ) && (0 != window )) {
128
- uint32_t vals [2 ];
129
- vals [0 ] = WINDOW_X ;
130
- vals [1 ] = WINDOW_Y ;
131
- xcb_configure_window (dpy , window , XCB_CONFIG_WINDOW_WIDTH |
132
- XCB_CONFIG_WINDOW_HEIGHT , vals );
133
- xcb_flush (dpy );
134
- }
135
- }
136
-
137
- static void setWindowPosition (xcb_window_t window ) {
138
- if ((scre -> root != window ) && (0 != window )) {
139
- uint32_t vals [2 ];
140
- vals [0 ] = (scre -> width_in_pixels / 2 ) - (WINDOW_X / 2 );
141
- vals [1 ] = (scre -> height_in_pixels / 2 ) - (WINDOW_Y / 2 );
142
- xcb_configure_window (dpy , window , XCB_CONFIG_WINDOW_X |
143
- XCB_CONFIG_WINDOW_Y , vals );
144
- xcb_flush (dpy );
145
- }
146
- }
147
-
148
130
static void handleKeyPress (xcb_generic_event_t * ev ) {
149
131
xcb_key_press_event_t * e = ( xcb_key_press_event_t * ) ev ;
150
132
xcb_keysym_t keysym = xcb_get_keysym (e -> detail );
@@ -174,20 +156,27 @@ static void handleDestroyNotify(xcb_generic_event_t * ev) {
174
156
175
157
static void handleFocusIn (xcb_generic_event_t * ev ) {
176
158
xcb_focus_in_event_t * e = (xcb_focus_in_event_t * ) ev ;
177
- setBorderColor (e -> event , 1 );
159
+ setFocusColor (e -> event , 1 );
178
160
}
179
161
180
162
static void handleFocusOut (xcb_generic_event_t * ev ) {
181
163
xcb_focus_out_event_t * e = (xcb_focus_out_event_t * ) ev ;
182
- setBorderColor (e -> event , 0 );
164
+ setFocusColor (e -> event , 0 );
183
165
}
184
166
185
167
static void handleMapRequest (xcb_generic_event_t * ev ) {
186
168
xcb_map_request_event_t * e = (xcb_map_request_event_t * ) ev ;
187
169
xcb_map_window (dpy , e -> window );
188
- setWindowDimensions (e -> window );
189
- setWindowPosition (e -> window );
190
- setBorderWidth (e -> window );
170
+ uint32_t vals [5 ];
171
+ vals [0 ] = (scre -> width_in_pixels / 2 ) - (WINDOW_WIDTH / 2 );
172
+ vals [1 ] = (scre -> height_in_pixels / 2 ) - (WINDOW_HEIGHT / 2 );
173
+ vals [2 ] = WINDOW_WIDTH ;
174
+ vals [3 ] = WINDOW_HEIGHT ;
175
+ vals [4 ] = BORDER_WIDTH ;
176
+ xcb_configure_window (dpy , e -> window , XCB_CONFIG_WINDOW_X |
177
+ XCB_CONFIG_WINDOW_Y | XCB_CONFIG_WINDOW_WIDTH |
178
+ XCB_CONFIG_WINDOW_HEIGHT | XCB_CONFIG_WINDOW_BORDER_WIDTH , vals );
179
+ xcb_flush (dpy );
191
180
values [0 ] = XCB_EVENT_MASK_ENTER_WINDOW | XCB_EVENT_MASK_FOCUS_CHANGE ;
192
181
xcb_change_window_attributes_checked (dpy , e -> window ,
193
182
XCB_CW_EVENT_MASK , values );
@@ -226,7 +215,6 @@ static void setup(void) {
226
215
}
227
216
}
228
217
xcb_flush (dpy );
229
- /* grab buttons */
230
218
xcb_grab_button (dpy , 0 , scre -> root , XCB_EVENT_MASK_BUTTON_PRESS |
231
219
XCB_EVENT_MASK_BUTTON_RELEASE , XCB_GRAB_MODE_ASYNC ,
232
220
XCB_GRAB_MODE_ASYNC , scre -> root , XCB_NONE , 1 , MOD1 );
@@ -264,7 +252,7 @@ static int strcmp_c(char * str1, char * str2) {
264
252
int main (int argc , char * argv []) {
265
253
int ret = 0 ;
266
254
if ((argc == 2 ) && (strcmp_c ("-v" , argv [1 ]) == 0 )) {
267
- ret = die ("xwm-0.1.5 , © 2020 Michael Czigler, see LICENSE for details\n" );
255
+ ret = die ("xwm-0.1.6 , © 2020 Michael Czigler, see LICENSE for details\n" );
268
256
}
269
257
if ((ret == 0 ) && (argc != 1 )) {
270
258
ret = die ("usage: xwm [-v]\n" );
0 commit comments