diff options
author | Tommi Komulainen <tko@litl.com> | 2009-08-25 16:04:59 (GMT) |
---|---|---|
committer | Marco Pesenti Gritti <marcopg@litl.com> | 2010-07-27 22:04:22 (GMT) |
commit | 84cc52bd4fd197ec4aad845d9b09bcd5b74453d5 (patch) | |
tree | 5ac772b302a3c5bcf38e4212d43e8bb7ee39f71e /browser-plugin/plugin.cpp | |
parent | aded6eb5272ccb4f9b90ee529bdb014ffaa59031 (diff) |
browser-plugin: add clipboard copy support
Only supporting copy, evince doesn't support editing (at least the API
is lacking cut and paste)
Using property access workaround.
Example:
if (plugin.canCopy) {
plugin.canCopy = 42; (workaround) copy selection to clipboard
}
Diffstat (limited to 'browser-plugin/plugin.cpp')
-rw-r--r-- | browser-plugin/plugin.cpp | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/browser-plugin/plugin.cpp b/browser-plugin/plugin.cpp index 7d79100..88893c8 100644 --- a/browser-plugin/plugin.cpp +++ b/browser-plugin/plugin.cpp @@ -27,7 +27,8 @@ Plugin::Plugin (NPP instance) : mInstance (instance), mScriptableObject (0), mWindow (0), mLoadJob (0), - mTitle (0) + mTitle (0), + mHasSelection (false) { mScrolledWindow = gtk_scrolled_window_new (NULL, NULL); @@ -36,6 +37,10 @@ Plugin::Plugin (NPP instance) : mInstance (instance), "notify::sizing-mode", G_CALLBACK (Plugin::SizingModeCallback), reinterpret_cast<void*>(this)); + g_signal_connect (G_OBJECT (mView), + "notify::has-selection", + G_CALLBACK (Plugin::HasSelectionCallback), + reinterpret_cast<void*>(this)); g_signal_connect (G_OBJECT (mView), "external-link", @@ -103,6 +108,12 @@ Plugin::FindPrevious (const char *text) } void +Plugin::CopyClipboard () +{ + ev_view_copy (EV_VIEW (mView)); +} + +void Plugin::SetWindow (GdkNativeWindow window) { if (mWindow != 0) { @@ -226,6 +237,19 @@ Plugin::SizingModeCallback (EvView *view, GParamSpec *pspec, gpointer data) } void +Plugin::HasSelectionCallback (EvView *view, GParamSpec *pspec, gpointer data) +{ + Plugin *plugin = reinterpret_cast<Plugin*> (data); + + gboolean has_selection = ev_view_get_has_selection (view); + + if (has_selection != plugin->mHasSelection) { + plugin->mHasSelection = has_selection; + plugin->CallBrowser ("onClipboardChanged"); + } +} + +void Plugin::ExternalLinkCallback (EvView *view, EvLinkAction *action, gpointer data) { Plugin *plugin = reinterpret_cast<Plugin*> (data); |