2017-09-14 7 views
0

Ich bin ziemlich neu in CEF, ich versuche, neue Randlose Browser (nur für die Anzeige der Webseite) auf Ubuntu 12.04 x64 zu erstellen. Zur Zeit habe ich versucht, auf diese Weise (gtk Top-Level-Fenster -> deaktivieren Dekoration -> set Fenster Info mit Eltern vorher crated Fenster gesetzt -> erstellen Browser):CEF 3 Borderless Fenster

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); 

Aber dies öffnet nur einen Browser auf dem angegebenen Ort mit der richtigen Breite/Höhe, aber es hat immer noch Grenzen.

Auf der anderen Seite i randlos Browserfenster erfolgreich mit nur auf Windows erstellt habe:

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); 

Hinweis:

  • ich kann ganzen CEF nicht wieder aufbauen,
  • i Ubuntu Upgrade nicht.

Antwort

0

Ich löste das Problem mit X11 Window Manager.

Zunächst erstelle ich eine Funktion zum Entfernen von Grenzen Fenster:

#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); 
} 

Danach, wenn ich einen Browser zu erstellen, ich schaffe es synchron erstellt Browser Handle abzurufen und RemoveBorders Funktion auf Browser-Fenstergriff nennen:

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