mirror of
https://github.com/davatorium/rofi.git
synced 2024-11-25 13:55:34 -05:00
Add border_width to window coordinates (#1969)
* Update xcb.c window coors relative to border_width. * Add border_width to window coordinates Normalize the geometry between reparenting and non- window managers. * remove WM_ROOT_WINDOW_OFFSET * remove WM_ROOT_WINDOW_OFFSET * only translate reparent
This commit is contained in:
parent
9b6e70b365
commit
5b9939b287
2 changed files with 30 additions and 33 deletions
|
@ -209,8 +209,6 @@ typedef enum {
|
||||||
WM_DO_NOT_CHANGE_CURRENT_DESKTOP = 1,
|
WM_DO_NOT_CHANGE_CURRENT_DESKTOP = 1,
|
||||||
/** PANGO WORKSPACE NAMES */
|
/** PANGO WORKSPACE NAMES */
|
||||||
WM_PANGO_WORKSPACE_NAMES = 2,
|
WM_PANGO_WORKSPACE_NAMES = 2,
|
||||||
/** Root window offset (for bspwm) */
|
|
||||||
WM_ROOT_WINDOW_OFFSET = 4,
|
|
||||||
} WindowManagerQuirk;
|
} WindowManagerQuirk;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
45
source/xcb.c
45
source/xcb.c
|
@ -881,37 +881,38 @@ static int monitor_active_from_id_focused(int mon_id, workarea *mon) {
|
||||||
free(tree_reply);
|
free(tree_reply);
|
||||||
return retv;
|
return retv;
|
||||||
}
|
}
|
||||||
|
if (tree_reply->parent != r->root) {
|
||||||
xcb_translate_coordinates_cookie_t ct = xcb_translate_coordinates(
|
xcb_translate_coordinates_cookie_t ct = xcb_translate_coordinates(
|
||||||
xcb->connection, tree_reply->parent, r->root, r->x, r->y);
|
xcb->connection, tree_reply->parent, r->root, r->x, r->y);
|
||||||
xcb_translate_coordinates_reply_t *t =
|
xcb_translate_coordinates_reply_t *t =
|
||||||
xcb_translate_coordinates_reply(xcb->connection, ct, NULL);
|
xcb_translate_coordinates_reply(xcb->connection, ct, NULL);
|
||||||
if (t) {
|
if (t) {
|
||||||
if (mon_id == -2) {
|
r->x = t->dst_x;
|
||||||
// place the menu above the window
|
r->y = t->dst_y;
|
||||||
// if some window is focused, place menu above window, else fall
|
|
||||||
// back to selected monitor.
|
|
||||||
mon->x = t->dst_x - r->x;
|
|
||||||
mon->y = t->dst_y - r->y;
|
|
||||||
mon->w = r->width;
|
|
||||||
mon->h = r->height;
|
|
||||||
retv = TRUE;
|
|
||||||
if ((current_window_manager & WM_ROOT_WINDOW_OFFSET) ==
|
|
||||||
WM_ROOT_WINDOW_OFFSET) {
|
|
||||||
mon->x += r->x;
|
|
||||||
mon->y += r->y;
|
|
||||||
}
|
|
||||||
g_debug("mon pos: %d %d %d-%d", mon->x, mon->y, mon->w, mon->h);
|
|
||||||
} else if (mon_id == -4) {
|
|
||||||
g_debug("Find monitor at location: %d %d", t->dst_x, t->dst_y);
|
|
||||||
monitor_dimensions(t->dst_x, t->dst_y, mon);
|
|
||||||
g_debug("Monitor found pos: %d %d %d-%d", mon->x, mon->y, mon->w, mon->h);
|
|
||||||
retv = TRUE;
|
|
||||||
}
|
|
||||||
free(t);
|
free(t);
|
||||||
} else {
|
} else {
|
||||||
g_debug("Failed to get translate position of active window, falling back "
|
g_debug("Failed to get translate position of active window, falling back "
|
||||||
"to mouse location (-5).");
|
"to mouse location (-5).");
|
||||||
|
free(r);
|
||||||
|
free(tree_reply);
|
||||||
|
return retv;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
if (mon_id == -2) {
|
||||||
|
// place the menu above the window
|
||||||
|
// if some window is focused, place menu above window, else fall
|
||||||
|
// back to selected monitor.
|
||||||
|
mon->x = r->x + r->border_width;
|
||||||
|
mon->y = r->y + r->border_width;
|
||||||
|
mon->w = r->width;
|
||||||
|
mon->h = r->height;
|
||||||
|
retv = TRUE;
|
||||||
|
} else if (mon_id == -4) {
|
||||||
|
g_debug("Find monitor at location: %d %d", r->x, r->y);
|
||||||
|
monitor_dimensions(r->x, r->y, mon);
|
||||||
|
retv = TRUE;
|
||||||
|
}
|
||||||
|
g_debug("mon pos: %d %d %d-%d", mon->x, mon->y, mon->w, mon->h);
|
||||||
free(r);
|
free(r);
|
||||||
free(tree_reply);
|
free(tree_reply);
|
||||||
return retv;
|
return retv;
|
||||||
|
@ -1642,8 +1643,6 @@ static void x11_helper_discover_window_manager(void) {
|
||||||
if (g_strcmp0(str, "i3") == 0) {
|
if (g_strcmp0(str, "i3") == 0) {
|
||||||
current_window_manager =
|
current_window_manager =
|
||||||
WM_DO_NOT_CHANGE_CURRENT_DESKTOP | WM_PANGO_WORKSPACE_NAMES;
|
WM_DO_NOT_CHANGE_CURRENT_DESKTOP | WM_PANGO_WORKSPACE_NAMES;
|
||||||
} else if (g_strcmp0(str, "bspwm") == 0) {
|
|
||||||
current_window_manager = WM_ROOT_WINDOW_OFFSET;
|
|
||||||
}
|
}
|
||||||
g_free(str);
|
g_free(str);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue