[gnome-shell] st-clipboard: Add the ability to choose the clipboard type
- From: Jasper St. Pierre <jstpierre src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell] st-clipboard: Add the ability to choose the clipboard type
- Date: Thu, 7 Feb 2013 09:51:51 +0000 (UTC)
commit 0616261a9455574fc26b452343b6bf9b8e0400b1
Author: Jasper St. Pierre <jstpierre mecheye net>
Date: Wed Nov 9 11:19:47 2011 -0500
st-clipboard: Add the ability to choose the clipboard type
https://bugzilla.gnome.org/show_bug.cgi?id=645019
js/ui/shellEntry.js | 6 +++---
src/st/st-clipboard.c | 24 +++++++++++++++++++-----
src/st/st-clipboard.h | 7 +++++++
src/st/st-entry.c | 13 ++++++++++---
4 files changed, 39 insertions(+), 11 deletions(-)
---
diff --git a/js/ui/shellEntry.js b/js/ui/shellEntry.js
index 18fe7d1..6952a3e 100644
--- a/js/ui/shellEntry.js
+++ b/js/ui/shellEntry.js
@@ -90,7 +90,7 @@ const EntryMenu = new Lang.Class({
},
_updatePasteItem: function() {
- this._clipboard.get_text(Lang.bind(this,
+ this._clipboard.get_text(St.ClipboardType.CLIPBOARD, Lang.bind(this,
function(clipboard, text) {
this._pasteItem.setSensitive(text && text != '');
}));
@@ -106,11 +106,11 @@ const EntryMenu = new Lang.Class({
_onCopyActivated: function() {
let selection = this._entry.clutter_text.get_selection();
- this._clipboard.set_text(selection);
+ this._clipboard.set_text(St.ClipboardType.CLIPBOARD, selection);
},
_onPasteActivated: function() {
- this._clipboard.get_text(Lang.bind(this,
+ this._clipboard.get_text(St.ClipboardType.CLIPBOARD, Lang.bind(this,
function(clipboard, text) {
if (!text)
return;
diff --git a/src/st/st-clipboard.c b/src/st/st-clipboard.c
index 6d98c95..c4458e2 100644
--- a/src/st/st-clipboard.c
+++ b/src/st/st-clipboard.c
@@ -55,6 +55,7 @@ struct _EventFilterData
gpointer user_data;
};
+static Atom __atom_primary = None;
static Atom __atom_clip = None;
static Atom __utf8_string = None;
static Atom __atom_targets = None;
@@ -197,6 +198,9 @@ st_clipboard_init (StClipboard *self)
dpy = clutter_x11_get_default_display ();
/* Only create once */
+ if (__atom_primary == None)
+ __atom_primary = XInternAtom (dpy, "PRIMARY", 0);
+
if (__atom_clip == None)
__atom_clip = XInternAtom (dpy, "CLIPBOARD", 0);
@@ -298,9 +302,16 @@ st_clipboard_get_default (void)
return default_clipboard;
}
+static Atom
+atom_for_clipboard_type (StClipboardType type)
+{
+ return type == ST_CLIPBOARD_TYPE_CLIPBOARD ? __atom_clip : __atom_primary;
+}
+
/**
* st_clipboard_get_text:
* @clipboard: A #StCliboard
+ * @type: The type of clipboard data you want
* @callback: (scope async): function to be called when the text is retreived
* @user_data: data to be passed to the callback
*
@@ -310,6 +321,7 @@ st_clipboard_get_default (void)
*/
void
st_clipboard_get_text (StClipboard *clipboard,
+ StClipboardType type,
StClipboardCallbackFunc callback,
gpointer user_data)
{
@@ -333,7 +345,7 @@ st_clipboard_get_text (StClipboard *clipboard,
clutter_x11_trap_x_errors (); /* safety on */
XConvertSelection (dpy,
- __atom_clip,
+ atom_for_clipboard_type (type),
__utf8_string, __utf8_string,
clipboard->priv->clipboard_window,
CurrentTime);
@@ -344,14 +356,15 @@ st_clipboard_get_text (StClipboard *clipboard,
/**
* st_clipboard_set_text:
* @clipboard: A #StClipboard
+ * @type: The type of clipboard that you want to set
* @text: text to copy to the clipboard
*
* Sets text as the current contents of the clipboard.
- *
*/
void
-st_clipboard_set_text (StClipboard *clipboard,
- const gchar *text)
+st_clipboard_set_text (StClipboard *clipboard,
+ StClipboardType type,
+ const gchar *text)
{
StClipboardPrivate *priv;
Display *dpy;
@@ -370,7 +383,8 @@ st_clipboard_set_text (StClipboard *clipboard,
clutter_x11_trap_x_errors ();
- XSetSelectionOwner (dpy, __atom_clip, priv->clipboard_window, CurrentTime);
+ XSetSelectionOwner (dpy, atom_for_clipboard_type (type), priv->clipboard_window, CurrentTime);
+
XSync (dpy, FALSE);
clutter_x11_untrap_x_errors ();
diff --git a/src/st/st-clipboard.h b/src/st/st-clipboard.h
index 20759d4..ca45499 100644
--- a/src/st/st-clipboard.h
+++ b/src/st/st-clipboard.h
@@ -72,6 +72,11 @@ struct _StClipboardClass
GObjectClass parent_class;
};
+typedef enum {
+ ST_CLIPBOARD_TYPE_PRIMARY,
+ ST_CLIPBOARD_TYPE_CLIPBOARD
+} StClipboardType;
+
/**
* StClipboardCallbackFunc:
* @clipboard: A #StClipboard
@@ -89,9 +94,11 @@ GType st_clipboard_get_type (void);
StClipboard* st_clipboard_get_default (void);
void st_clipboard_get_text (StClipboard *clipboard,
+ StClipboardType type,
StClipboardCallbackFunc callback,
gpointer user_data);
void st_clipboard_set_text (StClipboard *clipboard,
+ StClipboardType type,
const gchar *text);
G_END_DECLS
diff --git a/src/st/st-entry.c b/src/st/st-entry.c
index 4cd1da6..000c8ac 100644
--- a/src/st/st-entry.c
+++ b/src/st/st-entry.c
@@ -559,7 +559,10 @@ st_entry_key_press_event (ClutterActor *actor,
clipboard = st_clipboard_get_default ();
- st_clipboard_get_text (clipboard, st_entry_clipboard_callback, actor);
+ st_clipboard_get_text (clipboard,
+ ST_CLIPBOARD_TYPE_CLIPBOARD,
+ st_entry_clipboard_callback,
+ actor);
return TRUE;
}
@@ -576,7 +579,9 @@ st_entry_key_press_event (ClutterActor *actor,
text = clutter_text_get_selection ((ClutterText*) priv->entry);
if (text && strlen (text))
- st_clipboard_set_text (clipboard, text);
+ st_clipboard_set_text (clipboard,
+ ST_CLIPBOARD_TYPE_CLIPBOARD,
+ text);
return TRUE;
}
@@ -595,7 +600,9 @@ st_entry_key_press_event (ClutterActor *actor,
if (text && strlen (text))
{
- st_clipboard_set_text (clipboard, text);
+ st_clipboard_set_text (clipboard,
+ ST_CLIPBOARD_TYPE_CLIPBOARD,
+ text);
/* now delete the text */
clutter_text_delete_selection ((ClutterText *) priv->entry);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]