GTK Window Cover Entire Screen

Ich arbeite an einer kleinen pädagogischen Arbeit, ich erstelle ein Fenster und es soll den gesamten Monitor abdecken. "Spezielle" Bereiche werden jedoch nicht abgedeckt, wie in der Abbildung unten zu sehen ist. Mein Fenster ist ein durchgehendes Rot ohne Bildlaufleiste für die Menüleiste usw., damit diese die obere Menüleiste und das Dock abdeckt. In meinem Screenshot, den ich unter Ubuntu und Mint teste, ist dies ein konsistentes Verhalten unter Gtk-Betriebssystemen. Ich muss das Fenster so einstellen, dass es alle Dinge abdeckt. Ist dies möglich?

Ich habe es versuchtgdk_window_fullscreen aber es macht nichts, auch nicht im Vollbildmodus. Glaubst du, es liegt daran, dass ich diese Funktion in einem anderen Thread ausführe? Woher weiß ich, ob diese Funktion vom Haupt-Thread ausgeführt werden muss?

Unvollständige Berichterstattung über Ubuntu:

Unvollständige Berichterstattung über Mint:

Code Versucht

Ein rahmenloses Fenster wird mit Firefox-Code vom Hauptthread geöffnet:

var aEditorDOMWindow = Services.ww.openWindow(null, core.addon.path.content + 'panel.xul', '_blank', 'chrome,width=1,height=1,screenX=0,screenY=0', null); 

Nun nachdem der Ladevorgang abgeschlossen ist, wird das GdkWindow * dieses Fensters im Haupt-Thread abgerufen und als String an einen anderen Thread übergeben.

Der Thread nimmt nun den String zu GdkWindow * und dann den zu GtkWindow *

        var gdkWinPtr = ostypes.TYPE.GdkWindow.ptr(ctypes.UInt64(aHwndStr));
        var gtkWinPtr = ostypes.HELPER.gdkWinPtrToGtkWinPtr(gdkWinPtr);

Der Thread wird dann ausgeführtgtk_window_set_keep_above denn wenn es eine andere App gäbe, die fokussiert wäre, würde sie diesen Kerl fokussieren und ihn über bestehende Vollbildfenster auf dem Laufenden halten.

 var rez_topIt = ostypes.API('gtk_window_set_keep_above')(gtkWinPtr, true);

Der Thread, der zum Ausführen von @ verwendet wurgtk_window_present aber ich habe es entfernt, als ich bemerkte, dass die App abstürzen würde. Dies war der Code:

   var rez_focus = ostypes.API('gtk_window_present')(gtkWinPtr);

EXPERIMENTAL STUFF Ich habe versucht, aber es hat nicht funktioniert, um das Fenster für die spezielle Benutzeroberfläche zu verkleiden:

ostypes.API('gdk_window_set_type_hint')(gdkWinPtr, ostypes.CONST.WINDOW_TYPE_HINT_SPLASHSCREEN);ostypes.API('gtk_window_set_position')(gtkWinPtr, ostypes.CONST.GTK_WIN_POS_NONE);
var geom = ostypes.TYPE.GdkGeometry();
geom.max_width = aOptions.fullWidth;
geom.max_height = aOptions.fullHeight;
var rez_geo = ostypes.API('gtk_window_set_geometry_hints')(gtkWinPtr, null, geom.address(), ostypes.CONST.GDK_HINT_MAX_SIZE);

Jetzt ist die Thread-Arbeit erledigt und es geht zum Haupt-Thread. Jetzt benutzt der Haupt-Thread Firefox Javascript, um das Fenster ganz nach links oben zu verschieben (was ich früher mit Gdk-Aufrufen berechnet habe) und setzt auch die Breite und Höhe dieses Fensters auf die von allen Monitoren berechnete (das habe ich früher mit anderen Gdk gemacht) Anrufe

        aEditorDOMWindow.moveTo(collCanMonInfos[0].xTopLeft, collCanMonInfos[0].yTopLeft);
        aEditorDOMWindow.resizeTo(collCanMonInfos[0].nWidth, collCanMonInfos[0].nHeight);

Dies führt dazu, dass das Fenster MANCHMAL alle Monitore abdeckt, andere Male nur den, auf dem es geöffnet wurde. Und es deckt niemals spezielle Benutzeroberflächen wie die Taskleiste / Dock / Menüleisten ab.

Wenn Sie bitte beraten können, wie Sie ein Fenster erreichen, das alles abdeckt, was sehr geschätzt wird, versuche ich, einigen Leuten ein paar Dinge beizubringen, und bin auf ein Durcheinander gestoßen.

Hier ist ein Youtube-Video des Addons, das ich mache:https: //www.youtube.com/watch? v = aJM5NQK67N4

Ich habe die Verwendung von @ eingestelgdk_fullscreen denn wenn es zeitweise funktionierte, konnte das Fenster außerhalb des einen Monitors nicht erweitert werden.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage