GTK窗口盖整个屏幕

时间:2015-07-12 10:18:00

标签: window gtk gdk

我正在从事一项小型的教育工作,我创建了一个窗口,它应该覆盖整个显示器。然而,从底部的screnshot看到的“特殊”区域没有被覆盖。我的窗口是一个坚实的红色,没有菜单栏滚动条等,无论如何,这是覆盖顶部菜单栏和码头。在我的屏幕截图中,我正在测试Ubuntu和Mint,这是Gtk OS的一致行为我需要设置我的窗口所以它涵盖所有这些可能吗?

我试过gdk_window_fullscreen但它没有做任何事情,甚至不是全屏,你认为它是因为我从另一个线程运行这个函数吗?我怎么知道这个函数是否需要从主线程运行?

Ubuntu的覆盖范围不完整:

Mint的覆盖面不完整:

Code Tried

  1. 使用主线程中的Firefox代码打开无框窗口:

    var aEditorDOMWindow = Services.ww.openWindow(null, core.addon.path.content + 'panel.xul', '_blank', 'chrome,width=1,height=1,screenX=0,screenY=0', null); 
    
  2. 现在加载完成后,在主线程上获取此窗口的GdkWindow *,并作为字符串传递给另一个线程

  3. 线程现在将字符串带到GdkWindow *然后将其带到GtkWindow *

            var gdkWinPtr = ostypes.TYPE.GdkWindow.ptr(ctypes.UInt64(aHwndStr));
            var gtkWinPtr = ostypes.HELPER.gdkWinPtrToGtkWinPtr(gdkWinPtr);
    
  4. 然后线程执行gtk_window_set_keep_above,因为如果有另一个应用程序聚焦,它会聚焦这个人,它将使他保持在现有的全屏窗口之上

     var rez_topIt = ostypes.API('gtk_window_set_keep_above')(gtkWinPtr, true);
    
  5. 然后用于运行gtk_window_present的线程,但我删除它,因为我注意到它会使应用程序崩溃,这是代码:

       var rez_focus = ostypes.API('gtk_window_present')(gtkWinPtr);
    
  6. 实验性的尝试我试过但是没有办法使窗口覆盖特殊的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);
      
  7. 现在线程工作已经完成,它将进入主线程。现在主线程使用firefox javascript将窗口移动到最左上方(我之前使用Gdk调用计算)并且还将此窗口的宽度和高度设置为所有监视器的计算(我之前使用其他gdk执行此操作)呼叫)

            aEditorDOMWindow.moveTo(collCanMonInfos[0].xTopLeft, collCanMonInfos[0].yTopLeft);
            aEditorDOMWindow.resizeTo(collCanMonInfos[0].nWidth, collCanMonInfos[0].nHeight);
    
  8. 这导致窗口SOMETIMES覆盖所有监视器,其他时间只覆盖它打开的窗口。它永远不会覆盖像taskbar / dock / menubars这样的特殊用户界面。

    如果你能告诉我如何实现一个完全覆盖所有非常感激的窗口,我试图教一些人一些东西,我遇到了一团糟。

    以下是我正在制作的插件的YouTube视频:https://www.youtube.com/watch?v=aJM5NQK67N4

    我停止使用gdk_fullscreen,因为当它间歇性地工作时,它不允许窗口在一个监视器外扩展。

1 个答案:

答案 0 :(得分:2)

面板通常使用struts实现,窗口管理器可以决定永远不允许窗口覆盖它们;这就是“全屏幕窗口”全部概念的原因之一"介绍:它给窗口管理器一个暗示,要求全屏的窗口应覆盖所有其他窗口;没有装饰;并且还涵盖所有最终的"系统"组件,如面板。