@glassnote/client 2.4.13 → 2.4.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/main.js +26 -10
- package/package.json +1 -1
package/main.js
CHANGED
|
@@ -750,6 +750,10 @@ function lockChecker() {
|
|
|
750
750
|
const SONDEO_CURSOR_MS = 30;
|
|
751
751
|
// Cada cuanto se repite la posicion aunque el cursor no se haya movido.
|
|
752
752
|
const REEMISION_QUIETO_MS = 400;
|
|
753
|
+
// Cada cuanto se repone el alwaysOnTop mientras la ventana esta a la vista. Es un
|
|
754
|
+
// SetWindowPos cada tanto: barato al lado de un glass que se queda debajo de todo.
|
|
755
|
+
const REAFIRMAR_ALWAYS_ON_TOP_MS = 4000;
|
|
756
|
+
let ultimaReafirmacion = 0;
|
|
753
757
|
|
|
754
758
|
// El passthrough efectivo sale de dos cosas: lo que pidio el renderer y si el cursor esta
|
|
755
759
|
// siquiera sobre la ventana.
|
|
@@ -771,17 +775,21 @@ const REEMISION_QUIETO_MS = 400;
|
|
|
771
775
|
// main, sin tocar lo que el renderer cree: cuando el cursor vuelve a entrar se reaplica
|
|
772
776
|
// su decision tal cual, y desde ahi los eventos reales —que si llegan con la ventana
|
|
773
777
|
// clickeable— lo ponen al dia.
|
|
774
|
-
// El "siempre encima"
|
|
775
|
-
// arrancar. Electron guarda el nivel de z-order como un estado suyo y solo baja a la API
|
|
776
|
-
// del sistema cuando ESE estado cambia: si Windows le saca el TOPMOST a la ventana por su
|
|
777
|
-
// cuenta, para Electron sigue estando arriba —isAlwaysOnTop() devuelve true— y no vuelve a
|
|
778
|
-
// pedirlo nunca. De ahi el false y despues el true: es la unica forma de forzar que se
|
|
779
|
-
// reemita.
|
|
778
|
+
// El "siempre encima" hay que REPONERLO, no basta con pedirlo una vez al arrancar.
|
|
780
779
|
//
|
|
781
|
-
//
|
|
782
|
-
//
|
|
783
|
-
//
|
|
784
|
-
//
|
|
780
|
+
// Electron guarda el nivel de z-order como un estado suyo y solo baja a la API del sistema
|
|
781
|
+
// cuando ESE estado cambia. Si Windows le saca el TOPMOST a la ventana por su cuenta, para
|
|
782
|
+
// Electron la ventana sigue arriba —isAlwaysOnTop() devuelve true— y no lo vuelve a pedir
|
|
783
|
+
// nunca. Medido en una VM de Windows 11: quitandole el TOPMOST a mano con SetWindowPos, la
|
|
784
|
+
// ventana se queda abajo indefinidamente (14 s de muestreo, sin recuperarse una sola vez).
|
|
785
|
+
// De ahi el false y despues el true: pedir true sobre true no reemite nada.
|
|
786
|
+
//
|
|
787
|
+
// Se repone en dos momentos, y hacen falta los dos:
|
|
788
|
+
// - en el evento `show`, que es cada glass que llega;
|
|
789
|
+
// - cada REAFIRMAR_ALWAYS_ON_TOP_MS mientras la ventana este visible, porque un mensaje
|
|
790
|
+
// largo se queda puesto horas y ahi no hay ningun show que lo repare. Quien le quita
|
|
791
|
+
// el TOPMOST no se pudo reproducir —ni con alt+tab, ni con una app a pantalla completa,
|
|
792
|
+
// ni con el ciclo ocultar/mostrar— asi que esto no depende de saber quien es.
|
|
785
793
|
//
|
|
786
794
|
// En Linux no se toca: ahi el "arriba de todo" es _NET_WM_STATE_ABOVE y quitarlo y ponerlo
|
|
787
795
|
// invita al gestor de ventanas a recolocar la ventana, que es justo lo que costo domar.
|
|
@@ -811,6 +819,14 @@ function iniciarSondeoCursor() {
|
|
|
811
819
|
sondeoCursor = setInterval(() => {
|
|
812
820
|
if (!mainWindow || mainWindow.isDestroyed() || !mainWindow.isVisible()) return;
|
|
813
821
|
|
|
822
|
+
// Este tick ya corre solo con la ventana a la vista, que es justo cuando importa
|
|
823
|
+
// que este arriba: es el lugar natural para reponer el alwaysOnTop.
|
|
824
|
+
const ahoraMs = Date.now();
|
|
825
|
+
if (ahoraMs - ultimaReafirmacion >= REAFIRMAR_ALWAYS_ON_TOP_MS) {
|
|
826
|
+
ultimaReafirmacion = ahoraMs;
|
|
827
|
+
reafirmarAlwaysOnTop();
|
|
828
|
+
}
|
|
829
|
+
|
|
814
830
|
// En X11 screen.getCursorScreenPoint() no sirve: con la ventana ignorando el mouse
|
|
815
831
|
// Chromium se queda sin eventos y devuelve congelada la ultima posicion que vio
|
|
816
832
|
// (el porque, medido, esta en linuxCursor.js). Se le pregunta al servidor X. En
|
package/package.json
CHANGED