void NetscapePlugin::platformGeometryDidChange() { if (m_isWindowed) { uint64_t windowID = 0; #if PLATFORM(GTK) windowID = static_cast<uint64_t>(GDK_WINDOW_XID(gtk_plug_get_socket_window(GTK_PLUG(m_platformPluginWidget)))); #endif IntRect clipRect(m_clipRect); clipRect.move(-m_frameRectInWindowCoordinates.x(), -m_frameRectInWindowCoordinates.y()); controller()->windowedPluginGeometryDidChange(m_frameRectInWindowCoordinates, clipRect, windowID); return; } Display* display = x11HostDisplay(); if (m_drawable) XFreePixmap(display, m_drawable); if (m_pluginSize.isEmpty()) { m_drawable = 0; return; } m_drawable = XCreatePixmap(display, rootWindowID(), m_pluginSize.width(), m_pluginSize.height(), displayDepth()); XSync(display, false); // Make sure that the server knows about the Drawable. }
bool NetscapePlugin::platformPostInitializeWindowless() { Display* display = x11HostDisplay(); m_npWindow.type = NPWindowTypeDrawable; m_npWindow.window = 0; int depth = displayDepth(); #if PLATFORM(QT) ASSERT(depth == 16 || depth == 24 || depth == 32); #endif NPSetWindowCallbackStruct* callbackStruct = static_cast<NPSetWindowCallbackStruct*>(m_npWindow.ws_info); callbackStruct->display = display; callbackStruct->depth = depth; XVisualInfo visualTemplate; visualTemplate.screen = x11Screen(); visualTemplate.depth = depth; visualTemplate.c_class = TrueColor; int numMatching; XVisualInfo* visualInfo = XGetVisualInfo(display, VisualScreenMask | VisualDepthMask | VisualClassMask, &visualTemplate, &numMatching); ASSERT(visualInfo); Visual* visual = visualInfo[0].visual; ASSERT(visual); XFree(visualInfo); callbackStruct->visual = visual; callbackStruct->colormap = XCreateColormap(display, rootWindowID(), visual, AllocNone); callSetWindow(); return true; }
static inline void setCommonMouseEventFields(XEventType& xEvent, const WebEventType& webEvent, const WebCore::IntPoint& pluginLocation) { xEvent.root = rootWindowID(); xEvent.subwindow = 0; xEvent.time = xTimeStamp(webEvent.timestamp()); xEvent.x = webEvent.position().x() - pluginLocation.x(); xEvent.y = webEvent.position().y() - pluginLocation.y(); xEvent.x_root = webEvent.globalPosition().x(); xEvent.y_root = webEvent.globalPosition().y(); xEvent.state = xKeyModifiers(webEvent); xEvent.same_screen = true; }
void NetscapePluginX11::geometryDidChange() { if (m_plugin.isWindowed()) { uint64_t windowID = 0; #if PLATFORM(GTK) windowID = static_cast<uint64_t>(GDK_WINDOW_XID(gtk_plug_get_socket_window(GTK_PLUG(m_platformPluginWidget)))); #endif m_plugin.controller()->windowedPluginGeometryDidChange(m_plugin.frameRectInWindowCoordinates(), m_plugin.clipRect(), windowID); return; } m_drawable.reset(); if (m_plugin.size().isEmpty()) return; m_drawable = XCreatePixmap(x11HostDisplay(), rootWindowID(), m_plugin.size().width(), m_plugin.size().height(), displayDepth()); XSync(x11HostDisplay(), false); // Make sure that the server knows about the Drawable. }
static inline void setXKeyEventFields(XEvent& xEvent, const WebKeyboardEvent& webEvent) { xEvent.xany.type = (webEvent.type() == WebEvent::KeyDown) ? kKeyPressType : kKeyReleaseType; XKeyEvent& xKey = xEvent.xkey; xKey.root = rootWindowID(); xKey.subwindow = 0; xKey.time = xTimeStamp(webEvent.timestamp()); xKey.state = xKeyModifiers(webEvent); xKey.keycode = webEvent.nativeVirtualKeyCode(); xKey.same_screen = true; // Key events propagated to the plugin does not need to have position. // source: https://developer.mozilla.org/en/NPEvent xKey.x = 0; xKey.y = 0; xKey.x_root = 0; xKey.y_root = 0; }
NetscapePluginX11::NetscapePluginX11(NetscapePlugin& plugin, Display* display) : m_plugin(plugin) , m_pluginDisplay(display) { Display* hostDisplay = x11HostDisplay(); int depth = displayDepth(); m_setWindowCallbackStruct.display = hostDisplay; m_setWindowCallbackStruct.depth = depth; XVisualInfo visualTemplate; visualTemplate.screen = x11Screen(); visualTemplate.depth = depth; visualTemplate.c_class = TrueColor; int numMatching; XUniquePtr<XVisualInfo> visualInfo(XGetVisualInfo(hostDisplay, VisualScreenMask | VisualDepthMask | VisualClassMask, &visualTemplate, &numMatching)); ASSERT(visualInfo); Visual* visual = visualInfo.get()[0].visual; ASSERT(visual); m_setWindowCallbackStruct.visual = visual; m_setWindowCallbackStruct.colormap = XCreateColormap(hostDisplay, rootWindowID(), visual, AllocNone); }