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

From Dave Page
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
Msg-id CA+OCxoxWZuwNP6exo9q+_DR_fFthBx0RjDcYD8Wzc5jwKc7XmQ@mail.gmail.com
Whole thread Raw
In response to [PATCH] Perform conversion to platform line-ends when copying to clipboard (Was: Copy to clipboard from ctlSQLBox on windows has line ends broken)  (Nikolai Zhubr <n-a-zhubr@yandex.ru>)
List pgadmin-hackers
Thanks - applied.

On Wed, Oct 7, 2015 at 1:10 AM, Nikolai Zhubr <n-a-zhubr@yandex.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


pgadmin-hackers by date:

Previous
From: Dave Page
Date:
Subject: pgAdmin III commit: Ensure the correct line endings are used when copyi
Next
From: Nikolai Zhubr
Date:
Subject: [PATCH] Beautify line-ends handling yet more.