2017-09-14 14 views
0

私はかなりCEFに慣れています。私はubuntu 12.04 x64で新しいフチなしのブラウザを作成しようとしています。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); 

をしかし、これは指定された場所でブラウザを開きます(>ブラウザを作成 - >装飾を無効にします - - 以前cratedウィンドウに設定された親を持つ>設定ウィンドウ情報gtkのトップレベルウィンドウ) は現在、私はこの方法を試してみました正しい幅と高さを持つが、それでも境界線はある。私は成功しただけでウィンドウにボーダーレスブラウザのウィンドウを作成している一方

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をアップグレードすることはできません。

答えて

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()); 
... 
関連する問題