You are not logged in.
As you can see, the "active_border_color" is drawn below the other borders.
This happens when moving a window to or from a different monitor.
Selecting the window obviously changes the border color and draws it above the other borders as expected.
I'm afraid I'd need a more precise report.
Please post the output of:
bspc list_monitors; bspc list_history
Before and after sending the window to the other monitor.
Your responsiveness to bug reports and openness to feature requests should really be commended.
You're welcome.
The only way I'm able to "disconnect" the monitor is by killing the optirun + screenclone process from the script I use. I guess the end effect should be the same.
Anyway, the window on the disconnected monitor becomes visible on screen, but as though it's floating. It's drawn above everything on every desktop!
It should be fixed.
Also, as you can see, each time the monitor is "re-added" a new Desktop0X is created, but I suppose that's the intended behavior.
Yes this is expected: I'm not removing empty desktop when merging monitors because, when a desktop is removed, the rules referencing that desktop are removed too.
Upon further testing I've noticed that dmenu won't appear on an empty desktop when there is a second monitor.
I'll try to put my hands on a second monitor to investigate this.
Offline
Please post the output of:
bspc list_monitors; bspc list_history
Before and after sending the window to the other monitor.
Here's before and after. Let me know if I can provide any other information.
It should be fixed.
Confirmed; it's fixed.
Upon further testing I've noticed that dmenu won't appear on an empty desktop when there is a second monitor.
With the latest build it appears the situation is a bit different (or maybe I missed something last time).
dmenu appears on the monitor that has the mouse pointer unless the focused desktop contains a window, in which case it'll open on the monitor of that desktop. Is this how dmenu is supposed to work?
I use linux and I dont understand nothing in this post.
Offline
Is this how dmenu is supposed to work?
(dmenu is not managed by bspwm, so...)
... Yes it seems : here's the relevant comments from dmenu.c:
/* find top-level window containing current input focus */
/* find xinerama screen with which the window intersects most */
/* no focused window is on screen, so use pointer location instead */
Offline
Supplantr wrote:Is this how dmenu is supposed to work?
(dmenu is not managed by bspwm, so...)
... Yes it seems : here's the relevant comments from dmenu.c:
/* find top-level window containing current input focus */ /* find xinerama screen with which the window intersects most */ /* no focused window is on screen, so use pointer location instead */
One possible workaround would be to use the following wrapper:
#!/bin/sh
set - $(bspc list_monitors --quiet | grep '#$' | cut -d ' ' -f 2 | tr -c '0-9' ' ')
dmenu -w $1 -x $3 -y $4
(Which requires a patched version of dmenu.)
Last edited by bloom (2013-06-01 12:00:33)
Offline
Offline
(dmenu is not managed by bspwm, so...)
... Yes it seems : here's the relevant comments from dmenu.c
The comments reflect exactly what I was describing. How embarrassing. I'll make sure to delve a little deeper next time.
One possible workaround would be to use the following wrapper
Thanks for this, I'll check it out.
Should be fixed.
It's fixed, thanks!
---
I was going to suggest adding a remove desktop command, but you're one step ahead. It works as expected, thanks.
And a matter of pedantry: I was wondering why the new swap command needs the --swap-focus flag when that's the default behavior.
Also, is the intended usage of biggest something like:
xdo activate $(bspc biggest) && bspc swap
I use linux and I dont understand nothing in this post.
Offline
And a matter of pedantry: I was wondering why the new swap command needs the --swap-focus flag when that's the default behavior.
Fixed, thanks.
Also, is the intended usage of biggest something like:
xdo activate $(bspc biggest) && bspc swap
Yes, and also:
xdo activate $(bspc biggest)
---
I've added a send_desktop_to message.
Offline
I've added a send_desktop_to message.
I've experienced some issues with this already but I'll have to get back to you after establishing a way to reproduce them.
---
I've discovered a few issues involving the pointer. From here on out I'll refer to the initial monitor as M1 and the additional, external monitor as M2 for the sake of brevity.
focus_follows_pointer doesn't work properly on M1 when M2 is present.
I'm only able to focus with the pointer the windows on M1 that are closest to the top of the monitor (M2 is above M1), and only if the pointer enters a small area near the top of the window.
Moving the pointer from M1 to a window on M2 focuses that window as expected. Moving the pointer back to M1 seems to work if it's moved slowly, but again it'll only focus the windows closest to the top of the monitor.
Focus follows the pointer as intended on M2.
Unrelated to focus_follows_pointer, there's this: if a window is opened on M1, and the pointer is on the window, when switching focus to M2 (and there is not a window open on M2), the window on M1 still receives input. The reverse scenario is also true. This only happens if the mouse pointer is on the "active" but unfocused window.
---
Finally, unrelated to the pointer altogether, I've encountered another peculiarity:
Send a presel command, but don't open a new window
Focus another window, and the presel_border_color is drawn on this window
Change focus again or send a ratio command and the border returns to normal
I use linux and I dont understand nothing in this post.
Offline
bloom wrote:I've added a send_desktop_to message.
I've experienced some issues with this already but I'll have to get back to you after establishing a way to reproduce them.
I've just fixed a bug related to this message, so the issues might not exist anymore.
focus_follows_pointer doesn't work properly on M1 when M2 is present.
I'm only able to focus with the pointer the windows on M1 that are closest to the top of the monitor (M2 is above M1), and only if the pointer enters a small area near the top of the window.
Moving the pointer from M1 to a window on M2 focuses that window as expected. Moving the pointer back to M1 seems to work if it's moved slowly, but again it'll only focus the windows closest to the top of the monitor.
Focus follows the pointer as intended on M2.
Might be fixed.
Unrelated to focus_follows_pointer, there's this: if a window is opened on M1, and the pointer is on the window, when switching focus to M2 (and there is not a window open on M2), the window on M1 still receives input. The reverse scenario is also true. This only happens if the mouse pointer is on the "active" but unfocused window.
And it happens only when focus_follows_pointer is enabled?
Finally, unrelated to the pointer altogether, I've encountered another peculiarity:
Send a presel command, but don't open a new window
Focus another window, and the presel_border_color is drawn on this window
Change focus again or send a ratio command and the border returns to normal
Fixed.
Offline
I've just fixed a bug related to this message, so the issues might not exist anymore.
I think "hiding" the desktop on send_desktop_to fixes what I experienced.
However, it now seems to duplicate desktops. Here is bspc list_monitors's output before and after sending desktop H to monitor LVDS1.
Might be fixed.
The problems with focus_follows_pointer still exist.
And it happens only when focus_follows_pointer is enabled?
Sorry for not being clear. This happens regardless of focus_follows_pointer's setting.
I use linux and I dont understand nothing in this post.
Offline
However, it now seems to duplicate desktops.
Hopefully resolved.
The problems with focus_follows_pointer still exist.
Could you:
Post the output of bspc list_monitors for that scenario,
Apply the following patch to bspwm-git's PKGBUILD: https://gist.github.com/baskerville/5687612 so that debug message appear on bspwm's standard output,
Redirect bspwm's standard output to a file and post the it here?
Offline
Unrelated to focus_follows_pointer, there's this: if a window is opened on M1, and the pointer is on the window, when switching focus to M2 (and there is not a window open on M2), the window on M1 still receives input. The reverse scenario is also true. This only happens if the mouse pointer is on the "active" but unfocused window.
Could you post the aforementioned informations for that scenario too?
Offline
Hopefully resolved.
This is fixed, thanks. Would it be possible to add a --follow flag to send_desktop_to or would that reintroduce the issue that was solved by hiding the desktop on send?
The problems with focus_follows_pointer still exist.
Actually, this is working with the latest git build.
Could you post the aforementioned informations for that scenario too?
I don't know if I was doing something wrong, but the file to which I was writing standard out seemed to only update after some amount of time.
Anyway, this is the debug output and this is the list_monitors output.
This is what I did, so hopefully you can follow along in the debug output:
Add second monitor; mouse pointer is moved to this monitor
Open terminal (id = E00009)
Enable focus_follows_pointer (because the motion recorder events didn't appear to be reported without this enabled)
Select other monitor
Move pointer to window on first monitor, it's obviously focused (I'm not sure why I didn't do this first)
Select other monitor again
Type and the terminal receives input
Select first monitor
Close terminal
It might be helpful to know that if a window is opened and then closed after focusing the other monitor (step 6) and before typing (step 7), the window on the first monitor won't receive input.
Last edited by Supplantr (2013-06-04 01:26:13)
I use linux and I dont understand nothing in this post.
Offline
Would it be possible to add a --follow flag?
Yes, done.
Select other monitor
Type and the terminal receives input
Unfortunately it seems to be related to how X handles input events.
After running the following program:
#include <stdlib.h>
#include <xcb/xcb.h>
int main(void)
{
xcb_connection_t *dpy = xcb_connect(NULL, NULL);
xcb_set_input_focus(dpy, XCB_INPUT_FOCUS_POINTER_ROOT, XCB_INPUT_FOCUS_POINTER_ROOT, XCB_CURRENT_TIME);
xcb_flush(dpy);
xcb_disconnect(dpy);
return EXIT_SUCCESS;
}
The key press events are transmitted to whatever window is under the pointer.
(Setting the third argument of xcb_set_input_focus to XCB_NONE fixes it but also prevents clients to receive keyboard events.)
The only workaround I can think of would be a pointer_follows_focus setting...
Last edited by bloom (2013-06-04 14:50:31)
Offline
Yes, done.
I've noticed that when using send_desktop_to without the --follow flag the newly selected desktop isn't reported as selected. Maybe a put_status call is needed after moving the desktop?
As for the --follow flag, unfortunately there are some issues. It seems like the desktop is selected on the monitor to which it is moved, but the windows aren't drawn on this monitor. Selecting the desktop again then "moves" the windows to the correct monitor.
Unfortunately it seems to be related to how X handles input events.
I guess if it's a limitation of X there isn't much that can be done.
The only workaround I can think of would be a pointer_follows_focus setting...
I think this could be useful, especially if the pointer is centered on selected monitors, i.e. so it doesn't have to be moved across the entire screen from one monitor to another.
I use linux and I dont understand nothing in this post.
Offline
I've noticed that when using send_desktop_to without the --follow flag the newly selected desktop isn't reported as selected. Maybe a put_status call is needed after moving the desktop?
As for the --follow flag, unfortunately there are some issues. It seems like the desktop is selected on the monitor to which it is moved, but the windows aren't drawn on this monitor. Selecting the desktop again then "moves" the windows to the correct monitor.
Oh boy... that's why I prefer to be able to test before pushing
Should be fixed™.
bloom wrote:The only workaround I can think of would be a pointer_follows_focus setting...
I think this could be useful, especially if the pointer is centered on selected monitors, i.e. so it doesn't have to be moved across the entire screen from one monitor to another.
So, pointer_follows_monitor would be sufficient?
Offline
As for the --follow flag, unfortunately there are some issues. It seems like the desktop is selected on the monitor to which it is moved, but the windows aren't drawn on this monitor. Selecting the desktop again then "moves" the windows to the correct monitor.
This is fixed.
I've noticed that when using send_desktop_to without the --follow flag the newly selected desktop isn't reported as selected. Maybe a put_status call is needed after moving the desktop?
This is still an issue. It only happens when not using the --follow flag. I think it's as simple as not calling put_status after moving the desktop because using bspc put_status or selecting a desktop/monitor corrects the status.
So, pointer_follows_monitor would be sufficient?
At least for me, I think this would suffice. The only graphical application I use on a regular basis is chromium, so the pointer is usually kept on its window. I suppose if someone used many graphical apps it might be handy to move the pointer on focus, but it'd probably be just as easy to enable focus_follows_pointer and move the pointer manually.
I use linux and I dont understand nothing in this post.
Offline
Supplantr wrote:I've noticed that when using send_desktop_to without the --follow flag the newly selected desktop isn't reported as selected. Maybe a put_status call is needed after moving the desktop?
This is still an issue. It only happens when not using the --follow flag. I think it's as simple as not calling put_status after moving the desktop because using bspc put_status or selecting a desktop/monitor corrects the status.
In fact, put_status was called by both select_monitor and select_desktop and the function was actually called twice with --follow and once without.
I hope to have fixed this.
I've added a new setting: pointer_follows_monitor.
Last edited by bloom (2013-06-05 19:22:40)
Offline
I hope to have fixed this.
Unfortunately, it appears the issue has worsened. The status still doesn't update, and now, after selecting the desktop that was just moved, the windows on that desktop don't appear until another window is opened.
I've added a new setting: pointer_follows_monitor.
Thanks, it works as expected.
---
On an unrelated note, I was wondering if this is the intended behavior:
V m 0.50
m URxvt E0020F 39 4 484x292+718+1418 ----- *
H m 0.50
m URxvt E0021D 40 4 484x292+718+1418 -----
m URxvt E0022B 41 4 484x292+718+1418 -----
V m 0.50
m URxvt E0020F 39 4 484x292+718+1418 f---- *
H m 0.50
m URxvt E0021D 40 4 484x292+718+1418 -----
m URxvt E0022B 41 4 484x292+718+1418 -----
V m 0.50
m URxvt E0020F 39 4 484x292+718+1418 ----- *
V m 0.50
m URxvt E0021D 40 4 484x292+718+1418 -----
m URxvt E0022B 41 4 484x292+718+1418 -----
After floating and un-floating E0020F, the manual split cycles between H and V. Is this supposed to happen?
I use linux and I dont understand nothing in this post.
Offline
Unfortunately, it appears the issue has worsened. The status still doesn't update, and now, after selecting the desktop that was just moved, the windows on that desktop don't appear until another window is opened.
Worsened for --follow?
Please post a before/after list_monitors, cat "$PANEL_FIFO" (kill your panel first) and the debug messages.
After floating and un-floating E0020F, the manual split cycles between H and V. Is this supposed to happen?
No, fixed, thanks.
Offline
Offline
Worsened for --follow?
Sorry, I meant without using --follow.
The issue I noted might be more pervasive than I originally thought (or maybe this is unrelated). Moving windows between desktops doesn't function properly now. For instance, if a window is moved from one desktop to another that is in tiling mode, the moved window will appear on top of the window already on that desktop until the layout is cycled to monocle and back to tiling, or if the recently moved window is floated and then un-floated. This also happens when the desktop is in monocle mode.
after selecting the desktop that was just moved, the windows on that desktop don't appear until another window is opened.
Actually, it seems as though the above issue has become: when a desktop is moved with send_desktop_to without --follow, the windows are still drawn on the previous monitor until a new window is opened (and they're drawn on top of windows of other desktops!), but the desktop is reported as being on the monitor to which it was moved.
Please post a before/after list_monitors, cat "$PANEL_FIFO" (kill your panel first) and the debug messages.
I can still do this if you need me to.
Last edited by Supplantr (2013-06-06 19:33:03)
I use linux and I dont understand nothing in this post.
Offline
Offline
That regression is fixed and send_desktop_to is working fine for me now.
Everything that I previously reported seems to be fixed.
Thanks for your diligence.
I'm glad I could help!
---
However, I would like to point out that when pointer_follows_monitor is enabled, manually moving the pointer between monitors causes it to jump to the center, which is off-putting. This is the intended behavior, though, so would it be possible to only center the pointer if the monitor is focused via a bspc message?
While testing, I randomly came across another situation in which floating and un-floating a window changes the tiling layout (albeit, not permanently). Here is the relevant list_desktops information for before and after floating. The layout returns to its previous state when the window is un-floated.
EDIT: I just realized there was some automatic tiling in the above situation, so the behavior was probably expected. I'm too eager to report issues.
Last edited by Supplantr (2013-06-07 09:23:47)
I use linux and I dont understand nothing in this post.
Offline
However, I would like to point out that when pointer_follows_monitor is enabled, manually moving the pointer between monitors causes it to jump to the center, which is off-putting. This is the intended behavior, though, so would it be possible to only center the pointer if the monitor is focused via a bspc message?
Implemented.
I just realized there was some automatic tiling in the above situation, so the behavior was probably expected.
Yes it is.
Offline