ibusCandidatePopup: Use an internal actor to track IM focus position
We share this actor with other shell menus, which arguably track a different "cursor" as we care of the caret/anchor text positions, and menus care about pointer click coordinates. Use a standalone actor for this, so popups/IM are entirely decoupled. Closes: https://gitlab.gnome.org/GNOME/gnome-shell/issues/1571
This commit is contained in:
parent
31fe517007
commit
a722b4c51d
@ -126,6 +126,9 @@ Signals.addSignalMethods(CandidateArea.prototype);
|
|||||||
|
|
||||||
var CandidatePopup = class CandidatePopup {
|
var CandidatePopup = class CandidatePopup {
|
||||||
constructor() {
|
constructor() {
|
||||||
|
this._dummyCursor = new St.Widget({ opacity: 0 });
|
||||||
|
Main.layoutManager.uiGroup.add_actor(this._dummyCursor);
|
||||||
|
|
||||||
this._boxPointer = new BoxPointer.BoxPointer(St.Side.TOP);
|
this._boxPointer = new BoxPointer.BoxPointer(St.Side.TOP);
|
||||||
this._boxPointer.visible = false;
|
this._boxPointer.visible = false;
|
||||||
this._boxPointer.style_class = 'candidate-popup-boxpointer';
|
this._boxPointer.style_class = 'candidate-popup-boxpointer';
|
||||||
@ -272,9 +275,11 @@ var CandidatePopup = class CandidatePopup {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_setDummyCursorGeometry(x, y, w, h) {
|
_setDummyCursorGeometry(x, y, w, h) {
|
||||||
Main.layoutManager.setDummyCursorGeometry(x, y, w, h);
|
this._dummyCursor.set_position(Math.round(x), Math.round(y));
|
||||||
|
this._dummyCursor.set_size(Math.round(w), Math.round(h));
|
||||||
|
|
||||||
if (this._boxPointer.visible)
|
if (this._boxPointer.visible)
|
||||||
this._boxPointer.setPosition(Main.layoutManager.dummyCursor, 0);
|
this._boxPointer.setPosition(this._dummyCursor, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
_updateVisibility() {
|
_updateVisibility() {
|
||||||
@ -284,7 +289,7 @@ var CandidatePopup = class CandidatePopup {
|
|||||||
this._candidateArea.actor.visible));
|
this._candidateArea.actor.visible));
|
||||||
|
|
||||||
if (isVisible) {
|
if (isVisible) {
|
||||||
this._boxPointer.setPosition(Main.layoutManager.dummyCursor, 0);
|
this._boxPointer.setPosition(this._dummyCursor, 0);
|
||||||
this._boxPointer.open(BoxPointer.PopupAnimation.NONE);
|
this._boxPointer.open(BoxPointer.PopupAnimation.NONE);
|
||||||
this._boxPointer.raise_top();
|
this._boxPointer.raise_top();
|
||||||
} else {
|
} else {
|
||||||
|
Loading…
Reference in New Issue
Block a user