Kaydet (Commit) 8b9def4f authored tarafından Caolán McNamara's avatar Caolán McNamara Kaydeden (comit) Andras Timar

gtk3: implement paste everything else into us

Change-Id: I39c3e5646a5a1ea07aa881cad584a0b7ae9bd005
(cherry picked from commit 50cfcd91)
üst f994b283
...@@ -82,6 +82,8 @@ namespace ...@@ -82,6 +82,8 @@ namespace
class GtkTransferable : public ::cppu::WeakImplHelper1 < class GtkTransferable : public ::cppu::WeakImplHelper1 <
css::datatransfer::XTransferable > css::datatransfer::XTransferable >
{ {
private:
std::map<OUString, GdkAtom> m_aMimeTypeToAtom;
public: public:
GtkTransferable() GtkTransferable()
{ {
...@@ -95,24 +97,37 @@ public: ...@@ -95,24 +97,37 @@ public:
* XTransferable * XTransferable
*/ */
virtual css::uno::Any SAL_CALL getTransferData( const css::datatransfer::DataFlavor& aFlavor ) virtual css::uno::Any SAL_CALL getTransferData(const css::datatransfer::DataFlavor& rFlavor)
throw(css::datatransfer::UnsupportedFlavorException, throw(css::datatransfer::UnsupportedFlavorException,
css::io::IOException, css::io::IOException,
css::uno::RuntimeException, std::exception css::uno::RuntimeException, std::exception
) SAL_OVERRIDE ) SAL_OVERRIDE
{ {
css::uno::Any aRet;
GtkClipboard* clipboard = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD); GtkClipboard* clipboard = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD);
if (aFlavor.MimeType == "text/plain;charset=utf-16") if (rFlavor.MimeType == "text/plain;charset=utf-16")
{ {
gchar *pText = gtk_clipboard_wait_for_text(clipboard); gchar *pText = gtk_clipboard_wait_for_text(clipboard);
OUString aStr(pText, rtl_str_getLength(pText), OUString aStr(pText, rtl_str_getLength(pText),
RTL_TEXTENCODING_UTF8); RTL_TEXTENCODING_UTF8);
g_free(pText); g_free(pText);
css::uno::Any aRet;
aRet <<= aStr.replaceAll("\r\n", "\n"); aRet <<= aStr.replaceAll("\r\n", "\n");
return aRet;
} }
else
fprintf(stderr, "TO-DO getTransferData %s\n", OUStringToOString(aFlavor.MimeType, RTL_TEXTENCODING_UTF8).getStr()); auto it = m_aMimeTypeToAtom.find(rFlavor.MimeType);
if (it == m_aMimeTypeToAtom.end())
return css::uno::Any();
css::uno::Any aRet;
GtkSelectionData* data = gtk_clipboard_wait_for_contents(clipboard,
it->second);
gint length;
const guchar *rawdata = gtk_selection_data_get_data_with_length(data,
&length);
Sequence<sal_Int8> aSeq(reinterpret_cast<const sal_Int8*>(rawdata), length);
gtk_selection_data_free(data);
aRet <<= aSeq;
return aRet; return aRet;
} }
...@@ -146,6 +161,9 @@ public: ...@@ -146,6 +161,9 @@ public:
aFlavor.MimeType = OUString(pFinalName, aFlavor.MimeType = OUString(pFinalName,
rtl_str_getLength(pFinalName), rtl_str_getLength(pFinalName),
RTL_TEXTENCODING_UTF8); RTL_TEXTENCODING_UTF8);
m_aMimeTypeToAtom[aFlavor.MimeType] = targets[i];
aFlavor.DataType = cppu::UnoType<Sequence< sal_Int8 >>::get(); aFlavor.DataType = cppu::UnoType<Sequence< sal_Int8 >>::get();
sal_Int32 nIndex(0); sal_Int32 nIndex(0);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment