我试过gdk_window_fullscreen,但它没有做任何事情,甚至不是全屏,你认为它是因为我从另一个线程运行这个函数?我怎么知道这个函数是否需要从主线程运行?
Ubuntu的覆盖面不完整:
Mint的覆盖面不完整:
代码尝试
>使用主线程中的Firefox代码打开无框窗口:
var aEditorDOMWindow = Services.ww.openWindow(null,core.addon.path.content + 'panel.xul','_blank','chrome,width=1,height=1,screenX=0,screenY=0',null);
>现在加载完成后,在主线程上获取此窗口的GdkWindow *并作为字符串传递给另一个线程
>线程现在将字符串带到GdkWindow *然后到GtkWindow *
var gdkWinPtr = ostypes.TYPE.GdkWindow.ptr(ctypes.UInt64(aHwndStr)); var gtkWinPtr = ostypes.HELPER.gdkWinPtrToGtkWinPtr(gdkWinPtr);
>该线程然后执行gtk_window_set_keep_above,因为如果有另一个应用程序被聚焦,它将聚焦这个人,它将使他在现有的全屏窗口上
var rez_topIt = ostypes.API('gtk_window_set_keep_above')(gtkWinPtr,true);
>然后用于运行gtk_window_present的线程,但我删除它,因为我注意到它会使应用程序崩溃,这是代码:
var rez_focus = ostypes.API('gtk_window_present')(gtkWinPtr);
>实验性的尝试我试过但它没有工作使窗口覆盖特殊的UI:
> 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);
>现在线程工作已完成,并进入主线程.现在主线程使用firefox javascript将窗口移动到最左上方(我之前使用Gdk调用计算)并且还将此窗口的宽度和高度设置为所有监视器的计算(我之前使用其他gdk执行此操作)呼叫)
aEditorDOMWindow.moveTo(collCanMonInfos[0].xTopLeft,collCanMonInfos[0].yTopLeft); aEditorDOMWindow.resizeTo(collCanMonInfos[0].nWidth,collCanMonInfos[0].nHeight);
这导致窗口SOMETIMES覆盖所有监视器,其他时间只覆盖它打开的窗口.它永远不会覆盖像taskbar / dock / menubars这样的特殊UI.
如果你能告诉我如何实现一个完全涵盖所有非常感激的窗口,我试图教一些人一些东西,我遇到了一团糟.
这是我正在制作的插件的YouTube视频:https://www.youtube.com/watch?v=aJM5NQK67N4
我停止使用gdk_fullscreen,因为当它间歇性地工作时,它不允许窗口在一个监视器外扩展.