void ClientHandler::OnTitleChange(CefRefPtr<CefBrowser> browser, const CefString& title) { CEF_REQUIRE_UI_THREAD(); std::string titleStr(title); if (!browser->IsPopup()) { // Set the GTK parent window title. GtkWidget* window = gtk_widget_get_ancestor(main_handle_, GTK_TYPE_WINDOW); gtk_window_set_title(GTK_WINDOW(window), titleStr.c_str()); } else { // Retrieve the X11 display shared with Chromium. ::Display* display = cef_get_xdisplay(); DCHECK(display); // Retrieve the X11 window handle for the browser. ::Window window = browser->GetHost()->GetWindowHandle(); DCHECK(window != kNullWindowHandle); // Retrieve the atoms required by the below XChangeProperty call. const char* kAtoms[] = { "_NET_WM_NAME", "UTF8_STRING" }; Atom atoms[2]; int result = XInternAtoms(display, const_cast<char**>(kAtoms), 2, false, atoms); if (!result) NOTREACHED(); // Set the window title. XChangeProperty(display, window, atoms[0], atoms[1], 8, PropModeReplace, reinterpret_cast<const unsigned char*>(titleStr.c_str()), titleStr.size()); // TODO(erg): This is technically wrong. So XStoreName and friends expect // this in Host Portable Character Encoding instead of UTF-8, which I // believe is Compound Text. This shouldn't matter 90% of the time since // this is the fallback to the UTF8 property above. XStoreName(display, browser->GetHost()->GetWindowHandle(), titleStr.c_str()); } }
void OSRWindow::OnCursorChange(CefRefPtr<CefBrowser> browser, CefCursorHandle cursor) { /*GtkWidget* window = gtk_widget_get_toplevel(glarea_); GdkWindow* gdk_window = gtk_widget_get_window(window); if (cursor->type == GDK_LAST_CURSOR) cursor = NULL; gdk_window_set_cursor(gdk_window, cursor);*/ // Retrieve the X11 display shared with Chromium. ::Display* xdisplay = cef_get_xdisplay(); DCHECK(xdisplay); // Retrieve the X11 window handle for OSR widget. ::Window xwindow = GDK_WINDOW_XID(gtk_widget_get_window(glarea_)); // Set the cursor. XDefineCursor(xdisplay, xwindow, cursor); }
void VboxSizeAllocated(GtkWidget* widget, GtkAllocation* allocation, void* data) { if (g_handler) { CefRefPtr<CefBrowser> browser = g_handler->GetBrowser(); if (browser && !browser->GetHost()->IsWindowRenderingDisabled()) { // Size the browser window to match the GTK widget. ::Display* xdisplay = cef_get_xdisplay(); ::Window xwindow = browser->GetHost()->GetWindowHandle(); XWindowChanges changes = {0}; // TODO: get the real value int g_menubar_height = 0; changes.width = allocation->width; changes.height = allocation->height - (g_menubar_height); changes.y = g_menubar_height; XConfigureWindow(xdisplay, xwindow, CWHeight | CWWidth | CWY, &changes); } } }