Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/browser-plugin/plugin.cpp
diff options
context:
space:
mode:
authorTommi 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)
commit84cc52bd4fd197ec4aad845d9b09bcd5b74453d5 (patch)
tree5ac772b302a3c5bcf38e4212d43e8bb7ee39f71e /browser-plugin/plugin.cpp
parentaded6eb5272ccb4f9b90ee529bdb014ffaa59031 (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.cpp26
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);