]> git.sesse.net Git - casparcg/blobdiff - dependencies64/cef/linux/tests/cefsimple/simple_handler_linux.cc
Upgrade CEF to 3.3029.1611.g44e39a8 / Chromium 58.0.3029.81.
[casparcg] / dependencies64 / cef / linux / tests / cefsimple / simple_handler_linux.cc
diff --git a/dependencies64/cef/linux/tests/cefsimple/simple_handler_linux.cc b/dependencies64/cef/linux/tests/cefsimple/simple_handler_linux.cc
new file mode 100644 (file)
index 0000000..25adea7
--- /dev/null
@@ -0,0 +1,53 @@
+// Copyright (c) 2014 The Chromium Embedded Framework Authors. All rights
+// reserved. Use of this source code is governed by a BSD-style license that
+// can be found in the LICENSE file.
+
+#include "tests/cefsimple/simple_handler.h"
+
+#include <X11/Xatom.h>
+#include <X11/Xlib.h>
+#include <string>
+
+#include "include/base/cef_logging.h"
+#include "include/cef_browser.h"
+
+void SimpleHandler::PlatformTitleChange(CefRefPtr<CefBrowser> browser,
+                                        const CefString& title) {
+  std::string titleStr(title);
+
+  // 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());
+}
+