Re: 64-bit Clipboard troubles

2013-06-21 Thread Jon TURNEY
On 10/06/2013 22:39, David Stacey wrote:
 On 10/06/13 14:30, Jon TURNEY wrote:
 On 09/06/2013 19:59, David Stacey wrote:
 I am trying to package keepassx for 64-bit Cygwin, and have noticed a
 difference between the way the clipboard functions under 32-bit and 64-bit
 Cygwin/X. Essentially, keepassx is an encrypted password database that
 copies your username and password to the clipboard. Then, you can paste
 these into a web site (say) to log in.
 
 When I run keepassx (both 32-bit and 64-bit builds) using the 32-bit
 version of XWin, keepassx copies the username and password to the
 clipboard, and these can be pasted into a native Windows web browser (e.g.
 Firefox). However, when I run keepassx (again, both 32-bit and 64-bit
 builds) using the 64-bit version of XWin, the procedure breaks: I instruct
 keepassx to copy to the clipboard, but when I paste in the web browser, no
 text is pasted.
 Sorry, integration between the native and X clipboards is broken in 64-bit
 XWin.

 Unfortunately, this is rather complex to fix and I haven't found the time to
 do so yet.
 
 Thank you for your reply. I've sent an RFU for keepassx along with a link to
 your reply. If and when you tie the two clipboards together, keepassx should
 just start working - there shouldn't be a need to rebuild it, but I'll do that
 if necessary.

This should be working as of xserver 1.14.1-2.  Please test if you can and let
me know if there are any problems.

On 10/06/2013 14:30, Jon TURNEY wrote:
 I mentioned that my testcase programme doesn't quite work as I intended:
  writing to the clipboard using Qt4 and reading it back by reading
  /dev/clipboard fails when using both 32-bit and 64-bit XWin. I don't
  understand why, but this is probably down to my own limited understanding
  of the clipboard in X.
 Thanks for writing this useful testcase.

 From a brief glance, the test looks well formed, so I'll also try to take a
 look at why test 2 always fails, I guess this indicates some bug in the
 clipboard integration.

Looking again, I think maybe that the problem with test 2 is that it's
necessary for Qt's main event loop to be running for pastes from the X
clipboard to work.


-- 
Jon TURNEY
Volunteer Cygwin/X X Server maintainer

--
Unsubscribe info:  http://cygwin.com/ml/#unsubscribe-simple
Problem reports:   http://cygwin.com/problems.html
Documentation: http://x.cygwin.com/docs/
FAQ:   http://x.cygwin.com/docs/faq/



Re: 64-bit Clipboard troubles

2013-06-21 Thread David Stacey

On 21/06/13 13:33, Jon TURNEY wrote:

On 10/06/2013 22:39, David Stacey wrote:

On 10/06/13 14:30, Jon TURNEY wrote:

On 09/06/2013 19:59, David Stacey wrote:

 I am trying to package keepassx for 64-bit Cygwin, and have noticed a
 difference between the way the clipboard functions under 32-bit and 64-bit
 Cygwin/X. Essentially, keepassx is an encrypted password database that
 copies your username and password to the clipboard. Then, you can paste
 these into a web site (say) to log in.
 
 When I run keepassx (both 32-bit and 64-bit builds) using the 32-bit
 version of XWin, keepassx copies the username and password to the
 clipboard, and these can be pasted into a native Windows web browser (e.g.
 Firefox). However, when I run keepassx (again, both 32-bit and 64-bit
 builds) using the 64-bit version of XWin, the procedure breaks: I instruct
 keepassx to copy to the clipboard, but when I paste in the web browser, no
 text is pasted.

Sorry, integration between the native and X clipboards is broken in 64-bit
XWin.

Unfortunately, this is rather complex to fix and I haven't found the time to
do so yet.


Thank you for your reply. I've sent an RFU for keepassx along with a link to
your reply. If and when you tie the two clipboards together, keepassx should
just start working - there shouldn't be a need to rebuild it, but I'll do that
if necessary.

This should be working as of xserver 1.14.1-2.  Please test if you can and let
me know if there are any problems.


Thank you for implementing this functionality. I have tested xserver 
1.14.1-2 and can confirm that this is working - keepassx can copy URLs, 
usernames and passwords into the Windows clipboard.


Many thanks once again,

Dave.


--
Unsubscribe info:  http://cygwin.com/ml/#unsubscribe-simple
Problem reports:   http://cygwin.com/problems.html
Documentation: http://x.cygwin.com/docs/
FAQ:   http://x.cygwin.com/docs/faq/



Re: 64-bit Clipboard troubles

2013-06-10 Thread Jon TURNEY
On 09/06/2013 19:59, David Stacey wrote:
 I am trying to package keepassx for 64-bit Cygwin, and have noticed a 
 difference between the way the clipboard functions under 32-bit and 64-bit 
 Cygwin/X. Essentially, keepassx is an encrypted password database that
 copies your username and password to the clipboard. Then, you can paste
 these into a web site (say) to log in.
 
 When I run keepassx (both 32-bit and 64-bit builds) using the 32-bit
 version of XWin, keepassx copies the username and password to the
 clipboard, and these can be pasted into a native Windows web browser (e.g.
 Firefox). However, when I run keepassx (again, both 32-bit and 64-bit
 builds) using the 64-bit version of XWin, the procedure breaks: I instruct
 keepassx to copy to the clipboard, but when I paste in the web browser, no
 text is pasted.

Sorry, integration between the native and X clipboards is broken in 64-bit XWin.

Unfortunately, this is rather complex to fix and I haven't found the time to
do so yet.

 I mentioned that my testcase programme doesn't quite work as I intended:
 writing to the clipboard using Qt4 and reading it back by reading
 /dev/clipboard fails when using both 32-bit and 64-bit XWin. I don't
 understand why, but this is probably down to my own limited understanding
 of the clipboard in X.

Thanks for writing this useful testcase.

From a brief glance, the test looks well formed, so I'll also try to take a
look at why test 2 always fails, I guess this indicates some bug in the
clipboard integration.

-- 
Jon TURNEY
Volunteer Cygwin/X X Server maintainer

--
Unsubscribe info:  http://cygwin.com/ml/#unsubscribe-simple
Problem reports:   http://cygwin.com/problems.html
Documentation: http://x.cygwin.com/docs/
FAQ:   http://x.cygwin.com/docs/faq/



Re: 64-bit Clipboard troubles

2013-06-10 Thread David Stacey

On 10/06/13 14:30, Jon TURNEY wrote:

On 09/06/2013 19:59, David Stacey wrote:

I am trying to package keepassx for 64-bit Cygwin, and have noticed a
difference between the way the clipboard functions under 32-bit and 64-bit
Cygwin/X. Essentially, keepassx is an encrypted password database that
copies your username and password to the clipboard. Then, you can paste
these into a web site (say) to log in.

When I run keepassx (both 32-bit and 64-bit builds) using the 32-bit
version of XWin, keepassx copies the username and password to the
clipboard, and these can be pasted into a native Windows web browser (e.g.
Firefox). However, when I run keepassx (again, both 32-bit and 64-bit
builds) using the 64-bit version of XWin, the procedure breaks: I instruct
keepassx to copy to the clipboard, but when I paste in the web browser, no
text is pasted.

Sorry, integration between the native and X clipboards is broken in 64-bit XWin.

Unfortunately, this is rather complex to fix and I haven't found the time to
do so yet.


Thank you for your reply. I've sent an RFU for keepassx along with a 
link to your reply. If and when you tie the two clipboards together, 
keepassx should just start working - there shouldn't be a need to 
rebuild it, but I'll do that if necessary.


Thanks again,

Dave.


--
Unsubscribe info:  http://cygwin.com/ml/#unsubscribe-simple
Problem reports:   http://cygwin.com/problems.html
Documentation: http://x.cygwin.com/docs/
FAQ:   http://x.cygwin.com/docs/faq/



64-bit Clipboard troubles

2013-06-09 Thread David Stacey
I am trying to package keepassx for 64-bit Cygwin, and have noticed a 
difference between the way the clipboard functions under 32-bit and 
64-bit Cygwin/X. Essentially, keepassx is an encrypted password database 
that copies your username and password to the clipboard. Then, you can 
paste these into a web site (say) to log in.


When I run keepassx (both 32-bit and 64-bit builds) using the 32-bit 
version of XWin, keepassx copies the username and password to the 
clipboard, and these can be pasted into a native Windows web browser 
(e.g. Firefox). However, when I run keepassx (again, both 32-bit and 
64-bit builds) using the 64-bit version of XWin, the procedure breaks: I 
instruct keepassx to copy to the clipboard, but when I paste in the web 
browser, no test is pasted.


I attempted to write a testcase programme to access the clipboard in 
various ways. The programme doesn't work as I had quite intended (which 
is almost certainly down to my limited understanding of how the 
clipboard works in X), but it does highlight differences between 32-bit 
and 64-bit XWin, so I have attached it in case it is useful.


The testcase programme reads and writes to the clipboard using two 
techniques - either through Qt4 (identical to the code used in keepassx) 
or by accessing /dev/clipboard. The difference comes when writing to the 
clipboard by writing to /dev/clipboard and then reading it back using 
Qt4 - under 32-bit XWin this succeeds (i.e. the correct text is read 
back), but under 64-bit XWin an empty string is read.


I mentioned that my testcase programme doesn't quite work as I intended: 
writing to the clipboard using Qt4 and reading it back by reading 
/dev/clipboard fails when using both 32-bit and 64-bit XWin. I don't 
understand why, but this is probably down to my own limited 
understanding of the clipboard in X.


Here is my environment: I'm running Windows 7 Ultimate x64 SP1.
32-bit Cygwin: Qt4-4.8.4-2 with xorg-server-1.14.1-1
64-bit Cygwin: Qt4-4.8.4-3 with xorg-server-1.14.1-1
The two Cygwin installations are installed side-by-side.

The 32-bit build of keepassx can be found in your favourite Cygwin 
mirror; if you need the 64-bit build then you can download it here:


BASEURL=http://dl.dropbox.com/sh/7y1yn4whbyho9a7
wget --no-check-certificate --no-host-directories --force-directories 
--cut-dirs=6 \
${BASEURL}/gMetoiuG3_/64bit/release/KDE/keepassx/keepassx-0.4.3-1-src.tar.bz2 
\

${BASEURL}/faOgOyuoYS/64bit/release/KDE/keepassx/keepassx-0.4.3-1.tar.bz2 \
${BASEURL}/xaqPOGFz3J/64bit/release/KDE/keepassx/setup.hint \
${BASEURL}/U82Dz9jF1S/64bit/release/KDE/keepassx/keepassx-debuginfo/keepassx-debuginfo-0.4.3-1.tar.bz2 
\

${BASEURL}/J4n6_izWKV/64bit/release/KDE/keepassx/keepassx-debuginfo/setup.hint

As the behaviour is different depending on whether I start 'XWin 
-multiwindow' on 32-bit or 64-bit Cygwin, I am posting here. If this is 
nothing to do with the xfree list then please accept my apologies and I 
will take the discussion to the main Cygwin list.


Apologies also for the length of the post, but hopefully there's enough 
information here to help to track down the cause of the problem.


Many thanks in advance for your help,

Dave.

// Compile: g++ -I/usr/include/qt4 -L/usr/lib/qt4/lib -o qt4_clip qt4_clip.cpp -lQtGui -lQtCore
#include QtCore/QString
#include QtGui/QApplication
#include QtGui/QClipboard
#include fstream
#include iostream
#include string
#include unistd.h

// Abstract class to define a generic clipboard accessor.
class CClipboardAccess
{
public:
	explicit CClipboardAccess(const std::string name) : Name(name) {}
	virtual ~CClipboardAccess() {}
	inline const std::string GetName() const { return this-Name; }

	virtual void ClearClipboard() const = 0;
	virtual void SetClipboard(const std::string str) const = 0;
	virtual std::string GetClipboard() const = 0;

private:
	std::string Name;
};

// A class to access the clipboard using the Qt QClipboard.
class CQtClipboardAccess : public CClipboardAccess
{
public:
	explicit CQtClipboardAccess(QApplication app) : CClipboardAccess(QClipboard), pApp(app), pClip(QApplication::clipboard()) {}
	virtual ~CQtClipboardAccess() {}

	virtual void ClearClipboard() const
	{
		this-pApp-processEvents();
		this-pClip-clear(QClipboard::Clipboard);
		if (this-pClip-supportsSelection())
			this-pClip-clear(QClipboard::Selection);
	}

	virtual void SetClipboard(const std::string str) const
	{
		this-pApp-processEvents();
		this-pClip-setText(str.c_str(), QClipboard::Clipboard);
		if (this-pClip-supportsSelection())
			this-pClip-setText(str.c_str(), QClipboard::Selection);
	}

	virtual std::string GetClipboard() const
	{
		this-pApp-processEvents();
		return this-pClip-text(QClipboard::Clipboard).toStdString();
	}

private:
	QApplication *pApp;
	QClipboard *pClip;
};

// A class to access the clipboard by reading / writing to '/dev/clipboard'.
class CCygwinClipboardAccess : public CClipboardAccess
{
public:
	CCygwinClipboardAccess() :