Don't allow concurrent requests, check return message of async request
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@57518 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -27,7 +27,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#define USE_ASYNCHRONOUS_CLIPBOARD_REQUEST 0
|
#define USE_ASYNCHRONOUS_CLIPBOARD_REQUEST 1
|
||||||
|
|
||||||
class MyApp : public wxApp
|
class MyApp : public wxApp
|
||||||
{
|
{
|
||||||
@@ -167,7 +167,12 @@ void MyFrame::OnUpdateUI(wxUpdateUIEvent&event)
|
|||||||
#if USE_ASYNCHRONOUS_CLIPBOARD_REQUEST
|
#if USE_ASYNCHRONOUS_CLIPBOARD_REQUEST
|
||||||
if (m_request == Idle)
|
if (m_request == Idle)
|
||||||
{
|
{
|
||||||
wxTheClipboard->IsSupportedAsync( this );
|
if (!wxTheClipboard->IsSupportedAsync( this ))
|
||||||
|
{
|
||||||
|
// request failed, try again later
|
||||||
|
event.Enable( m_clipboardSupportsText ); // not yet known, assume last value
|
||||||
|
return;
|
||||||
|
}
|
||||||
m_request = Waiting;
|
m_request = Waiting;
|
||||||
event.Enable( m_clipboardSupportsText ); // not yet known, assume last value
|
event.Enable( m_clipboardSupportsText ); // not yet known, assume last value
|
||||||
}
|
}
|
||||||
|
@@ -367,6 +367,7 @@ async_targets_selection_received( GtkWidget *WXUNUSED(widget),
|
|||||||
if ( !selection_data || selection_data->length <= 0 )
|
if ( !selection_data || selection_data->length <= 0 )
|
||||||
{
|
{
|
||||||
clipboard->m_sink->QueueEvent( event );
|
clipboard->m_sink->QueueEvent( event );
|
||||||
|
clipboard->m_sink.Release();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -380,6 +381,7 @@ async_targets_selection_received( GtkWidget *WXUNUSED(widget),
|
|||||||
_T("got unsupported clipboard target") );
|
_T("got unsupported clipboard target") );
|
||||||
|
|
||||||
clipboard->m_sink->QueueEvent( event );
|
clipboard->m_sink->QueueEvent( event );
|
||||||
|
clipboard->m_sink.Release();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -405,6 +407,7 @@ async_targets_selection_received( GtkWidget *WXUNUSED(widget),
|
|||||||
}
|
}
|
||||||
|
|
||||||
clipboard->m_sink->QueueEvent( event );
|
clipboard->m_sink->QueueEvent( event );
|
||||||
|
clipboard->m_sink.Release();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -521,8 +524,12 @@ void wxClipboard::AddSupportedTarget(GdkAtom atom)
|
|||||||
|
|
||||||
bool wxClipboard::IsSupportedAsync(wxEvtHandler *sink)
|
bool wxClipboard::IsSupportedAsync(wxEvtHandler *sink)
|
||||||
{
|
{
|
||||||
|
if (m_sink.get())
|
||||||
|
return false; // currently busy, come back later
|
||||||
|
|
||||||
|
wxCHECK_MSG( sink, false, wxT("no sink given") );
|
||||||
|
|
||||||
m_sink = sink;
|
m_sink = sink;
|
||||||
|
|
||||||
gtk_selection_convert( m_targetsWidgetAsync,
|
gtk_selection_convert( m_targetsWidgetAsync,
|
||||||
GTKGetClipboardAtom(),
|
GTKGetClipboardAtom(),
|
||||||
g_targetsAtom,
|
g_targetsAtom,
|
||||||
|
Reference in New Issue
Block a user