diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/xfns.c | 7 | ||||
| -rw-r--r-- | src/xterm.c | 16 |
2 files changed, 15 insertions, 8 deletions
diff --git a/src/xfns.c b/src/xfns.c index 9d90b7ba35f..313ac52f12a 100644 --- a/src/xfns.c +++ b/src/xfns.c | |||
| @@ -450,10 +450,11 @@ x_real_pos_and_offsets (struct frame *f, | |||
| 450 | if (prop) | 450 | if (prop) |
| 451 | { | 451 | { |
| 452 | if (prop->type == target_type | 452 | if (prop->type == target_type |
| 453 | && xcb_get_property_value_length (prop) == 4 | 453 | && prop->format == 32 |
| 454 | && prop->format == 32) | 454 | && (xcb_get_property_value_length (prop) |
| 455 | == 4 * sizeof (int32_t))) | ||
| 455 | { | 456 | { |
| 456 | long *fe = xcb_get_property_value (prop); | 457 | int32_t *fe = xcb_get_property_value (prop); |
| 457 | 458 | ||
| 458 | outer_x = -fe[0]; | 459 | outer_x = -fe[0]; |
| 459 | outer_y = -fe[2]; | 460 | outer_y = -fe[2]; |
diff --git a/src/xterm.c b/src/xterm.c index 36a914c8559..acb6566d51d 100644 --- a/src/xterm.c +++ b/src/xterm.c | |||
| @@ -10101,17 +10101,19 @@ get_current_wm_state (struct frame *f, | |||
| 10101 | bool is_hidden = false; | 10101 | bool is_hidden = false; |
| 10102 | struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (f); | 10102 | struct x_display_info *dpyinfo = FRAME_DISPLAY_INFO (f); |
| 10103 | long max_len = 65536; | 10103 | long max_len = 65536; |
| 10104 | unsigned char *tmp_data = NULL; | ||
| 10105 | Atom target_type = XA_ATOM; | 10104 | Atom target_type = XA_ATOM; |
| 10106 | /* If XCB is available, we can avoid three XSync calls. */ | 10105 | /* If XCB is available, we can avoid three XSync calls. */ |
| 10107 | #ifdef USE_XCB | 10106 | #ifdef USE_XCB |
| 10108 | xcb_get_property_cookie_t prop_cookie; | 10107 | xcb_get_property_cookie_t prop_cookie; |
| 10109 | xcb_get_property_reply_t *prop; | 10108 | xcb_get_property_reply_t *prop; |
| 10109 | xcb_atom_t *reply_data; | ||
| 10110 | #else | 10110 | #else |
| 10111 | Display *dpy = FRAME_X_DISPLAY (f); | 10111 | Display *dpy = FRAME_X_DISPLAY (f); |
| 10112 | unsigned long bytes_remaining; | 10112 | unsigned long bytes_remaining; |
| 10113 | int rc, actual_format; | 10113 | int rc, actual_format; |
| 10114 | Atom actual_type; | 10114 | Atom actual_type; |
| 10115 | unsigned char *tmp_data = NULL; | ||
| 10116 | Atom *reply_data; | ||
| 10115 | #endif | 10117 | #endif |
| 10116 | 10118 | ||
| 10117 | *sticky = false; | 10119 | *sticky = false; |
| @@ -10126,8 +10128,10 @@ get_current_wm_state (struct frame *f, | |||
| 10126 | prop = xcb_get_property_reply (dpyinfo->xcb_connection, prop_cookie, NULL); | 10128 | prop = xcb_get_property_reply (dpyinfo->xcb_connection, prop_cookie, NULL); |
| 10127 | if (prop && prop->type == target_type) | 10129 | if (prop && prop->type == target_type) |
| 10128 | { | 10130 | { |
| 10129 | tmp_data = xcb_get_property_value (prop); | 10131 | int actual_bytes = xcb_get_property_value_length (prop); |
| 10130 | actual_size = xcb_get_property_value_length (prop); | 10132 | eassume (0 <= actual_bytes); |
| 10133 | actual_size = actual_bytes / sizeof *reply_data; | ||
| 10134 | reply_data = xcb_get_property_value (prop); | ||
| 10131 | } | 10135 | } |
| 10132 | else | 10136 | else |
| 10133 | { | 10137 | { |
| @@ -10141,7 +10145,9 @@ get_current_wm_state (struct frame *f, | |||
| 10141 | &actual_type, &actual_format, &actual_size, | 10145 | &actual_type, &actual_format, &actual_size, |
| 10142 | &bytes_remaining, &tmp_data); | 10146 | &bytes_remaining, &tmp_data); |
| 10143 | 10147 | ||
| 10144 | if (rc != Success || actual_type != target_type || x_had_errors_p (dpy)) | 10148 | if (rc == Success && actual_type == target_type && ! x_had_errors_p (dpy)) |
| 10149 | reply_data = (Atom *) tmp_data; | ||
| 10150 | else | ||
| 10145 | { | 10151 | { |
| 10146 | actual_size = 0; | 10152 | actual_size = 0; |
| 10147 | is_hidden = FRAME_ICONIFIED_P (f); | 10153 | is_hidden = FRAME_ICONIFIED_P (f); |
| @@ -10152,7 +10158,7 @@ get_current_wm_state (struct frame *f, | |||
| 10152 | 10158 | ||
| 10153 | for (i = 0; i < actual_size; ++i) | 10159 | for (i = 0; i < actual_size; ++i) |
| 10154 | { | 10160 | { |
| 10155 | Atom a = ((Atom*)tmp_data)[i]; | 10161 | Atom a = reply_data[i]; |
| 10156 | if (a == dpyinfo->Xatom_net_wm_state_hidden) | 10162 | if (a == dpyinfo->Xatom_net_wm_state_hidden) |
| 10157 | is_hidden = true; | 10163 | is_hidden = true; |
| 10158 | else if (a == dpyinfo->Xatom_net_wm_state_maximized_horz) | 10164 | else if (a == dpyinfo->Xatom_net_wm_state_maximized_horz) |