CEF 3 Окно без полей

Я довольно новичок в CEF, я пытаюсь создать новый браузер без полей (только для просмотра веб-страниц) на Ubuntu 12.04 x64.
В настоящее время я пробовал этот способ (окно верхнего уровня gtk -> отключить оформление -> установить информацию окна с родительским установленным на ранее созданное окно -> создать браузер):

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.

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());
...
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector