76 | | TODO |
| 76 | |
| 77 | |
| 78 | The Symbian port of NPAPI is in http://trac.webkit.org/browser/trunk/WebCore/plugins/symbian . |
| 79 | |
| 80 | In Symbian, dlls can be loaded only from \sys\bin, so Symbian requires a different mechanism for loading Netscape plugins. We use QPluginLoader to find and load plugins. In order for WebKit to find Netscape plugins, they must follow these rules: |
| 81 | * Add template=lib and config+=plugin to the pro file. |
| 82 | * Implement the interface NPInterface as defined in http://trac.webkit.org/browser/trunk/WebCore/plugins/symbian/npinterface.h . |
| 83 | * Export the .qtplugin placeholder to \resource\qt\plugins\npqtplugin. |
| 84 | |
| 85 | PluginPackageSymbian.cpp - |
| 86 | Uses QPluginLoader to load and unload the plugin. It also queries the plugin for its mime types, extensions and description. |
| 87 | |
| 88 | PluginDatabaseSymbian.cpp - |
| 89 | Searches for available .qtplugin placeholders in the available drives in the system. |
| 90 | |
| 91 | PluginContainerSymbian.cpp - |
| 92 | A QWidget that hosts a windowed plugin. This class should eventually merge with PluginContainerQt.cpp. |
| 93 | |
| 94 | PluginViewSymbian.cpp - |
| 95 | Does the bulk of the work interacting with the plugin. It creates and destroys the plugin, resizes the plugin and in windowless mode, sends events to the plugin. |
| 96 | |
| 97 | Painting and events in windowless mode: |
| 98 | |
| 99 | Painting: |
| 100 | Plugins should draw directly to the surface of the webview. Prior to each QPaintEvent, a plugin will receive a NPN_SetWindow call, that contains the NPWindow structure. The ws_info member of NPWindow will contain a pointer to the QPainter to use for painting. |
| 101 | |
| 102 | Keyboard events: |
| 103 | When the plugin has keyboard focus, triggered e.g. by the user tapping on the plugin, WebKit will pass keyboard events as QKeyEvent to the plugin. |
| 104 | |
| 105 | Mouse events: |
| 106 | When WebKit receives mouse events in the plugin's area, it will pass QMouseEvent to the plugin. |