2017-09-14 6109 views
0

我對CEF相當陌生,我試圖在Ubuntu 12.04 x64上創建新的無邊界瀏覽器(僅用於網頁瀏覽)。 目前我已經試過這種方式(GTK頂層窗口 - >禁用裝飾 - >與家長設置爲先前裝箱窗口設置窗口信息 - >創建瀏覽器):CEF 3無邊界窗口

GtkWidget *window = gtk_window_new (GTK_WINDOW_TOPLEVEL); 
gtk_window_set_decorated (GTK_WINDOW(window), FALSE); 
CefWindowHandle window_handle = GDK_WINDOW_XWINDOW (GTK_WIDGET (window)->window); 

CefWindowInfo window_info; 
window_info.SetAsChild(window_handle, CefRect(100, 100, 800, 600)); 

CefBrowserHost::CreateBrowser(window_info, handler, url, browser_settings, NULL); 

但這隻能在指定的位置打開瀏覽器正確的寬度/高度,但它仍然有邊框。

在另一方面,我已經成功地創建無邊框的瀏覽器窗口中的窗口只有:

CefWindowInfo window_info; 
window_info.style = WS_VISIBLE | WS_POPUP; 
window_info.x = 2120; 
window_info.y = 200; 
window_info.width = 800; 
window_info.height = 600; 

CefBrowserHost::CreateBrowserSync(window_info, handler, url, browser_settings, NULL); 

注:

  • 我不能重建整個CEF,
  • 我不能升級Ubuntu Linux系統。

回答

0

我解決了X11窗口管理器的問題。

首先我創建了一個功能,用於消除窗口邊框:

#include <X11/Xlib.h> 

static void RemoveBorders(Window window) { 
    struct Data { 
    unsigned long flags; 
    unsigned long functions; 
    unsigned long decorations; 
    long   inputMode; 
    unsigned long status; 
    } data = {2, 0, 0, 0, 0}; 
    auto display = cef_get_xdisplay(); 
    auto atom = XInternAtom(display, "_MOTIF_WM_HINTS", True); 
    XChangeProperty(display, window, atom, atom, 32, PropModeReplace, (unsigned char*)&data, 5); 
} 

後,當我創建一個瀏覽器,我創建同步檢索創建瀏覽器手柄和呼籲的瀏覽器窗口句柄RemoveBorders功能:

... 
auto browser = CefBrowserHost::CreateBrowserSync(window_info, handler, url, browser_settings, NULL); 
RemoveBorders(browser->GetHost()->GetWindowHandle()); 
...