Merge pull request #3386 from orestisf1993/click-event

Fix "relative_x" and "width" of click events
This commit is contained in:
Ingo Bürk 2018-09-16 15:48:36 +02:00 committed by GitHub
commit 2b898f4c90
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 5 additions and 8 deletions

View File

@ -500,13 +500,12 @@ void handle_button(xcb_button_press_event_t *event) {
/* If the child asked for click events,
* check if a status block has been clicked. */
int tray_width = get_tray_width(walk->trayclients);
int block_x = 0, last_block_x;
int last_block_x = 0;
int offset = walk->rect.w - walk->statusline_width - tray_width - logical_px((tray_width > 0) * sb_hoff_px);
int32_t statusline_x = x - offset;
if (statusline_x >= 0 && statusline_x < walk->statusline_width) {
struct status_block *block;
int sep_offset_remainder = 0;
TAILQ_FOREACH(block, &statusline_head, blocks) {
i3String *text = block->full_text;
@ -519,16 +518,14 @@ void handle_button(xcb_button_press_event_t *event) {
if (i3string_get_num_bytes(text) == 0)
continue;
last_block_x = block_x;
block_x += render->width + render->x_offset + render->x_append + get_sep_offset(block) + sep_offset_remainder;
if (statusline_x <= block_x && statusline_x >= last_block_x) {
const int relative_x = statusline_x - last_block_x;
if (relative_x >= 0 && (uint32_t)relative_x <= render->width) {
send_block_clicked(event->detail, block->name, block->instance,
event->root_x, event->root_y, statusline_x - last_block_x, event->event_y, block_x - last_block_x, bar_height);
event->root_x, event->root_y, relative_x, event->event_y, render->width, bar_height);
return;
}
sep_offset_remainder = block->sep_block_width - get_sep_offset(block);
last_block_x += render->width + render->x_append + render->x_offset + block->sep_block_width;
}
}
}