@@ -104,6 +104,35 @@ static void setFocus(xcb_drawable_t window) {
104
104
}
105
105
}
106
106
107
+ static void setBorderColor (xcb_window_t window , int focus ) {
108
+ if ((BORDER_WIDTH > 0 ) && (scre -> root != window ) && (0 != window )) {
109
+ uint32_t vals [1 ];
110
+ vals [0 ] = focus ? BORDER_COLOR_FOCUSED : BORDER_COLOR_UNFOCUSED ;
111
+ xcb_change_window_attributes (dpy , window , XCB_CW_BORDER_PIXEL , vals );
112
+ xcb_flush (dpy );
113
+ }
114
+ }
115
+
116
+ static void setBorderWidth (xcb_window_t window ) {
117
+ if ((BORDER_WIDTH > 0 ) && (scre -> root != window ) && (0 != window )) {
118
+ uint32_t vals [2 ];
119
+ vals [0 ] = BORDER_WIDTH ;
120
+ xcb_configure_window (dpy , window , XCB_CONFIG_WINDOW_BORDER_WIDTH , vals );
121
+ xcb_flush (dpy );
122
+ }
123
+ }
124
+
125
+ static void setWindowDimensions (xcb_window_t window ) {
126
+ if ((scre -> root != window ) && (0 != window )) {
127
+ uint32_t vals [2 ];
128
+ vals [0 ] = WINDOW_WIDTH ;
129
+ vals [1 ] = WINDOW_HEIGHT ;
130
+ xcb_configure_window (dpy , window , XCB_CONFIG_WINDOW_WIDTH |
131
+ XCB_CONFIG_WINDOW_HEIGHT , vals );
132
+ xcb_flush (dpy );
133
+ }
134
+ }
135
+
107
136
static void handleKeyPress (xcb_generic_event_t * ev ) {
108
137
xcb_key_press_event_t * e = ( xcb_key_press_event_t * ) ev ;
109
138
xcb_keysym_t keysym = xcb_get_keysym (e -> detail );
@@ -119,6 +148,12 @@ static void handleKeyPress(xcb_generic_event_t * ev) {
119
148
static void handleEnterNotify (xcb_generic_event_t * ev ) {
120
149
xcb_enter_notify_event_t * e = ( xcb_enter_notify_event_t * ) ev ;
121
150
setFocus (e -> event );
151
+ setBorderColor (e -> event , 1 );
152
+ }
153
+
154
+ static void handleLeaveNotify (xcb_generic_event_t * ev ) {
155
+ xcb_leave_notify_event_t * e = ( xcb_leave_notify_event_t * ) ev ;
156
+ setBorderColor (e -> event , 0 );
122
157
}
123
158
124
159
static void handleButtonRelease (xcb_generic_event_t * ev ) {
@@ -137,15 +172,10 @@ static void handleDestroyNotify(xcb_generic_event_t * ev) {
137
172
static void handleMapRequest (xcb_generic_event_t * ev ) {
138
173
xcb_map_request_event_t * e = (xcb_map_request_event_t * ) ev ;
139
174
xcb_map_window (dpy , e -> window );
140
- if ((scre -> root != e -> window ) && (0 != e -> window )) {
141
- uint32_t vals [2 ];
142
- vals [0 ] = WINDOW_WIDTH ;
143
- vals [1 ] = WINDOW_HEIGHT ;
144
- xcb_configure_window (dpy , e -> window , XCB_CONFIG_WINDOW_WIDTH |
145
- XCB_CONFIG_WINDOW_HEIGHT , vals );
146
- xcb_flush (dpy );
147
- }
148
- values [0 ] = XCB_EVENT_MASK_ENTER_WINDOW ;
175
+ setWindowDimensions (e -> window );
176
+ setBorderWidth (e -> window );
177
+ setBorderColor (e -> window , 0 );
178
+ values [0 ] = XCB_EVENT_MASK_ENTER_WINDOW | XCB_EVENT_MASK_LEAVE_WINDOW ;
149
179
xcb_change_window_attributes_checked (dpy , e -> window ,
150
180
XCB_CW_EVENT_MASK , values );
151
181
setFocus (e -> window );
@@ -221,7 +251,7 @@ static int strcmp_c(char * str1, char * str2) {
221
251
int main (int argc , char * argv []) {
222
252
int ret = 0 ;
223
253
if ((argc == 2 ) && (strcmp_c ("-v" , argv [1 ]) == 0 )) {
224
- ret = die ("xwm-0.0.5 , © 2020 Michael Czigler, see LICENSE for details\n" );
254
+ ret = die ("xwm-0.0.6 , © 2020 Michael Czigler, see LICENSE for details\n" );
225
255
}
226
256
if ((ret == 0 ) && (argc != 1 )) {
227
257
ret = die ("usage: xwm [-v]\n" );
0 commit comments