Qt 4.8
Classes | Macros | Typedefs | Functions | Variables
qclipboard_x11.cpp File Reference
#include "qplatformdefs.h"
#include "qclipboard.h"
#include "qclipboard_p.h"
#include "qabstracteventdispatcher.h"
#include "qapplication.h"
#include "qdesktopwidget.h"
#include "qbitmap.h"
#include "qiodevice.h"
#include "qbuffer.h"
#include "qtextcodec.h"
#include "qlist.h"
#include "qmap.h"
#include "qapplication_p.h"
#include "qevent.h"
#include "qt_x11_p.h"
#include "qx11info_x11.h"
#include "qimagewriter.h"
#include "qelapsedtimer.h"
#include "qvariant.h"
#include "qdnd_p.h"
#include <private/qwidget_p.h>
#include <X11/extensions/Xfixes.h>

Go to the source code of this file.

Classes

class  QClipboardData
 
class  QClipboardINCRTransaction
 
class  QClipboardWatcher
 
struct  qt_init_timestamp_data
 

Macros

#define DEBUG   if (false) qDebug
 
#define VDEBUG   if (false) qDebug
 

Typedefs

typedef QMap< Window, QClipboardINCRTransaction * > TransactionMap
 

Functions

static Bool checkForClipboardEvents (Display *, XEvent *e, XPointer)
 
static void cleanup ()
 
static void cleanupClipboardData ()
 
static void cleanupSelectionData ()
 
static QClipboardDataclipboardData ()
 
static int maxSelectionIncr (Display *dpy)
 
bool qt_check_clipboard_sentinel ()
 
bool qt_check_selection_sentinel ()
 
static Bool qt_init_timestamp_scanner (Display *, XEvent *event, XPointer arg)
 
static bool qt_x11_clipboard_event_filter (void *message, long *)
 
static bool qt_x11_incr_event_filter (void *message, long *result)
 
static void qt_xclb_incr_timeout (void)
 
bool qt_xfixes_clipboard_changed (Window clipboardOwner, Time timestamp)
 
bool qt_xfixes_selection_changed (Window selectionOwner, Time timestamp)
 
static QClipboardDataselectionData ()
 
static Atom send_selection (QClipboardData *d, Atom target, Window window, Atom property)
 
static Atom send_targets_selection (QClipboardData *d, Window window, Atom property)
 
static void setupOwner ()
 

Variables

static int capture_event_type = -1
 
static Window capture_event_win = XNone
 
static XEvent captured_event
 
static int clipboard_timeout = 5000
 
static QClipboardWatcherclipboard_watcher = 0
 
static bool has_captured_event = false
 
static int incr_timer_id = 0
 
static QClipboardDatainternalCbData = 0
 
static QClipboardDatainternalSelData = 0
 
static QWidgetowner = 0
 
static bool pending_clipboard_changed = false
 
static bool pending_selection_changed = false
 
static int pending_timer_id = 0
 
static QApplication::EventFilter prev_event_filter = 0
 
static QWidgetrequestor = 0
 
static QClipboardWatcherselection_watcher = 0
 
static bool timer_event_clear = false
 
static int timer_id = 0
 
static TransactionMaptransactions = 0
 
static bool waiting_for_data = false
 

Macro Definition Documentation

◆ DEBUG

#define DEBUG   if (false) qDebug

◆ VDEBUG

#define VDEBUG   if (false) qDebug

Typedef Documentation

◆ TransactionMap

Definition at line 273 of file qclipboard_x11.cpp.

Function Documentation

◆ checkForClipboardEvents()

static Bool checkForClipboardEvents ( Display ,
XEvent e,
XPointer   
)
static

Definition at line 510 of file qclipboard_x11.cpp.

Referenced by QX11Data::clipboardWaitForEvent().

511 {
512  return ((e->type == SelectionRequest && (e->xselectionrequest.selection == XA_PRIMARY
513  || e->xselectionrequest.selection == ATOM(CLIPBOARD)))
514  || (e->type == SelectionClear && (e->xselectionclear.selection == XA_PRIMARY
515  || e->xselectionclear.selection == ATOM(CLIPBOARD))));
516 }
#define ATOM(x)
Definition: qt_x11_p.h:723

◆ cleanup()

static void cleanup ( )
static

Definition at line 116 of file qclipboard_x11.cpp.

Referenced by setupOwner().

117 {
118  delete owner;
119  delete requestor;
120  owner = 0;
121  requestor = 0;
122 }
static QWidget * owner
static QWidget * requestor

◆ cleanupClipboardData()

static void cleanupClipboardData ( )
static

Definition at line 227 of file qclipboard_x11.cpp.

Referenced by clipboardData().

228 {
229  delete internalCbData;
230  internalCbData = 0;
231 }
static QClipboardData * internalCbData

◆ cleanupSelectionData()

static void cleanupSelectionData ( )
static

Definition at line 242 of file qclipboard_x11.cpp.

Referenced by selectionData().

243 {
244  delete internalSelData;
245  internalSelData = 0;
246 }
static QClipboardData * internalSelData

◆ clipboardData()

static QClipboardData* clipboardData ( )
static

Definition at line 233 of file qclipboard_x11.cpp.

Referenced by QClipboardData::clear(), QClipboardWatcher::getDataInFormat(), QClipboardData::mimeDataRef(), qt_check_clipboard_sentinel(), qt_xfixes_clipboard_changed(), and QClipboardData::setSource().

234 {
235  if (internalCbData == 0) {
238  }
239  return internalCbData;
240 }
static void cleanupClipboardData()
static QClipboardData * internalCbData
void qAddPostRoutine(QtCleanUpFunction ptr)
Adds a global routine that will be called from the QApplication destructor.

◆ maxSelectionIncr()

static int maxSelectionIncr ( Display dpy)
inlinestatic

Definition at line 603 of file qclipboard_x11.cpp.

Referenced by QX11Data::clipboardReadProperty().

604 { return XMaxRequestSize(dpy) > 65536 ? 65536*4 : XMaxRequestSize(dpy)*4 - 100; }

◆ qt_check_clipboard_sentinel()

bool qt_check_clipboard_sentinel ( )

Definition at line 1485 of file qclipboard_x11.cpp.

Referenced by qt_xfixes_clipboard_changed(), and QApplication::x11ProcessEvent().

1486 {
1487  bool doIt = true;
1488  if (owner && !X11->use_xfixes) {
1489  unsigned char *retval;
1490  Atom actualType;
1491  int actualFormat;
1492  unsigned long nitems, bytesLeft;
1493 
1494  if (XGetWindowProperty(X11->display,
1496  ATOM(_QT_CLIPBOARD_SENTINEL), 0, 2, False, XA_WINDOW,
1497  &actualType, &actualFormat, &nitems, &bytesLeft,
1498  &retval) == Success) {
1499  Window *owners = (Window *)retval;
1500  if (actualType == XA_WINDOW && actualFormat == 32 && nitems == 2) {
1501  Window win = owner->internalWinId();
1502  if (owners[0] == win || owners[1] == win)
1503  doIt = false;
1504  }
1505 
1506  XFree(owners);
1507  }
1508  }
1509 
1510  if (doIt) {
1511  if (waiting_for_data) {
1513  if (! pending_timer_id)
1515  doIt = false;
1516  } else {
1517  clipboardData()->clear();
1518  }
1519  }
1520 
1521  return doIt;
1522 }
int startTimer(int interval)
Starts a timer and returns a timer identifier, or returns zero if it could not start a timer...
Definition: qobject.cpp:1623
static bool pending_clipboard_changed
static int pending_timer_id
static QWidget * owner
#define X11
Definition: qt_x11_p.h:724
#define ATOM(x)
Definition: qt_x11_p.h:723
static QClipboardData * clipboardData()
static QClipboard * clipboard()
Returns a pointer to the application global clipboard.
QWidget * screen(int screen=-1)
static QDesktopWidget * desktop()
Returns the desktop widget (also called the root window).
static bool waiting_for_data
WId internalWinId() const
Returns the window system identifier of the widget, or 0 if the widget is not created yet...
Definition: qwidget.h:244

◆ qt_check_selection_sentinel()

bool qt_check_selection_sentinel ( )

Definition at line 1433 of file qclipboard_x11.cpp.

Referenced by qt_xfixes_selection_changed(), and QApplication::x11ProcessEvent().

1434 {
1435  bool doIt = true;
1436  if (owner && !X11->use_xfixes) {
1437  /*
1438  Since the X selection mechanism cannot give any signal when
1439  the selection has changed, we emulate it (for Qt processes) here.
1440  The notification should be ignored in case of either
1441  a) This is the process that did setData (because setData()
1442  then has already emitted dataChanged())
1443  b) This is the process that owned the selection when dataChanged()
1444  was called (because we have then received a SelectionClear event,
1445  and have already emitted dataChanged() as a result of that)
1446  */
1447 
1448  unsigned char *retval;
1449  Atom actualType;
1450  int actualFormat;
1451  ulong nitems;
1452  ulong bytesLeft;
1453 
1454  if (XGetWindowProperty(X11->display,
1456  ATOM(_QT_SELECTION_SENTINEL), 0, 2, False, XA_WINDOW,
1457  &actualType, &actualFormat, &nitems,
1458  &bytesLeft, &retval) == Success) {
1459  Window *owners = (Window *)retval;
1460  if (actualType == XA_WINDOW && actualFormat == 32 && nitems == 2) {
1461  Window win = owner->internalWinId();
1462  if (owners[0] == win || owners[1] == win)
1463  doIt = false;
1464  }
1465 
1466  XFree(owners);
1467  }
1468  }
1469 
1470  if (doIt) {
1471  if (waiting_for_data) {
1473  if (! pending_timer_id)
1475  doIt = false;
1476  } else {
1477  selectionData()->clear();
1478  }
1479  }
1480 
1481  return doIt;
1482 }
int startTimer(int interval)
Starts a timer and returns a timer identifier, or returns zero if it could not start a timer...
Definition: qobject.cpp:1623
static int pending_timer_id
static QWidget * owner
#define X11
Definition: qt_x11_p.h:724
#define ATOM(x)
Definition: qt_x11_p.h:723
static QClipboard * clipboard()
Returns a pointer to the application global clipboard.
unsigned long ulong
Definition: qglobal.h:997
static bool pending_selection_changed
QWidget * screen(int screen=-1)
static QDesktopWidget * desktop()
Returns the desktop widget (also called the root window).
static QClipboardData * selectionData()
static bool waiting_for_data
WId internalWinId() const
Returns the window system identifier of the widget, or 0 if the widget is not created yet...
Definition: qwidget.h:244

◆ qt_init_timestamp_scanner()

static Bool qt_init_timestamp_scanner ( Display ,
XEvent event,
XPointer  arg 
)
static

Definition at line 386 of file qclipboard_x11.cpp.

387 {
389  reinterpret_cast<qt_init_timestamp_data*>(arg);
390  switch(event->type)
391  {
392  case ButtonPress:
393  case ButtonRelease:
394  data->timestamp = event->xbutton.time;
395  break;
396  case MotionNotify:
397  data->timestamp = event->xmotion.time;
398  break;
399  case XKeyPress:
400  case XKeyRelease:
401  data->timestamp = event->xkey.time;
402  break;
403  case PropertyNotify:
404  data->timestamp = event->xproperty.time;
405  break;
406  case EnterNotify:
407  case LeaveNotify:
408  data->timestamp = event->xcrossing.time;
409  break;
410  case SelectionClear:
411  data->timestamp = event->xselectionclear.time;
412  break;
413  default:
414  break;
415  }
416 #ifndef QT_NO_XFIXES
417  if (X11->use_xfixes && event->type == (X11->xfixes_eventbase + XFixesSelectionNotify)) {
418  XFixesSelectionNotifyEvent *req =
419  reinterpret_cast<XFixesSelectionNotifyEvent *>(event);
420  data->timestamp = req->selection_timestamp;
421  }
422 #endif
423  return false;
424 }
EventRef event
#define X11
Definition: qt_x11_p.h:724
static const char * data(const QByteArray &arr)

◆ qt_x11_clipboard_event_filter()

static bool qt_x11_clipboard_event_filter ( void *  message,
long *   
)
static

Definition at line 497 of file qclipboard_x11.cpp.

Referenced by QX11Data::clipboardWaitForEvent().

498 {
499  XEvent *event = reinterpret_cast<XEvent *>(message);
500  if (event->xany.type == capture_event_type &&
501  event->xany.window == capture_event_win) {
502  VDEBUG("QClipboard: event_filter(): caught event type %d", event->type);
503  has_captured_event = true;
505  return true;
506  }
507  return false;
508 }
EventRef event
static XEvent captured_event
union _XEvent XEvent
Definition: qwindowdefs.h:116
static int capture_event_type
static Window capture_event_win
#define VDEBUG
static bool has_captured_event

◆ qt_x11_incr_event_filter()

static bool qt_x11_incr_event_filter ( void *  message,
long *  result 
)
static

Definition at line 278 of file qclipboard_x11.cpp.

Referenced by QClipboardINCRTransaction::QClipboardINCRTransaction().

279 {
280  XEvent *event = reinterpret_cast<XEvent *>(message);
282  if (it != transactions->end()) {
283  if ((*it)->x11Event(event) != 0)
284  return true;
285  }
286  if (prev_event_filter)
287  return prev_event_filter(event, result);
288  return false;
289 }
EventRef event
#define it(className, varName)
static QApplication::EventFilter prev_event_filter
iterator find(const Key &key)
Returns an iterator pointing to the item with key key in the map.
Definition: qmap.h:618
union _XEvent XEvent
Definition: qwindowdefs.h:116
static TransactionMap * transactions
The QMap::iterator class provides an STL-style non-const iterator for QMap and QMultiMap.
Definition: qmap.h:233
iterator end()
Returns an STL-style iterator pointing to the imaginary item after the last item in the map...
Definition: qmap.h:375

◆ qt_xclb_incr_timeout()

static void qt_xclb_incr_timeout ( void  )
static

Definition at line 296 of file qclipboard_x11.cpp.

297 {
298  qWarning("QClipboard: Timed out while sending data");
299 
300  while (transactions)
301  delete *transactions->begin();
302 }
static TransactionMap * transactions
Q_CORE_EXPORT void qWarning(const char *,...)
iterator begin()
Returns an STL-style iterator pointing to the first item in the map.
Definition: qmap.h:372

◆ qt_xfixes_clipboard_changed()

bool qt_xfixes_clipboard_changed ( Window  clipboardOwner,
Time  timestamp 
)

Definition at line 1538 of file qclipboard_x11.cpp.

Referenced by QApplication::x11ProcessEvent().

1539 {
1541 #ifdef QCLIPBOARD_DEBUG
1542  DEBUG("qt_xfixes_clipboard_changed: owner = %u; clipboardOwner = %u; internal timestamp = %u; external timestamp = %u",
1543  (unsigned int)(owner ? (int)owner->internalWinId() : 0), (unsigned int)clipboardOwner,
1544  (unsigned int)(d ? d->timestamp : 0), (unsigned int)timestamp);
1545 #endif
1546  if (!owner || (clipboardOwner && clipboardOwner != owner->internalWinId()) ||
1547  (!clipboardOwner && (d->timestamp == CurrentTime || d->timestamp < timestamp)))
1548  return qt_check_clipboard_sentinel();
1549  return false;
1550 }
double d
Definition: qnumeric_p.h:62
bool qt_check_clipboard_sentinel()
static QWidget * owner
static QClipboardData * clipboardData()
WId internalWinId() const
Returns the window system identifier of the widget, or 0 if the widget is not created yet...
Definition: qwidget.h:244
#define DEBUG

◆ qt_xfixes_selection_changed()

bool qt_xfixes_selection_changed ( Window  selectionOwner,
Time  timestamp 
)

Definition at line 1524 of file qclipboard_x11.cpp.

Referenced by QApplication::x11ProcessEvent().

1525 {
1527 #ifdef QCLIPBOARD_DEBUG
1528  DEBUG("qt_xfixes_selection_changed: owner = %u; selectionOwner = %u; internal timestamp = %u; external timestamp = %u",
1529  (unsigned int)(owner ? (int)owner->internalWinId() : 0), (unsigned int)selectionOwner,
1530  (unsigned int)(d ? d->timestamp : 0), (unsigned int)timestamp);
1531 #endif
1532  if (!owner || (selectionOwner && selectionOwner != owner->internalWinId()) ||
1533  (!selectionOwner && (d->timestamp == CurrentTime || d->timestamp < timestamp)))
1534  return qt_check_selection_sentinel();
1535  return false;
1536 }
double d
Definition: qnumeric_p.h:62
static QWidget * owner
static QClipboardData * selectionData()
WId internalWinId() const
Returns the window system identifier of the widget, or 0 if the widget is not created yet...
Definition: qwidget.h:244
#define DEBUG
bool qt_check_selection_sentinel()

◆ selectionData()

static QClipboardData* selectionData ( )
static

Definition at line 248 of file qclipboard_x11.cpp.

Referenced by QClipboardData::clear(), QClipboardWatcher::getDataInFormat(), QClipboardData::mimeDataRef(), qt_check_selection_sentinel(), qt_xfixes_selection_changed(), and QClipboardData::setSource().

249 {
250  if (internalSelData == 0) {
253  }
254  return internalSelData;
255 }
static void cleanupSelectionData()
static QClipboardData * internalSelData
void qAddPostRoutine(QtCleanUpFunction ptr)
Adds a global routine that will be called from the QApplication destructor.

◆ send_selection()

static Atom send_selection ( QClipboardData d,
Atom  target,
Window  window,
Atom  property 
)
static

Definition at line 809 of file qclipboard_x11.cpp.

810 {
811  Atom atomFormat = target;
812  int dataFormat = 0;
814 
815  QByteArray fmt = X11->xdndAtomToString(target);
816  if (fmt.isEmpty()) { // Not a MIME type we have
817  DEBUG("QClipboard: send_selection(): converting to type '%s' is not supported", fmt.data());
818  return XNone;
819  }
820  DEBUG("QClipboard: send_selection(): converting to type '%s'", fmt.data());
821 
822  if (X11->xdndMimeDataForAtom(target, d->source(), &data, &atomFormat, &dataFormat)) {
823 
824  VDEBUG("QClipboard: send_selection():\n"
825  " property type %lx\n"
826  " property name '%s'\n"
827  " format %d\n"
828  " %d bytes\n",
829  target, X11->xdndMimeAtomToString(atomFormat).toLatin1().data(), dataFormat, data.size());
830 
831  // don't allow INCR transfers when using MULTIPLE or to
832  // Motif clients (since Motif doesn't support INCR)
833  static Atom motif_clip_temporary = ATOM(CLIP_TEMPORARY);
834  bool allow_incr = property != motif_clip_temporary;
835 
836  // X_ChangeProperty protocol request is 24 bytes
837  const int increment = (XMaxRequestSize(X11->display) * 4) - 24;
838  if (data.size() > increment && allow_incr) {
839  long bytes = data.size();
840  XChangeProperty(X11->display, window, property,
841  ATOM(INCR), 32, PropModeReplace, (uchar *) &bytes, 1);
842 
843  (void)new QClipboardINCRTransaction(window, property, atomFormat, dataFormat, data, increment);
844  return property;
845  }
846 
847  // make sure we can perform the XChangeProperty in a single request
848  if (data.size() > increment)
849  return XNone; // ### perhaps use several XChangeProperty calls w/ PropModeAppend?
850  int dataSize = data.size() / (dataFormat / 8);
851  // use a single request to transfer data
852  XChangeProperty(X11->display, window, property, atomFormat,
853  dataFormat, PropModeReplace, (uchar *) data.data(),
854  dataSize);
855  }
856  return property;
857 }
char * data()
Returns a pointer to the data stored in the byte array.
Definition: qbytearray.h:429
The QByteArray class provides an array of bytes.
Definition: qbytearray.h:135
#define X11
Definition: qt_x11_p.h:724
#define ATOM(x)
Definition: qt_x11_p.h:723
unsigned char uchar
Definition: qglobal.h:994
NSWindow * window
static const char * data(const QByteArray &arr)
const char * property
Definition: qwizard.cpp:138
int size() const
Returns the number of bytes in this byte array.
Definition: qbytearray.h:402
QMimeData * source()
#define DEBUG
bool isEmpty() const
Returns true if the byte array has size 0; otherwise returns false.
Definition: qbytearray.h:421
#define VDEBUG

◆ send_targets_selection()

static Atom send_targets_selection ( QClipboardData d,
Window  window,
Atom  property 
)
static

Definition at line 788 of file qclipboard_x11.cpp.

789 {
792  for (int i = 0; i < formats.size(); ++i) {
793  QList<Atom> atoms = X11->xdndMimeAtomsForFormat(formats.at(i));
794  for (int j = 0; j < atoms.size(); ++j) {
795  if (!types.contains(atoms.at(j)))
796  types.append(atoms.at(j));
797  }
798  }
799  types.append(ATOM(TARGETS));
800  types.append(ATOM(MULTIPLE));
801  types.append(ATOM(TIMESTAMP));
802  types.append(ATOM(SAVE_TARGETS));
803 
804  XChangeProperty(X11->display, window, property, XA_ATOM, 32,
805  PropModeReplace, (uchar *) types.data(), types.size());
806  return property;
807 }
static QStringList formatsHelper(const QMimeData *data)
Definition: qdnd.cpp:414
The QVector class is a template class that provides a dynamic array.
Definition: qdatastream.h:64
#define X11
Definition: qt_x11_p.h:724
#define ATOM(x)
Definition: qt_x11_p.h:723
unsigned char uchar
Definition: qglobal.h:994
NSWindow * window
const T & at(int i) const
Returns the item at index position i in the list.
Definition: qlist.h:468
The QStringList class provides a list of strings.
Definition: qstringlist.h:66
void append(const T &t)
Inserts value at the end of the vector.
Definition: qvector.h:573
static const struct @32 types[]
int size() const
Returns the number of items in the list.
Definition: qlist.h:137
const char * property
Definition: qwizard.cpp:138
bool contains(const T &t) const
Returns true if the vector contains an occurrence of value; otherwise returns false.
Definition: qvector.h:731
QMimeData * source()
T * data()
Returns a pointer to the data stored in the vector.
Definition: qvector.h:152
int size() const
Returns the number of items in the vector.
Definition: qvector.h:137
The QList class is a template class that provides lists.
Definition: qdatastream.h:62

◆ setupOwner()

static void setupOwner ( )
static

Definition at line 125 of file qclipboard_x11.cpp.

Referenced by QClipboardWatcher::getDataInFormat(), and QClipboardWatcher::QClipboardWatcher().

126 {
127  if (owner)
128  return;
129  owner = new QWidget(0);
130  owner->setObjectName(QLatin1String("internal clipboard owner"));
131  owner->createWinId();
132  requestor = new QWidget(0);
134  requestor->setObjectName(QLatin1String("internal clipboard requestor"));
135  // We don't need this internal widgets to appear in QApplication::topLevelWidgets()
139  }
141 }
bool remove(const T &value)
Definition: qset.h:89
The QWidget class is the base class of all user interface objects.
Definition: qwidget.h:150
QLatin1String(DBUS_INTERFACE_DBUS))) Q_GLOBAL_STATIC_WITH_ARGS(QString
static QWidget * owner
void setObjectName(const QString &name)
Definition: qobject.cpp:1112
static QWidgetSet * allWidgets
Definition: qwidget_p.h:715
static QWidget * requestor
void createWinId()
Definition: qwidget.cpp:2626
static void cleanup()
void qAddPostRoutine(QtCleanUpFunction ptr)
Adds a global routine that will be called from the QApplication destructor.

Variable Documentation

◆ capture_event_type

int capture_event_type = -1
static

◆ capture_event_win

Window capture_event_win = XNone
static

◆ captured_event

XEvent captured_event
static

◆ clipboard_timeout

int clipboard_timeout = 5000
static

◆ clipboard_watcher

QClipboardWatcher* clipboard_watcher = 0
static

Definition at line 114 of file qclipboard_x11.cpp.

◆ has_captured_event

bool has_captured_event = false
static

◆ incr_timer_id

int incr_timer_id = 0
static

◆ internalCbData

QClipboardData* internalCbData = 0
static

Definition at line 224 of file qclipboard_x11.cpp.

Referenced by cleanupClipboardData(), and clipboardData().

◆ internalSelData

QClipboardData* internalSelData = 0
static

Definition at line 225 of file qclipboard_x11.cpp.

Referenced by cleanupSelectionData(), and selectionData().

◆ owner

QWidget* owner = 0
static

◆ pending_clipboard_changed

bool pending_clipboard_changed = false
static

Definition at line 101 of file qclipboard_x11.cpp.

Referenced by qt_check_clipboard_sentinel().

◆ pending_selection_changed

bool pending_selection_changed = false
static

Definition at line 102 of file qclipboard_x11.cpp.

Referenced by qt_check_selection_sentinel().

◆ pending_timer_id

int pending_timer_id = 0
static

Definition at line 100 of file qclipboard_x11.cpp.

Referenced by qt_check_clipboard_sentinel(), and qt_check_selection_sentinel().

◆ prev_event_filter

QApplication::EventFilter prev_event_filter = 0
static

◆ requestor

QWidget* requestor = 0
static

Definition at line 96 of file qclipboard_x11.cpp.

Referenced by cleanup(), and QX11Data::clipboardReadIncrementalProperty().

◆ selection_watcher

QClipboardWatcher* selection_watcher = 0
static

Definition at line 113 of file qclipboard_x11.cpp.

◆ timer_event_clear

bool timer_event_clear = false
static

Definition at line 97 of file qclipboard_x11.cpp.

Referenced by QClipboardWatcher::getDataInFormat().

◆ timer_id

int timer_id = 0
static

Definition at line 98 of file qclipboard_x11.cpp.

Referenced by QClipboardWatcher::getDataInFormat().

◆ transactions

TransactionMap* transactions = 0
static

◆ waiting_for_data

bool waiting_for_data = false
static