@@ -12,8 +12,6 @@ static xcb_connection_t * dpy;
12
12
static xcb_screen_t * scre ;
13
13
static xcb_drawable_t win ;
14
14
static uint32_t values [3 ];
15
- static uint32_t min_x = WINDOW_MIN_X ;
16
- static uint32_t min_y = WINDOW_MIN_Y ;
17
15
18
16
static void killclient (char * * com ) {
19
17
UNUSED (com );
@@ -47,42 +45,36 @@ static void handleButtonPress(xcb_generic_event_t * ev) {
47
45
win = e -> child ;
48
46
values [0 ] = XCB_STACK_MODE_ABOVE ;
49
47
xcb_configure_window (dpy , win , XCB_CONFIG_WINDOW_STACK_MODE , values );
50
- xcb_get_geometry_cookie_t geom_now = xcb_get_geometry (dpy , win );
51
- xcb_get_geometry_reply_t * geom = xcb_get_geometry_reply (dpy , geom_now , NULL );
52
- if (1 == e -> detail ) {
53
- values [2 ] = 1 ;
54
- xcb_warp_pointer (dpy , XCB_NONE , win , 0 , 0 , 0 , 0 , 1 , 1 );
55
- } else if (win != 0 ) {
56
- values [2 ] = 3 ;
57
- xcb_warp_pointer (dpy , XCB_NONE , win , 0 , 0 , 0 , 0 , geom -> width , geom -> height );
58
- }
59
- else {}
48
+ values [2 ] = ((1 == e -> detail ) ? 1 : ((win != 0 ) ? 3 : 0 ));
60
49
xcb_grab_pointer (dpy , 0 , scre -> root , XCB_EVENT_MASK_BUTTON_RELEASE
61
50
| XCB_EVENT_MASK_BUTTON_MOTION | XCB_EVENT_MASK_POINTER_MOTION_HINT ,
62
- XCB_GRAB_MODE_ASYNC , XCB_GRAB_MODE_ASYNC , scre -> root , XCB_NONE , XCB_CURRENT_TIME );
51
+ XCB_GRAB_MODE_ASYNC , XCB_GRAB_MODE_ASYNC ,
52
+ scre -> root , XCB_NONE , XCB_CURRENT_TIME );
63
53
}
64
54
65
55
static void handleMotionNotify (xcb_generic_event_t * ev ) {
66
56
UNUSED (ev );
67
57
xcb_query_pointer_cookie_t coord = xcb_query_pointer (dpy , scre -> root );
68
58
xcb_query_pointer_reply_t * poin = xcb_query_pointer_reply (dpy , coord , 0 );
69
- uint32_t val [2 ] = {1 , 3 };
70
- if ((values [2 ] == val [0 ]) && (win != 0 )) {
59
+ if ((values [2 ] == (uint32_t )(1 )) && (win != 0 )) {
71
60
xcb_get_geometry_cookie_t geom_now = xcb_get_geometry (dpy , win );
72
61
xcb_get_geometry_reply_t * geom = xcb_get_geometry_reply (dpy , geom_now , NULL );
73
- values [0 ] = ((poin -> root_x + geom -> width + (2 * BORDER_WIDTH )) > scre -> width_in_pixels ) ?
74
- (scre -> width_in_pixels - geom -> width - (2 * BORDER_WIDTH )) : poin -> root_x ;
75
- values [1 ] = ((poin -> root_y + geom -> height + (2 * BORDER_WIDTH )) > scre -> height_in_pixels ) ?
76
- (scre -> height_in_pixels - geom -> height - (2 * BORDER_WIDTH )) : poin -> root_y ;
62
+ uint16_t geom_x = geom -> width + (2 * BORDER_WIDTH );
63
+ uint16_t geom_y = geom -> height + (2 * BORDER_WIDTH );
64
+ values [0 ] = ((poin -> root_x + geom_x ) > scre -> width_in_pixels ) ?
65
+ (scre -> width_in_pixels - geom_x ) : poin -> root_x ;
66
+ values [1 ] = ((poin -> root_y + geom_y ) > scre -> height_in_pixels ) ?
67
+ (scre -> height_in_pixels - geom_y ) : poin -> root_y ;
77
68
xcb_configure_window (dpy , win , XCB_CONFIG_WINDOW_X
78
69
| XCB_CONFIG_WINDOW_Y , values );
79
- } else if ((values [2 ] == val [ 1 ] ) && (win != 0 )) {
70
+ } else if ((values [2 ] == ( uint32_t )( 3 ) ) && (win != 0 )) {
80
71
xcb_get_geometry_cookie_t geom_now = xcb_get_geometry (dpy , win );
81
72
xcb_get_geometry_reply_t * geom = xcb_get_geometry_reply (dpy , geom_now , NULL );
82
73
if (!((poin -> root_x <= geom -> x ) || (poin -> root_y <= geom -> y ))) {
83
74
values [0 ] = poin -> root_x - geom -> x - BORDER_WIDTH ;
84
75
values [1 ] = poin -> root_y - geom -> y - BORDER_WIDTH ;
85
- if ((values [0 ] >= min_x ) && (values [1 ] >= min_y )) {
76
+ if ((values [0 ] >= (uint32_t )(WINDOW_MIN_X )) &&
77
+ (values [1 ] >= (uint32_t )(WINDOW_MIN_Y ))) {
86
78
xcb_configure_window (dpy , win , XCB_CONFIG_WINDOW_WIDTH
87
79
| XCB_CONFIG_WINDOW_HEIGHT , values );
88
80
}
@@ -218,14 +210,12 @@ static int eventHandler(void) {
218
210
}
219
211
220
212
static void setup (void ) {
221
- /* subscribe to events */
222
213
values [0 ] = XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT
223
214
| XCB_EVENT_MASK_STRUCTURE_NOTIFY
224
215
| XCB_EVENT_MASK_SUBSTRUCTURE_NOTIFY
225
216
| XCB_EVENT_MASK_PROPERTY_CHANGE ;
226
217
xcb_change_window_attributes_checked (dpy , scre -> root ,
227
218
XCB_CW_EVENT_MASK , values );
228
- /* grab keys */
229
219
xcb_ungrab_key (dpy , XCB_GRAB_ANY , scre -> root , XCB_MOD_MASK_ANY );
230
220
int key_table_size = sizeof (keys ) / sizeof (* keys );
231
221
for (int i = 0 ; i < key_table_size ; ++ i ) {
@@ -274,7 +264,7 @@ static int strcmp_c(char * str1, char * str2) {
274
264
int main (int argc , char * argv []) {
275
265
int ret = 0 ;
276
266
if ((argc == 2 ) && (strcmp_c ("-v" , argv [1 ]) == 0 )) {
277
- ret = die ("xwm-0.1.3 , © 2020 Michael Czigler, see LICENSE for details\n" );
267
+ ret = die ("xwm-0.1.4 , © 2020 Michael Czigler, see LICENSE for details\n" );
278
268
}
279
269
if ((ret == 0 ) && (argc != 1 )) {
280
270
ret = die ("usage: xwm [-v]\n" );
@@ -295,4 +285,3 @@ int main(int argc, char * argv[]) {
295
285
}
296
286
return ret ;
297
287
}
298
-
0 commit comments