-
Notifications
You must be signed in to change notification settings - Fork 24
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Child frame not resizing to fit candidates #2
Comments
I'm trying to debug this, but so far no luck. Some additional observations:
|
Switch anothet WM, and try again, maybe gnome problem |
I tried your suggestion inside a VM. I can't reproduce this on KDE Neon (KDE/KWin). I also tried Fedora Workstation (GNOME/Mutter), both the Wayland and the X.Org session. I can reproduce it on Fedora. So, something GNOME specific. |
Same here on GNOME 3.28.2, Emacs 26.1. |
I'm also seeing this problem. @tumashu GNOME is the most popular Linux DE. Shouldn't we do something? If it's the problem in how child frame is implemented, could you file an Emacs bug report with a reproduction scenario that our windowing subsystem devs can understand? |
Some questions to help debug this problem with Emacs developers:
|
1,2: This is Gnome only Mutter problem, the bug was reported several month ago, see: https://gitlab.gnome.org/GNOME/mutter/issues/840
3: happens for me both on non-HiDPI and on HiDPI
|
Thanks. Martin asked whether this happens on GNOME + Metacity as well. |
GNOME with Mutter on a non HiDPI display. |
I'm not sure if Gnome + Metacity even exist as of today. The closest thing is Mate, a fork of Gnome2, which is using Metacity fork of theirs and it didn't had this problem when I've tested.
… Thanks. Martin asked whether this happens on GNOME + Metacity as well.
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
<#2?email_source=notifications&email_token=AEUROTYOMJFGXQT5E2VPYQTQ6L5PXA5CNFSM4FJFZ6BKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEJJX4DY#issuecomment-575897103>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AEUROTZ7DYP6HYVP7O4ULCDQ6L5PXANCNFSM4FJFZ6BA>
.
|
Here's a workaround for y'all to try: --- posframe.el 2019-12-16 00:37:59.392804886 +0300
+++ posframe.el 2020-01-20 15:59:50.981671559 +0300
@@ -627,13 +627,19 @@
(if (and width height)
(unless (equal posframe--last-posframe-size
(list height min-height width min-width))
- (fit-frame-to-buffer
+ (posframe--fit-to-buffer
posframe height min-height width min-width)
(setq-local posframe--last-posframe-size
(list height min-height width min-width)))
- (fit-frame-to-buffer
+ (posframe--fit-to-buffer
posframe height min-height width min-width)))
+(defun posframe--fit-to-buffer (frame height min-height width min-width)
+ ;; GNOME Mutter workaround
+ (make-frame-invisible frame)
+ (fit-frame-to-buffer frame height min-height width min-width)
+ (make-frame-visible frame))
+
(defun posframe--set-frame-position (posframe position
parent-frame-width
parent-frame-height)
I still get hellish flickering (particularly noticeable if you lean on |
BTW, if there's someone here who can build and debug Mutter, please speak up. |
And here's a better workaround: just build Emacs with a different toolkit.
|
And if you have |
I have tested lucid, frame show and hide or frame move seem to very slow. |
Compared to... GTK? |
can confirm that it is quite slow, but it certainly works with lucid. Except if slideshow experience can be described as works |
That's surprising. The Lucid build is really very fast here (GNOME 3.32.1, GTK 3.24.8). You can also try Motif, I'm seeing similar experience. As for the GTK build, @andreyorst have you tried the workaround I posted above? |
No, sorry for that! I'm not using company-posframe, I'm here from the https://github.com/casouri/eldoc-box package, which has the same issue with resizing child frames but doesn't use posframe inside. |
Then you can try the same approach by toggling visibility before and after the |
Speaking of performance under Lucid, etc, it would be helpful if you and/or others posted some measuremenets. There is an example here: https://lists.gnu.org/archive/html/emacs-devel/2020-01/msg00343.html If you add |
Today, I test lucid again, and find the slow may posn-at-point
"Elapsed time: 0.684959s" this let posframe slow when first show posframe
|
@tumashu Why do you consider that slow? Do you call post-at-point more than once per action? The same form returns 0.72s for me using a GTK build anyway. |
@dgutov I use pyim (an input method) to test posframe, and find that posn-at-point let posframe ~half second lag |
I've missed that part. It's much faster, but still noticeable, although I can live with it. |
So, to sum up:
Is that right? If you still can make a video of the lag, that would be also great. |
I'll try to record it in two hours or tomorrow. Everything else you've listed seems correct by me |
@dgutov I just tried the patch on emacs 27.0.90 and gtk3, it seems to work very well! |
@dgutov After several days of using this patch I think that everything is very good. No issues so far. The lag also gone for some reason. |
Good news everyone! Emacs 27 will include a new variable called It's sort of a stopgap, but apparently GNOME requires special handling that is not compatible with some other DEs/WMs. So GNOME users with GTK3 builds should set this new variable to either In other news, the Lucid build should be at least as fast now (or faster) WRT to child frames. So using basically any other build than GTK3 is also a good workaround. |
@tumashu Will you add that info to README? Here, and/or in the main |
It's in the release branch now. Should be merged to master in a few days or so. |
Good, I'll add it to eldoc-box's readme. |
@dgutov Info has been added, thanks very very very much for your and Martin Rudalics hard word, if no your long disscuss and coding, this problem can not be resolved. |
@tumashu IIUC, Mate users don't need to do this. Otherwise, the instructions look good, thanks. |
By the way, we could try to automate this. @andreyorst Could you check the output of |
Unlikely. Unfortunately I don't use Mate, I'm on GNOME. I'll ask colleague to check, but IDK when he'll respond. |
@dgutov I have not test it by myself, but MATE is gnome2,its wm may very similar with gnome3's vm, so it may have similar problem too. |
According to @andreyorst it's using Metacity, a different window manager, and it doesn't have this problem: #2 (comment) |
OK, I will remove MATE info |
@dgutov After x-gtk-resize-child-frames set, we must restart emacs ? |
You actually need to just create a new child frame (the Anyway, please wait a little for my PR. I think we really can automate this, to make it easier for a lot of users. |
ok |
Allows us to bind x-gtk-resize-child-frames to an appropriate value requiring no user intervention. Discussion at tumashu/company-posframe#2. Fixes tumashu#51.
If possible, please also ask a colleague to try this: (let ((id (x-window-property "_NET_SUPPORTING_WM_CHECK" nil "WINDOW" 0 nil t)))
(x-window-property "_NET_WM_NAME" nil "UTF8_STRING" id nil)) Which is a method we might choose to switch to in the future. |
unfortunately he's working from home right now using his Mac, so he can't access mate right now. He's not Emacs user, so I can't help with that test much. |
That's ok, thanks. |
it prints MATE
вт, 7 апр. 2020 г., 16:43 Dmitry Gutov <notifications@github.com>:
… By the way, we could try to automate this.
@andreyorst <https://github.com/andreyorst> Could you check the output of echo
$XDG_CURRENT_DESKTOP when inside a Mate session? Does it also say GNOME?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
<#2 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AEUROT7OWIHSXAGNTU3LQ7DRLMUZJANCNFSM4FJFZ6BA>
.
|
Thank you. Then the current solution in posframe should work all right. |
It seems that changes finally hit the master branch and I no longer need to patch my build! Gonna say that everything works great on GNOME now. |
When the child frame is shown, it fits the initial candidates. When you interact with the child frame (e.g. type or scroll), it doesn't resize, resulting in cut off candidates. Look at the two cut off autoload candidates.
This also happens on a clean Emacs.
The text was updated successfully, but these errors were encountered: