diff --git a/rainbow/Gtk/Clip.cpp b/rainbow/Gtk/Clip.cpp index d49d0af3d..7e11cdd21 100644 --- a/rainbow/Gtk/Clip.cpp +++ b/rainbow/Gtk/Clip.cpp @@ -5,7 +5,7 @@ NAMESPACE_UPP -#define LLOG(x) LOG(x) +#define LLOG(x) DLOG(x) GdkAtom GAtom(const String& id) { @@ -360,16 +360,22 @@ Vector GetFiles(PasteClip& clip) void PasteClip::GuiPlatformConstruct() { } -/* -Ptr Ctrl::sel_ctrl; -*/ + +Ptr Ctrl::sel_ctrl; + +String Ctrl::RenderPrimarySelection(const Value& fmt) +{ + return sel_ctrl->GetSelectionData(fmt); +} + void Ctrl::SetSelectionSource(const char *fmts) { GuiLock __; -/* LLOG("SetSelectionSource " << UPP::Name(this) << ": " << fmts); - sel_formats = Split(fmts, ';'); + LLOG("SetSelectionSource " << UPP::Name(this) << ": " << fmts); + Vector s = Split(fmts, ';'); sel_ctrl = this; - XSetSelectionOwner(Xdisplay, XAtom("PRIMARY"), xclipboard().win, CurrentTime);*/ + for(int i = 0; i < s.GetCount(); i++) + gselection().Put(s[i], ClipData(s[i], RenderPrimarySelection)); } END_UPP_NAMESPACE diff --git a/rainbow/Gtk/Ctrl.h b/rainbow/Gtk/Ctrl.h index 03fc69825..d4c90aebc 100644 --- a/rainbow/Gtk/Ctrl.h +++ b/rainbow/Gtk/Ctrl.h @@ -50,6 +50,7 @@ static bool WndCaretVisible; static Ptr grabwindow; static Ptr grabpopup; + static Ptr sel_ctrl; static int FindId(int id); static int FindCtrl(Ctrl *ctrl); @@ -76,7 +77,7 @@ friend void FinishDragRect(Ctrl& q); friend void GuiPlatformGripResize(TopWindow *q); -public: +public: // really private: struct Gclipboard { ArrayMap target; GtkClipboard *clipboard; @@ -91,6 +92,7 @@ public: static Gclipboard& gclipboard(); static Gclipboard& gselection(); + static String RenderPrimarySelection(const Value& fmt); public: static void EndSession() {}