Re: [PATCH] Perform conversion to platform line-ends when copying to clipboard (Was: Copy to clipboard from ctlSQLBox on windows has line ends broken)

From: Dave Page <dpage(at)pgadmin(dot)org>
To: Nikolai Zhubr <n-a-zhubr(at)yandex(dot)ru>
Cc: pgadmin-hackers <pgadmin-hackers(at)postgresql(dot)org>
Subject: Re: [PATCH] Perform conversion to platform line-ends when copying to clipboard (Was: Copy to clipboard from ctlSQLBox on windows has line ends broken)
Date: 2015-10-07 12:10:02
Message-ID: CA+OCxoxWZuwNP6exo9q+_DR_fFthBx0RjDcYD8Wzc5jwKc7XmQ@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgadmin-hackers

Thanks - applied.

On Wed, Oct 7, 2015 at 1:10 AM, Nikolai Zhubr <n-a-zhubr(at)yandex(dot)ru> wrote:
> Hello Dave,
>
> Apparently the problem was accidentally introduced by some little
> refactoring as a part of this big commit:
>
> http://git.postgresql.org/gitweb/?p=pgadmin3.git;a=commitdiff;h=ac60bb573155cd24fc45aa08a41887c1bb612677
>
> Previously, frmMain::OnCopy() used to call sqlPane->Copy() to push contents
> from ctlSQLbox (of SQL Pane) to clipboard. I think that call performed the
> appropriate line-ends conversions automagically.
>
> After the change, it turned essentially into:
> text = sqlPane->GetSelectedText();
> wxTheClipboard->SetData(new wxTextDataObject(text));
> and line-ends conversion was gone.
>
> Now looking at ScintillaWX::CopyToClipboard(...) as an example we see:
> wxString text = wxTextBuffer::Translate(stc2wx(st.s, st.len-1));
> wxTheClipboard->SetData(new wxTextDataObject(text));
>
> The difference is that there is a wxTextBuffer::Translate() in between.
>
> Adding it to frmMain::OnCopy() fixed the problem for me.
> So I'd propose the following patch:
>
> --- pgadmin/frm/frmMain.cpp.orig Mon Oct 05 18:16:13 2015
> +++ pgadmin/frm/frmMain.cpp Wed Oct 07 01:47:41 2015
> @@ -28,6 +28,7 @@
> #include <wx/imaglist.h>
> #include <wx/busyinfo.h>
> #include <wx/sysopt.h>
> +#include <wx/textbuf.h>
> #include <wx/clipbrd.h>
>
> // wxAUI
> @@ -672,7 +673,7 @@
> ctlSQLBox *sb = dynamic_cast<ctlSQLBox *>(currentControl);
> if (sb)
> {
> - text = sb->GetSelectedText();
> + text = wxTextBuffer::Translate(sb->GetSelectedText());
> }
>
> // Set the clipboard text
>
>
> Thank you,
> Nikolai
>
>
> 07.10.2015 1:23, I wrote:
>>
>> Hi all,
>>
>> As I've now found, a lot of pgXXX::GetSql() functions autogenerate sql
>> code using hardcoded LF line ends ('\n\n'), and this has been so for
>> ages, therefore probably it is OK.
>>
>> But, in order for 'copy to clipboard' to work well (also on ms windows),
>> these LF line ends have to be somehow "compensated". Generally, it could
>> possibly be arranged in two places:
>>
>> -- convert to the system line ending before passing it _to_ ctlSQLBox;
>> -- or convert just before copying to clipboard _from_ ctlSQLBox.
>>
>> I'm not quite sure how it was initially supposed to work, but it did
>> work correctly on windows previously. Right now though I can not see any
>> such automatic conversions anywhere. Sure I could add some, but I'd like
>> to understand the whole picture first...
>>
>>
>> Thank you,
>> Nikolai
>
>

--
Dave Page
Blog: http://pgsnake.blogspot.com
Twitter: @pgsnake

EnterpriseDB UK: http://www.enterprisedb.com
The Enterprise PostgreSQL Company

In response to

Browse pgadmin-hackers by date

  From Date Subject
Next Message Nikolai Zhubr 2015-10-07 18:47:24 [PATCH] Beautify line-ends handling yet more.
Previous Message Dave Page 2015-10-07 12:07:15 pgAdmin III commit: Ensure the correct line endings are used when copyi